id: 7
source: 1
name: pdoSitemap
category: pdoTools
properties: "a:24:{s:3:\"tpl\";a:7:{s:4:\"name\";s:3:\"tpl\";s:4:\"desc\";s:17:\"pdotools_prop_tpl\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:145:\"@INLINE \n\t[[+url]]\n\t[[+date]]\n\t[[+update]]\n\t[[+priority]]\n\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:10:\"tplWrapper\";a:7:{s:4:\"name\";s:10:\"tplWrapper\";s:4:\"desc\";s:24:\"pdotools_prop_tplWrapper\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:110:\"@INLINE \n\n[[+output]]\n\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:9:\"templates\";a:7:{s:4:\"name\";s:9:\"templates\";s:4:\"desc\";s:23:\"pdotools_prop_templates\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:7:\"context\";a:7:{s:4:\"name\";s:7:\"context\";s:4:\"desc\";s:21:\"pdotools_prop_context\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:5:\"depth\";a:7:{s:4:\"name\";s:5:\"depth\";s:4:\"desc\";s:19:\"pdotools_prop_depth\";s:4:\"type\";s:11:\"numberfield\";s:7:\"options\";a:0:{}s:5:\"value\";i:10;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:11:\"showDeleted\";a:7:{s:4:\"name\";s:11:\"showDeleted\";s:4:\"desc\";s:25:\"pdotools_prop_showDeleted\";s:4:\"type\";s:13:\"combo-boolean\";s:7:\"options\";a:0:{}s:5:\"value\";b:0;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:10:\"showHidden\";a:7:{s:4:\"name\";s:10:\"showHidden\";s:4:\"desc\";s:24:\"pdotools_prop_showHidden\";s:4:\"type\";s:13:\"combo-boolean\";s:7:\"options\";a:0:{}s:5:\"value\";b:0;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:13:\"sitemapSchema\";a:7:{s:4:\"name\";s:13:\"sitemapSchema\";s:4:\"desc\";s:27:\"pdotools_prop_sitemapSchema\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:43:\"http://www.sitemaps.org/schemas/sitemap/0.9\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:15:\"showUnpublished\";a:7:{s:4:\"name\";s:15:\"showUnpublished\";s:4:\"desc\";s:29:\"pdotools_prop_showUnpublished\";s:4:\"type\";s:13:\"combo-boolean\";s:7:\"options\";a:0:{}s:5:\"value\";b:0;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:16:\"hideUnsearchable\";a:7:{s:4:\"name\";s:16:\"hideUnsearchable\";s:4:\"desc\";s:30:\"pdotools_prop_hideUnsearchable\";s:4:\"type\";s:13:\"combo-boolean\";s:7:\"options\";a:0:{}s:5:\"value\";b:1;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:9:\"resources\";a:7:{s:4:\"name\";s:9:\"resources\";s:4:\"desc\";s:23:\"pdotools_prop_resources\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:7:\"parents\";a:7:{s:4:\"name\";s:7:\"parents\";s:4:\"desc\";s:21:\"pdotools_prop_parents\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:6:\"sortby\";a:7:{s:4:\"name\";s:6:\"sortby\";s:4:\"desc\";s:20:\"pdotools_prop_sortby\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:9:\"menuindex\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:7:\"sortdir\";a:7:{s:4:\"name\";s:7:\"sortdir\";s:4:\"desc\";s:21:\"pdotools_prop_sortdir\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:3:\"asc\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:5:\"where\";a:7:{s:4:\"name\";s:5:\"where\";s:4:\"desc\";s:19:\"pdotools_prop_where\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:10:\"includeTVs\";a:7:{s:4:\"name\";s:10:\"includeTVs\";s:4:\"desc\";s:24:\"pdotools_prop_includeTVs\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:10:\"prepareTVs\";a:7:{s:4:\"name\";s:10:\"prepareTVs\";s:4:\"desc\";s:24:\"pdotools_prop_prepareTVs\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:1:\"1\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:10:\"processTVs\";a:7:{s:4:\"name\";s:10:\"processTVs\";s:4:\"desc\";s:24:\"pdotools_prop_processTVs\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:15:\"outputSeparator\";a:7:{s:4:\"name\";s:15:\"outputSeparator\";s:4:\"desc\";s:29:\"pdotools_prop_outputSeparator\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:1:\"\n\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:8:\"forceXML\";a:7:{s:4:\"name\";s:8:\"forceXML\";s:4:\"desc\";s:22:\"pdotools_prop_forceXML\";s:4:\"type\";s:13:\"combo-boolean\";s:7:\"options\";a:0:{}s:5:\"value\";b:1;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:13:\"useWeblinkUrl\";a:7:{s:4:\"name\";s:13:\"useWeblinkUrl\";s:4:\"desc\";s:27:\"pdotools_prop_useWeblinkUrl\";s:4:\"type\";s:13:\"combo-boolean\";s:7:\"options\";a:0:{}s:5:\"value\";b:1;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:5:\"cache\";a:7:{s:4:\"name\";s:5:\"cache\";s:4:\"desc\";s:19:\"pdotools_prop_cache\";s:4:\"type\";s:13:\"combo-boolean\";s:7:\"options\";a:0:{}s:5:\"value\";b:1;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:8:\"cacheKey\";a:7:{s:4:\"name\";s:8:\"cacheKey\";s:4:\"desc\";s:22:\"pdotools_prop_cacheKey\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:9:\"cacheTime\";a:7:{s:4:\"name\";s:9:\"cacheTime\";s:4:\"desc\";s:23:\"pdotools_prop_cacheTime\";s:4:\"type\";s:11:\"numberfield\";s:7:\"options\";a:0:{}s:5:\"value\";i:600;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}}"
static_file: core/components/pdotools/elements/snippets/snippet.pdositemap.php
-----
/** @var array $scriptProperties */
/** @var pdoFetch $pdoFetch */
$fqn = $modx->getOption('pdoFetch.class', null, 'pdotools.pdofetch', true);
$path = $modx->getOption('pdofetch_class_path', null, MODX_CORE_PATH . 'components/pdotools/model/', true);
if ($pdoClass = $modx->loadClass($fqn, $path, false, true)) {
$pdoFetch = new $pdoClass($modx, $scriptProperties);
} else {
return false;
}
$pdoFetch->addTime('pdoTools loaded');
// Default variables
if (empty($tpl)) {
$tpl = "@INLINE \n\n\t[[+url]]\n\t[[+date]]\n\t[[+update]]\n\t[[+priority]]\n";
}
if (empty($tplWrapper)) {
$tplWrapper = "@INLINE \n\n[[+output]]\n";
}
if (empty($sitemapSchema)) {
$sitemapSchema = 'http://www.sitemaps.org/schemas/sitemap/0.9';
}
if (empty($outputSeparator)) {
$outputSeparator = "\n";
}
if (empty($cacheKey)) {
$scriptProperties['cacheKey'] = 'sitemap/' . substr(md5(json_encode($scriptProperties)), 0, 6);
}
// Convert parameters from GoogleSiteMap if exists
if (!empty($itemTpl)) {
$tpl = $itemTpl;
}
if (!empty($containerTpl)) {
$tplWrapper = $containerTpl;
}
if (!empty($allowedtemplates)) {
$scriptProperties['templates'] = $allowedtemplates;
}
if (!empty($maxDepth)) {
$scriptProperties['depth'] = $maxDepth;
}
if (isset($hideDeleted)) {
$scriptProperties['showDeleted'] = !$hideDeleted;
}
if (isset($published)) {
$scriptProperties['showUnpublished'] = !$published;
}
if (isset($searchable)) {
$scriptProperties['showUnsearchable'] = !$searchable;
}
if (!empty($googleSchema)) {
$sitemapSchema = $googleSchema;
}
if (!empty($excludeResources)) {
$tmp = array_map('trim', explode(',', $excludeResources));
foreach ($tmp as $v) {
if (!empty($scriptProperties['resources'])) {
$scriptProperties['resources'] .= ',-' . $v;
} else {
$scriptProperties['resources'] = '-' . $v;
}
}
}
if (!empty($excludeChildrenOf)) {
$tmp = array_map('trim', explode(',', $excludeChildrenOf));
foreach ($tmp as $v) {
if (!empty($scriptProperties['parents'])) {
$scriptProperties['parents'] .= ',-' . $v;
} else {
$scriptProperties['parents'] = '-' . $v;
}
}
}
if (!empty($startId)) {
if (!empty($scriptProperties['parents'])) {
$scriptProperties['parents'] .= ',' . $startId;
} else {
$scriptProperties['parents'] = $startId;
}
}
if (!empty($sortBy)) {
$scriptProperties['sortby'] = $sortBy;
}
if (!empty($sortDir)) {
$scriptProperties['sortdir'] = $sortDir;
}
if (!empty($priorityTV)) {
if (!empty($scriptProperties['includeTVs'])) {
$scriptProperties['includeTVs'] .= ',' . $priorityTV;
} else {
$scriptProperties['includeTVs'] = $priorityTV;
}
}
if (!empty($itemSeparator)) {
$outputSeparator = $itemSeparator;
}
//---
$class = 'modResource';
$where = [];
if (empty($showHidden)) {
$where[] = [
$class . '.hidemenu' => 0,
'OR:' . $class . '.class_key:IN' => ['Ticket', 'Article'],
];
}
if (empty($context)) {
$scriptProperties['context'] = $modx->context->key;
}
$select = [$class => 'id,editedon,createdon,context_key,class_key,uri'];
if (!empty($useWeblinkUrl)) {
$select[$class] .= ',content';
}
// Add custom parameters
foreach (['where', 'select'] as $v) {
if (!empty($scriptProperties[$v])) {
$tmp = $scriptProperties[$v];
if (!is_array($tmp)) {
$tmp = json_decode($tmp, true);
}
if (is_array($tmp)) {
$$v = array_merge($$v, $tmp);
}
}
unset($scriptProperties[$v]);
}
$pdoFetch->addTime('Conditions prepared');
// Default parameters
$default = [
'class' => $class,
'where' => json_encode($where),
'select' => json_encode($select),
'sortby' => "{$class}.parent ASC, {$class}.menuindex",
'sortdir' => 'ASC',
'return' => 'data',
'scheme' => 'full',
'limit' => 0,
];
// Merge all properties and run!
$pdoFetch->addTime('Query parameters ready');
$pdoFetch->setConfig(array_merge($default, $scriptProperties), false);
if (!empty($cache)) {
$data = $pdoFetch->getCache($scriptProperties);
}
if (!isset($return)) {
$return = 'chunks';
}
if (empty($data)) {
$now = time();
$data = $urls = [];
$rows = $pdoFetch->run();
foreach ($rows as $row) {
if (!empty($useWeblinkUrl) && $row['class_key'] == 'modWebLink') {
$row['url'] = is_numeric(trim($row['content'], '[]~ '))
? $pdoFetch->makeUrl((int)trim($row['content'], '[]~ '), $row)
: $row['content'];
} else {
$row['url'] = $pdoFetch->makeUrl($row['id'], $row);
}
unset($row['content']);
$time = !empty($row['editedon'])
? $row['editedon']
: $row['createdon'];
$row['date'] = date('c', $time);
$datediff = floor(($now - $time) / 86400);
if ($datediff <= 1) {
$row['priority'] = '1.0';
$row['update'] = 'daily';
} elseif (($datediff > 1) && ($datediff <= 7)) {
$row['priority'] = '0.75';
$row['update'] = 'weekly';
} elseif (($datediff > 7) && ($datediff <= 30)) {
$row['priority'] = '0.50';
$row['update'] = 'weekly';
} else {
$row['priority'] = '0.25';
$row['update'] = 'monthly';
}
if (!empty($priorityTV) && !empty($row[$priorityTV])) {
$row['priority'] = $row[$priorityTV];
}
// Fix possible duplicates made by modWebLink
if (!empty($urls[$row['url']])) {
if ($urls[$row['url']] > $row['date']) {
continue;
}
}
$urls[$row['url']] = $row['date'];
// Add item to output
if ($return === 'data') {
$data[$row['url']] = $row;
} else {
$data[$row['url']] = $pdoFetch->parseChunk($tpl, $row);
if (strpos($data[$row['url']], '[[') !== false) {
$modx->parser->processElementTags('', $data[$row['url']], true, true, '[[', ']]', array(), 10);
}
}
}
$pdoFetch->addTime('Rows processed');
if (!empty($cache)) {
$pdoFetch->setCache($data, $scriptProperties);
}
}
if ($return === 'data') {
$output = $data;
} else {
$output = implode($outputSeparator, $data);
$output = $pdoFetch->getChunk($tplWrapper, [
'schema' => $sitemapSchema,
'output' => $output,
'items' => $output,
]);
$pdoFetch->addTime('Rows wrapped');
if ($modx->user->hasSessionContext('mgr') && !empty($showLog)) {
$output .= '
' . print_r($pdoFetch->getTime(), 1) . '
';
}
}
if (!empty($forceXML)) {
header("Content-Type:text/xml");
@session_write_close();
exit($output);
} else {
return $output;
}