/core/model/modx/processors/workspace/lexicon/getlist.php
https://github.com/esche/revolution · PHP · 108 lines · 73 code · 13 blank · 22 comment · 10 complexity · 2a1031b48765b0a9b88bcedb22021503 MD5 · raw file
- <?php
- /**
- * Gets a list of lexicon entries
- *
- * @param string $namespace (optional) If set, will filter by namespace.
- * Defaults to core.
- * @param integer $topic (optional) If set, will filter by this topic
- * @param string $language (optional) If set, will filter by language. Defaults
- * to en.
- * @param integer $start (optional) The record to start at. Defaults to 0.
- * @param integer $limit (optional) The number of records to limit to. Defaults
- * to 10.
- *
- * @package modx
- * @subpackage processors.workspace.lexicon
- */
- if (!$modx->hasPermission('lexicons')) return $modx->error->failure($modx->lexicon('permission_denied'));
- $modx->lexicon->load('lexicon');
- /* setup default properties */
- $isLimit = !empty($scriptProperties['limit']);
- $start = $modx->getOption('start',$scriptProperties,0);
- $limit = $modx->getOption('limit',$scriptProperties,10);
- $sort = $modx->getOption('sort',$scriptProperties,'name');
- $dir = $modx->getOption('dir',$scriptProperties,'ASC');
- $language = !empty($scriptProperties['language']) ? $scriptProperties['language'] : 'en';
- $namespace = !empty($scriptProperties['namespace']) ? $scriptProperties['namespace'] : 'core';
- $topic = !empty($scriptProperties['topic']) ? $scriptProperties['topic'] : 'default';
- $where = array(
- 'namespace' => $namespace,
- 'topic' => $topic,
- 'language' => $language,
- );
- /* setup query for db based lexicons */
- $c = $modx->newQuery('modLexiconEntry');
- $c->where($where);
- $c->sortby('name','ASC');
- $results = $modx->getCollection('modLexiconEntry',$c);
- $dbEntries = array();
- foreach ($results as $r) {
- $dbEntries[$r->get('name')] = $r->toArray();
- }
- /* first get file-based lexicon */
- $entries = $modx->lexicon->getFileTopic($language,$namespace,$topic);
- /* if searching */
- if (!empty($scriptProperties['search'])) {
- function parseArray($needle,array $haystack = array()) {
- if (!is_array($haystack)) return false;
- $results = array();
- foreach($haystack as $key=>$value) {
- if (strpos($key, $needle)!==false || strpos($value,$needle) !== false) {
- $results[$key] = $value;
- }
- }
- return $results;
- }
- $entries = parseArray($scriptProperties['search'],$entries);
- $where[] = array(
- 'name:LIKE' => '%'.$scriptProperties['search'].'%',
- 'OR:value:LIKE' => '%'.$scriptProperties['search'].'%',
- );
- }
- $count = count($entries);
- /* add in unique entries */
- $es = array_diff_assoc($dbEntries,$entries);
- foreach ($es as $n => $entryArray) {
- $entries[$n] = $entryArray['value'];
- }
- ksort($entries);
- $entries = array_slice($entries,$start,$limit,true);
- /* loop through */
- $list = array();
- foreach ($entries as $name => $value) {
- $entryArray = array(
- 'name' => $name,
- 'value' => $value,
- 'namespace' => $namespace,
- 'topic' => $topic,
- 'language' => $language,
- 'createdon' => null,
- 'editedon' => null,
- 'overridden' => 0,
- );
- /* if override in db, load */
- if (array_key_exists($name,$dbEntries)) {
- $entryArray = array_merge($entryArray,$dbEntries[$name]);
- $entryArray['editedon'] = $entryArray['editedon'] == '0000-00-00 00:00:00'
- || $entryArray['editedon'] == '-001-11-30 00:00:00'
- || empty($entryArray['editedon'])
- ? ''
- : strftime('%b %d, %Y %I:%M %p',strtotime($entryArray['editedon']));
- $entryArray['overridden'] = 1;
- }
- $list[] = $entryArray;
- }
- return $this->outputArray($list,$count);