vendor/pimcore/pimcore/models/Redirect/Dao.php line 58

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Commercial License (PCL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PCL
  13.  */
  14. namespace Pimcore\Model\Redirect;
  15. use Pimcore\Model;
  16. use Pimcore\Model\Exception\NotFoundException;
  17. use Pimcore\Model\Redirect;
  18. use Pimcore\Model\Site;
  19. use Pimcore\Routing\Redirect\RedirectUrlPartResolver;
  20. use Symfony\Component\HttpFoundation\Request;
  21. /**
  22.  * @internal
  23.  *
  24.  * @property \Pimcore\Model\Redirect $model
  25.  */
  26. class Dao extends Model\Dao\AbstractDao
  27. {
  28.     /**
  29.      * @param int|null $id
  30.      *
  31.      * @throws NotFoundException
  32.      */
  33.     public function getById($id null)
  34.     {
  35.         if ($id != null) {
  36.             $this->model->setId($id);
  37.         }
  38.         $data $this->db->fetchAssociative('SELECT * FROM redirects WHERE id = ?', [$this->model->getId()]);
  39.         if (!$data) {
  40.             throw new NotFoundException(sprintf('Redirect with ID %d doesn\'t exist'$this->model->getId()));
  41.         }
  42.         $this->assignVariablesToModel($data);
  43.     }
  44.     /**
  45.      * @param Request $request
  46.      * @param Site|null $site
  47.      * @param bool $override
  48.      *
  49.      * @throws NotFoundException
  50.      */
  51.     public function getByExactMatch(Request $request, ?Site $site nullbool $override false)
  52.     {
  53.         $partResolver = new RedirectUrlPartResolver($request);
  54.         $siteId $site $site->getId() : null;
  55.         $sql 'SELECT * FROM redirects WHERE
  56.             (
  57.                 (source = :sourcePath AND (`type` = :typePath OR `type` = :typeAuto)) OR
  58.                 (source = :sourcePathQuery AND `type` = :typePathQuery) OR
  59.                 (source = :sourceEntireUri AND `type` = :typeEntireUri)
  60.             ) AND active = 1 AND regex IS NULL AND (expiry > UNIX_TIMESTAMP() OR expiry IS NULL)';
  61.         if ($siteId) {
  62.             $sql .= ' AND sourceSite = ' $this->db->quote($siteId);
  63.         } else {
  64.             $sql .= ' AND sourceSite IS NULL';
  65.         }
  66.         if ($override) {
  67.             $sql .= ' AND priority = 99';
  68.         }
  69.         $sql .= ' ORDER BY `priority` DESC';
  70.         $data $this->db->fetchAssociative($sql, [
  71.             'sourcePath' => $partResolver->getRequestUriPart(Redirect::TYPE_PATH),
  72.             'sourcePathQuery' => $partResolver->getRequestUriPart(Redirect::TYPE_PATH_QUERY),
  73.             'sourceEntireUri' => $partResolver->getRequestUriPart(Redirect::TYPE_ENTIRE_URI),
  74.             'typePath' => Redirect::TYPE_PATH,
  75.             'typePathQuery' => Redirect::TYPE_PATH_QUERY,
  76.             'typeEntireUri' => Redirect::TYPE_ENTIRE_URI,
  77.             'typeAuto' => Redirect::TYPE_AUTO_CREATE,
  78.         ]);
  79.         if (!$data) {
  80.             throw new NotFoundException('No matching redirect found for the given request');
  81.         }
  82.         $this->assignVariablesToModel($data);
  83.     }
  84.     /**
  85.      * @throws \Exception
  86.      */
  87.     public function save()
  88.     {
  89.         if (!$this->model->getId()) {
  90.             // create in database
  91.             $this->db->insert('redirects', []);
  92.             $this->model->setId((int) $this->db->lastInsertId());
  93.         }
  94.         $this->updateModificationInfos();
  95.         $data = [];
  96.         $type $this->model->getObjectVars();
  97.         foreach ($type as $key => $value) {
  98.             if (in_array($key$this->getValidTableColumns('redirects'))) {
  99.                 if (is_bool($value)) {
  100.                     $value = (int) $value;
  101.                 }
  102.                 $data[$key] = $value;
  103.             }
  104.         }
  105.         $this->db->update('redirects'$data, ['id' => $this->model->getId()]);
  106.     }
  107.     /**
  108.      * Deletes object from database
  109.      */
  110.     public function delete()
  111.     {
  112.         $this->db->delete('redirects', ['id' => $this->model->getId()]);
  113.     }
  114.     protected function updateModificationInfos()
  115.     {
  116.         $updateTime time();
  117.         $this->model->setModificationDate($updateTime);
  118.         if (!$this->model->getCreationDate()) {
  119.             $this->model->setCreationDate($updateTime);
  120.         }
  121.         // auto assign user if possible, if no user present, use ID=0 which represents the "system" user
  122.         $userId 0;
  123.         $user \Pimcore\Tool\Admin::getCurrentUser();
  124.         if ($user instanceof Model\User) {
  125.             $userId $user->getId();
  126.         }
  127.         $this->model->setUserModification($userId);
  128.         if ($this->model->getUserOwner() === null) {
  129.             $this->model->setUserOwner($userId);
  130.         }
  131.     }
  132. }