Система управления «Сайт PRO»
Версия 20240107

Класс Table

Объект $Table: Cms\Root\Data\Table наследует Cms\Site\Base

Объект «Таблица»

Исходный код
class Table extends \Cms\Site\Base { … }

Свойства

$name

$Table->name

Имя таблицы

Исходный код
    var $name;

$title

$Table->title

Название таблицы

Исходный код
    var $title;

$plural

$Table->plural

Название во множественном числе

Исходный код
    var $plural;

$create

$Table->create

Название действия создания

Исходный код
    var $create;

$item

$Table->item

В таблице содержатся объекты

Исходный код
    var $item;

$public

$Table->public

Данные таблицы являются публичными

Исходный код
    var $public;

$enable

$Table->enable

Таблица включена

Исходный код
    var $enable;

$sitemap

$Table->sitemap

Данные отображаются в карте сайта

Исходный код
    var $sitemap;

$order

$Table->order

Сортировка таблицы

Исходный код
    var $order;

$sort

$Table->sort

Глобальная сортировка

Исходный код
    var $sort;

$fieldList

$Table->fieldList = array();

Список полей

Исходный код
    var $fieldList = array();

$root

$Table->root

Таблица является системной

Исходный код
    var $root;

$site

$Table->site

Таблица является локальной

Исходный код
    var $site;

$data

$Table->data = array();

Информация о таблице

Исходный код
    var $data = array();

$primary

$Table->primary
Исходный код
    var $primary;

$_enabledFieldList

$Table->_enabledFieldList
Исходный код
    var $_enabledFieldList;

Методы

__construct()

new Table($name=null);
Исходный код
    function __construct($name = null) {
        $this->name = $this->data['name'] = $name;
    }

get()

$Table->get($key, $default=null);
Исходный код
    function get($key, $default = null) {
        return isset($this->$key) ? $this->$key : $default;
    }

set()

$Table->set($key, $value);
Исходный код
    function set($key, $value) {
        if ($key[0] === '_' || $key === 'root' || $key === 'site') $this->$key = $value;
        else $this->$key = $this->data[$key] = $value;
        if ($key === 'item') {
            $this->Main()->Storage()->resetItemTableList();
        }
        if ($key === 'enabled') {
            $this->Main()->Storage()->resetItemTableList();
            $this->Main()->Storage()->resetEnabledTableList();
        }
    }

getName()

$Table->getName();
Исходный код
    function getName() {
        return $this->name;
    }

getTitle()

$Table->getTitle();
Исходный код
    function getTitle() {
        return $this->title ? $this->title : $this->name;
    }

displayTitle()

$Table->displayTitle();
Исходный код
    function displayTitle() {
        return htmlspecialchars($this->getTitle());
    }

getPlural()

$Table->getPlural();
Исходный код
    function getPlural() {
        return $this->plural;
    }

getCreate()

$Table->getCreate();
Исходный код
    function getCreate() {
        return $this->create;
    }

isItem()

$Table->isItem();
Исходный код
    function isItem() {
        return $this->item ? true : false;
    }

isPublic()

$Table->isPublic();
Исходный код
    function isPublic() {
        return $this->public ? true : false;
    }

isEnabled()

$Table->isEnabled();
Исходный код
    function isEnabled() {
        return $this->enable ? true : false;
    }

isSitemap()

$Table->isSitemap();
Исходный код
    function isSitemap() {
        return $this->sitemap ? true : false;
    }

getOrder()

$Table->getOrder();
Исходный код
    function getOrder() {
        return $this->order;
    }

getOrderList()

$Table->getOrderList();
Исходный код
    function getOrderList() {
        if (is_string($this->order) && strlen($this->order)) {
            $r = array();
            foreach (explode(',', $this->order) as $order) if (strlen($order = trim($order))) {
                if ($order[0] !== '-') $r[$order] = 'ASC';
                else $r[substr($order, 1)] = 'DESC';
            }
            return $r;
        } elseif (is_array($this->order)) {
            return $this->order;
        }
        if ($Field = $this->getField('order')) if ($Field->isEnabled()) return array( 'order' => 'ASC' );
        return array();
    }

getSort()

$Table->getSort();
Исходный код
    function getSort() {
        return $this->sort;
    }

getSortList()

$Table->getSortList();
Исходный код
    function getSortList() {
        if (is_string($this->sort) && strlen($this->sort)) {
            $r = array();
            foreach (explode('|', strtr($this->sort, ',', '|')) as $order) if (strlen($order = trim($order))) {
                if ($order[0] !== '-') $r[$order] = 'ASC';
                else $r[substr($order, 1)] = 'DESC';
            }
            return $r;
        } elseif (is_array($this->sort)) {
            return $this->sort;
        }
        if ($Field = $this->getField('title')) if ($Field->isEnabled()) return array( 'title' => 'ASC' );
        return array();
    }

addField()

$Table->addField(Field $Field);
Исходный код
    function addField(Field $Field) {
        $this->fieldList[$Field->getName()] = $Field;
        $this->resetEnabledFieldList();
    }

deleteField()

$Table->deleteField($field);
Исходный код
    function deleteField($field) {
        if (is_object($field)) {
            $Field = $field;
            unset($this->fieldList[$Field->getName()]);
        } else {
            unset($this->fieldList[$field]);
        }
        $this->resetEnabledFieldList();
        return true;
    }

getField()

$Table->getField($field);
Исходный код
    function getField($field) {
        return $this->fieldList[$field];
    }

getEnabledField()

$Table->getEnabledField($field);
Исходный код
    function getEnabledField($field) {
        if ($Field = $this->getField($field)) if ($Field->isEnabled()) return $Field;
    }

getFieldList()

$Table->getFieldList();
Исходный код
    function getFieldList() {
        return $this->fieldList;
    }

getEnabledFieldList()

$Table->getEnabledFieldList();
Исходный код
    function getEnabledFieldList() {
        if (isset($this->_enabledFieldList)) return $this->_enabledFieldList;
        $r = array();
        foreach ($this->getFieldList() as $field => $Field) {
            if ($Field->isEnabled()) $r[$field] = $Field;
        }
        return $this->_enabledFieldList = $r;
    }

resetEnabledFieldList()

$Table->resetEnabledFieldList();
Исходный код
    function resetEnabledFieldList() {
        unset($this->_enabledFieldList);
    }

getStorageFields()

$Table->getStorageFields();
Исходный код
    function getStorageFields() {
        $r = array();
        foreach ($this->getEnabledFieldList() as $Field) {
            $name = $Field->getName();
            if ($name === 'id' || $name === 'stamp') continue;
            $r[] = $name;
        }
        return $r;
    }

isRoot()

$Table->isRoot();
Исходный код
    function isRoot() {
        return $this->root ? true : false;
    }

isSite()

$Table->isSite();
Исходный код
    function isSite() {
        return $this->site ? true : false;
    }

getPrimaryKey()

$Table->getPrimaryKey();
Исходный код
    function getPrimaryKey() {
        $r = array();
        foreach ($this->getEnabledFieldList() as $Field) {
            if ($Field->isPrimary()) {
                $r[] = $Field->getName();
            }
        }
        if (isset($this->primary)) {
            if (is_string($this->primary)) $r[] = $this->primary;
            elseif (is_array($this->primary)) foreach ($this->primary as $primary) $r[] = $primary;
        }
        switch (count($r)) {
            case 0:
                return;
            case 1:
                return $r[0];
            default:
                return $r;
        }
    }

addTableData()

$Table->addTableData(array $tableData, $override=true);
Исходный код
    function addTableData(array $tableData, $override = true) {
        foreach ($tableData as $k => $v) {
            if ($k === 'fields') {
                if (is_array($v)) {
                    $fieldClass = $this->App()->getClass('data_field');
                    foreach ($v as $fieldData) {
                        if (is_string($fieldData)) {
                            $fieldName = $fieldData;
                            if (!$Field = $this->getField($fieldName)) {
                                $Field = new $fieldClass($this->getName(), $fieldName);
                                if ($fieldData = $Field->defaultFieldData()) $Field->addFieldData($fieldData, $override);
                            }
                            $fieldData = array( 'enable' => 'Y' );
                            $Field->addFieldData($fieldData, $override);
                        } elseif (is_array($fieldData)) {
                            if (!$Field = $this->getField($fieldData['name'])) $Field = new $fieldClass($this->getName(), $fieldData['name']);
                            $Field->addFieldData($fieldData, $override);
                        }
                        $this->addField($Field);
                    }
                }
            } elseif ($override || !isset($this->$k)) {
                $this->set($k, $v);
            }
        }
    }

getTableData()

$Table->getTableData();
Исходный код
    function getTableData() {
        $r = $this->data;
        $r['site'] = 'Y';
        $r['fields'] = array();
        foreach ($this->getFieldList() as $Field) if ($Field->isSite()) {
            $r['fields'][$Field->getName()] = $Field->getFieldData();
        }
        return $r;
    }

getPanel()

$Table->getPanel();
Исходный код
    function getPanel() {
        return array(
            'edit' => array(
                'href' => $this->Main()->href('/admin/storage') . '?a=table&table=' . rawurldecode($this->getName()),
                'image' => 'edit',
            ),
            'open' => array(
                'href' => $this->Main()->href('/admin/storage') . '?table=' . rawurlencode($this->getName()),
                'image' => 'angle-right',
                'modal' => false,
            ),
        );
    }

displayPageForm()

$Table->displayPageForm($form='data_table');
Исходный код
    function displayPageForm($form = 'data_table') {
        if (!isset($form)) return;
        $Main = $this->Main();
        $Form = $this->Form();
        $Table = $this;
        $document = $Form->load($form, $Table);
        if ($Form->store($document)) {
            if ($_POST['delete']) {
                if ($Table->delete()) {
                    return $Main->href('/admin/storage');
                } else {
                    $Form->addError($this->getError());
                }
            } else {
                if ($Table->save()) {
                    return $Table->href();
                } else {
                    $Form->addError($this->getError());
                }
            }
        }
        return $document;
    }

href()

$Table->href();
Исходный код
    function href() {
        return $this->Main()->href('/admin/storage') . '?table=' . rawurlencode($this->getName());
    }

save()

$Table->save();
Исходный код
    function save() {
        $Storage = $this->Main()->Storage();
        if (!$Storage->getTable($this->getName())) $Storage->addTable($this);
        $this->set('site', 'Y');
        if ($Storage->saveData()) {
            if ($this->saveData()) {
                return true;
            }
        }
    }

delete()

$Table->delete();
Исходный код
    function delete() {
        $Storage = $this->Main()->Storage();
        $Storage->deleteTable($this);
        if ($Storage->saveData()) {
            if ($this->deleteData()) {
                return true;
            }
        }
    }

saveData()

$Table->saveData();
Исходный код
    function saveData() {
        $Data = $this->Data();
        if (!$this->getEnabledFieldList()) return true;
        if ($Data->tableExists($this)) {
            if ($Data->tableAlter($this)) {
                return true;
            } else {
                $this->addError($Data->getError());
            }
        } else {
            if ($Data->tableCreate($this)) {
                return true;
            } else {
                $this->addError($Data->getError());
            }
        }
    }

deleteData()

$Table->deleteData();
Исходный код
    function deleteData() {
        $Data = $this->Data();
        if ($Data->tableExists($this)) {
            if ($Data->tableDrop($this)) {
                return true;
            } else {
                $this->addError($Data->getError());
            }
        } else {
            return true;
        }
    }