コード例 #1
0
ファイル: Estheme.class.php プロジェクト: AntiqS/altocms
 /**
  * Компилирует тему
  *
  * @param array $aParams Передаваемые параметры
  * @return bool
  */
 public function CompileTheme($aParams, $bDownload = FALSE)
 {
     if (!E::User()) {
         return FALSE;
     }
     $sCompiledStyle = E::ModuleLess()->CompileFile(array(C::Get('path.skins.dir') . 'experience-simple/themes/custom/less/theme.less' => C::Get('path.root.web')), __DIR__ . '/../../../cache/', C::Get('path.skins.dir') . 'experience-simple/themes/custom/css/theme.custom.css.map', $aParams, $bDownload);
     if ($sCompiledStyle) {
         if (!$bDownload || E::IsAdmin()) {
             F::File_PutContents(C::Get('path.skins.dir') . 'experience-simple/themes/custom/css/theme.custom.css', $sCompiledStyle);
         } else {
             $sPath = C::Get('plugin.estheme.path_for_download') . E::UserId() . '/theme.custom.css';
             F::File_PutContents($sPath, $sCompiledStyle);
         }
     }
 }
コード例 #2
0
 public function PrepareFile($sFile, $sDestination)
 {
     $sContents = F::File_GetContents($sFile);
     if ($sContents !== false) {
         $sContents = $this->PrepareContents($sContents, $sFile, $sDestination);
         if (F::File_PutContents($sDestination, $sContents) !== false) {
             return $sDestination;
         }
     }
     F::SysWarning('Can not prepare asset file "' . $sFile . '"');
     return null;
 }
コード例 #3
0
ファイル: Cache.class.php プロジェクト: AlexSSN/altocms
 /**
  * Clear cache
  *
  * @param string      $sMode
  * @param array       $aTags
  * @param string|null $sCacheType - Type of cache (if null then clear in all cache types)
  *
  * @return  bool
  */
 public function Clean($sMode = Zend_Cache::CLEANING_MODE_ALL, $aTags = array(), $sCacheType = null)
 {
     // Проверим разрешено ли кэширование
     if ($this->_cacheOn($sCacheType)) {
         $aTags = $this->_prepareTags($aTags);
         $bResult = $this->_backendClean($sCacheType, $sMode, $aTags);
     } else {
         $bResult = false;
     }
     F::File_PutContents(C::Get('sys.cache.dir') . self::CHECK_FILENAME, microtime(true));
     return $bResult;
 }
コード例 #4
0
ファイル: Func.php プロジェクト: AntiqS/altocms
 /**
  * @param string $sText
  * @param string $sLogFile
  * @param string $sLevel
  *
  * @return bool
  */
 public static function _log($sText, $sLogFile, $sLevel = null)
 {
     if (class_exists('ModuleLogger', false) || class_exists('Loader', false) && Loader::Autoload('ModuleLogger')) {
         // Если загружен модуль Logger, то логгируем ошибку с его помощью
         return E::ModuleLogger()->Dump($sLogFile, $sText, $sLevel);
     } elseif (class_exists('Config', false)) {
         // Если логгера нет, но есть конфиг, то самостоятельно пишем в файл
         $sFile = Config::Get('sys.logs.dir') . $sLogFile;
         if (!$sFile) {
             // Непонятно, куда писать
         } else {
             $sText = '[' . date('Y-m-d H:i:s') . ']' . "\n" . $sText;
             return F::File_PutContents($sFile, $sText, FILE_APPEND | LOCK_EX);
         }
     }
     return false;
 }
コード例 #5
0
ファイル: ViewerAsset.class.php プロジェクト: AntiqS/altocms
 /**
  * Save cache and check-file of current asset pack
  */
 protected function _saveAssets()
 {
     $sCheckFileName = $this->GetAssetsCheckName();
     F::File_PutContents($sCheckFileName, time(), LOCK_EX, true);
     $sCacheFileName = $this->GetAssetsCacheName();
     F::File_PutContents($sCacheFileName, F::Serialize($this->aAssets), LOCK_EX, true);
     F::File_Delete($sCacheFileName . '.tmp');
 }
