Пример #1
0
/**
 * Возвращает массив файлов изображений из папки
 */
function getImageFiles($dir = '.', $exclude)
{
    $files = array();
    $a = scandir($dir);
    foreach ($a as $k => $v) {
        if ($v == '.' || $v == '..') {
            continue;
        }
        if (is_dir(HFile::addSlashPath($dir) . $v)) {
            $files = array_merge($files, getImageFiles(HFile::addSlashPath($dir) . $v, $exclude));
        } else {
            if (isImage(HFile::getExtension($v))) {
                $files[] = str_replace($exclude, '', HFile::addSlashPath($dir) . $v);
            }
        }
    }
    return $files;
}
Пример #2
0
 public function afterSave($event)
 {
     /**
      * @var $model DaActiveRecord
      */
     $model = $event->sender;
     if ($model->isNewRecord) {
         if ($model->asa('FileUploadableBehavior') instanceof FileUploadableBehavior) {
             $tempValue = $model->getTmpId();
             $tmpDir = str_replace(Yii::getPathOfAlias('webroot'), '', Yii::getPathOfAlias('temp')) . '/' . $tempValue . '/';
             $instDir = '/' . ltrim($model->getDir(), '/');
             //TODO подумать, если ссылка будет на другой домен
             $savedModel = $this->getObject()->getModel()->findByPk($model->getIdInstance());
             $fname = $this->getObjectParameter()->field_name;
             $savedModel->{$fname} = str_replace($tmpDir, HFile::addSlashPath($instDir), $savedModel->{$fname});
             $savedModel->save(false, array($fname));
         }
     }
 }
Пример #3
0
 public function getWidgetOverrideData($path)
 {
     $result = array();
     $path = HFile::addSlashPath($path);
     $widgets = $this->getWidgets($path);
     if (!($dir = @opendir($path))) {
         return array();
     }
     $assets = array();
     $views = array();
     while (($file = readdir($dir)) !== false) {
         if ($file == "." || $file == "..") {
             continue;
         }
         if (is_dir($path . $file)) {
             if ($file == 'assets') {
                 $assets = $this->getFiles($path . $file);
             } elseif ($file == 'views') {
                 $views = $this->getFiles($path . $file);
             }
         }
     }
     //Если виджет один в папке то собираем его ресурсы по упрощенной схеме
     if (count($widgets) == 1) {
         $result[] = $widgets[0];
         $item = new OverrideDataItem();
         $item->name = 'assets';
         $item->path = $path . 'assets';
         $item->items = $assets;
         $widgets[0]->addItem($item);
         $item = new OverrideDataItem();
         $item->name = 'views';
         $item->path = $path . 'views';
         $item->items = $views;
         $widgets[0]->addItem($item);
     } else {
         //иначе пытаемся определить принадлежность ресурсов
         foreach ($widgets as $wKey => $widgetItem) {
             $wContent = file_get_contents($widgetItem->path);
             foreach ($views as $vKey => $viewItem) {
                 $viewName = basename($viewItem->path);
                 $viewName = mb_substr($viewName, 0, mb_strlen($viewName) - 4);
                 //проверяем принадлежность представления виджету
                 if (preg_match('~render\\((\'|")/?' . $viewName . '(\'|")~su', $wContent)) {
                     $widgetViewsItem = null;
                     if (!($widgetViewsItem = $widgetItem->getByName('views'))) {
                         $widgetViewsItem = new OverrideDataItem();
                         $widgetViewsItem->name = 'views';
                         $widgetViewsItem->path = $path . 'views';
                         $widgetItem->addItem($widgetViewsItem);
                     }
                     $widgetViewsItem->addItem($viewItem);
                 }
             }
         }
         foreach ($assets as $aKey => $assetsItem) {
             $assetsName = basename($assetsItem->path);
             $pattern = '';
             if (HFile::getExtension($assetsName, true) == 'css') {
                 $pattern = '~registerCssFile\\(("|\')' . $assetsName . '("|\')~su';
             } elseif (HFile::getExtension($assetsName, true) == 'js') {
                 $pattern = '~registerJsFile\\(("|\')' . $assetsName . '("|\')~su';
             } else {
                 $pattern = '~' . basename($assetsName) . '~su';
             }
             foreach ($widgets as $wKey => $widgetItem) {
                 $wContent = file_get_contents($widgetItem->path);
                 //Возможно ресурс публикуется из виджета
                 $addAssets = (bool) preg_match($pattern, $wContent);
                 if ($widgetItem->getByName('views') != null && !$addAssets) {
                     //проверяем принадлежность ресурса представлению
                     foreach ($widgetItem->getByName('views') as $vKey => $viewItem) {
                         $vContent = file_get_contents($viewItem->path);
                         if (preg_match($pattern, $vContent)) {
                             $addAssets = true;
                             break;
                         }
                     }
                 }
                 if ($addAssets) {
                     $widgetAssetsItem = null;
                     if (!($widgetAssetsItem = $widgetItem->getByName('assets'))) {
                         $widgetAssetsItem = new OverrideDataItem();
                         $widgetAssetsItem->name = 'assets';
                         $widgetAssetsItem->path = $path . 'assets';
                         $widgetItem->addItem($widgetAssetsItem);
                     }
                     $widgetAssetsItem->addItem(clone $assetsItem);
                     //clone так, как ассет может принадлежать разным виджетам
                 }
             }
         }
         //end foreach
         $result = $widgets;
     }
     //end else
     //Собираем виджеты по вложенным папкам
     rewinddir($dir);
     while (($file = readdir($dir)) !== false) {
         if ($file == "." || $file == "..") {
             continue;
         }
         if (is_dir($path . $file)) {
             if ($file != 'assets' && $file != 'views') {
                 $result = array_merge($result, $this->getWidgetOverrideData($path . $file));
             }
         }
     }
     closedir($dir);
     return $result;
 }
Пример #4
0
 public function getDir($makeDir = true, $absolute = false)
 {
     $ob = $this->getObjectInstance();
     $folder = $ob->getFolderName();
     if ($folder != null) {
         $folder = HFile::addSlashPath($folder);
     } else {
         if ($makeDir) {
             $err = "Незадана папка для хранения файлов объекта " . $ob->getName() . " (id_object=" . $ob->getIdObject() . ")";
             throw new ErrorException($err);
         }
     }
     $instanceFolder = $this->getIdInstance();
     /*
          $idDomain = $this->getIdDomainInstance();
          if ($idDomain != null) {
           $domain = EngineDomain::loadByIdDomain($idDomain);
           if ($domain != null) {
             $domainPath = $domain->getPath2File();
             if ($domainPath != null) {
               $folder = $domainPath."/".$folder;
             }
           } else { // bad
             echo "Ошибка определения домена";
             exit;
           }
         }*/
     $pathToFile = $folder . $instanceFolder . '/';
     $webroot = Yii::getPathOfAlias('webroot') . '/';
     if ($makeDir) {
         if (!file_exists($webroot . $pathToFile)) {
             umask(0);
             mkdir($webroot . $pathToFile, 0777, true);
         }
     }
     if ($absolute) {
         $pathToFile = $webroot . $pathToFile;
     }
     return $pathToFile;
 }