public function prepareQueryBeforeCount(xPDOQuery $c) { $c->leftJoin('modUser', 'CreatedBy'); if ($this->getTagsTV()) { $c->leftJoin('modTemplateVarResource', 'Tags', array('Tags.tmplvarid' => $this->tvTags->get('id'), 'Tags.contentid = Article.id')); } $parent = $this->getProperty('parent', null); if (!empty($parent)) { $c->where(array('parent' => $parent)); } $query = $this->getProperty('query', null); if (!empty($query)) { $queryWhere = array('pagetitle:LIKE' => '%' . $query . '%', 'OR:description:LIKE' => '%' . $query . '%', 'OR:introtext:LIKE' => '%' . $query . '%'); if ($this->tvTags) { $queryWhere['OR:Tags.value:LIKE'] = '%' . $query . '%'; } $c->where($queryWhere); } $filter = $this->getProperty('filter', ''); switch ($filter) { case 'published': $c->where(array('published' => 1, 'deleted' => 0)); break; case 'unpublished': $c->where(array('published' => 0, 'deleted' => 0)); break; case 'deleted': $c->where(array('deleted' => 1)); break; default: $c->where(array('deleted' => 0)); break; } $c->where(array('class_key' => 'Article')); return $c; }
public function getElementSources() { $c = $this->modx->newQuery('modContext'); $c->leftJoin('sources.modMediaSourceElement', 'SourceElements', array('SourceElements.object' => $this->tv->get('id'), 'SourceElements.object_class' => $this->tv->_class, 'SourceElements.context_key = modContext.key')); $c->leftJoin('sources.modMediaSource', 'Source', 'SourceElements.source = Source.id'); $c->select($this->modx->getSelectColumns('modContext', 'modContext')); $c->select($this->modx->getSelectColumns('sources.modMediaSourceElement', 'SourceElements')); $c->select($this->modx->getSelectColumns('sources.modMediaSource', 'Source', '', array('name'))); $c->where(array('key:!=' => 'mgr')); $c->sortby($this->modx->escape('rank'), 'ASC'); $c->sortby($this->modx->escape('key'), 'DESC'); $contexts = $this->modx->getCollection('modContext', $c); $list = array(); /** @var modContext $context */ foreach ($contexts as $context) { $source = $context->get('source'); $list[] = array($context->get('key'), !empty($source) ? $source : $this->modx->getOption('default_media_source', null, 1), $context->get('name')); } return $list; }
/** * @param modTemplateVar $tv * * @return array */ protected function _getAutoTags(modTemplateVar $tv) { $params = $tv->get('input_properties'); if (empty($params['parent_resources'])) { $params['parent_resources'] = ''; } /** @var xPDOQuery $c */ $c = $this->modx->newQuery('modTemplateVarResource'); $c->innerJoin('modTemplateVar', 'TemplateVar'); $c->innerJoin('modResource', 'Resource'); $c->where(array('tmplvarid' => $tv->get('id'))); if (!empty($params['parent_resources'])) { $ids = array(); $parents = explode(',', $params['parent_resources']); $currCtx = 'web'; $this->modx->switchContext('web'); foreach ($parents as $id) { /** @var modResource $r */ $r = $this->modx->getObject('modResource', $id); if ($r && $currCtx != $r->get('context_key')) { $this->modx->switchContext($r->get('context_key')); $currCtx = $r->get('context_key'); } if ($r) { $pids = $this->modx->getChildIds($id, 10, array('context' => $r->get('context_key'))); $ids = array_merge($ids, $pids); } $ids[] = $id; } $this->modx->switchContext('mgr'); $ids = array_unique($ids); $c->where(array('Resource.id:IN' => $ids)); } $tvs = $this->modx->getIterator('modTemplateVarResource', $c); $list = array(); /** @var modTemplateVarResource $tv */ foreach ($tvs as $tv) { $list = array_merge($list, explode(',', $tv->get('value'))); } return array_unique($list); }
/** * @param string $content * @dataProvider providerSetContent * @depends testGetContent */ public function testSetContent($content) { $this->tv->setContent($content); $this->assertEquals($content, $this->tv->get('default_text')); }
/** * Prepare radio boxes. * * @param modTemplateVar $tv * @return modTemplateVar */ public function prepareRadio($tv) { $value = $tv->get('value'); $default = $tv->get('default_text'); // handles radio buttons $options = $tv->parseInputOptions($tv->processBindings($tv->get('elements'), $tv->get('name'))); $items = array(); $defaultIndex = ''; $i = 0; foreach ($options as $option) { $opt = explode("==", $option); if (!isset($opt[1])) { $opt[1] = $opt[0]; } /* set checked status */ $checked = strcmp($opt[1], $value) == 0 ? ' checked="checked"' : ''; /* set default value */ if (strcmp($opt[1], $default) == 0) { $defaultIndex = 'tv' . $tv->get('id') . '-' . $i; $tv->set('default_text', $defaultIndex); } if (is_string($opt[1])) { $opt[1] = str_replace('"', '"', $opt[1]); } $items[] = array('text' => htmlspecialchars($opt[0], ENT_COMPAT, 'UTF-8'), 'name' => 'tv' . $tv->get('id'), 'value' => $opt[1], 'checked' => $checked, 'idx' => $i); $i++; } $list = array(); foreach ($items as $item) { $list[] = $this->hm->getTpl('fields/radio.option', $item); } $tv->set('options', implode("\n", $list)); return $tv; }