コード例 #6
0
ファイル: Plugin.class.php プロジェクト: ZeoNish/altocms
 /**
  * Записывает список активных плагинов в файл PLUGINS.DAT
  *
  * @param array|string $aPlugins    Список плагинов
  *
  * @return bool
  */
 public function SetActivePlugins($aPlugins)
 {
     if (!is_array($aPlugins)) {
         $sPlugin = (string) $aPlugins;
         $aPlugins = array($sPlugin => array('id' => $sPlugin, 'dirname' => $sPlugin));
     }
     //$aPlugins = array_unique(array_map('trim', $aPlugins));
     $aSaveData = array(date(';Y-m-d H:i:s'));
     foreach ($aPlugins as $sPlugin => $aPluginInfo) {
         $aSaveData[] = $sPlugin . ' ' . (!empty($aPluginInfo['dirname']) ? $aPluginInfo['dirname'] : $sPlugin) . (!empty($aPluginInfo['name']) ? ' ;' . $aPluginInfo['name'] : '');
     }
     // * Записываем данные в файл PLUGINS.DAT
     $sFile = F::GetPluginsDatFile();
     if (F::File_PutContents($sFile, implode(PHP_EOL, $aSaveData)) !== false) {
         return true;
     }
     return false;
 }
コード例 #7
0
ファイル: Uploader.class.php プロジェクト: AntiqS/altocms
 /**
  * Upload remote file by URL
  *
  * @param string $sUrl
  * @param string $sTarget
  * @param string $sDir
  * @param array  $aParams [max_size => «размер в килобайтах»]
  *
  * @return bool
  */
 public function UploadRemote($sUrl, $sTarget = 'default', $sDir = null, $aParams = array())
 {
     $this->nLastError = 0;
     if (!isset($aParams['max_size'])) {
         $aParams['max_size'] = 0;
     } else {
         $aParams['max_size'] = intval($aParams['max_size']);
     }
     $sContent = '';
     if ($aParams['max_size']) {
         $hFile = @fopen($sUrl, 'r');
         if (!$hFile) {
             $this->nLastError = self::ERR_REMOTE_FILE_OPEN;
             return false;
         }
         $nSizeKb = 0;
         while (!feof($hFile) && $nSizeKb <= $aParams['max_size']) {
             $sPiece = fread($hFile, 1024);
             if ($sPiece) {
                 $nSizeKb += strlen($sPiece);
                 $sContent .= $sPiece;
             } else {
                 break;
             }
         }
         fclose($hFile);
         // * Если конец файла не достигнут, значит файл имеет недопустимый размер
         if ($nSizeKb > $aParams['max_size']) {
             $this->nLastError = self::ERR_REMOTE_FILE_MAXSIZE;
             return false;
         }
     } else {
         $sContent = @file_get_contents($sUrl);
         if ($sContent === false) {
             $this->nLastError = self::ERR_REMOTE_FILE_READ;
             return false;
         }
     }
     if ($sContent) {
         $sTmpFile = F::File_UploadUniqname(F::File_GetExtension($sUrl));
         if (!F::File_PutContents($sTmpFile, $sContent)) {
             $this->nLastError = self::ERR_REMOTE_FILE_WRITE;
             return false;
         }
     }
     if (!empty($sTmpFile) && $this->_checkUploadedFile($sTmpFile, $sTarget)) {
         if ($sDir) {
             return $this->MoveTmpFile($sTmpFile, $sDir);
         } else {
             return $sTmpFile;
         }
     }
     return false;
 }
