Файл: library/XenForo/Model/ContentType.php
Строк: 140
<?php
/**
* Model for content types.
*
* @package XenForo_ContentType
*/
class XenForo_Model_ContentType extends XenForo_Model
{
/**
* Gets all fields for each content type.
*
* @return array Format: [content type][field name] => value
*/
public function getAllContentTypeFields()
{
$fields = array();
$fieldResult = $this->_getDb()->query('
SELECT *
FROM xf_content_type_field
');
while ($field = $fieldResult->fetch())
{
$fields[$field['content_type']][$field['field_name']] = $field['field_value'];
}
return $fields;
}
/**
* Gets all content types and info.
*
* @return array Format: [content type] => info
*/
public function getAllContentTypes()
{
return $this->fetchAllKeyed('
SELECT *
FROM xf_content_type
', 'content_type');
}
public function getActiveContentTypes()
{
return $this->fetchAllKeyed("
SELECT content_type.*
FROM xf_content_type AS content_type
LEFT JOIN xf_addon AS addon ON (content_type.addon_id = addon.addon_id)
WHERE (content_type.addon_id = '' OR content_type.addon_id = 'XenForo' OR addon.active = 1)
", 'content_type');
}
/**
* Gets the content types in the format for the cache.
*
* @return array Format: [content type][field name] => value
*/
public function getContentTypesForCache()
{
$contentTypes = $this->getActiveContentTypes();
$fields = $this->getAllContentTypeFields();
$cache = array();
foreach ($contentTypes AS &$contentType)
{
$typeName = $contentType['content_type'];
if (isset($fields[$typeName]))
{
$cache[$typeName] = $fields[$typeName];
}
else
{
$cache[$typeName] = array();
}
}
return $cache;
}
/**
* Rebuilds the content type cache (both globally an internal to each content type).
*
* @return array Global cache. Format: [content type][field name] => value
*/
public function rebuildContentTypeCache()
{
$contentTypes = $this->getContentTypesForCache();
$db = $this->_getDb();
foreach ($contentTypes AS $contentType => $fields)
{
$db->update('xf_content_type',
array('fields' => serialize($fields)),
'content_type = ' . $db->quote($contentType)
);
}
$this->_getDataRegistryModel()->set('contentTypes', $contentTypes);
XenForo_Application::set('contentTypes', $contentTypes);
return $contentTypes;
}
}