Open Monograph Press  3.3.0
PKPAnnouncementQueryBuilder.inc.php
1 <?php
16 
17 use Illuminate\Database\Capsule\Manager as Capsule;
19 
21 
23  protected $contextIds = [];
24 
26  protected $searchPhrase = '';
27 
29  protected $typeIds = [];
30 
37  public function filterByContextIds($contextIds) {
38  $this->contextIds = is_array($contextIds) ? $contextIds : [$contextIds];
39  return $this;
40  }
41 
48  public function filterByTypeIds($typeIds) {
49  $this->typeIds = is_array($typeIds) ? $typeIds : [$typeIds];
50  return $this;
51  }
52 
60  public function searchPhrase($phrase) {
61  $this->searchPhrase = $phrase;
62  return $this;
63  }
64 
68  public function getCount() {
69  return $this
70  ->getQuery()
71  ->select('a.announcement_id')
72  ->get()
73  ->count();
74  }
75 
79  public function getIds() {
80  return $this
81  ->getQuery()
82  ->select('a.announcement_id')
83  ->pluck('a.announcement_id')
84  ->toArray();
85  }
86 
92  public function getQuery() {
93  $this->columns = ['a.*'];
94  $q = Capsule::table('announcements as a');
95 
96  if (!empty($this->contextIds)) {
97  $q->whereIn('a.assoc_id', $this->contextIds);
98  }
99 
100  if (!empty($this->typeIds)) {
101  $q->whereIn('a.type_id', $this->typeIds);
102  }
103 
104  // search phrase
105  if (!empty($this->searchPhrase)) {
106  $words = explode(' ', $this->searchPhrase);
107  if (count($words)) {
108  $q->leftJoin('announcement_settings as as','a.announcement_id','=','as.announcement_id');
109  foreach ($words as $word) {
110  $word = strtolower(addcslashes($word, '%_'));
111  $q->where(function($q) use ($word) {
112  $q->where(function($q) use ($word) {
113  $q->where('as.setting_name', 'title');
114  $q->where(Capsule::raw('lower(as.setting_value)'), 'LIKE', "%{$word}%");
115  })
116  ->orWhere(function($q) use ($word) {
117  $q->where('as.setting_name', 'descriptionShort');
118  $q->where(Capsule::raw('lower(as.setting_value)'), 'LIKE', "%{$word}%");
119  })
120  ->orWhere(function($q) use ($word) {
121  $q->where('as.setting_name', 'description');
122  $q->where(Capsule::raw('lower(as.setting_value)'), 'LIKE', "%{$word}%");
123  });
124  });
125  }
126  }
127  }
128 
129  $q->orderBy('a.date_posted', 'desc');
130  $q->groupBy('a.announcement_id');
131 
132  // Add app-specific query statements
133  \HookRegistry::call('Announcement::getMany::queryObject', array(&$q, $this));
134 
135  $q->select($this->columns);
136 
137  return $q;
138  }
139 }
PKP\Services\QueryBuilders\PKPAnnouncementQueryBuilder\filterByContextIds
filterByContextIds($contextIds)
Definition: PKPAnnouncementQueryBuilder.inc.php:46
PKP\Services\QueryBuilders\PKPAnnouncementQueryBuilder\getIds
getIds()
Definition: PKPAnnouncementQueryBuilder.inc.php:88
PKP\Services\QueryBuilders\PKPAnnouncementQueryBuilder
Definition: PKPAnnouncementQueryBuilder.inc.php:20
PKP\Services\QueryBuilders
PKP\Services\QueryBuilders\PKPAnnouncementQueryBuilder\filterByTypeIds
filterByTypeIds($typeIds)
Definition: PKPAnnouncementQueryBuilder.inc.php:57
PKP\Services\QueryBuilders\PKPAnnouncementQueryBuilder\$searchPhrase
$searchPhrase
Definition: PKPAnnouncementQueryBuilder.inc.php:32
PKP\Services\QueryBuilders\PKPAnnouncementQueryBuilder\getCount
getCount()
Definition: PKPAnnouncementQueryBuilder.inc.php:77
PKP\Services\QueryBuilders\PKPAnnouncementQueryBuilder\$typeIds
$typeIds
Definition: PKPAnnouncementQueryBuilder.inc.php:38
PKP\Services\QueryBuilders\PKPAnnouncementQueryBuilder\$contextIds
$contextIds
Definition: PKPAnnouncementQueryBuilder.inc.php:26
PKP\Services\QueryBuilders\PKPAnnouncementQueryBuilder\getQuery
getQuery()
Definition: PKPAnnouncementQueryBuilder.inc.php:101
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
PKP\Services\QueryBuilders\Interfaces\EntityQueryBuilderInterface
Definition: EntityQueryBuilderInterface.inc.php:19
PKP\Services\QueryBuilders\PKPAnnouncementQueryBuilder\searchPhrase
searchPhrase($phrase)
Definition: PKPAnnouncementQueryBuilder.inc.php:69