コード例 #8
0
ファイル: Config.class.php プロジェクト: ZeoNish/altocms
 /**
  * Сохраняет в файловом кеше кастомную конфигурацию
  *
  * @param $aConfig
  * @param $bReset
  */
 protected static function _putCustomCfg($aConfig, $bReset = false)
 {
     if (is_array($aConfig) && ($sFile = self::_checkCustomCfg())) {
         $aConfig['_timestamp_'] = time();
         if (!$bReset) {
             // Объединяем текущую конфигурацию с сохраняемой
             $aOldConfig = self::_getCustomCfg();
             if ($aOldConfig) {
                 $aConfig = F::Array_Merge($aOldConfig, $aConfig);
             }
         }
         F::File_PutContents($sFile, F::Serialize($aConfig));
     }
 }
コード例 #9
0
 /**
  * @return bool
  */
 public function Process()
 {
     $bResult = true;
     foreach ($this->aLinks as $nIdx => $aLinkData) {
         if (empty($aLinkData['throw']) && !empty($aLinkData['compress'])) {
             $sAssetFile = $aLinkData['asset_file'];
             $sExtension = 'min.' . F::File_GetExtension($sAssetFile);
             $sCompressedFile = F::File_SetExtension($sAssetFile, $sExtension);
             if (!$this->CheckDestination($sCompressedFile)) {
                 if ($sContents = F::File_GetContents($sAssetFile)) {
                     $sContents = $this->Compress($sContents);
                     if (F::File_PutContents($sCompressedFile, $sContents, LOCK_EX, true)) {
                         F::File_Delete($sAssetFile);
                         $this->aLinks[$nIdx]['link'] = F::File_SetExtension($this->aLinks[$nIdx]['link'], $sExtension);
                     }
                     if (C::Get('compress.js.gzip') && C::Get('compress.js.merge') && C::Get('compress.js.use')) {
                         // Сохраним gzip
                         $sCompressedContent = gzencode($sContents, 9);
                         F::File_PutContents($sCompressedFile . '.gz.js', $sCompressedContent, LOCK_EX, true);
                     }
                 }
             } else {
                 $this->aLinks[$nIdx]['link'] = F::File_SetExtension($this->aLinks[$nIdx]['link'], $sExtension);
             }
         }
     }
     return $bResult;
 }
コード例 #10
0
ファイル: ViewerAsset.class.php プロジェクト: AlexSSN/altocms
 /**
  * Save cache and check-file of current asset pack
  */
 protected function _saveAssets()
 {
     F::File_PutContents($this->GetAssetsCheckName(), time());
     $sFile = $this->GetAssetsCacheName();
     F::File_PutContents($sFile, F::Serialize($this->aAssets));
     F::File_Delete($sFile . '.tmp');
 }
コード例 #11
0
 /**
  * @param int  $nStage
  * @param bool $bFinal
  */
 protected function _stageEnd($nStage, $bFinal = false)
 {
     $sFile = F::File_GetAssetDir() . '_check/' . $this->GetHash();
     F::File_PutContents($sFile . '.' . $nStage . '.end.tmp', time());
     for ($n = 1; $n <= $nStage; $n++) {
         F::File_Delete($sFile . '.' . $n . '.begin.tmp');
         if ($n < $nStage || $bFinal) {
             F::File_Delete($sFile . '.' . $n . '.end.tmp');
         }
     }
 }
コード例 #12
0
ファイル: Viewer.class.php プロジェクト: AntiqS/altocms
 /**
  * @param string $sTplName
  *
  * @return string|bool
  */
 protected function _autocreateOldTemplate($sTplName)
 {
     $sOldTemplatesDir = $this->_getAutocreateOldTemplatesDir();
     if ($sFile = F::File_Exists($sTplName, $sOldTemplatesDir)) {
         return $sFile;
     }
     $aSourceTemplatesDir = array(Config::Get('path.skin.dir') . '/themes/default/layouts');
     if ($sTplName == 'header.tpl' || $sTplName == 'footer.tpl') {
         if ($sSourceFile = F::File_Exists('default.tpl', $aSourceTemplatesDir)) {
             $sSource = F::File_GetContents($sSourceFile);
             $sStr1 = "{hook run='content_begin'}";
             $sStr2 = "{hook run='content_end'}";
             if (stripos($sSource, '<!DOCTYPE') !== false) {
                 $iPos1 = stripos($sSource, $sStr1);
                 $iPos2 = stripos($sSource, $sStr2);
                 $sHeaderSrc = $this->_clearUnclosedBlocks(substr($sSource, 0, $iPos1 + strlen($sStr1)));
                 $sFooterSrc = $this->_clearUnclosedBlocks(substr($sSource, $iPos2));
                 F::File_PutContents($sOldTemplatesDir . 'header.tpl', $sHeaderSrc);
                 F::File_PutContents($sOldTemplatesDir . 'footer.tpl', $sFooterSrc);
             }
         }
     }
     if ($sFile = F::File_Exists($sTplName, $sOldTemplatesDir)) {
         return $sFile;
     }
     return false;
 }
