19 declare(strict_types=1);
240 throw new ilException(
'provider does not exist in list! (id=' . $providerId .
')');
250 $conditions[] = $DIC->database()->in(
'id', $this->
getIdsFilter(),
false,
'integer');
258 $conditions[] =
"availability = " . $DIC->database()->quote(
266 case self::SCOPE_GLOBAL:
267 $conditions[] =
"global = " . $DIC->database()->quote(1,
'integer');
269 case self::SCOPE_USER:
270 $conditions[] =
"global = " . $DIC->database()->quote(0,
'integer');
272 case self::SCOPE_BOTH:
277 $conditions[] =
"creator = " . $DIC->database()->quote($this->
getCreatorFilter(),
'integer');
281 $conditions[] = $DIC->database()->like(
'title',
'text',
"%{$this->getTitleFilter()}%");
285 $conditions[] =
"category = " . $DIC->database()->quote($this->
getCategoryFilter(),
'text');
289 $conditions[] = $DIC->database()->like(
'keywords',
'text',
"%{$this->getKeywordFilter()}%");
293 $conditions[] =
"has_outcome = " . $DIC->database()->quote((
int) $this->
getHasOutcomeFilter(),
'integer');
297 $conditions[] =
"external_provider = " . $DIC->database()->quote((
int) $this->
getIsExternalFilter(),
'integer');
305 if (count($conditions) === 0) {
309 return implode(
"\n\t\t\tAND ", $conditions);
316 FROM lti_ext_provider 317 WHERE {$this->getWhereExpression()} 327 while ($row = $DIC->database()->fetchAssoc(
$res)) {
338 $res = $DIC->database()->query(
" 339 SELECT 'untrashed' query, oset.provider_id, COUNT(oset.obj_id) cnt 340 FROM lti_consumer_settings oset 341 INNER JOIN object_reference oref 342 ON oref.obj_id = oset.obj_id 343 AND oref.deleted IS NULL 344 GROUP BY oset.provider_id 348 SELECT 'trashed' query, oset.provider_id, COUNT(oset.obj_id) cnt 349 FROM lti_consumer_settings oset 350 INNER JOIN object_reference oref 351 ON oref.obj_id = oset.obj_id 352 AND oref.deleted IS NOT NULL 353 GROUP BY oset.provider_id 356 while ($row = $DIC->database()->fetchAssoc(
$res)) {
357 if ($row[
'query'] ==
'untrashed') {
358 $this->usagesUntrashed[ $row[
'provider_id'] ] = (
int) $row[
'cnt'];
359 } elseif ($row[
'query'] ==
'trashed') {
360 $this->usagesTrashed[ $row[
'provider_id'] ] = (
int) $row[
'cnt'];
372 return isset($this->usagesUntrashed[$providerId]) && $this->usagesUntrashed[
$providerId];
377 return isset($this->usagesTrashed[$providerId]) && $this->usagesTrashed[
$providerId];
387 $tableData = array();
392 $tblRow[
'id'] = $provider->getId();
393 $tblRow[
'title'] = htmlspecialchars($provider->getTitle());
394 $tblRow[
'description'] = htmlspecialchars($provider->getDescription());
395 $tblRow[
'category'] = $provider->getCategory();
397 $tblRow[
'outcome'] = $provider->getHasOutcome();
398 $tblRow[
'external'] = $provider->isExternalProvider();
399 $tblRow[
'provider_key_customizable'] = $provider->isProviderKeyCustomizable();
400 $tblRow[
'availability'] = $provider->getAvailability();
401 $tblRow[
'creator'] = $provider->getCreator();
402 $tblRow[
'accepted_by'] = $provider->getAcceptedBy();
404 if ($provider->getProviderIcon()->exists()) {
405 $tblRow[
'icon'] = $provider->getProviderIcon()->getAbsoluteFilePath();
408 $tblRow[
'usages_untrashed'] = 0;
409 if (isset($this->usagesUntrashed[$provider->getId()])) {
410 $tblRow[
'usages_untrashed'] = $this->usagesUntrashed[$provider->getId()];
413 $tblRow[
'usages_trashed'] = 0;
414 if (isset($this->usagesTrashed[$provider->getId()])) {
415 $tblRow[
'usages_trashed'] = $this->usagesTrashed[$provider->getId()];
418 $tableData[] = $tblRow;
432 if (!(
bool) $tableRow[
'usages_trashed'] && !(
bool) $tableRow[
'usages_untrashed']) {
435 foreach ($this->
loadUsedBy($tableRow[
'id']) as $usedByObjId => $usedByData) {
436 $tableData[
$i] = $tableRow;
437 $tableData[
$i][
'usedByObjId'] = $usedByObjId;
438 $tableData[
$i][
'usedByRefId'] = $usedByData[
'ref_id'];
439 $tableData[
$i][
'usedByTitle'] = $usedByData[
'title'];
440 $tableData[
$i][
'usedByIsTrashed'] = $usedByData[
'trashed'];
455 $pId = $DIC->database()->quote($providerId,
'integer');
456 $res = $DIC->database()->query(
457 "SELECT oset.obj_id AS obj_id, oref.ref_id AS ref_id, oref.deleted as trashed, odata.title AS title" .
458 " FROM lti_consumer_settings oset, object_reference oref, object_data odata" .
459 " WHERE oset.provider_id = " . $pId .
460 " AND oref.obj_id = oset.obj_id" .
461 " AND odata.obj_id = oset.obj_id" 463 while ($row = $DIC->database()->fetchAssoc(
$res)) {
464 $retArr[$row[
'obj_id']] = [
465 'ref_id' => $row[
'ref_id'],
466 'title' => $row[
'title'],
467 'trashed' => null !== $row[
'trashed'] ? true : false
478 return current($this->providers);
486 return next($this->providers);
494 return key($this->providers);
499 return key($this->providers) !== null;
507 return reset($this->providers);
512 return implode(
'<br />', $keywords);
setKeywordFilter(string $keywordFilter)
getIsProviderKeyCustomizableFilter()
const AVAILABILITY_CREATE
if(empty($clientId)) $providerId
setIdsFilter(array $idsFilter)
setProviders(array $providers)
getKeywordsFormatted(array $keywords)
setScopeFilter(string $scopeFilter)
hasTrashedUsages(int $providerId)
hasUsages(int $providerId)
setCreatorFilter(int $creatorFilter)
add(ilLTIConsumeProvider $provider)
loadUsedBy(int $providerId)
setIsProviderKeyCustomizableFilter(?bool $isProviderKeyCustomizableFilter)
setHasOutcomeFilter(?bool $hasOutcomeFilter)
setCategoryFilter(string $categoryFilter)
const AVAILABILITY_EXISTING
string $availabilityFilter
setIsExternalFilter(?bool $isExternalFilter)
setAvailabilityFilter(string $availabilityFilter)
setTitleFilter(string $titleFilter)
bool $isProviderKeyCustomizableFilter
hasUntrashedUsages(int $providerId)