コード例 #1
0
ファイル: Log.php プロジェクト: jacksleight/chalk
 public function build(array $params = array())
 {
     $query = parent::build($params);
     $params = $params + ['entity' => null];
     if (isset($params['entity'])) {
         $query->andWhere("l.entity = :entity AND l.entityId = :entityId")->setParameter('entity', Chalk::info($entity)->name)->setParameter('entityId', $entity->id);
     }
     return $query;
 }
コード例 #2
0
ファイル: User.php プロジェクト: jacksleight/chalk
 public function build(array $params = array())
 {
     $query = parent::build($params);
     $params = $params + ['emailAddress' => null, 'token' => null];
     if (isset($params['emailAddress'])) {
         $query->andWhere("u.emailAddress = :emailAddress")->setParameter('emailAddress', $params['emailAddress']);
     }
     if (isset($params['token'])) {
         $query->andWhere("u.token = :token AND u.tokenDate > UTC_TIMESTAMP()")->setParameter('token', $params['token']);
     }
     $this->searchable_modify($query, $params);
     return $query;
 }
コード例 #3
0
ファイル: Node.php プロジェクト: jacksleight/chalk
 public function build(array $params = array())
 {
     $query = parent::build($params);
     $params = $params + ['structure' => null, 'children' => null, 'parents' => null, 'siblings' => null, 'depth' => null, 'isIncluded' => false, 'isVisible' => Chalk::isFrontend()];
     $query->addSelect("c")->leftJoin("n.content", "c");
     $depth = null;
     if (isset($params['structure'])) {
         $query->andWhere('n.structure = :structure')->setParameter('structure', $params['structure']);
     } else {
         if (isset($params['children'])) {
             $query->andWhere('n.structure = :structure AND n.left >= :left AND n.right <= :right')->setParameter('structure', $params['children']['structureId'])->setParameter('left', $params['children']['left'])->setParameter('right', $params['children']['right']);
             if (isset($params['depth'])) {
                 $query->andWhere('n.depth <= :depth')->setParameter('depth', $params['children']['depth'] + $params['depth']);
             }
             if (!$params['isIncluded']) {
                 $query->andWhere('n != :exclude')->setParameter('exclude', $params['children']['id']);
             }
         } else {
             if (isset($params['parents'])) {
                 $query->from($this->_entityName, 'nt')->andWhere('n.structure = :structure AND nt.left >= n.left AND nt.left <= n.right')->andWhere('nt = :node')->setParameter('structure', $params['parents']['structureId'])->setParameter('node', $params['parents']['id']);
                 if (isset($params['depth'])) {
                     $query->andWhere('n.depth >= :depth')->setParameter('depth', $params['parents']['depth'] - $params['depth']);
                 }
                 if (!$params['isIncluded']) {
                     $query->andWhere('n != :exclude')->setParameter('exclude', $params['parents']['id']);
                 }
             } else {
                 if (isset($params['siblings'])) {
                     $query->andWhere('n.parent = :parent')->setParameter('parent', $params['siblings']['parentId']);
                     if (!$params['isIncluded']) {
                         $query->andWhere('n != :exclude')->setParameter('exclude', $params['siblings']['id']);
                     }
                 }
             }
         }
     }
     if ($params['isVisible']) {
         $query->andWhere("n.isHidden = false");
     }
     $this->publishable_modify($query, $params, 'c');
     return $query;
 }