コード例 #13
0
ファイル: Log.entity.class.php プロジェクト: ZeoNish/altocms
 /**
  * Writes message to log file
  *
  * @param string $sMsg - message to log
  *
  * @return bool|int
  */
 protected function _write($sMsg)
 {
     $xResult = false;
     // if no filename then nothing to do
     if (!($sFileName = $this->GetFileName())) {
         //throw new Exception("Empty file name for log!");
         return false;
     }
     // if filename equal '-' then wtites message to browser
     if ($sFileName == '-') {
         echo $sMsg . "<br/>\n";
     } else {
         // writes to file
         $sFile = $this->GetFileDir() . $sFileName;
         // file for locking
         $sCheckFileName = $sFile . '.lock';
         if (is_file($sCheckFileName) && !is_writeable($sCheckFileName)) {
             F::SysWarning('Cannot write to file ' . $sCheckFileName);
         } else {
             $fp = @fopen($sCheckFileName, 'c');
             if (!$fp) {
                 // It is not clear what to do here
                 if ($xResult = F::File_PutContents($sFile, $sMsg . "\n", FILE_APPEND | LOCK_EX)) {
                     // Do rotation if need
                     if ($this->GetUseRotate() && $this->GetSizeForRotate()) {
                         $this->_rotate();
                     }
                 }
             } else {
                 // Tries to lock
                 $iTotal = 0;
                 // Check the count of attempts at competitive lock requests
                 for ($iCnt = 0; $iCnt < self::MAX_LOCK_CNT; $iCnt++) {
                     if (flock($fp, LOCK_EX)) {
                         if ($xResult = F::File_PutContents($sFile, $sMsg . "\n", FILE_APPEND | LOCK_EX)) {
                             // Do rotation if need
                             if ($this->GetUseRotate() && $this->GetSizeForRotate()) {
                                 $this->_rotate();
                             }
                         }
                         flock($fp, LOCK_UN);
                         break;
                     } else {
                         $iTotal += self::MAX_LOCK_PERIOD;
                         if ($iTotal >= self::MAX_LOCK_TIME) {
                             break;
                         }
                         usleep(self::MAX_LOCK_PERIOD);
                     }
                 }
                 fclose($fp);
             }
         }
     }
     return $xResult;
 }
コード例 #14
0
ファイル: Config.class.php プロジェクト: anp135/altocms
 /**
  * Сохраняет в файловом кеше кастомную конфигурацию
  *
  * @param array $aConfig
  * @param bool  $bReset
  */
 protected static function _putFileCfg($aConfig, $bReset = false)
 {
     if (is_array($aConfig) && ($sFile = self::_checkFileCfg())) {
         if (!$bReset) {
             // Объединяем текущую конфигурацию с сохраняемой
             $aOldConfig = self::_getFileCfg();
             if ($aOldConfig) {
                 $aData = new DataArray($aOldConfig);
                 foreach ($aConfig as $sKey => $xVal) {
                     $aData[$sKey] = $xVal;
                 }
                 $aConfig = $aData->getArrayCopy();
             }
         }
         $aConfig['_timestamp_'] = time();
         $aConfig['_alto_hash_'] = self::_getHash();
         F::File_PutContents($sFile, F::Serialize($aConfig), LOCK_EX);
     }
 }