src-empire/Empire/Content/Content.php line 120

Open in your IDE?
  1. <?php
  2. namespace Empire\Content;
  3. use Empire\Content\PartType\AbstractType;
  4. use Empire\Core\AbstractEntity;
  5. use Empire\Core\Entity;
  6. use Empire\Core\Event;
  7. use Empire\Core\Named;
  8. use Empire\Core\User;
  9. use Empire\Legacy\db;
  10. use Empire\Legacy\cgt;
  11. class Content extends AbstractEntity implements  EntityNamed {
  12.     const PRIMARY_FIELD "CONT_ID";
  13.     const TABLE "CONTENT";
  14.     public $name;
  15.     public $title;
  16.     /**
  17.      * @var $content string The content
  18.      * @deprecated
  19.      */
  20.     public $content;
  21.     /** @var Category $category */
  22.     public $category;
  23.     public $page;
  24.     public $created;
  25.     public $updated;
  26.     /** @var Part[] $parts */
  27.     public $parts;
  28.     protected $CONT_ID;
  29.     protected $CCAT_ID;
  30.     protected $CONT_PAGE;
  31.     protected $CONT_TITLE;
  32.     protected $CONT_TEXT;
  33.     protected $CONT_CREATED;
  34.     protected $CONT_UPDATED;
  35.     function __construct() {
  36.         $this->type cint_TYPE_CONTENT;
  37.         parent::__construct();
  38.     }
  39.     /**
  40.      * @param string $title
  41.      * @param string $page
  42.      * @param int|Category $category
  43.      * @return int
  44.      * @throws \Exception
  45.      */
  46.     public static function addPage($title$page$category) {
  47.         if($category instanceof Category) {
  48.             $category $category->getID();
  49.         }
  50.         if(!self::isValidPageSlug($page)) {
  51.             throw new \Exception('Invalid characters for the url slug. Allowed characters are <code>a-z A-Z 0-9 . _ -</code>.');
  52.         }
  53.         $stmt db::insert(self::TABLE, [
  54.            'CCAT_ID' => $category,
  55.            'CONT_TITLE' => $title,
  56.            'CONT_PAGE' => $page,
  57.             'CONT_TEXT' => '',
  58.             'CONT_UPDATED' => "NOW()",
  59.         ]);
  60.         $id db::insertID();
  61.         $stmt db::insert(Part::TABLE, [
  62.             "CONT_ID" => $id,
  63.             'CPAR_TYPE' => 'basic',
  64.             'CPAR_TEXT' => "<p>Newly created page.</p>",
  65.             'CPAR_REGION' => 'main',
  66.             'CPAR_ORDER' => 1,
  67.             'CPAR_SETTINGS' => ''
  68.         ]);
  69.         return $id;
  70.     }
  71.     public static function sanitiseUrl($url) {
  72.         return strtolower(filter_var($urlFILTER_SANITIZE_URL));
  73.     }
  74.     function initialize() {
  75.         $this->id $this->CONT_ID;
  76.         $this->title $this->name $this->CONT_TITLE;
  77.         $this->content $this->CONT_TEXT;
  78.         $this->page $this->CONT_PAGE;
  79.         $this->category Category::load([$this->CCAT_ID]);
  80.         $this->created cgt::evaluateString($this->CONT_CREATED);
  81.         $this->updated cgt::evaluateString($this->CONT_UPDATED);
  82.         $this->parts Part::loadPage($this->id);
  83.     }
  84.     function getTable() {
  85.         return self::TABLE;
  86.     }
  87.     function getPrimaryField() {
  88.         return self::PRIMARY_FIELD;
  89.     }
  90.     function getName() {
  91.         return $this->title;
  92.     }
  93.     /**
  94.      * @param string $category
  95.      * @param string $page
  96.      * @return Content
  97.      * @throws \Exception
  98.      */
  99.     public static function getByPage($category$page) {
  100.         $stmt db::prepare("SELECT * FROM CONTENT LEFT JOIN CONTENT_CATEGORIES ON CONTENT.CCAT_ID = CONTENT_CATEGORIES.CCAT_ID WHERE CCAT_NAME = ? AND CONT_PAGE = ?"$category$page);
  101.         return db::fetchObject($stmtself::class);
  102.     }
  103.     function canEdit(User $user) {
  104.         return $this->category->canEdit($user);
  105.     }
  106.     function savePage($title$contentUser $user) {
  107.         $stmt db::prepare("UPDATE CONTENT SET CONT_TITLE = ?, CONT_TEXT = ?, CONT_UPDATED = NOW() WHERE CONT_ID = ?"$title$content$this->id);
  108.         Event::send($user->getID(), cint_RECEIVER_ADMINsprintf("%s has updated page %s/%s"$user->getName(), $this->category->name$this->page), cint_EVENTTYPE_ADMIN);
  109.         $this->refresh();
  110.     }
  111.     public function orderParts($region, array $parts) {
  112.         $list array_shift($parts);
  113.         for($i 0$i count($parts); $i++) {
  114.             $list .= "," $parts[$i];
  115.         }
  116.         $query sprintf("SET @pos := 0; UPDATE `%s` SET CPAR_ORDER = (@pos := @pos +1) WHERE `%s` IN (%s) AND `CPAR_REGION` = '%s' ORDER BY FIELD(%s, %s);",
  117.             Part::TABLE,
  118.             Part::PRIMARY_FIELD,
  119.             $list,
  120.            $region,
  121.             Part::PRIMARY_FIELD,
  122.             $list);
  123.             \Empire\Core\Core::db()->executeQuery($query) or die($query "<br>" . \Empire\Core\Core::db()->error);
  124.     }
  125.     static function isValidPageSlug($slug) {
  126.         $matches preg_match('/[^a-zA-Z0-9_\-.]+/'$slug);
  127.         if($matches === false) {
  128.             throw new \Exception('Something when wrong while attempting to test the url slug for validity');
  129.         }
  130.         if($matches ) return false;
  131.         else return true;
  132.     }
  133.     /**
  134.      * @param $type
  135.      * @param $region
  136.      * @return Part
  137.      * @throws \Exception
  138.      */
  139.     public function addPart($type$region) {
  140.         $order $this->parts[count($this->parts) -1]->order;
  141.         $className Part::TYPES[$type];
  142.         /** @var AbstractType $class */
  143.         $class = new $className();
  144.         db::insert(Part::TABLE, [
  145.             'CONT_ID' => $this->id,
  146.             'CPAR_ORDER' => $order 1,
  147.             'CPAR_TYPE' => $type,
  148.             'CPAR_REGION' => $region,
  149.             'CPAR_TEXT' => json_encode($class->defaultText()),
  150.             'CPAR_SETTINGS' => json_encode($class->defaultConfig())
  151.         ]);
  152.         $this->refresh();
  153.         return $this->parts[count($this->parts) -1];
  154.     }
  155. }