コード例 #4
0
ファイル: Content.php プロジェクト: jacksleight/chalk
 public function build(array $params = array())
 {
     $query = parent::build($params);
     $params = $params + ['types' => null, 'subtypes' => null, 'tags' => null, 'createDateMin' => null, 'createDateMax' => null, 'modifyDateMin' => null, 'modifyDateMax' => null, 'createUsers' => null, 'statuses' => null];
     if (isset($params['types']) && count($params['types'])) {
         if ($params['types'] instanceof InfoList) {
             $types = [];
             foreach ($params['types'] as $filter) {
                 $types[$filter->class] = $filter->subtypes;
             }
         } else {
             $types = $params['types'];
         }
         $all = [];
         foreach ($types as $class => $subtypes) {
             $info = Chalk::info($class);
             $classes = array_merge([$info->class], $this->_em->getClassMetadata($info->class)->subClasses);
             foreach ($classes as $class) {
                 $all[$class] = $subtypes;
             }
         }
         $lines = [];
         $i = 0;
         foreach ($all as $class => $subtypes) {
             $line = "{$this->alias()} INSTANCE OF {$class}";
             if (isset($subtypes) && count($subtypes)) {
                 $line .= " AND {$this->alias()}.subtype IN (:types_{$i}_subtypes)";
                 $query->setParameter("types_{$i}_subtypes", $subtypes);
             }
             $lines[] = "({$line})";
             $i++;
         }
         $query->andWhere(implode(' OR ', $lines));
     }
     if (isset($params['subtypes']) && count($params['subtypes'])) {
         $query->andWhere("{$this->alias()}.subtype IN (:subtypes)")->setParameter('subtypes', $params['subtypes']);
     }
     if (isset($params['tags']) && count($params['tags'])) {
         $query->andWhere(":tags MEMBER OF {$this->alias()}.tags")->setParameter('tags', $params['tags']);
     }
     if (isset($params['createDateMin'])) {
         $createDateMin = $params['createDateMin'] instanceof DateTime ? $params['createDateMin'] : new DateTime($params['createDateMin']);
         $query->andWhere("{$this->alias()}.createDate >= :createDateMin")->setParameter('createDateMin', $createDateMin);
     }
     if (isset($params['createDateMax'])) {
         $createDateMax = $params['createDateMax'] instanceof DateTime ? $params['createDateMax'] : new DateTime($params['createDateMax']);
         $query->andWhere("{$this->alias()}.createDate <= :createDateMax")->setParameter('createDateMax', $createDateMax);
     }
     if (isset($params['modifyDateMin'])) {
         $modifyDateMin = $params['modifyDateMin'] instanceof DateTime ? $params['modifyDateMin'] : new DateTime($params['modifyDateMin']);
         $query->andWhere("{$this->alias()}.modifyDate >= :modifyDateMin")->setParameter('modifyDateMin', $modifyDateMin);
     }
     if (isset($params['modifyDateMax'])) {
         $modifyDateMax = $params['modifyDateMax'] instanceof DateTime ? $params['modifyDateMax'] : new DateTime($params['modifyDateMax']);
         $query->andWhere("{$this->alias()}.modifyDate <= :modifyDateMax")->setParameter('modifyDateMax', $modifyDateMax);
     }
     if (isset($params['createUsers'])) {
         $query->andWhere("{$this->alias()}.createUser IN (:createUsers)")->setParameter('createUsers', $params['createUsers']);
     }
     if (isset($params['statuses']) && count($params['statuses'])) {
         $query->andWhere("{$this->alias()}.status IN (:statuses)")->setParameter('statuses', $params['statuses']);
     }
     $query->addSelect("{$this->alias()}_tags")->leftJoin("{$this->alias()}.tags", "{$this->alias()}_tags");
     $this->publishable_modify($query, $params);
     $this->searchable_modify($query, $params);
     return $query;
 }
コード例 #5
0
ファイル: Tag.php プロジェクト: jacksleight/chalk
 public function build(array $params = array())
 {
     $query = parent::build($params);
     $this->searchable_modify($query, $params);
     return $query;
 }
コード例 #6
0
ファイル: Structure.php プロジェクト: jacksleight/chalk
 public function build(array $params = array())
 {
     $query = parent::build($params);
     $query->addSelect("n", "c")->leftJoin("s.nodes", "n", "WITH", "n.left = 0")->leftJoin("n.content", "c");
     return $query;
 }