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(); |