/** * Возвращает массив файлов изображений из папки */ 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; }
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)); } } }
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; }
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; }