Example #1
0
 /**
  * @param string $liveDirectory
  * @param string $srcDirectory
  * @param array  $writeableDirectories
  * @param array  $cacheDirectories
  * @param string $subDirectory
  *
  * @throws CmsException
  */
 protected function updateLive($liveDirectory, $srcDirectory, $writeableDirectories, $cacheDirectories, $subDirectory = '')
 {
     if (!is_dir($srcDirectory)) {
         throw new CmsException(902, __METHOD__, __LINE__, array('msg' => sprintf('source directory %s not exists', $srcDirectory)));
     }
     // create live directory
     if (!is_dir($liveDirectory)) {
         FS::createDirIfNotExists($liveDirectory, true, 0755);
     }
     // set directory rights
     if (!empty($subDirectory) && $this->isInsideDirectory($subDirectory, $writeableDirectories)) {
         // writeable
         FS::chmod($liveDirectory, 0777);
     } else {
         FS::chmod($liveDirectory, 0755);
     }
     // get info of the directories
     $liveDirInfo = $this->getDirectoryAsArray($liveDirectory);
     $srcDirInfo = $this->getDirectoryAsArray($srcDirectory);
     // delete live directories
     foreach ($liveDirInfo['directories'] as $liveSubDirectoryName => $liveSubDirectory) {
         if ($this->isInsideDirectory($subDirectory . $liveSubDirectoryName, $writeableDirectories)) {
             FS::chmod($liveSubDirectory, 0777);
             continue;
         }
         if (!isset($srcDirInfo['directories'][$liveSubDirectoryName])) {
             FS::rmdir($liveDirectory);
         }
     }
     // delete live files
     foreach ($liveDirInfo['files'] as $liveFileName => $liveFilePathName) {
         if ($this->isInsideDirectory($subDirectory . $liveFileName, $writeableDirectories)) {
             FS::chmod($liveFilePathName, 0777);
             continue;
         }
         if (!isset($srcDirInfo['files'][$liveFileName])) {
             FS::rmFile($liveFilePathName);
         }
     }
     // copy source directories
     foreach ($srcDirInfo['directories'] as $srcSubDirectoryName => $srcSubDirectory) {
         $subDirPathName = $subDirectory . $srcSubDirectoryName . DIRECTORY_SEPARATOR;
         $newLiveDirectory = FS::joinPath($liveDirectory, $srcSubDirectoryName);
         $this->updateLive($newLiveDirectory, $srcSubDirectory, $writeableDirectories, $cacheDirectories, $subDirPathName);
     }
     // copy source files
     foreach ($srcDirInfo['files'] as $srcFileName => $srcFilePathName) {
         $newLiveFilePathName = FS::joinPath($liveDirectory, $srcFileName);
         FS::copyFile($srcFilePathName, $newLiveFilePathName);
         if ($this->isInsideDirectory($subDirectory . $srcFileName, $writeableDirectories)) {
             FS::chmod($newLiveFilePathName, 0777);
         } else {
             FS::chmod($newLiveFilePathName, 0755);
         }
     }
 }