/** * @see Action::execute() */ public function execute() { parent::execute(); // check permission WCF::getUser()->checkPermission('admin.template.canDeleteTemplate'); if (!count($this->templateID)) { throw new IllegalLinkException(); } // delete templates (files) $templateIDs = ''; require_once WCF_DIR . 'lib/data/template/TemplateEditor.class.php'; $sql = "SELECT\t\ttemplate.*, pack.templatePackFolderName, package.packageDir\n\t\t\tFROM\t\twcf" . WCF_N . "_template template\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_template_pack pack\n\t\t\tON\t\t(pack.templatePackID = template.templatePackID)\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_package package\n\t\t\tON\t\t(package.packageID = template.packageID)\n\t\t\tWHERE\t\ttemplate.templateID IN (" . implode(',', $this->templateID) . ")\n\t\t\t\t\tAND template.templatePackID > 0"; $result = WCF::getDB()->sendQuery($sql); while ($row = WCF::getDB()->fetchArray($result)) { if (!empty($templateIDs)) { $templateIDs .= ','; } $templateIDs .= $row['templateID']; $template = new TemplateEditor(null, $row); if ($template->templateID) { $template->deleteFile(); } } // delete database entries if (!empty($templateIDs)) { TemplateEditor::deleteAll($templateIDs); } // reset cache WCF::getCache()->clear(WCF_DIR . 'cache', 'cache.templates-*.php'); $this->executed(); // forward to list page HeaderUtil::redirect('index.php?page=TemplateList&deletedTemplates=' . count($this->templateID) . '&templatePackID=' . $this->templatePackID . '&packageID=' . PACKAGE_ID . SID_ARG_2ND_NOT_ENCODED); exit; }
/** * @see Form::save() */ public function save() { AbstractForm::save(); // create template pack if (count($this->templatePacks) == 0) { $this->templatePackID = TemplatePackEditor::create($this->templatePackName, $this->templatePackFolderName); // get available template packs $this->templatePacks = TemplatePackEditor::getTemplatePacks(); } // save template if ($this->copy) { $this->template = TemplateEditor::create($this->tplName, $this->source, $this->templatePackID, $this->template->packageID); } else { $this->template->update($this->tplName, $this->source, $this->templatePackID); } $this->templateID = $this->template->templateID; // reset cache WCF::getCache()->clear(WCF_DIR . 'cache', 'cache.templates-*.php'); $this->saved(); $this->copy = 0; WCF::getTPL()->assign('success', true); }
/** * @see Form::validate() */ public function validate() { parent::validate(); // templates if (!$this->allTemplates) { if (empty($this->templateID)) { throw new UserInputException('templateID'); } } // query if (empty($this->query)) { throw new UserInputException('query'); } // test regex if ($this->useRegex) { try { preg_match('/' . $this->query . '/', ''); } catch (SystemException $e) { throw new UserInputException('query', 'invalidRegex'); } } if ($this->invertSearch) { $this->replace = 0; } // get results $results = TemplateEditor::search($this->query, $this->replace ? $this->replaceBy : null, $this->allTemplates ? null : $this->templateID, $this->invertTemplates, $this->useRegex, $this->caseSensitive, $this->invertSearch); if (count($results)) { WCF::getTPL()->assign('templates', $results); WCF::getTPL()->display('templateSearchResult'); exit; } else { WCF::getTPL()->assign('noMatches', true); } }
/** * @see Form::save() */ public function save() { parent::save(); // save template $this->template = TemplateEditor::create($this->tplName, $this->source, $this->templatePackID); // reset cache WCF::getCache()->clear(WCF_DIR . 'cache', 'cache.templates-*.php'); // reset values $this->tplName = $this->source = ''; $this->templatePackID = 0; $this->saved(); WCF::getTPL()->assign('success', true); }
/** * Searches in templates. * * @param string $search search query * @param string $replace * @param array $templateIDs * @param boolean $invertTemplates * @param boolean $useRegex * @param boolean $caseSensitive * @param boolean $invertSearch * @return array results */ public static function search($search, $replace = null, $templateIDs = null, $invertTemplates = 0, $useRegex = 0, $caseSensitive = 0, $invertSearch = 0) { // get available template ids $results = array(); $availableTemplateIDs = array(); $sql = "SELECT\t\ttemplate.templateName, template.templateID, template.templatePackID, template.packageID\n\t\t\tFROM\t\twcf" . WCF_N . "_template template,\n\t\t\t\t\twcf" . WCF_N . "_package_dependency package_dependency\n\t\t\tWHERE \t\ttemplate.packageID = package_dependency.dependency\n\t\t\t\t\tAND package_dependency.packageID = " . PACKAGE_ID . "\n\t\t\t\t\t" . ($replace !== null ? "AND template.templatePackID <> 0" : "") . "\n\t\t\tORDER BY\tpackage_dependency.priority"; $result = WCF::getDB()->sendQuery($sql); while ($row = WCF::getDB()->fetchArray($result)) { if (!isset($availableTemplateIDs[$row['templateName'] . '-' . $row['templatePackID']]) || PACKAGE_ID == $row['packageID']) { $availableTemplateIDs[$row['templateName'] . '-' . $row['templatePackID']] = $row['templateID']; } } // get templates if (!count($availableTemplateIDs)) { return $results; } $sql = "SELECT\t\ttemplate.*, pack.templatePackFolderName, package.packageDir\n\t\t\tFROM\t\twcf" . WCF_N . "_template template\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_template_pack pack\n\t\t\tON\t\t(pack.templatePackID = template.templatePackID)\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_package package\n\t\t\tON\t\t(package.packageID = template.packageID)\n\t\t\tWHERE\t\ttemplate.templateID IN (" . implode(',', $availableTemplateIDs) . ")\n\t\t\t\t\t" . ($templateIDs != null ? "AND template.templateID " . ($invertTemplates ? "NOT " : "") . "IN (" . implode(',', $templateIDs) . ")" : "") . "\n\t\t\tORDER BY\ttemplateName"; $result = WCF::getDB()->sendQuery($sql); unset($availableTemplateIDs); while ($row = WCF::getDB()->fetchArray($result)) { $template = new TemplateEditor(null, $row); if ($replace === null) { // search if ($useRegex) { $matches = intval(preg_match('/' . $search . '/s' . (!$caseSensitive ? 'i' : ''), $template->getSource())) !== 0; } else { if ($caseSensitive) { $matches = StringUtil::indexOf($template->getSource(), $search) !== false; } else { $matches = StringUtil::indexOfIgnoreCase($template->getSource(), $search) !== false; } } if ($matches && !$invertSearch || !$matches && $invertSearch) { $results[] = $row; } } else { // search and replace $matches = 0; if ($useRegex) { $newSource = preg_replace('/' . $search . '/s' . (!$caseSensitive ? 'i' : ''), $replace, $template->getSource(), -1, $matches); } else { if ($caseSensitive) { $newSource = StringUtil::replace($search, $replace, $template->getSource(), $matches); } else { $newSource = StringUtil::replaceIgnoreCase($search, $replace, $template->getSource(), $matches); } } if ($matches > 0) { $template->setSource($newSource); $row['matches'] = $matches; $results[] = $row; } } } return $results; }