Esempio n. 1
0
 /**
  * Copy file or folder from source to destination
  * 
  * It can do recursive copy as well and is very smart
  * It recursively creates the dest file or directory path if there weren't exists
  * Situtaions :
  * - Src:/home/test/file.txt ,Dst:/home/test/b ,Result:/home/test/b -> If source was file copy file.txt name with b as name to destination
  * - Src:/home/test/file.txt ,Dst:/home/test/b/ ,Result:/home/test/b/file.txt -> If source was file Creates b directory if does not exsits and copy file.txt into it
  * - Src:/home/test ,Dst:/home/ ,Result:/home/test/** -> If source was directory copy test directory and all of its content into dest     
  * - Src:/home/test/ ,Dst:/home/ ,Result:/home/**-> if source was direcotry copy its content to dest
  * - Src:/home/test ,Dst:/home/test2 ,Result:/home/test2/** -> if source was directoy copy it and its content to dest with test2 as name
  * - Src:/home/test/ ,Dst:/home/test2 ,Result:->/home/test2/** if source was directoy copy it and its content to dest with test2 as name
  * 
  * @author Sina Salek - http://sina.salek.ws/en/contact 
  * @param $source //file or folder
  * @param $dest ///file or folder
  * @param $options //folderPermission,filePermission
  * @return boolean
  */
 public static function Copy($source, $dest, $options = array('folderPermission' => 0755, 'filePermission' => 0755))
 {
     $result = false;
     if (is_file($source)) {
         if ($dest[strlen($dest) - 1] == '/') {
             if (!file_exists($dest)) {
                 cmfcDirectory::makeAll($dest, $options['folderPermission'], true);
             }
             $__dest = $dest . "/" . basename($source);
         } else {
             $__dest = $dest;
         }
         $result = copy($source, $__dest);
         chmod($__dest, $options['filePermission']);
     } elseif (is_dir($source)) {
         if ($dest[strlen($dest) - 1] == '/') {
             if ($source[strlen($source) - 1] == '/') {
                 //Copy only contents
             } else {
                 //Change parent itself and its contents
                 $dest = $dest . basename($source);
                 @mkdir($dest);
                 chmod($dest, $options['filePermission']);
             }
         } else {
             if ($source[strlen($source) - 1] == '/') {
                 //Copy parent directory with new name and all its content
                 @mkdir($dest, $options['folderPermission']);
                 chmod($dest, $options['filePermission']);
             } else {
                 //Copy parent directory with new name and all its content
                 @mkdir($dest, $options['folderPermission']);
                 chmod($dest, $options['filePermission']);
             }
         }
         $dirHandle = opendir($source);
         while ($file = readdir($dirHandle)) {
             if ($file != "." && $file != "..") {
                 if (!is_dir($source . "/" . $file)) {
                     $__dest = $dest . "/" . $file;
                 } else {
                     $__dest = $dest . "/" . $file;
                 }
                 $result = Gdn_FileSystem::Copy($source . "/" . $file, $__dest, $options);
             }
         }
         closedir($dirHandle);
     } else {
         $result = false;
     }
     return $result;
 }
 /**
  * Overwrites Yaga configurations, dumps Yaga db tables, inserts data via the 
  * model, and copies uploaded files to the server
  * 
  * @param stdClass The info object read in from the archive
  * @param array Which tables should be overwritten
  * @return bool Pass/Fail on the import being executed. Errors can exist on the
  * form with a passing return value.
  */
 protected function _ImportData($Info, $Include)
 {
     if (!$Info) {
         return FALSE;
     }
     // Import Configs
     $Configs = unserialize(file_get_contents(PATH_UPLOADS . DS . 'import' . DS . 'yaga' . DS . $Info->Config));
     $Configurations = $this->_NestedToDotNotation($Configs, 'Yaga');
     foreach ($Configurations as $Name => $Value) {
         SaveToConfig($Name, $Value);
     }
     // Import model data
     foreach ($Include as $Key => $Value) {
         if ($Value) {
             $Data = unserialize(file_get_contents(PATH_UPLOADS . DS . 'import' . DS . 'yaga' . DS . $Info->{$Key}));
             Gdn::SQL()->EmptyTable($Key);
             $ModelName = $Key . 'Model';
             $Model = Yaga::$ModelName();
             foreach ($Data as $Datum) {
                 $Model->Insert((array) $Datum);
             }
             $this->SetData($Key . 'Count', $Model->GetCount());
         }
     }
     // Import uploaded files
     if (Gdn_FileSystem::Copy(PATH_UPLOADS . DS . 'import' . DS . 'yaga' . DS . 'images' . DS . 'uploads' . DS, PATH_UPLOADS . DS) === FALSE) {
         $this->Form->AddError(T('Yaga.Error.TransportCopy'));
     }
     return TRUE;
 }