| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- <?php
- /*
- * This file is part of MODX Revolution.
- *
- * Copyright (c) MODX, LLC. All Rights Reserved.
- *
- * For complete copyright and license information, see the COPYRIGHT and LICENSE
- * files found in the top-level directory of this distribution.
- */
- /**
- * Represents a content element that serves as a resource template.
- *
- * @property int $id The ID of the Template
- * @property string $templatename The name of the Template
- * @property string $description A user-provided description of the Template
- * @property int $editor_type Deprecated
- * @property int $category The Category this Template resides in
- * @property string $icon Deprecated
- * @property int $template_type Deprecated
- * @property string $content The content of the Template
- * @property boolean $locked Whether or not this Template can only be edited by Administrators
- * @property array $properties An array of default properties for the Template
- * @package modx
- */
- class modTemplate extends modElement {
- /**
- * Get a sortable, limitable list and total record count of Template Variables.
- *
- * This list includes an access field indicating their relationship to a modTemplate.
- *
- * @static
- * @param modTemplate &$template A modTemplate instance.
- * @param array $sort An array of criteria for sorting the list.
- * @param int $limit An optional limit to apply to the list.
- * @param array $conditions
- * @param int $offset An optional offset to apply to the list.
- * @return array An array with the list collection and total records in the collection.
- */
- public static function listTemplateVars(modTemplate &$template, array $sort = array('name' => 'ASC'), $limit = 0, $offset = 0,array $conditions = array()) {
- return array('collection' => array(), 'total' => 0);
- }
- /**
- * @param xPDO $xpdo A reference to the xPDO|modX instance
- */
- function __construct(xPDO & $xpdo) {
- parent :: __construct($xpdo);
- $this->setCacheable(false);
- }
- /**
- * Overrides modElement::save to add custom error logging and fire
- * modX-specific events.
- *
- * {@inheritdoc}
- */
- public function save($cacheFlag = null) {
- $isNew = $this->isNew();
- if ($this->xpdo instanceof modX) {
- $this->xpdo->invokeEvent('OnTemplateBeforeSave',array(
- 'mode' => $isNew ? modSystemEvent::MODE_NEW : modSystemEvent::MODE_UPD,
- 'template' => &$this,
- 'cacheFlag' => $cacheFlag,
- ));
- }
- $saved = parent::save($cacheFlag);
- if ($saved && $this->xpdo instanceof modX) {
- $this->xpdo->invokeEvent('OnTemplateSave',array(
- 'mode' => $isNew ? modSystemEvent::MODE_NEW : modSystemEvent::MODE_UPD,
- 'template' => &$this,
- 'cacheFlag' => $cacheFlag,
- ));
- } else if (!$saved && !empty($this->xpdo->lexicon)) {
- $msg = $isNew ? $this->xpdo->lexicon('template_err_create') : $this->xpdo->lexicon('template_err_save');
- $this->xpdo->log(xPDO::LOG_LEVEL_ERROR,$msg.$this->toArray());
- }
- return $saved;
- }
- /**
- * Overrides modElement::remove to add custom error logging.
- *
- * {@inheritdoc}
- */
- public function remove(array $ancestors= array ()) {
- if ($this->xpdo instanceof modX) {
- $this->xpdo->invokeEvent('OnTemplateBeforeRemove',array(
- 'template' => &$this,
- 'ancestors' => $ancestors,
- ));
- }
- $removed = parent :: remove($ancestors);
- if ($removed && $this->xpdo instanceof modX) {
- $this->xpdo->invokeEvent('OnTemplateRemove',array(
- 'template' => &$this,
- 'ancestors' => $ancestors,
- ));
- } else if (!$removed && !empty($this->xpdo->lexicon)) {
- $this->xpdo->log(xPDO::LOG_LEVEL_ERROR,$this->xpdo->lexicon('template_err_remove').$this->toArray());
- }
- return $removed;
- }
- /**
- * Process the template content and return the output.
- *
- * {@inheritdoc}
- */
- public function process($properties= null, $content= null) {
- parent :: process($properties, $content);
- if (!$this->_processed) {
- $this->_output= $this->_content;
- if (is_string($this->_output) && !empty($this->_output)) {
- /* turn the processed properties into placeholders */
- $this->xpdo->toPlaceholders($this->_properties, '', '.', true);
- /* collect element tags in the content and process them */
- $maxIterations= intval($this->xpdo->getOption('parser_max_iterations',null,10));
- $this->xpdo->parser->processElementTags($this->_tag, $this->_output, false, false, '[[', ']]', array(), $maxIterations);
- }
- $this->filterOutput();
- $this->_processed= true;
- }
- $this->xpdo->parser->setProcessingElement(false);
- return $this->_output;
- }
- /**
- * Gets a collection of objects related by aggregate or composite relations.
- *
- * {@inheritdoc}
- *
- * Includes special handling for related objects with alias {@link
- * modTemplateVar}, respecting framework security unless specific criteria
- * are provided.
- */
- public function & getMany($alias, $criteria= null, $cacheFlag= true) {
- $collection= array ();
- if (($alias === 'TemplateVars' || $alias === 'modTemplateVar') && ($criteria === null || strtolower($criteria) === 'all')) {
- $c = $this->xpdo->newQuery('modTemplateVar');
- $c->query['distinct'] = 'DISTINCT';
- $c->select($this->xpdo->getSelectColumns('modTemplateVar'));
- $c->select($this->xpdo->getSelectColumns('modTemplateVarTemplate', 'tvtpl', '', array('rank')));
- $c->select(array('value' => $this->xpdo->getSelectColumns('modTemplateVar', 'modTemplateVar', '', array('default_text'))));
- $c->innerJoin('modTemplateVarTemplate','tvtpl',array(
- 'tvtpl.tmplvarid = modTemplateVar.id',
- 'tvtpl.templateid' => $this->get('id'),
- ));
- $c->sortby('tvtpl.rank,modTemplateVar.rank');
- $collection = $this->xpdo->getCollection('modTemplateVar', $c, $cacheFlag);
- } else {
- $collection= parent :: getMany($alias, $criteria, $cacheFlag);
- }
- return $collection;
- }
- /**
- * Grabs an array of Template Variables associated with this Template,
- * bypassing the many-to-many relationship.
- *
- * @access public
- * @return array An array of TVs.
- */
- public function getTemplateVars() {
- $c = $this->xpdo->newQuery('modTemplateVar');
- $c->innerJoin('modTemplateVarTemplate','TemplateVarTemplates');
- $c->where(array(
- 'TemplateVarTemplates.templateid' => $this->get('id'),
- ));
- $c->sortby('TemplateVarTemplates.rank','ASC');
- return $this->xpdo->getCollection('modTemplateVar',$c);
- }
- /**
- * Get a list of Template Variables and if they are currently associated to this template.
- *
- * This is a sortable, scrollable list.
- *
- * @param array $sort An array of criteria for sorting the list.
- * @param integer $limit An optional limit to apply to the list.
- * @param integer $offset An optional offset to apply to the list.
- * @param array $conditions
- * @return array An array containing the collection and total.
- */
- public function getTemplateVarList(array $sort = array('name' => 'ASC'), $limit = 0, $offset = 0,array $conditions = array()) {
- return $this->xpdo->call('modTemplate', 'listTemplateVars', array(&$this, $sort, $limit, $offset,$conditions));
- }
- /**
- * Check to see if this Template is assigned the specified Template Var
- *
- * @param mixed $tvPk Either the ID, name or object of the Template Var
- * @return boolean True if the TV is assigned to this Template
- */
- public function hasTemplateVar($tvPk) {
- if (!is_int($tvPk) && !is_object($tvPk)) {
- $tv = $this->xpdo->getObject('modTemplateVar',array('name' => $tvPk));
- if (empty($tv) || !is_object($tv) || !($tv instanceof modTemplateVar)) {
- $this->xpdo->log(modX::LOG_LEVEL_ERROR,'modTemplate::hasTemplateVar - No TV: '.$tvPk);
- return false;
- }
- } else {
- $tv =& $tvPk;
- }
- $templateVarTemplate = $this->xpdo->getObject('modTemplateVarTemplate',array(
- 'tmplvarid' => is_object($tv) ? $tv->get('id') : $tv,
- 'templateid' => $this->get('id'),
- ));
- return !empty($templateVarTemplate) && is_object($templateVarTemplate);
- }
- }
|