/** * 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); }