/** * Adds a field with the default rich text editor * @param string $name The field name * @param string $value The field value */ protected function AddRichTextField($name, $value = '') { $renderer = new CKEditorRenderer(PathUtil::BackendRTEPath(), PathUtil::BackendRTEUrl(), PathUtil::UploadPath(), PathUtil::UploadUrl(), self::Guard()); $field = new Custom($renderer); $field->SetName($name); $field->SetValue($value); $this->AddField($field); }
/** * Creates a new generator * @param Site $site The site * @param IContainerReferenceResolver $resolver A resolver to get last page mod date even over container contents */ function __construct(Site $site, IContainerReferenceResolver $resolver) { $this->resolver = $resolver; $this->site = $site; $this->cacher = new FileCacher(PathUtil::SitemapCacheFile($site), $site->GetSitemapCacheLifetime()); $this->sitemap = new XmlGenerator(); $this->pageTree = new PageTreeProvider($site); $this->guard = new MemberGuard(); }
protected function BeforeRemove(Layout $layout) { $layoutFile = PathUtil::LayoutTemplate($layout); if (File::Exists($layoutFile)) { File::Delete($layoutFile); } $logger = new Logger(self::Guard()->GetUser()); $logger->ReportLayoutAction($layout, Action::Delete()); }
protected function BeforeInit() { $templateID = Request::GetData('template'); $idParts = explode('/', $templateID); $this->InitModule($idParts); $this->folder = PathUtil::ModuleCustomTemplatesFolder($this->module); $this->template = isset($idParts[1]) ? $idParts[1] : ''; return !$this->module; }
protected function BeforeInit() { $this->layout = Layout::Schema()->ByID(Request::GetData('layout')); if (!$this->layout) { //TODO: Message Response::Redirect($this->BackLink()); } $this->file = PathUtil::LayoutTemplate($this->layout); if (!File::Exists($this->file)) { //TODO: Message Response::Redirect($this->BackLink()); } $this->contents = File::GetContents($this->file); return parent::BeforeInit(); }
private function AddModulesField() { $name = 'Module'; $select = new Select($name, ''); $select->AddOption('', Trans('Core.PleaseSelect')); $this->AddField($select); $this->SetRequired($name); foreach (PathUtil::Bundles() as $bundle) { $modules = PathUtil::FrontendModules($bundle); foreach ($modules as $moduleName) { $type = ClassFinder::CalcModuleType($bundle, $moduleName); $module = ClassFinder::CreateFrontendModule($type); if ($module instanceof FrontendModule && self::Guard()->Allow(BackendAction::UseIt(), $module->ContentForm())) { $this->AddModuleTypeOption($select, $type); } //$select->AddOption($type, Trans($type)); } } }
private function GetConfirmMessage() { $replacements = array(); $replacements['Text1'] = $this->register->GetMailText1(); $replacements['Text2'] = $this->register->GetMailText2(); $replacements['Title'] = Html($this->register->GetMailSubject()); $replacements['Styles'] = Html($this->register->GetMailStyles()); $confirmUrl = $this->register->GetConfirmUrl(); if ($confirmUrl) { $replacements['ConfirmUrl'] = Html(Confirmer::CalcUrl($this->member, $confirmUrl)); } $template = Path::Combine(PathUtil::BundleFolder($this->MyBundle()), 'MailTemplates/Confirm.phtml'); $parser = new TemplateParser($replacements); return $parser->Parse($template); }
private function RemoveTemplate() { $id = Request::PostData('delete'); if (!$id) { return false; } $idParts = \explode('/', $id); $module = $this->RemovalTemplateModule($idParts); $templateName = trim($idParts[1]); if (!$module || !$templateName) { return false; } $logger = new Logger(self::Guard()->GetUser()); $logger->ReportTemplateAction($module->MyType(), $templateName, Action::Delete()); $folder = PathUtil::ModuleCustomTemplatesFolder($module); $template = Path::Combine($folder, Path::AddExtension($templateName, 'phtml')); if (File::Exists($template)) { File::Delete($template); } $this->DeleteUsages($module, $templateName); return true; }
/** * Clears installed bundles */ private function ClearInstalledBundles() { //Clear bundles without code folder $bundles = PathUtil::Bundles(); $sql = new Sql\Builder($this->connection); $inList = $sql->InListFromValues($bundles); $tbl = InstalledBundle::Schema()->Table(); $where = $sql->NotIn($tbl->Field('Bundle'), $inList); InstalledBundle::Schema()->Delete($where); //Clear failed bundles $failedList = $sql->InListFromValues(array_keys($this->failedBundles)); if ($failedList) { InstalledBundle::Schema()->Delete($sql->In($tbl->Field('Bundle'), $failedList)); } }
/** * Gets all backend module names for a bundle * @param string $bundle The bundle name * @return string Returns the module names */ protected function Modules($bundle) { $modules = PathUtil::BackendModules($bundle); $result = array(); foreach ($modules as $module) { $instance = ClassFinder::CreateBackendModule(ClassFinder::CalcModuleType($bundle, $module)); if ($instance instanceof BackendModule) { $result[] = $module; } } return $result; }
/** * * @return string * @throws \Exception Raises exception if engine is not supported */ private function FindEngineFolder() { $bundle = $this->manifest->BundleName(); $sqlFolder = PathUtil::InstallationSqlFolder($bundle); if (!Folder::Exists($sqlFolder) || Folder::IsEmpty($sqlFolder)) { return ''; } $engine = (string) $this->connection->Engine(); $engineFolder = Path::Combine($sqlFolder, $engine); if (!Folder::Exists($engineFolder)) { throw new \Exception("Bundle {$bundle} doesn't support your database engine '{$engine}'"); } return $engineFolder; }
/** * Adds the field for mail text 1 */ private function AddMailText2Field() { $name = 'MailText2'; $renderer = new CKEditorRenderer(PathUtil::BackendRTEPath(), PathUtil::BackendRteUrl(), PathUtil::UploadPath(), PathUtil::UploadUrl(), self::Guard()); $field = new Custom($renderer); $field->SetName($name); $field->SetValue($this->register->GetMailText2()); $this->AddField($field); }
private function TemplateContent() { $areaCodes = ''; $writer = new Writer(); $this->InitAreas(); $template = PathUtil::CodeTemplate($this->MyBundle(), 'Layout.phtml'); $templateCode = File::GetContents($template); $indent = $this->GetIndent($templateCode, '_{areas}_'); for ($idx = 0; $idx < count($this->areaNames); ++$idx) { $name = $this->areaNames[$idx]; $writer->StartPhpInline(); $writer->AddCommandInline('echo $this->RenderArea(\'' . $name . '\')'); if ($idx < count($this->areaNames) - 1) { $writer->EndPhp(); } else { $writer->EndPhpInline(); } if ($idx > 0) { $areaCodes .= $indent; } $areaCodes .= $writer->Flush(); } return str_replace('_{areas}_', $areaCodes, $templateCode); }
/** * Renders the complete page by requiring the page layout * @return string Returns the page contents */ function Render() { self::$currentPage = $this->page; self::$Title = self::$currentPage->GetTitle(); self::$Description = self::$currentPage->GetDescription(); self::$Keywords = self::$currentPage->GetKeywords(); if ($this->page->GetType() == (string) PageType::NotFound()) { header('HTTP/1.0 404 Not Found'); } else { if ($this->page->GetType() !== (string) PageType::Normal()) { throw new \Exception('Internal phine error: not normal page called'); } } ob_start(); require PathUtil::LayoutTemplate($this->layout); $result = ob_get_clean(); $replacer = new Replacer(); return $replacer->RealizeVariables($result); }
/** * Reads the translation files */ function ReadTranslations() { $lang = PhpTranslator::Singleton()->GetLanguage(); \RequireOnceIfExists(PathUtil::BundleTranslationsFile($this, $lang)); \RequireOnceIfExists(PathUtil::ModuleTranslationsFile($this, $lang)); }
/** * The simple template with "echo result" * @return string */ public function TemplateFile() { $dir = PathUtil::BundleFolder('Core'); return Path::Combine($dir, 'Templates/EchoResult.phtml'); }
/** * Loads backend translations of the bundle */ private function LoadFrontendTranslations(Site $site) { $language = $site->GetLanguage()->GetCode(); $frontendTranslations = PathUtil::FrontendBundleTranslationFile($this->BundleName(), $language); if (File::Exists($frontendTranslations)) { require_once $frontendTranslations; } }
/** * Adds the template select field * @param FrontendModule $module The module for template selection */ protected final function AddTemplateField() { $name = 'Template'; $field = new Select($name, (string) $this->Content()->GetTemplate()); $field->AddOption('', Trans("Core.ContentForm.{$name}.Default")); $folder = PathUtil::ModuleCustomTemplatesFolder($this->FrontendModule()); if (Folder::Exists($folder)) { $files = Folder::GetFiles($folder); foreach ($files as $file) { $value = Path::FilenameNoExtension($file); $field->AddOption($value, $value); } } $this->AddField($field, false, Trans("Core.ContentForm.{$name}")); }
/** * The modules for the backend navigation * @return Returns an array with bundle names as keys and backend modules as list */ static function BackendNavModules() { $result = array(); $allBundles = PathUtil::Bundles(); //force Core to appear first $coreKey = array_search('Core', $allBundles); unset($allBundles[$coreKey]); array_unshift($allBundles, 'Core'); $bundles = array_values($allBundles); foreach ($bundles as $bundle) { $modules = PathUtil::BackendModules($bundle); foreach ($modules as $module) { $type = self::CalcModuleType($bundle, $module); $instance = self::CreateBackendModule($type); if (!$instance instanceof BackendModule) { continue; } if ($instance->SideNavIndex() >= 0 && BackendModule::Guard()->Allow(BackendAction::Read(), $instance)) { self::AddBackendNavModule($result, $instance); } } } return self::SortByNavIndex($result); }
/** * Gets cache content if necessary * @return boolean */ protected function BeforeInit() { //todo: check access rights $cacheFile = PathUtil::ContentCacheFile($this); $this->fileCacher = new FileCacher($cacheFile, $this->content->GetCacheLifetime()); if ($this->fileCacher->MustUseCache()) { $this->output = $this->fileCacher->GetFromCache(); return true; } return parent::BeforeInit(); }