コード例 #1
0
ファイル: Fm.php プロジェクト: rbraband/sefrengo
 /**
  * THIS FUNCTION IS DEPRECATED
  * Remove the function when it isn't used by packed file upload
  * in doUploadFile() anymore!
  * 
  * Iterates through the $source_path and checks if directories and
  * files exists in database ($destination_iddirectory).
  * If directory or file does not exist it will added to database.
  * To synchronize between the $destination_iddirectory and
  * corrosponding filesystem directory, $source_path must be an empty string.
  * With $options['recursive'] = TRUE (default: FALSE) all sub directories
  * and files are scaned.
  * @param string $source_path
  * @param integer $destination_iddirectory
  * @param array $options
  * @return array Returns array with number of errors and ok plus a counter array
  */
 protected function _doDirectoryScan($source_path, $destination_iddirectory, $options)
 {
     if ($destination_iddirectory == 0) {
         $destination['iddirectory'] = $destination_iddirectory;
         $destination['relative_path'] = '';
         $destination['path'] = substr($this->config_area['rootdirectory_path'], 0, -1);
     } else {
         if ($destination_iddirectory > 0) {
             if ($this->directory_sql_item->loadById($destination_iddirectory) === FALSE || $this->directory_sql_item->getField('area') != $this->config_area['area_name']) {
                 return FALSE;
             }
             $destination['iddirectory'] = $destination_iddirectory;
             $destination['relative_path'] = $this->directory_sql_item->getRelativePath();
             $destination['path'] = substr($this->directory_sql_item->getPath(), 0, -1);
         } else {
             return FALSE;
         }
     }
     // set source path and options
     if ($source_path == '') {
         $source['path'] = $destination['path'];
         $options['copy_file'] = !array_key_exists('copy_file', $options) ? FALSE : $options['copy_file'];
         $options['create_only_db'] = !array_key_exists('create_only_db', $options) ? TRUE : $options['create_only_db'];
         $options['generate_thumbnails'] = !array_key_exists('generate_thumbnails', $options) ? FALSE : $options['generate_thumbnails'];
     } else {
         $source['path'] = $source_path;
         $options['copy_file'] = !array_key_exists('copy_file', $options) ? TRUE : $options['copy_file'];
         $options['create_only_db'] = !array_key_exists('create_only_db', $options) ? FALSE : $options['create_only_db'];
         $options['generate_thumbnails'] = !array_key_exists('generate_thumbnails', $options) ? TRUE : $options['generate_thumbnails'];
     }
     $fsm = sf_api('LIB', 'FilesystemManipulation');
     if ($fsm->isDir($source['path']) == FALSE) {
         return FALSE;
     }
     unset($fsm);
     $dir_iterator = new RecursiveDirectoryIterator($source['path']);
     if ($options['recursive'] == TRUE) {
         $dir_iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST);
     }
     $directories = array();
     $added_directories = array();
     $thumbnails_for_files = array();
     $error = $ok = 0;
     $counter = array('directories_added' => 0, 'directories_equal' => 0, 'files_added' => 0, 'files_equal' => 0);
     $directorydata = array();
     $directorydata['area'] = $this->config_area['area_name'];
     $directorydata['idclient'] = $this->config_area['idclient'];
     $directorydata['idlang'] = $this->config_area['idlang'];
     foreach ($dir_iterator as $filename => $current) {
         if ($current->isDir()) {
             $found = FALSE;
             foreach ($this->config_area['scan_ignore_directories'] as $ignore_directory) {
                 if (stripos($current->getPathName(), $ignore_directory) !== FALSE) {
                     $found = TRUE;
                     break;
                 }
             }
             if ($found == TRUE) {
                 //echo "Skip directory: ".$current->getPathName()."<br />\n";
                 continue;
             }
             unset($found);
             $source['relative_path'] = str_replace(array($source['path'], '\\'), array('', '/'), $current->getPathName());
             $source['relative_path'] = substr($source['relative_path'], 1);
             $source['relative_parent_path'] = str_replace(array($source['path'], '\\'), array('', '/'), $current->getPath());
             $source['relative_parent_path'] = substr($source['relative_parent_path'], 1);
             $dirname = $destination['relative_path'] . $source['relative_path'];
             $dirname .= substr($dirname, -1) != '/' ? '/' : '';
             //echo "Directory: ".$current->getPath()." - ".$source['relative_path']."<br />\n";
             if ($this->directory_sql_item->loadByDirname($dirname, $directorydata['area']) == FALSE) {
                 $parent_dirname = $destination['relative_path'] . $source['relative_parent_path'];
                 $parent_dirname .= substr($parent_dirname, -1) != '/' ? '/' : '';
                 // get parentid if not already stored
                 if (array_key_exists($source['relative_parent_path'], $directories)) {
                     $directorydata['parentid'] = $directories[$source['relative_parent_path']];
                 } else {
                     if ($this->directory_sql_item->loadByDirname($parent_dirname, $directorydata['area']) == TRUE) {
                         $directorydata['parentid'] = $this->directory_sql_item->getId();
                     } else {
                         $directorydata['parentid'] = $destination['iddirectory'];
                     }
                 }
                 $directorydata['dirname'] = $dirname;
                 $directorydata['name'] = $current->getFilename();
                 //$directorydata['status'] = 2;
                 //print_r($directorydata);
                 try {
                     $new_directory = sf_api('MODEL', 'DirectorySqlItem');
                     $success = FALSE;
                     if ($options['create_only_db'] == TRUE) {
                         $success = $new_directory->createOnlyDb($directorydata);
                     } else {
                         $success = $new_directory->create($directorydata);
                     }
                     if ($success == TRUE) {
                         $directories[$source['relative_path']] = $new_directory->getId();
                         $added_directories[] = $new_directory->getId();
                         ++$ok;
                         ++$counter['directories_added'];
                         //echo "Create directory: ".$directorydata['dirname']." - ".$directories[ $source['relative_path'] ]."<br />";
                     } else {
                         ++$counter['directories_equal'];
                     }
                     unset($new_directory);
                 } catch (Exception $e) {
                     return $e->getMessage() . "<br />";
                     ++$counter['directories_equal'];
                     ++$error;
                 }
             } else {
                 // status = 2: not in queue and ready worked
                 //$this->directory_sql_item->setField('status', 2);
                 //$this->directory_sql_item->save();
                 ++$counter['directories_equal'];
                 $directories[$source['relative_path']] = $this->directory_sql_item->getId();
             }
         }
     }
     //print_r($directories);
     //echo "<br />";
     $fsm = sf_api('LIB', 'FilesystemManipulation');
     $filedata = array();
     $filedata['area'] = $this->config_area['area_name'];
     $filedata['idclient'] = $this->config_area['idclient'];
     $filedata['idlang'] = $this->config_area['idlang'];
     foreach ($dir_iterator as $filename => $current) {
         if ($current->isFile()) {
             $found = FALSE;
             foreach ($this->config_area['scan_ignore_directories'] as $ignore_directory) {
                 if (stripos($current->getPathName(), $ignore_directory) !== FALSE) {
                     $found = TRUE;
                     break;
                 }
             }
             if ($found == TRUE) {
                 //echo "Skip directory: ".$current->getPathName()."<br />\n";
                 continue;
             }
             unset($found);
             $found = FALSE;
             foreach ($this->config_area['scan_ignore_files'] as $ignore_file) {
                 if (stripos($current->getPathName(), $ignore_file) !== FALSE) {
                     $found = TRUE;
                     break;
                 }
             }
             if ($found == TRUE) {
                 //echo "Skip file: ".$current->getPathName()."<br />\n";
                 continue;
             }
             unset($found);
             $source['relative_path'] = str_replace(array($source['path'], '\\'), array('', '/'), $current->getPathName());
             $source['relative_path'] = substr($source['relative_path'], 1);
             $source['relative_parent_path'] = str_replace(array($source['path'], '\\'), array('', '/'), $current->getPath());
             $source['relative_parent_path'] = substr($source['relative_parent_path'], 1);
             $dirname = $destination['relative_path'] . $source['relative_path'];
             //echo "File: ".$current->getPathName()."<br />\n";
             if (array_key_exists($source['relative_parent_path'], $directories)) {
                 $filedata['iddirectory'] = $directories[$source['relative_parent_path']];
             } else {
                 $filedata['iddirectory'] = $destination['iddirectory'];
             }
             $is_loaded = $this->file_sql_item->loadByFilename($current->getFilename(), $filedata['iddirectory']);
             $filedata['filename'] = $fsm->cleanFilename($current->getFilename());
             //$filedata['status'] = 2; // status = 2: not in queue and ready worked
             try {
                 if ($is_loaded == TRUE && strcmp($filedata['filename'], $current->getFilename()) != 0) {
                     //print_r($filedata);
                     if ($this->file_sql_item->edit($filedata) == TRUE) {
                         if ($this->file_sql_item->isThumbnailGenerationPossible() == TRUE) {
                             $thumbnails_for_files[] = $this->file_sql_item->getId();
                         }
                         ++$ok;
                         ++$counter['files_equal'];
                         //echo "Renamed file: ".$filedata['filename']."<br />";
                     }
                 } else {
                     if ($is_loaded == FALSE) {
                         //print_r($filedata);
                         $new_file = sf_api('MODEL', 'FileSqlItem');
                         if ($new_file->addByDirectoryPath($filedata, $current->getPathName(), $options['copy_file'], $options['generate_thumbnails']) == TRUE) {
                             if ($new_file->isThumbnailGenerationPossible() == TRUE) {
                                 $thumbnails_for_files[] = $new_file->getId();
                             }
                             ++$ok;
                             ++$counter['files_added'];
                             //echo "Created file: ".$filedata['filename']."<br />";
                         }
                         unset($new_file);
                     } else {
                         // status = 2: not in queue and ready worked
                         //$this->file_sql_item->setField('status', 2);
                         //$this->file_sql_item->save();
                         if ($this->file_sql_item->isThumbnailGenerationPossible() == TRUE) {
                             $thumbnails_for_files[] = $this->file_sql_item->getId();
                         }
                         ++$counter['files_equal'];
                     }
                 }
             } catch (Exception $e) {
                 ++$error;
             }
         }
     }
     return array('error' => $error, 'ok' => $ok, 'counter' => $counter, 'added_directories' => $added_directories, 'thumbnails_for_files' => $thumbnails_for_files);
 }