本文整理汇总了PHP中PageManager::fetch方法的典型用法代码示例。如果您正苦于以下问题:PHP PageManager::fetch方法的具体用法?PHP PageManager::fetch怎么用?PHP PageManager::fetch使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PageManager
的用法示例。
在下文中一共展示了PageManager::fetch方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: view
public function view()
{
$params = array('{$today}', '{$current-time}', '{$this-year}', '{$this-month}', '{$this-day}', '{$timezone}', '{$website-name}', '{$page-title}', '{$root}', '{$workspace}', '{$root-page}', '{$current-page}', '{$current-page-id}', '{$current-path}', '{$current-query-string}', '{$current-url}', '{$cookie-username}', '{$cookie-pass}', '{$page-types}', '{$upload-limit}');
// Get page parameters
$pages = PageManager::fetch(true, array('params'));
foreach ($pages as $key => $pageparams) {
if (empty($pageparams['params'])) {
continue;
}
$pageparams = explode('/', $pageparams['params']);
foreach ($pageparams as $pageparam) {
$param = '{$' . $pageparam . '}';
if (!in_array($param, $params)) {
$params[] = $param;
}
}
}
// Get Data Sources output parameters
$datasources = DatasourceManager::listAll();
foreach ($datasources as $datasource) {
$current = DatasourceManager::create($datasource['handle'], array(), false);
$prefix = '{$ds-' . Lang::createHandle($datasource['name']) . '.';
$suffix = '}';
// Get parameters
if (is_array($current->dsParamPARAMOUTPUT)) {
foreach ($current->dsParamPARAMOUTPUT as $id => $param) {
$params[] = $prefix . $param . $suffix;
}
}
}
sort($params);
$this->_Result = json_encode($params);
}
示例2: __buildPageXML
public function __buildPageXML($page, $page_types, $qf)
{
$lang_code = FLang::getLangCode();
$oPage = new XMLElement('page');
$oPage->setAttribute('handle', $page['handle']);
$oPage->setAttribute('id', $page['id']);
// keep current first
$oPage->appendChild(new XMLElement('item', General::sanitize($page['plh_t-' . $lang_code]), array('lang' => $lang_code, 'handle' => $page['plh_h-' . $lang_code])));
// add others
foreach (FLang::getLangs() as $lc) {
if ($lang_code != $lc) {
$oPage->appendChild(new XMLElement('item', General::sanitize($page['plh_t-' . $lc]), array('lang' => $lc, 'handle' => $page['plh_h-' . $lc])));
}
}
if (in_array($page['id'], array_keys($page_types))) {
$xTypes = new XMLElement('types');
foreach ($page_types[$page['id']] as $type) {
$xTypes->appendChild(new XMLElement('type', $type));
}
$oPage->appendChild($xTypes);
}
if ($page['children'] != '0') {
if ($children = PageManager::fetch(false, array($qf . 'id, handle, title'), array(sprintf('`parent` = %d', $page['id'])))) {
foreach ($children as $c) {
$oPage->appendChild($this->__buildPageXML($c, $page_types, $qf));
}
}
}
return $oPage;
}
示例3: grab
public function grab(&$param_pool = null)
{
$result = new XMLElement('plh-page');
$langs = FLang::getLangs();
$fields = array('id', 'handle', 'parent');
foreach ($langs as $lc) {
$fields[] = "`plh_t-{$lc}`";
$fields[] = "`plh_h-{$lc}`";
}
$pages = array();
foreach (PageManager::fetch(null, $fields) as $page) {
$pages[$page['id']] = $page;
}
$this->appendPage($pages, $this->_env['param']['current-page-id'], $langs, $result);
return $result;
}
示例4: __getPageParams
private function __getPageParams()
{
$params = array();
$pages = PageManager::fetch(true, array('params'));
foreach ($pages as $key => $pageparams) {
if (empty($pageparams['params'])) {
continue;
}
$pageparams = explode('/', $pageparams['params']);
foreach ($pageparams as $pageparam) {
$param = sprintf($this->template, $pageparam);
if (!in_array($param, $params)) {
$params[] = $param;
}
}
}
return $params;
}
示例5: __buildPageXML
public function __buildPageXML($page, $page_types)
{
$oPage = new XMLElement('page');
$oPage->setAttribute('handle', $page['handle']);
$oPage->setAttribute('id', $page['id']);
$oPage->appendChild(new XMLElement('name', General::sanitize($page['title'])));
if (in_array($page['id'], array_keys($page_types))) {
$xTypes = new XMLElement('types');
foreach ($page_types[$page['id']] as $type) {
$xTypes->appendChild(new XMLElement('type', $type));
}
$oPage->appendChild($xTypes);
}
if ($page['children'] != '0') {
if ($children = PageManager::fetch(false, array('id, handle, title'), array(sprintf('`parent` = %d', $page['id'])))) {
foreach ($children as $c) {
$oPage->appendChild($this->__buildPageXML($c, $page_types));
}
}
}
return $oPage;
}
示例6: buildTree
private function buildTree($parent = null, $indent = 0)
{
if ($parent == null) {
$results = PageManager::fetch(true, array(), array('`parent` IS NULL'), '`sortorder` ASC');
} else {
$results = PageManager::fetch(true, array(), array('`parent` = ' . $parent), '`sortorder` ASC');
}
$tree = array();
foreach ($results as $result) {
// Check if the page should be shown:
if (!in_array('ck_hide', $result['type'])) {
$prefix = '';
$info = array('handle' => $result['handle'], 'path' => $result['path']);
if ($result['path'] == null) {
$info['url'] = '/' . $result['handle'] . '/';
$info['title'] = $result['title'];
} else {
$info['url'] = '/' . $result['path'] . '/' . $result['handle'] . '/';
for ($i = 0; $i < $indent; $i++) {
$prefix .= ' ';
// Please note: this might look like an empty space (nbsp) but it's an em space (emsp).
// This was necessary because kept showing as plain text in the dropdown.
}
$info['title'] = $prefix . ' › ' . General::sanitize($result['title']);
}
$tree[] = $info;
// Check if there are templates for this page:
$tree = array_merge($tree, $this->checkTemplates($result['id'], $prefix . ' '));
// also an emsp
// Get the children:
$children = $this->buildTree($result['id'], $indent + 1);
// Join arrays:
$tree = array_merge($tree, $children);
}
}
return $tree;
}
示例7: appendPresets
/**
* Append presets
* @param $context
*/
public function appendPresets($context)
{
Symphony::Engine()->Page->addScriptToHead(URL . '/extensions/ckeditor/assets/preferences.js', 4676);
$wrapper = $context['wrapper'];
$fieldset = new XMLElement('fieldset', '', array('class' => 'settings'));
$fieldset->appendChild(new XMLElement('legend', __('CKEditor File Browser')));
$sectionManager = new SectionManager($this);
$sections = $sectionManager->fetch();
// Check which sections are allowed:
$data = Symphony::Configuration()->get('sections', 'ckeditor');
$checkedSections = $data != false ? explode(',', $data) : array();
// If there are no sections found:
if ($sections) {
$options = array();
foreach ($sections as $section) {
$options[] = array($section->get('id'), in_array($section->get('id'), $checkedSections), $section->get('name'));
}
$label = Widget::Label(__('Permitted sections for the file browser:'));
$label->appendChild(Widget::Select('ckeditor_sections[]', $options, array('multiple' => 'multiple')));
$fieldset->appendChild($label);
}
// Link templates for CKEditor:
$sections = SectionManager::fetch();
$dbpages = PageManager::fetch();
$pages = array();
// Filter out the ck_hide:
foreach ($dbpages as $page) {
$types = PageManager::fetchPageTypes($page['id']);
if (!in_array('ck_hide', $types)) {
$pages[] = $page;
}
}
// Adjust page title:
foreach ($pages as &$_page) {
$p = $_page;
$title = $_page['title'];
while (!is_null($p['parent'])) {
$p = PageManager::fetch(false, array(), array('id' => $p['parent']));
$title = $p['title'] . ' : ' . $title;
}
$_page['title'] = $title;
}
// Sort the array:
$titles = array();
foreach ($pages as $key => $row) {
$titles[$key] = strtolower($row['title']);
}
array_multisort($titles, SORT_ASC, $pages);
$this->sections = array();
foreach ($sections as $s) {
$a = array('id' => $s->get('id'), 'name' => $s->get('name'), 'fields' => array());
$fields = FieldManager::fetch(null, $s->get('id'));
foreach ($fields as $field) {
// For now, only allow fields of the type 'input' to be used as a handle:
if ($field->get('type') == 'input') {
$a['fields'][] = array('id' => $field->get('id'), 'label' => $field->get('label'), 'element_name' => $field->get('element_name'));
}
}
$this->sections[] = $a;
}
$fieldset->appendChild(new XMLElement('p', __('Link templates:'), array('class' => 'label')));
$ol = new XMLElement('ol');
$ol->setAttribute('class', 'ckeditor-duplicator');
$templates = Symphony::Database()->fetch('SELECT * FROM `tbl_ckeditor_link_templates`;');
if (!is_array($pages)) {
$pages = array($pages);
}
foreach ($pages as $page) {
foreach ($templates as $template) {
if ($template['page_id'] != $page['id']) {
continue;
}
$duplicator = $this->__buildDuplicatorItem($page, $template);
$ol->appendChild($duplicator);
}
$duplicator = $this->__buildDuplicatorItem($page, NULL);
$ol->appendChild($duplicator);
}
$fieldset->appendChild($ol);
// Plugin presets:
$fieldset->appendChild(new XMLElement('p', __('Plugin presets:'), array('class' => 'label')));
$ol = new XMLElement('ol');
$ol->setAttribute('class', 'ckeditor-duplicator');
// Create template:
$template = new XMLElement('li', null, array('class' => 'template'));
$template->appendChild(new XMLElement('header', '<h3>' . __('New Preset') . '</h3>'));
$template->appendChild(Widget::Label(__('Name'), Widget::Input('ckeditor_presets[-1][name]')));
$template->appendChild(Widget::Label(__('Toolbar'), Widget::Textarea('ckeditor_presets[-1][toolbar]', 5, 50)));
$template->appendChild(Widget::Label(__('Plugins'), Widget::Textarea('ckeditor_presets[-1][plugins]', 5, 50)));
$template->appendChild(Widget::Label(__('%s Enable resizing', array(Widget::Input('ckeditor_presets[-1][resize]', 'yes', 'checkbox')->generate()))));
$template->appendChild(Widget::Label(__('%s Show outline blocks', array(Widget::Input('ckeditor_presets[-1][outline]', 'yes', 'checkbox')->generate()))));
$ol->appendChild($template);
// Append all the fields:
$presets = Symphony::Database()->fetch('SELECT * FROM `tbl_ckeditor_presets');
$index = 0;
foreach ($presets as $preset) {
//.........这里部分代码省略.........
示例8: __formAction
//.........这里部分代码省略.........
Symphony::ExtensionManager()->notifyMembers('AppendEventFilterDocumentation', '/blueprints/events/' . $rootelement . '/', array('selected' => $filters, 'documentation' => &$doc_parts));
$documentation = join(PHP_EOL, array_map(create_function('$x', 'return rtrim($x->generate(true, 4));'), $doc_parts));
$documentation = str_replace('\'', '\\\'', $documentation);
$eventShell = str_replace('<!-- CLASS EXTENDS -->', $extends, $eventShell);
$eventShell = str_replace('<!-- DOCUMENTATION -->', General::tabsToSpaces($documentation, 4), $eventShell);
}
$eventShell = str_replace('<!-- ROOT ELEMENT -->', $rootelement, $eventShell);
$eventShell = str_replace('<!-- CLASS NAME -->', $classname, $eventShell);
$eventShell = str_replace('<!-- SOURCE -->', $source, $eventShell);
// Remove left over placeholders
$eventShell = preg_replace(array('/<!--[\\w ]++-->/'), '', $eventShell);
if ($this->_context[0] == 'new') {
/**
* Prior to creating an Event, the file path where it will be written to
* is provided and well as the contents of that file.
*
* @delegate EventsPreCreate
* @since Symphony 2.2
* @param string $context
* '/blueprints/events/'
* @param string $file
* The path to the Event file
* @param string $contents
* The contents for this Event as a string passed by reference
* @param array $filters
* An array of the filters attached to this event
*/
Symphony::ExtensionManager()->notifyMembers('EventPreCreate', '/blueprints/events/', array('file' => $file, 'contents' => &$eventShell, 'filters' => $filters));
} else {
/**
* Prior to editing an Event, the file path where it will be written to
* is provided and well as the contents of that file.
*
* @delegate EventPreEdit
* @since Symphony 2.2
* @param string $context
* '/blueprints/events/'
* @param string $file
* The path to the Event file
* @param string $contents
* The contents for this Event as a string passed by reference
* @param array $filters
* An array of the filters attached to this event
*/
Symphony::ExtensionManager()->notifyMembers('EventPreEdit', '/blueprints/events/', array('file' => $file, 'contents' => &$eventShell, 'filters' => $filters));
}
// Write the file
if (!is_writable(dirname($file)) || !($write = General::writeFile($file, $eventShell, Symphony::Configuration()->get('write_mode', 'file')))) {
$this->pageAlert(__('Failed to write Event to disk.') . ' ' . __('Please check permissions on %s.', array('<code>/workspace/events</code>')), Alert::ERROR);
// Write successful
} else {
if (function_exists('opcache_invalidate')) {
opcache_invalidate($file, true);
}
// Attach this event to pages
$connections = $fields['connections'];
ResourceManager::setPages(RESOURCE_TYPE_EVENT, is_null($existing_handle) ? $classname : $existing_handle, $connections);
if ($queueForDeletion) {
General::deleteFile($queueForDeletion);
$pages = PageManager::fetch(false, array('events', 'id'), array("\n `events` REGEXP '[[:<:]]" . $existing_handle . "[[:>:]]'\n "));
if (is_array($pages) && !empty($pages)) {
foreach ($pages as $page) {
$page['events'] = preg_replace('/\\b' . $existing_handle . '\\b/i', $classname, $page['events']);
PageManager::edit($page['id'], $page);
}
}
}
if ($this->_context[0] == 'new') {
/**
* After creating the Event, the path to the Event file is provided
*
* @delegate EventPostCreate
* @since Symphony 2.2
* @param string $context
* '/blueprints/events/'
* @param string $file
* The path to the Event file
*/
Symphony::ExtensionManager()->notifyMembers('EventPostCreate', '/blueprints/events/', array('file' => $file));
} else {
/**
* After editing the Event, the path to the Event file is provided
*
* @delegate EventPostEdit
* @since Symphony 2.2
* @param string $context
* '/blueprints/events/'
* @param string $file
* The path to the Event file
* @param string $previous_file
* The path of the previous Event file in the case where an Event may
* have been renamed. To get the handle from this value, see
* `EventManager::__getHandleFromFilename`
*/
Symphony::ExtensionManager()->notifyMembers('EventPostEdit', '/blueprints/events/', array('file' => $file, 'previous_file' => $queueForDeletion ? $queueForDeletion : null));
}
redirect(SYMPHONY_URL . '/blueprints/events/edit/' . $classname . '/' . ($this->_context[0] == 'new' ? 'created' : 'saved') . '/');
}
}
}
示例9: detach
/**
* Given a resource type, a handle and a page, this function detaches
* the given handle (which represents either a datasource or event) to that page.
*
* @param integer $type
* The resource type, either `RESOURCE_TYPE_EVENT` or `RESOURCE_TYPE_DS`
* @param string $r_handle
* The handle of the resource.
* @param integer $page_id
* The ID of the page.
*/
public static function detach($type, $r_handle, $page_id)
{
$col = self::getColumnFromType($type);
$pages = PageManager::fetch(false, array($col), array(sprintf('`id` = %d', $page_id)));
if (is_array($pages) && count($pages) == 1) {
$result = $pages[0][$col];
$values = explode(',', $result);
$idx = array_search($r_handle, $values, false);
if ($idx !== false) {
array_splice($values, $idx, 1);
$result = implode(',', $values);
return PageManager::edit($page_id, array($col => MySQL::cleanValue($result)));
}
}
return false;
}
示例10: appendPresets
/**
* Append presets
* @param $context
*/
public function appendPresets($context)
{
Symphony::Engine()->Page->addScriptToHead(URL . '/extensions/ckeditor/assets/preferences.js', 4676);
$wrapper = $context['wrapper'];
$fieldset = new XMLElement('fieldset', '', array('class' => 'settings'));
$fieldset->appendChild(new XMLElement('legend', __('CKEditor File Browser')));
$sectionManager = new SectionManager($this);
$sections = $sectionManager->fetch();
// Check which sections are allowed:
$data = Symphony::Configuration()->get('sections', 'ckeditor');
$checkedSections = $data != false ? explode(',', $data) : array();
// If there are no sections found:
if ($sections) {
$options = array();
foreach ($sections as $section) {
$options[] = array($section->get('id'), in_array($section->get('id'), $checkedSections), $section->get('name'));
}
$label = Widget::Label(__('Permitted sections for the file browser:'));
$label->appendChild(Widget::Select('ckeditor_sections[]', $options, array('multiple' => 'multiple')));
$fieldset->appendChild($label);
}
// Link templates for CKEditor:
$sections = SectionManager::fetch();
$dbpages = PageManager::fetch();
$pages = array();
// Filter out the ck_hide:
foreach ($dbpages as $page) {
$types = PageManager::fetchPageTypes($page['id']);
if (!in_array('ck_hide', $types)) {
$pages[] = $page;
}
}
// Adjust page title:
foreach ($pages as &$_page) {
$p = $_page;
$title = $_page['title'];
while (!is_null($p['parent'])) {
$p = PageManager::fetch(false, array(), array('id' => $p['parent']));
$title = $p['title'] . ' : ' . $title;
}
$_page['title'] = $title;
}
// Sort the array:
$titles = array();
foreach ($pages as $key => $row) {
$titles[$key] = strtolower($row['title']);
}
array_multisort($titles, SORT_ASC, $pages);
$this->sections = array();
foreach ($sections as $s) {
$a = array('id' => $s->get('id'), 'name' => $s->get('name'), 'fields' => array());
$fields = FieldManager::fetch(null, $s->get('id'));
foreach ($fields as $field) {
// For now, only allow fields of the type 'input' to be used as a handle:
if ($field->get('type') == 'input') {
$a['fields'][] = array('id' => $field->get('id'), 'label' => $field->get('label'), 'element_name' => $field->get('element_name'));
}
}
$this->sections[] = $a;
}
$fieldset->appendChild(new XMLElement('p', __('Link templates:'), array('class' => 'label')));
$ol = new XMLElement('ol');
$ol->setAttribute('class', 'ckeditor-duplicator');
$templates = Symphony::Database()->fetch('SELECT * FROM `tbl_ckeditor_link_templates`;');
if (!is_array($pages)) {
$pages = array($pages);
}
foreach ($pages as $page) {
foreach ($templates as $template) {
if ($template['page_id'] != $page['id']) {
continue;
}
$duplicator = $this->__buildDuplicatorItem($page, $template);
$ol->appendChild($duplicator);
}
$duplicator = $this->__buildDuplicatorItem($page, NULL);
$ol->appendChild($duplicator);
}
$fieldset->appendChild($ol);
$wrapper->appendChild($fieldset);
}
示例11: __formAction
//.........这里部分代码省略.........
* @param string $context
* '/blueprints/datasources/'
* @param string $file
* The path to the Datasource file
* @param string $contents
* The contents for this Datasource as a string passed by reference
* @param array $params
* An array of all the `$dsParam*` values
* @param array $elements
* An array of all the elements included in this datasource
* @param array $filters
* An associative array of all the filters for this datasource with the key
* being the `field_id` and the value the filter.
* @param array $dependencies
* An array of dependencies that this datasource has
*/
Symphony::ExtensionManager()->notifyMembers('DatasourcePreCreate', '/blueprints/datasources/', array('file' => $file, 'contents' => &$dsShell, 'params' => $params, 'elements' => $elements, 'filters' => $filters, 'dependencies' => $dependencies));
} else {
/**
* Prior to editing a Datasource, the file path where it will be written to
* is provided and well as the contents of that file.
*
* @delegate DatasourcePreEdit
* @since Symphony 2.2
* @param string $context
* '/blueprints/datasources/'
* @param string $file
* The path to the Datasource file
* @param string $contents
* The contents for this Datasource as a string passed by reference
* @param array $dependencies
* An array of dependencies that this datasource has
* @param array $params
* An array of all the `$dsParam*` values
* @param array $elements
* An array of all the elements included in this datasource
* @param array $filters
* An associative array of all the filters for this datasource with the key
* being the `field_id` and the value the filter.
*/
Symphony::ExtensionManager()->notifyMembers('DatasourcePreEdit', '/blueprints/datasources/', array('file' => $file, 'contents' => &$dsShell, 'dependencies' => $dependencies, 'params' => $params, 'elements' => $elements, 'filters' => $filters));
}
// Remove left over placeholders
$dsShell = preg_replace(array('/<!--[\\w ]++-->/', '/(\\t+[\\r\\n]){2,}/', '/(\\r\\n){2,}/'), '$1', $dsShell);
// Write the file
if (!is_writable(dirname($file)) || !General::writeFile($file, $dsShell, Symphony::Configuration()->get('write_mode', 'file'), 'w', true)) {
$this->pageAlert(__('Failed to write Data source to disk.') . ' ' . __('Please check permissions on %s.', array('<code>/workspace/data-sources</code>')), Alert::ERROR);
// Write successful
} else {
if (function_exists('opcache_invalidate')) {
opcache_invalidate($file, true);
}
// Attach this datasources to pages
$connections = $fields['connections'];
ResourceManager::setPages(ResourceManager::RESOURCE_TYPE_DS, is_null($existing_handle) ? $classname : $existing_handle, $connections);
// If the datasource has been updated and the name changed, then adjust all the existing pages that have the old datasource name
if ($queueForDeletion) {
General::deleteFile($queueForDeletion);
// Update pages that use this DS
$pages = PageManager::fetch(false, array('data_sources', 'id'), array("\n `data_sources` REGEXP '[[:<:]]" . $existing_handle . "[[:>:]]'\n "));
if (is_array($pages) && !empty($pages)) {
foreach ($pages as $page) {
$page['data_sources'] = preg_replace('/\\b' . $existing_handle . '\\b/i', $classname, $page['data_sources']);
PageManager::edit($page['id'], $page);
}
}
}
if ($this->_context[0] == 'new') {
/**
* After creating the Datasource, the path to the Datasource file is provided
*
* @delegate DatasourcePostCreate
* @since Symphony 2.2
* @param string $context
* '/blueprints/datasources/'
* @param string $file
* The path to the Datasource file
*/
Symphony::ExtensionManager()->notifyMembers('DatasourcePostCreate', '/blueprints/datasources/', array('file' => $file));
} else {
/**
* After editing the Datasource, the path to the Datasource file is provided
*
* @delegate DatasourcePostEdit
* @since Symphony 2.2
* @param string $context
* '/blueprints/datasources/'
* @param string $file
* The path to the Datasource file
* @param string $previous_file
* The path of the previous Datasource file in the case where a Datasource may
* have been renamed. To get the handle from this value, see
* `DatasourceManager::__getHandleFromFilename`
*/
Symphony::ExtensionManager()->notifyMembers('DatasourcePostEdit', '/blueprints/datasources/', array('file' => $file, 'previous_file' => $queueForDeletion ? $queueForDeletion : null));
}
redirect(SYMPHONY_URL . '/blueprints/datasources/edit/' . $classname . '/' . ($this->_context[0] == 'new' ? 'created' : 'saved') . '/');
}
}
}
示例12: __actionEdit
public function __actionEdit()
{
if ($this->_context[0] != 'new' && !($page_id = (int) $this->_context[1])) {
redirect(SYMPHONY_URL . '/blueprints/pages/');
}
$parent_link_suffix = NULL;
if (isset($_REQUEST['parent']) && is_numeric($_REQUEST['parent'])) {
$parent_link_suffix = '?parent=' . $_REQUEST['parent'];
}
if (@array_key_exists('delete', $_POST['action'])) {
$this->__actionDelete($page_id, SYMPHONY_URL . '/blueprints/pages/' . $parent_link_suffix);
}
if (@array_key_exists('save', $_POST['action'])) {
$fields = $_POST['fields'];
$this->_errors = array();
$autogenerated_handle = false;
if (!isset($fields['title']) || trim($fields['title']) == '') {
$this->_errors['title'] = __('This is a required field');
}
if (trim($fields['type']) != '' && preg_match('/(index|404|403)/i', $fields['type'])) {
$types = preg_split('/\\s*,\\s*/', strtolower($fields['type']), -1, PREG_SPLIT_NO_EMPTY);
if (in_array('index', $types) && PageManager::hasPageTypeBeenUsed($page_id, 'index')) {
$this->_errors['type'] = __('An index type page already exists.');
} elseif (in_array('404', $types) && PageManager::hasPageTypeBeenUsed($page_id, '404')) {
$this->_errors['type'] = __('A 404 type page already exists.');
} elseif (in_array('403', $types) && PageManager::hasPageTypeBeenUsed($page_id, '403')) {
$this->_errors['type'] = __('A 403 type page already exists.');
}
}
if (trim($fields['handle']) == '') {
$fields['handle'] = $fields['title'];
$autogenerated_handle = true;
}
$fields['handle'] = PageManager::createHandle($fields['handle']);
if (empty($fields['handle']) && !isset($this->_errors['title'])) {
$this->_errors['handle'] = __('Please ensure handle contains at least one Latin-based character.');
}
/**
* Just after the Symphony validation has run, allows Developers
* to run custom validation logic on a Page
*
* @delegate PagePostValidate
* @since Symphony 2.2
* @param string $context
* '/blueprints/pages/'
* @param array $fields
* The `$_POST['fields']` array. This should be read-only and not changed
* through this delegate.
* @param array $errors
* An associative array of errors, with the key matching a key in the
* `$fields` array, and the value being the string of the error. `$errors`
* is passed by reference.
*/
Symphony::ExtensionManager()->notifyMembers('PagePostValidate', '/blueprints/pages/', array('fields' => $fields, 'errors' => &$errors));
if (empty($this->_errors)) {
$autogenerated_handle = false;
if ($fields['params']) {
$fields['params'] = trim(preg_replace('@\\/{2,}@', '/', $fields['params']), '/');
}
// Clean up type list
$types = preg_split('/\\s*,\\s*/', $fields['type'], -1, PREG_SPLIT_NO_EMPTY);
$types = @array_map('trim', $types);
unset($fields['type']);
$fields['parent'] = $fields['parent'] != __('None') ? $fields['parent'] : null;
$fields['data_sources'] = is_array($fields['data_sources']) ? implode(',', $fields['data_sources']) : NULL;
$fields['events'] = is_array($fields['events']) ? implode(',', $fields['events']) : NULL;
$fields['path'] = null;
if ($fields['parent']) {
$fields['path'] = PageManager::resolvePagePath((int) $fields['parent']);
}
// Check for duplicates:
$current = PageManager::fetchPageByID($page_id);
if (empty($current)) {
$fields['sortorder'] = PageManager::fetchNextSortOrder();
}
$where = array();
if (!empty($current)) {
$where[] = "p.id != {$page_id}";
}
$where[] = "p.handle = '" . $fields['handle'] . "'";
$where[] = is_null($fields['path']) ? "p.path IS NULL" : "p.path = '" . $fields['path'] . "'";
$duplicate = PageManager::fetch(false, array('*'), $where);
// If duplicate
if (!empty($duplicate)) {
if ($autogenerated_handle) {
$this->_errors['title'] = __('A page with that title already exists');
} else {
$this->_errors['handle'] = __('A page with that handle already exists');
}
} else {
// New page?
if (empty($current)) {
$file_created = PageManager::createPageFiles($fields['path'], $fields['handle']);
} else {
$file_created = PageManager::createPageFiles($fields['path'], $fields['handle'], $current['path'], $current['handle']);
}
// If the file wasn't created, it's usually permissions related
if (!$file_created) {
$redirect = null;
return $this->pageAlert(__('Page Template could not be written to disk.') . ' ' . __('Please check permissions on %s.', array('<code>/workspace/pages</code>')), Alert::ERROR);
//.........这里部分代码省略.........
示例13: __formAction
//.........这里部分代码省略.........
}
$documentation_parts[] = self::processDocumentationCode($code);
$documentation_parts[] = new XMLElement('p', __('When an error occurs during saving, due to either missing or invalid fields, the following XML will be returned') . ($multiple ? ' (<strong> ' . __('Notice that it is possible to get mixtures of success and failure messages when using the ‘Allow Multiple’ option') . '</strong>)' : NULL) . ':');
if ($multiple) {
$code = new XMLElement($rootelement);
$entry = new XMLElement('entry', NULL, array('index' => '0', 'result' => 'error'));
$entry->appendChild(new XMLElement('message', __('Entry encountered errors when saving.')));
$entry->appendChild(new XMLElement('field-name', NULL, array('type' => 'invalid | missing')));
$code->appendChild($entry);
$entry = new XMLElement('entry', NULL, array('index' => '1', 'result' => 'success', 'type' => 'create | edit'));
$entry->appendChild(new XMLElement('message', __('Entry [created | edited] successfully.')));
$code->appendChild($entry);
} else {
$code = new XMLElement($rootelement, NULL, array('result' => 'error'));
$code->appendChild(new XMLElement('message', __('Entry encountered errors when saving.')));
$code->appendChild(new XMLElement('field-name', NULL, array('type' => 'invalid | missing')));
}
$code->setValue('...', false);
$documentation_parts[] = self::processDocumentationCode($code);
if (is_array($filters) && !empty($filters)) {
$documentation_parts[] = new XMLElement('p', __('The following is an example of what is returned if any options return an error:'));
$code = new XMLElement($rootelement, NULL, array('result' => 'error'));
$code->appendChild(new XMLElement('message', __('Entry encountered errors when saving.')));
$code->appendChild(new XMLElement('filter', NULL, array('name' => 'admin-only', 'status' => 'failed')));
$code->appendChild(new XMLElement('filter', __('Recipient not found'), array('name' => 'send-email', 'status' => 'failed')));
$code->setValue('...', false);
$documentation_parts[] = self::processDocumentationCode($code);
}
$documentation_parts[] = new XMLElement('h3', __('Example Front-end Form Markup'));
$documentation_parts[] = new XMLElement('p', __('This is an example of the form markup you can use on your frontend:'));
$container = new XMLElement('form', NULL, array('method' => 'post', 'action' => '', 'enctype' => 'multipart/form-data'));
$container->appendChild(Widget::Input('MAX_FILE_SIZE', (string) min(ini_size_to_bytes(ini_get('upload_max_filesize')), Symphony::Configuration()->get('max_upload_size', 'admin')), 'hidden'));
if (is_numeric($fields['source'])) {
$section = SectionManager::fetch($fields['source']);
if ($section instanceof Section) {
$section_fields = $section->fetchFields();
if (is_array($section_fields) && !empty($section_fields)) {
foreach ($section_fields as $f) {
if ($f->getExampleFormMarkup() instanceof XMLElement) {
$container->appendChild($f->getExampleFormMarkup());
}
}
}
}
}
$container->appendChild(Widget::Input('action[' . $rootelement . ']', __('Submit'), 'submit'));
$code = $container->generate(true);
$documentation_parts[] = self::processDocumentationCode($multiple ? str_replace('fields[', 'fields[0][', $code) : $code);
$documentation_parts[] = new XMLElement('p', __('To edit an existing entry, include the entry ID value of the entry in the form. This is best as a hidden field like so:'));
$documentation_parts[] = self::processDocumentationCode(Widget::Input('id' . ($multiple ? '[0]' : NULL), '23', 'hidden'));
$documentation_parts[] = new XMLElement('p', __('To redirect to a different location upon a successful save, include the redirect location in the form. This is best as a hidden field like so, where the value is the URL to redirect to:'));
$documentation_parts[] = self::processDocumentationCode(Widget::Input('redirect', URL . '/success/', 'hidden'));
if (in_array('send-email', $filters)) {
$documentation_parts[] = new XMLElement('h3', __('Send Notification Email'));
$documentation_parts[] = new XMLElement('p', __('Upon the event successfully saving the entry, this option takes input from the form and send an email to the desired recipient.') . ' <strong>' . __('It currently does not work with ‘Allow Multiple’') . '</strong>. ' . __('The following are the recognised fields:'));
$documentation_parts[] = self::processDocumentationCode('send-email[sender-email] // ' . __('Optional') . PHP_EOL . 'send-email[sender-name] // ' . __('Optional') . PHP_EOL . 'send-email[reply-to-email] // ' . __('Optional') . PHP_EOL . 'send-email[reply-to-name] // ' . __('Optional') . PHP_EOL . 'send-email[subject]' . PHP_EOL . 'send-email[body]' . PHP_EOL . 'send-email[recipient] // ' . __('list of comma-separated author usernames.'));
$documentation_parts[] = new XMLElement('p', __('All of these fields can be set dynamically using the exact field name of another field in the form as shown below in the example form:'));
$documentation_parts[] = self::processDocumentationCode('<form action="" method="post">
<fieldset>
<label>' . __('Name') . ' <input type="text" name="fields[author]" value="" /></label>
<label>' . __('Email') . ' <input type="text" name="fields[email]" value="" /></label>
<label>' . __('Message') . ' <textarea name="fields[message]" rows="5" cols="21"></textarea></label>
<input name="send-email[sender-email]" value="fields[email]" type="hidden" />
<input name="send-email[sender-name]" value="fields[author]" type="hidden" />
<input name="send-email[reply-to-email]" value="fields[email]" type="hidden" />
<input name="send-email[reply-to-name]" value="fields[author]" type="hidden" />
示例14: fetchPageByTypes
/**
* Returns Pages that match the given `$types`. If no `$types` is provided
* the function returns the result of `PageManager::fetch`.
*
* @param array $types
* An array of some of the available Page Types.
* @param boolean $negate (optional)
* If true, the logic gets inversed to return Pages that don't match the given `$types`.
* @return array|null
* An associative array of Page information with the key being the column
* name from `tbl_pages` and the value being the data. If multiple Pages
* are found, an array of Pages will be returned. If no Pages are found
* null is returned.
*/
public static function fetchPageByTypes(array $types = array(), $andOperation = false, $negate = false)
{
if (empty($types)) {
return PageManager::fetch();
}
$types = array_map(array('MySQL', 'cleanValue'), $types);
// Build SQL parts depending on query parameters. There are four possibilities.
// 1. Without negation and with OR filter
if (!$andOperation && !$negate) {
$join = "LEFT JOIN `tbl_pages_types` AS `pt` ON (p.id = pt.page_id)";
$where = sprintf("\n\t\t\t\t\t\tAND `pt`.type IN ('%s')\n\t\t\t\t\t", implode("', '", $types));
} elseif ($andOperation && !$negate) {
$join = "";
$where = "";
foreach ($types as $index => $type) {
$join .= " LEFT JOIN `tbl_pages_types` AS `pt_{$index}` ON (p.id = pt_{$index}.page_id)";
$where .= " AND pt_{$index}.type = '" . $type . "'";
}
} elseif (!$andOperation && $negate) {
$join = sprintf("\n\t\t\t\t\t\tLEFT JOIN `tbl_pages_types` AS `pt` ON (p.id = pt.page_id AND pt.type IN ('%s'))\n\t\t\t\t\t", implode("', '", $types));
$where = "AND `pt`.type IS NULL";
} elseif ($andOperation && $negate) {
$join = "";
$where = "AND (";
foreach ($types as $index => $type) {
$join .= sprintf("\n\t\t\t\t\t\t\tLEFT JOIN `tbl_pages_types` AS `pt_%s` ON (p.id = pt_%s.page_id AND pt_%s.type IN ('%s'))\n\t\t\t\t\t\t", $index, $index, $index, $type);
$where .= ($index === 0 ? "" : " OR ") . "pt_{$index}.type IS NULL";
}
$where .= ")";
}
$pages = Symphony::Database()->fetch(sprintf("\n\t\t\t\t\tSELECT\n\t\t\t\t\t\t`p`.*\n\t\t\t\t\tFROM\n\t\t\t\t\t\t`tbl_pages` AS `p`\n\t\t\t\t\t%s\n\t\t\t\t\tWHERE 1\n\t\t\t\t\t\t%s\n\t\t\t\t", $join, $where));
return count($pages) == 1 ? array_pop($pages) : $pages;
}
示例15: getChildPagesCount
/**
* This function will return the number of child pages for a given
* `$page_id`. This is a recursive function and will return the absolute
* count.
*
* @param integer $page_id
* The ID of the Page.
* @return integer
* The number of child pages for the given `$page_id`
*/
public static function getChildPagesCount($page_id = null)
{
if (is_null($page_id)) {
return null;
}
$children = PageManager::fetch(false, array('id'), array(sprintf('parent = %d', $page_id)));
$count = count($children);
if ($count > 0) {
foreach ($children as $c) {
$count += self::getChildPagesCount($c['id']);
}
}
return $count;
}