1: <?php
  2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14: 
 15: defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');
 16: 
 17: cInclude('includes', 'functions.file.php');
 18: 
 19:  20:  21:  22:  23:  24:  25:  26:  27: 
 28: function generateDisplayFilePath($sDisplayPath, $iLimit) {
 29:     $sDisplayPath = (string) $sDisplayPath;
 30:     $iLimit = (int) $iLimit;
 31: 
 32:     if (strlen($sDisplayPath) > $iLimit) {
 33:         $sDisplayPathShort = cApiStrTrimHard($sDisplayPath, $iLimit);
 34: 
 35:         $sTooltippString = '';
 36:         $iCharcount = 0;
 37: 
 38:         $aPathFragments = explode('/', $sDisplayPath);
 39: 
 40:         foreach ($aPathFragments as $sFragment) {
 41:             if ($sFragment != '') {
 42:                 if (strlen($sFragment) > ($iLimit - 5)) {
 43:                     $sFragment = cApiStrTrimHard($sFragment, $iLimit);
 44:                 }
 45: 
 46:                 if ($iCharcount + strlen($sFragment) + 1 > $iLimit) {
 47:                     $sTooltippString .= '<br>' . $sFragment . '/';
 48:                     $iCharcount = strlen($sFragment);
 49:                 } else {
 50:                     $iCharcount = $iCharcount + 1 + strlen($sFragment);
 51:                     $sTooltippString .= $sFragment . '/';
 52:                 }
 53:             }
 54:         }
 55: 
 56:         $sDisplayPath = '<span title="' . $sTooltippString . '" class="tooltip">' . $sDisplayPathShort . '</span>';
 57:     }
 58:     return $sDisplayPath;
 59: }
 60: 
 61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73: 
 74: function uplDirectoryListRecursive($sCurrentDir, $sStartDir = '', $aFiles = array(), $iDepth = -1, $sPathString = '') {
 75:     $iDepth++;
 76: 
 77:     $aDirsToExclude = uplGetDirectoriesToExclude();
 78: 
 79:     
 80:     if (empty($sStartDir)) {
 81:         $sStartDir = $sCurrentDir;
 82:     }
 83: 
 84:     if (chdir($sCurrentDir) == false) {
 85:         return $aFiles;
 86:     }
 87: 
 88:     
 89:     $aCurrentFiles = array();
 90:     if (false === ($handle = cDirHandler::read('.', false, true))) {
 91:         return $aFiles;
 92:     }
 93:     foreach ($handle as $file) {
 94:         if (!in_array(strtolower($file), $aDirsToExclude)) {
 95:             $aCurrentFiles[] = $file;
 96:         }
 97:     }
 98:     sort($aCurrentFiles);
 99: 
100:     foreach ($aCurrentFiles as $file) {
101:         $sFilePathName = getcwd() . '/' . $file;
102:         if ((filetype($sFilePathName) == 'dir') && (opendir($sFilePathName) !== false)) {
103:             $_aFile = array(
104:                     'name' => $file,
105:                     'depth' => $iDepth,
106:                     'pathstring' => $sPathString . $file . '/'
107:             );
108: 
109:             $aFiles[] = $_aFile;
110: 
111:             $aFiles = uplDirectoryListRecursive($sFilePathName, getcwd(), $aFiles, $iDepth, $_aFile['pathstring']);
112:         }
113:     }
114: 
115:     chdir($sStartDir);
116:     return $aFiles;
117: }
118: 
119: 120: 121: 122: 123: 124: 125: 
126: function uplHasFiles($sDir) {
127:     global $client, $cfgClient;
128: 
129:     $handle = cDirHandler::read($cfgClient[$client]['upl']['path'] . $sDir);
130:     
131:     if (!$handle) {
132:         return false;
133:     }
134:     
135:     $bHasContent = false;
136:     if (is_dir($cfgClient[$client]['upl']['path'] . $sDir)) {
137:         foreach ($handle as $sDirEntry) {
138:             if (cFileHandler::fileNameIsDot($sDirEntry) === false) {
139:                 $bHasContent = true;
140:                 break;
141:             }
142:         }
143:     }
144:     return $bHasContent;
145: }
146: 
147: 148: 149: 150: 151: 152: 
153: function uplHasSubdirs($sDir) {
154:     global $client, $cfgClient;
155:     
156:     $handle = cDirHandler::read($cfgClient[$client]['upl']['path'] . $sDir); 
157:     if (!$handle) {
158:         return false;
159:     }
160:     
161:     $bHasSubdir = false;
162:     if (is_dir($cfgClient[$client]['upl']['path'] . $sDir)) {
163:         foreach ($handle as $sDirEntry) {
164:             if (cFileHandler::fileNameIsDot($sDirEntry) === false) {
165:                 $bHasSubdir = true;
166:                 break;
167:             }
168:         }
169:     }
170: 
171:     return $bHasSubdir;
172: }
173: 
174: 175: 176: 177: 178: 179: 180: 181: 
182: function uplSyncDirectory($sPath) {
183:     global $cfgClient, $client, $cfg, $db;
184: 
185:     if (cApiDbfs::isDbfs($sPath)) {
186:         return uplSyncDirectoryDBFS($sPath);
187:     }
188: 
189:     $oUploadsColl = new cApiUploadCollection();
190: 
191:     
192:     
193:     $sql = 'SELECT DISTINCT(dirname) AS dirname FROM ' . $cfg['tab']['upl'] . ' WHERE ' . 'idclient=' . (int) $client . ' AND dirname LIKE "' . $db->escape($sPath) . '%"';
194:     $db->query($sql);
195:     while ($db->nextRecord()) {
196:         $sCurrDirname = $db->f('dirname');
197:         $sSubDir = substr($sCurrDirname, strlen($sPath));
198:         if (substr_count($sSubDir, '/') <= 1 && !cApiDbfs::isDbfs($sCurrDirname)) {
199:             
200:             $sFullPath = $cfgClient[$client]['upl']['path'] . $sCurrDirname;
201:             if (!is_dir($sFullPath)) {
202:                 $oUploadsColl->deleteByDirname($sCurrDirname);
203:             }
204:         }
205:     }
206: 
207:     
208:     
209:     $oUploadsColl->select("dirname='" . $oUploadsColl->escape($sPath) . "' AND idclient=" . (int) $client);
210:     while (($oUpload = $oUploadsColl->next()) !== false) {
211:         if (!cFileHandler::exists($cfgClient[$client]['upl']['path'] . $oUpload->get('dirname') . $oUpload->get('filename'))) {
212:             $oUploadsColl->delete($oUpload->get('idupl'));
213:         }
214:     }
215: 
216:     
217:     $sFullPath = $cfgClient[$client]['upl']['path'] . $sPath;
218:     if (is_dir($sFullPath)) {
219:         $aDirsToExclude = uplGetDirectoriesToExclude();
220:         if (false !== ($handle = cDirHandler::read($sFullPath))) {
221:             foreach ($handle as $file) {
222:                 if (!in_array(strtolower($file), $aDirsToExclude)) {
223:                     cDebug::out($sPath . "::" . $file);
224:                     $oUploadsColl->sync($sPath, $file);
225:                 }
226:             }
227:         }
228:     }
229: }
230: 
231: 232: 233: 234: 235: 
236: function uplSyncDirectoryDBFS($sPath) {
237:     global $cfgClient, $client, $cfg, $db;
238: 
239:     $oUploadsColl = new cApiUploadCollection();
240:     $oPropertiesColl = new cApiPropertyCollection();
241:     $oDBFSColl = new cApiDbfsCollection();
242: 
243:     if ($oDBFSColl->dirExists($sPath)) {
244:         $sStripPath = cApiDbfs::stripPath($sPath);
245:         $oDBFSColl->select("dirname = '$sStripPath'");
246:         while (($oFile = $oDBFSColl->next()) !== false) {
247:             if ($oFile->get('filename') != '.') {
248:                 $oUploadsColl->sync($sPath . "/", $oFile->get('filename'));
249:             }
250:         }
251:     }
252: 
253:     $oUploadsColl->select("dirname='$sPath/' AND idclient='$client'");
254:     while (($oUpload = $oUploadsColl->next()) !== false) {
255:         if (!$oDBFSColl->fileExists($oUpload->get('dirname') . $oUpload->get('filename'))) {
256:             $oUploadsColl->delete($oUpload->get("idupl"));
257:         }
258:     }
259: 
260:     $oPropertiesColl->select("idclient='$client' AND itemtype='upload' AND type='file' AND itemid LIKE '" . $sPath . "%'");
261:     while (($oProperty = $oPropertiesColl->next()) !== false) {
262:         if (!$oDBFSColl->fileExists($oProperty->get('itemid'))) {
263:             $oPropertiesColl->delete($oProperty->get('idproperty'));
264:         }
265:     }
266: 
267:     return;
268: }
269: 
270: 271: 272: 273: 274: 275: 276: 277: 278: 
279: function uplmkdir($sPath, $sName) {
280:     global $cfgClient, $client, $action;
281: 
282:     
283:     if (cApiDbfs::isDbfs($sPath)) {
284:         $sPath = cApiDbfs::stripPath($sPath);
285:         $sFullPath = $sPath . '/' . $sName . '/.';
286: 
287:         $dbfs = new cApiDbfsCollection();
288:         $dbfs->create($sFullPath);
289:         return;
290:     }
291: 
292:     
293:     $dName = uplCreateFriendlyName($sName);
294:     $dName = strtr($dName, "'", '.');
295:     if ($dName != $sName) {
296:         $action = 'upl_mkdir';
297:         return '0703';
298:     }
299: 
300:     
301:     $dPath = $cfgClient[$client]['upl']['path'] . $sPath . $dName;
302:     if (cDirHandler::read($dPath) === false) {
303:         
304:         return cDirHandler::create($dPath);
305:     } else {
306:         
307:         $action = 'upl_mkdir';
308:         return '0702';
309:     }
310: }
311: 
312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 
322: function uplRenameDirectory($sOldName, $sNewName, $sParent) {
323:     global $cfgClient, $client, $cfg, $db;
324: 
325:     
326:     $sOldUplPath = $cfgClient[$client]['upl']['path'] . $sParent . $sOldName;
327:     $sNewUplPath = $cfgClient[$client]['upl']['path'] . $sParent . $sNewName . '/';
328:     if (!$bResult = rename($sOldUplPath, $sNewUplPath)) {
329:         throw new cException("Couldn't rename upload path {$sOldUplPath} to {$sNewUplPath}");
330:     }
331: 
332:     
333:     
334:     $oUploadColl = new cApiUploadCollection();
335:     $oUploadColl->select("idclient=" . (int) $client . " AND dirname LIKE '" . $oUploadColl->escape($sParent . $sOldName) . "%'");
336:     while (($oUpload = $oUploadColl->next()) !== false) {
337:         $sDirName = $oUpload->get('dirname');
338:         $sJunk = substr($sDirName, strlen($sParent) + strlen($sOldName));
339:         $sNewName2 = $sParent . $sNewName . $sJunk;
340:         $oUpload->set('dirname', $sNewName2, false);
341:         $oUpload->store();
342:     }
343: 
344:     
345:     
346:     $oPropertyColl = new cApiPropertyCollection();
347:     $oPropertyColl->select("idclient=" . (int) $client . " AND itemtype='upload' AND type='file' AND itemid LIKE '" . $oPropertyColl->escape($sParent . $sOldName) . "%'");
348:     while (($oProperty = $oPropertyColl->next()) !== false) {
349:         $sDirName = $oProperty->get('itemid');
350:         $sJunk = substr($sDirName, strlen($sParent) + strlen($sOldName));
351:         $sNewName2 = $sParent . $sNewName . $sJunk;
352:         $oProperty->set('itemid', $sNewName2, false);
353:         $oProperty->store();
354:     }
355: }
356: 
357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 
367: function uplRecursiveDirectoryList($sDirectory, TreeItem $oRootItem, $iLevel, $sParent = '', $iRenameLevel = 0) {
368:     $aInvalidDirectories = array();
369: 
370:     if (true === is_dir($sDirectory)) {
371:         $aDirsToExclude = uplGetDirectoriesToExclude();
372: 
373:         $aFiles = array();
374: 
375:         
376:         foreach (cDirHandler::read($sDirectory, false, true) as $key => $file) {
377:             if (!in_array(strtolower($file), $aDirsToExclude)) {
378:                 if (strpos($file, ".") === 0) {
379:                     continue;
380:                 }
381:                 if (@chdir($sDirectory . $file . '/')) {
382:                     if (uplCreateFriendlyName($file) == $file) {
383:                         $aFiles[] = $file;
384:                     } else {
385:                         if ($_GET['force_rename'] == 'true') {
386:                             if ($iRenameLevel == 0 || $iRenameLevel == $iLevel) {
387:                                 uplRenameDirectory($file, uplCreateFriendlyName($file), $sParent);
388:                                 $iRenameLevel = $iLevel;
389:                                 $aFiles[] = uplCreateFriendlyName($file);
390:                             } else {
391:                                 $aInvalidDirectories[] = $file;
392:                             }
393:                         } else {
394:                             $aInvalidDirectories[] = $file;
395:                         }
396:                     }
397:                 }
398:             }
399:         }
400: 
401:         sort($aFiles);
402:         foreach ($aFiles as $key => $file) {
403:             $oItem = new TreeItem($file, $sDirectory . $file . '/', true);
404:             $oItem->custom['level'] = $iLevel;
405:             $oItem->custom['lastitem'] = ($key == count($aFiles) - 1);
406:             $oItem->custom['parent'] = $sDirectory;
407: 
408:             $oRootItem->addItem($oItem);
409:             $aArrayTemp = uplRecursiveDirectoryList($sDirectory . $file . '/', $oItem, $iLevel + 1, $sParent . $file . '/', $iRenameLevel);
410:             $aInvalidDirectories = array_merge($aInvalidDirectories, $aArrayTemp);
411:             unset($oItem);
412:         }
413:     }
414: 
415:     return $aInvalidDirectories;
416: }
417: 
418: 419: 420: 421: 422: 423: 424: 
425: function uplRecursiveDBDirectoryList($directory, TreeItem $oRootItem, $level, $client) {
426:     $dbfs = new cApiDbfsCollection();
427:     $dbfs->select("filename = '.' AND idclient=" . cSecurity::toInteger($client), 'dirname', 'dirname ASC');
428:     $count = 0;
429:     $lastlevel = 0;
430:     $item['.'] = $oRootItem;
431: 
432:     $prevobj = array(); 
433:     $lprevobj = new stdClass(); 
434: 
435:     while (($dbitem = $dbfs->next()) !== false) {
436:         $dirname = $dbitem->get('dirname');
437:         $level = substr_count($dirname, '/') + 2;
438:         $file = basename($dbitem->get('dirname'));
439:         $parent = dirname($dbitem->get('dirname'));
440: 
441:         if ($dirname != '.' && $file != '.') {
442:             $item[$dirname] = new TreeItem($file, cApiDbfs::PROTOCOL_DBFS . '/' . $dirname, true);
443:             $item[$dirname]->custom['level'] = $level;
444:             $item[$dirname]->custom['parent'] = $parent;
445:             $item[$dirname]->custom['lastitem'] = true;
446: 
447:             if ($prevobj[$level]->custom['level'] == $level) {
448:                 if (is_object($prevobj[$level])) {
449:                     $prevobj[$level]->custom['lastitem'] = false;
450:                 }
451:             }
452: 
453:             if ($lastlevel > $level) {
454:                 unset($prevobj[$lastlevel]);
455:                 $lprevobj->custom['lastitem'] = true;
456:             }
457: 
458:             $prevobj[$level] = $item[$dirname];
459:             $lprevobj = $item[$dirname];
460: 
461:             $lastlevel = $level;
462: 
463:             if (is_object($item[$parent])) {
464:                 $item[$parent]->addItem($item[$dirname]);
465:             }
466: 
467:             $count++;
468:         }
469:     }
470: }
471: 
472: 473: 474: 475: 476: 477: 478: 
479: function uplGetThumbnail($sFile, $iMaxSize) {
480:     global $client, $cfgClient;
481: 
482:     if ($iMaxSize == -1) {
483:         return uplGetFileIcon($sFile);
484:     }
485: 
486:     $sFileType = strtolower(getFileType($sFile));
487: 
488:     switch ($sFileType) {
489:         case "png":
490:         case "gif":
491:         case "tiff":
492:         case "tif":
493:         case "bmp":
494:         case "jpeg":
495:         case "jpg":
496:         case "iff":
497:         case "xbm":
498:         case "wbmp":
499:             $img = cApiImgScale($cfgClient[$client]['upl']['path'] . $sFile, $iMaxSize, $iMaxSize, false, false, 50);
500:             if ($img !== false) {
501:                 return $img;
502:             }
503:             $img = cApiImgScale(cRegistry::getBackendPath() . 'images/unknown.jpg', $iMaxSize, $iMaxSize, false, false, 50);
504:             if ($img !== false) {
505:                 return $img;
506:             } else {
507:                 return uplGetFileIcon($sFile);
508:             }
509:             break;
510:         default:
511:             return uplGetFileIcon($sFile);
512:             break;
513:     }
514: }
515: 
516: 517: 518: 519: 520: 521: 
522: function uplGetFileIcon($sFile) {
523:     global $cfg;
524: 
525:     $sPathFiletypes = cRegistry::getBackendUrl() . $cfg['path']['images'] . 'filetypes/';
526:     $sFileType = strtolower(getFileType($sFile));
527: 
528:     switch ($sFileType) {
529:         case "sxi":
530:         case "sti":
531:         case "pps":
532:         case "pot":
533:         case "kpr":
534:         case "pptx":
535:         case "potx":
536:         case "pptm":
537:         case "potm":
538:         case "ppt":
539:             $icon = "ppt.gif";
540:             break;
541:         case "doc":
542:         case "dot":
543:         case "sxw":
544:         case "stw":
545:         case "sdw":
546:         case "docx":
547:         case "dotx":
548:         case "docm":
549:         case "dotm":
550:         case "kwd":
551:             $icon = "word.gif";
552:             break;
553:         case "xls":
554:         case "sxc":
555:         case "stc":
556:         case "xlw":
557:         case "xlt":
558:         case "csv":
559:         case "ksp":
560:         case "xlsx":
561:         case "xltx":
562:         case "xlsm":
563:         case "xlsb":
564:         case "xltm":
565:         case "sdc":
566:             $icon = "excel.gif";
567:             break;
568:         case "txt":
569:         case "rtf":
570:             $icon = "txt.gif";
571:             break;
572:         case "gif":
573:             $icon = "gif.gif";
574:             break;
575:         case "png":
576:             $icon = "png.gif";
577:             break;
578:         case "jpeg":
579:         case "jpg":
580:             $icon = "jpg.gif";
581:             break;
582:         case "html":
583:         case "htm":
584:             $icon = "html.gif";
585:             break;
586:         case "lha":
587:         case "rar":
588:         case "arj":
589:         case "bz2":
590:         case "bz":
591:         case "gz":
592:         case "tar":
593:         case "tbz2":
594:         case "tbz":
595:         case "tgz":
596:         case "zip":
597:             $icon = "zip.gif";
598:             break;
599:         case "pdf":
600:             $icon = "pdf.gif";
601:             break;
602:         case "mov":
603:         case "avi":
604:         case "mpg":
605:         case "mpeg":
606:         case "wmv":
607:             $icon = "movie.gif";
608:             break;
609:         case "swf":
610:             $icon = "swf.gif";
611:             break;
612:         case "js":
613:             $icon = "js.gif";
614:             break;
615:         case "vcf":
616:             $icon = "vcf.gif";
617:             break;
618:         case "odf":
619:             $icon = "odf.gif";
620:             break;
621:         case "php":
622:             $icon = "php.gif";
623:             break;
624:         case "mp3":
625:         case "wma":
626:         case "ogg":
627:         case "mp4":
628:             $icon = "sound.gif";
629:             break;
630:         case "psd":
631:         case "ai":
632:         case "eps":
633:         case "cdr":
634:         case "qxp":
635:         case "ps":
636:             $icon = "design.gif";
637:             break;
638:         case "css":
639:             $icon = "css.gif";
640:             break;
641:         default:
642:             if (cFileHandler::exists($sPathFiletypes . $sFileType . '.gif')) {
643:                 $icon = $sFileType . '.gif';
644:             } else {
645:                 $icon = "unknown.gif";
646:             }
647:             break;
648:     }
649: 
650:     return $sPathFiletypes . $icon;
651: }
652: 
653: 654: 655: 656: 657: 658: 
659: function uplGetFileTypeDescription($sExtension) {
660:     global $cfg;
661: 
662:     switch ($sExtension) {
663:         
664:         case "sxi":
665:             return (i18n("OpenOffice.org Presentation"));
666:         case "sti":
667:             return (i18n("OpenOffice.org Presentation Template"));
668:         case "pps":
669:             return (i18n("Microsoft PowerPoint Screen Presentation"));
670:         case "pot":
671:             return (i18n("Microsoft PowerPoint Presentation Template"));
672:         case "kpr":
673:             return (i18n("KDE KPresenter Document"));
674:         case "ppt":
675:             return (i18n("Microsoft PowerPoint Presentation Template"));
676: 
677:         
678:         case "doc":
679:             return (i18n("Microsoft Word Document or regular text file"));
680:         case "dot":
681:             return (i18n("Microsoft Word Template"));
682:         case "sxw":
683:             return (i18n("OpenOffice.org Text Document"));
684:         case "stw":
685:             return (i18n("OpenOffice.org Text Document Template"));
686:         case "sdw":
687:             return (i18n("StarOffice 5.0 Text Document"));
688:         case "kwd":
689:             return (i18n("KDE KWord Document"));
690: 
691:         
692:         case "xls":
693:             return (i18n("Microsoft Excel Worksheet"));
694:         case "sxc":
695:             return (i18n("OpenOffice.org Table"));
696:         case "stc":
697:             return (i18n("OpenOffice.org Table Template"));
698:         case "xlw":
699:             return (i18n("Microsoft Excel File"));
700:         case "xlt":
701:             return (i18n("Microsoft Excel Template"));
702:         case "csv":
703:             return (i18n("Comma Seperated Value File"));
704:         case "ksp":
705:             return (i18n("KDE KSpread Document"));
706:         case "sdc":
707:             return (i18n("StarOffice 5.0 Table"));
708: 
709:         
710:         case "txt":
711:             return (i18n("Plain Text"));
712:         case "rtf":
713:             return (i18n("Rich Text Format"));
714: 
715:         
716:         case "gif":
717:             return (i18n("GIF Image"));
718:         case "png":
719:             return (i18n("PNG Image"));
720:         case "jpeg":
721:             return (i18n("JPEG Image"));
722:         case "jpg":
723:             return (i18n("JPEG Image"));
724:         case "tif":
725:             return (i18n("TIFF Image"));
726:         case "psd":
727:             return (i18n("Adobe Photoshop Image"));
728: 
729:         
730:         case "html":
731:             return (i18n("Hypertext Markup Language Document"));
732:         case "htm":
733:             return (i18n("Hypertext Markup Language Document"));
734:         case "css":
735:             return (i18n("Cascading Style Sheets"));
736: 
737:         
738:         case "lha":
739:             return (i18n("LHA Archive"));
740:         case "rar":
741:             return (i18n("RAR Archive"));
742:         case "arj":
743:             return (i18n("ARJ Archive"));
744:         case "bz2":
745:             return (i18n("bz2-compressed File"));
746:         case "bz":
747:             return (i18n("bzip-compressed File"));
748:         case "zip":
749:             return (i18n("ZIP Archive"));
750:         case "tar":
751:             return (i18n("TAR Archive"));
752:         case "gz":
753:             return (i18n("GZ Compressed File"));
754: 
755:         
756:         case "c":
757:             return (i18n("C Program Code"));
758:         case "c++":
759:         case "cc":
760:         case "cpp":
761:             return (i18n("C++ Program Code"));
762:         case "hpp":
763:         case "h":
764:             return (i18n("C or C++ Program Header"));
765:         case "php":
766:         case "php3":
767:         case "php4":
768:             return (i18n("PHP Program Code"));
769:         case "phps":
770:             return (i18n("PHP Source File"));
771: 
772:         case "pdf":
773:             return (i18n("Adobe Acrobat Portable Document"));
774: 
775:         
776:         case "mov":
777:             return (i18n("QuickTime Movie"));
778:         case "avi":
779:             return (i18n("avi Movie"));
780:         case "mpg":
781:         case "mpeg":
782:             return (i18n("MPEG Movie"));
783:         case "wmv":
784:             return (i18n("Windows Media Video"));
785:         case "mp4":
786:             return (i18n("MPEG-4 Movie"));
787: 
788:         default:
789:             return (i18n($sExtension . "-File"));
790:     }
791: }
792: 
793: 794: 795: 796: 797: 798: 
799: function uplCreateFriendlyName($filename) {
800:     global $cfg, $lang;
801: 
802:     $oLang = new cApiLanguage();
803:     $oLang->loadByPrimaryKey($lang);
804: 
805:     if (!is_array($cfg['upl']['allow_additional_chars'])) {
806:         $filename = str_replace(" ", "_", $filename);
807:     } elseif (in_array(' ', $cfg['upl']['allow_additional_chars']) === FALSE) {
808:         $filename = str_replace(" ", "_", $filename);
809:     }
810: 
811:     $chars = '';
812:     if (is_array($cfg['upl']['allow_additional_chars'])) {
813:         $chars = implode("", $cfg['upl']['allow_additional_chars']);
814:         $chars = str_replace(array(
815:             '-',
816:             '[',
817:             ']'
818:         ), '', $chars);
819:     }
820: 
821:     $filename = cApiStrReplaceDiacritics($filename, strtoupper($oLang->getField('encoding')));
822:     $filename = preg_replace("/[^A-Za-z0-9._\-" . $chars . "]/i", '', $filename);
823: 
824:     return $filename;
825: }
826: 
827: function uplSearch($searchfor) {
828:     $client = cRegistry::getClientId();
829:     $client = cSecurity::toInteger($client);
830:     $lang = cRegistry::getLanguageId();
831:     $lang = cSecurity::toInteger($lang);
832: 
833:     $uploadsColl = new cApiUploadCollection();
834:     $uplMetaColl = new cApiUploadMetaCollection();
835: 
836:     $searchfordb = $uplMetaColl->escape($searchfor);
837: 
838:     $items = array();
839: 
840:     
841:     $uplMetaColl->link('cApiUploadCollection');
842:     $uplMetaColl->setWhereGroup('description', 'capiuploadcollection.idclient', $client);
843:     $uplMetaColl->setWhereGroup('description', 'capiuploadmetacollection.idlang', $lang);
844:     $uplMetaColl->setWhereGroup('description', 'capiuploadmetacollection.description', '%' . $searchfordb . '%', 'LIKE');
845:     $uplMetaColl->query();
846:     while (($item = $uplMetaColl->next()) !== false) {
847:         $items[$item->get('idupl')] += (substr_count(strtolower($item->get('description')), strtolower($searchfor)) * 5);
848:     }
849: 
850:     
851:     $uplMetaColl->resetQuery();
852:     $uplMetaColl->link('cApiUploadCollection');
853:     $uplMetaColl->setWhereGroup('medianame', 'capiuploadcollection.idclient', $client);
854:     $uplMetaColl->setWhereGroup('medianame', 'capiuploadmetacollection.idlang', $lang);
855:     $uplMetaColl->setWhereGroup('medianame', 'capiuploadmetacollection.medianame', '%' . $searchfordb . '%', 'LIKE');
856:     $uplMetaColl->query();
857:     while (($item = $uplMetaColl->next()) !== false) {
858:         $items[$item->get('idupl')] += (substr_count(strtolower($item->get('medianame')), strtolower($searchfor)) * 4);
859:     }
860: 
861:     
862:     $uploadsColl->select("idclient='" . $client . "' AND filename LIKE '%" . $searchfordb . "%'");
863:     while (($item = $uploadsColl->next()) !== false) {
864:         $items[$item->get('idupl')] += 4;
865:     }
866: 
867:     
868:     $uplMetaColl->resetQuery();
869:     $uplMetaColl->link('cApiUploadCollection');
870:     $uplMetaColl->setWhereGroup('keywords', 'capiuploadcollection.idclient', $client);
871:     $uplMetaColl->setWhereGroup('keywords', 'capiuploadmetacollection.idlang', $lang);
872:     $uplMetaColl->setWhereGroup('keywords', 'capiuploadmetacollection.keywords', '%' . $searchfordb . '%', 'LIKE');
873:     $uplMetaColl->query();
874:     while (($item = $uplMetaColl->next()) !== false) {
875:         $items[$item->get('idupl')] += (substr_count(strtolower($item->get('keywords')), strtolower($searchfor)) * 3);
876:     }
877: 
878:     
879:     $uplMetaColl->resetQuery();
880:     $uplMetaColl->link('cApiUploadCollection');
881:     $uplMetaColl->setWhereGroup('copyright', 'capiuploadcollection.idclient', $client);
882:     $uplMetaColl->setWhereGroup('copyright', 'capiuploadmetacollection.idlang', $lang);
883:     $uplMetaColl->setWhereGroup('copyright', 'capiuploadmetacollection.copyright', '%' . $searchfordb . '%', 'LIKE');
884:     $uplMetaColl->query();
885:     while (($item = $uplMetaColl->next()) !== false) {
886:         $items[$item->get('idupl')] += (substr_count(strtolower($item->get('copyright')), strtolower($searchfor)) * 2);
887:     }
888: 
889:     
890:     $uplMetaColl->resetQuery();
891:     $uplMetaColl->link('cApiUploadCollection');
892:     $uplMetaColl->setWhereGroup('internal_notice', 'capiuploadcollection.idclient', $client);
893:     $uplMetaColl->setWhereGroup('internal_notice', 'capiuploadmetacollection.idlang', $lang);
894:     $uplMetaColl->setWhereGroup('internal_notice', 'capiuploadmetacollection.internal_notice', '%' . $searchfordb . '%', 'LIKE');
895:     $uplMetaColl->query();
896:     while (($item = $uplMetaColl->next()) !== false) {
897:         $items[$item->get('idupl')] += (substr_count(strtolower($item->get('internal_notice')), strtolower($searchfor)));
898:     }
899: 
900:     return $items;
901: }
902: 
903: 904: 905: 906: 907: 908: 
909: function uplGetFileExtension($sFile) {
910:     
911:     $iDotPosition = strrpos($sFile, '.');
912:     $sExtension = substr($sFile, $iDotPosition + 1);
913:     if (strpos($sExtension, '/') !== false) {
914:         return false;
915:     } else {
916:         return $sExtension;
917:     }
918: }
919: 
920: 921: 922: 923: 924: 925: 
926: function uplGetDirectoriesToExclude() {
927:     static $mDirsToExclude = NULL;
928:     if (isset($mDirsToExclude)) {
929:         return $mDirsToExclude;
930:     }
931: 
932:     $mDirsToExclude = trim(getSystemProperty('system', 'upldirlist-dirstoexclude'));
933:     if ($mDirsToExclude === '') {
934:         $mDirsToExclude = '.,..,.svn,.cvs';
935:         setSystemProperty('system', 'upldirlist-dirstoexclude', $mDirsToExclude);
936:     }
937:     $mDirsToExclude = explode(',', $mDirsToExclude);
938:     foreach ($mDirsToExclude as $pos => $item) {
939:         $mDirsToExclude[$pos] = trim($item);
940:     }
941:     return $mDirsToExclude;
942: }
943: