176 lines
4.6 KiB
PHP
176 lines
4.6 KiB
PHP
<?php
|
|
|
|
namespace Nextend\Framework\Model;
|
|
|
|
use Nextend\Framework\Database\AbstractPlatformConnectorTable;
|
|
use Nextend\Framework\Database\Database;
|
|
use Nextend\Framework\Plugin;
|
|
|
|
class Section {
|
|
|
|
/** @var AbstractPlatformConnectorTable */
|
|
public static $tableSectionStorage;
|
|
|
|
public function __construct() {
|
|
|
|
self::$tableSectionStorage = Database::getTable("nextend2_section_storage");
|
|
}
|
|
|
|
public static function get($application, $section, $referenceKey = null) {
|
|
$attributes = array(
|
|
"application" => $application,
|
|
"section" => $section
|
|
);
|
|
|
|
if ($referenceKey !== null) {
|
|
$attributes['referencekey'] = $referenceKey;
|
|
}
|
|
|
|
return self::$tableSectionStorage->findByAttributes($attributes);
|
|
}
|
|
|
|
public static function getById($id, $section = null) {
|
|
static $cache = array();
|
|
if ($id === 0) {
|
|
return null;
|
|
}
|
|
if (!isset($cache[$section])) {
|
|
$cache[$section] = array();
|
|
} else if (isset($cache[$section][$id])) {
|
|
return $cache[$section][$id];
|
|
}
|
|
|
|
$cache[$section][$id] = null;
|
|
if ($section) {
|
|
Plugin::doAction($section, array(
|
|
$id,
|
|
&$cache[$section][$id]
|
|
));
|
|
if ($cache[$section][$id]) {
|
|
return $cache[$section][$id];
|
|
}
|
|
}
|
|
|
|
$cache[$section][$id] = self::$tableSectionStorage->findByAttributes(array(
|
|
"id" => $id
|
|
));
|
|
if ($section && $cache[$section][$id]['section'] != $section) {
|
|
$cache[$section][$id] = null;
|
|
|
|
return $cache[$section][$id];
|
|
}
|
|
|
|
return $cache[$section][$id];
|
|
}
|
|
|
|
public static function getAll($application, $section, $referenceKey = null) {
|
|
$attributes = array(
|
|
"application" => $application,
|
|
"section" => $section
|
|
);
|
|
|
|
if ($referenceKey !== null) {
|
|
$attributes['referencekey'] = $referenceKey;
|
|
}
|
|
|
|
$rows = self::$tableSectionStorage->findAllByAttributes($attributes, array(
|
|
"id",
|
|
"referencekey",
|
|
"value",
|
|
"isSystem",
|
|
"editable"
|
|
));
|
|
|
|
Plugin::doAction($application . $section, array(
|
|
$referenceKey,
|
|
&$rows
|
|
));
|
|
|
|
return $rows;
|
|
}
|
|
|
|
public static function add($application, $section, $referenceKey, $value, $isSystem = 0, $editable = 1) {
|
|
$row = array(
|
|
"application" => $application,
|
|
"section" => $section,
|
|
"referencekey" => '',
|
|
"value" => $value,
|
|
"isSystem" => $isSystem,
|
|
"editable" => $editable
|
|
);
|
|
|
|
if ($referenceKey !== null) {
|
|
$row["referencekey"] = $referenceKey;
|
|
}
|
|
|
|
self::$tableSectionStorage->insert($row);
|
|
|
|
return self::$tableSectionStorage->insertId();
|
|
}
|
|
|
|
|
|
public static function set($application, $section, $referenceKey, $value, $isSystem = 0, $editable = 1) {
|
|
|
|
$result = self::getAll($application, $section, $referenceKey);
|
|
|
|
if (empty($result)) {
|
|
return self::add($application, $section, $referenceKey, $value, $isSystem, $editable);
|
|
} else {
|
|
$attributes = array(
|
|
"application" => $application,
|
|
"section" => $section
|
|
);
|
|
|
|
if ($referenceKey !== null) {
|
|
$attributes['referencekey'] = $referenceKey;
|
|
}
|
|
self::$tableSectionStorage->update(array('value' => $value), $attributes);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public static function setById($id, $value) {
|
|
|
|
$result = self::getById($id);
|
|
|
|
if ($result !== null && $result['editable']) {
|
|
self::$tableSectionStorage->update(array('value' => $value), array(
|
|
"id" => $id
|
|
));
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static function delete($application, $section, $referenceKey = null) {
|
|
|
|
$attributes = array(
|
|
"application" => $application,
|
|
"section" => $section,
|
|
"isSystem" => 0
|
|
);
|
|
|
|
if ($referenceKey !== null) {
|
|
$attributes['referencekey'] = $referenceKey;
|
|
}
|
|
|
|
self::$tableSectionStorage->deleteByAttributes($attributes);
|
|
|
|
return true;
|
|
}
|
|
|
|
public static function deleteById($id) {
|
|
|
|
self::$tableSectionStorage->deleteByAttributes(array(
|
|
"id" => $id,
|
|
"isSystem" => 0
|
|
));
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
new Section(); |