145 ?
int $a_user_id = null,
146 array $a_additional_data = null
160 case self::EVENT_PAGE_CREATED:
161 self::handlePageCreated($a_page_obj, $a_user_id);
164 case self::EVENT_PAGE_UPDATED:
165 self::handlePageUpdated($a_page_obj, $a_user_id, $a_additional_data);
168 case self::EVENT_PAGE_READ:
169 self::handlePageRead($a_page_obj, $a_user_id);
172 case self::EVENT_PAGE_DELETED:
173 self::handlePageDeletion($a_page_obj, $a_user_id);
176 case self::EVENT_PAGE_RATING:
177 self::handlePageRating($a_page_obj, $a_user_id);
189 return date(
"Y-m-d H:00:00");
205 $ilDB = $DIC->database();
207 $tstamp = self::getTimestamp();
208 $a_primary[
"ts"] = array(
"timestamp", $tstamp);
210 $ilAtomQuery =
$ilDB->buildAtomQuery();
211 $ilAtomQuery->addTableLock($a_table);
213 $ilAtomQuery->addQueryCallable(
214 function (
ilDBInterface $ilDB) use ($a_table, $a_primary, $a_values, $tstamp, &$is_update) {
216 foreach ($a_primary as $column => $value) {
217 $primary[] = $column .
" = " . $ilDB->
quote($value[1], $value[0]);
219 $primary = implode(
" AND ", $primary);
221 $set = $ilDB->
query(
"SELECT ts FROM " . $a_table .
222 " WHERE " . $primary);
224 $is_update = (bool) $ilDB->
numRows($set);
229 foreach ($a_values as $column => $value) {
230 if ($value[0] ===
"increment") {
231 $values[] = $column .
" = " . $column .
"+1";
232 } elseif ($value[0] ===
"decrement") {
233 $values[] = $column .
" = " . $column .
"-1";
235 $values[] = $column .
" = " . $ilDB->
quote($value[1], $value[0]);
238 $values = implode(
", ", $values);
240 $sql =
"UPDATE " . $a_table .
242 " WHERE " . $primary;
246 $a_values = array_merge($a_primary, $a_values);
247 $a_values[
"ts_day"] = array(
"text", substr($tstamp, 0, 10));
248 $a_values[
"ts_hour"] = array(
"integer", (
int) substr($tstamp, 11, 2));
251 foreach ($a_values as $column => $value) {
252 $columns[] = $column;
253 if ($value[0] ===
"increment") {
254 $value[0] =
"integer";
255 } elseif ($value[0] ===
"decrement") {
256 $value[0] =
"integer";
259 $values[] = $ilDB->
quote($value[1], $value[0]);
261 $values = implode(
", ", $values);
262 $columns = implode(
", ", $columns);
264 $sql =
"INSERT INTO " . $a_table .
265 " (" . $columns .
")" .
266 " VALUES (" . $values .
")";
284 "wiki_id" => array(
"integer", $a_wiki_id)
286 return self::writeData(
"wiki_stat", $primary, $a_values);
301 "wiki_id" => array(
"integer", $a_wiki_id),
302 "page_id" => array(
"integer", $a_page_id),
304 self::writeData(
"wiki_stat_page", $primary, $a_values);
317 "wiki_id" => array(
"integer", $a_wiki_id),
318 "page_id" => array(
"integer", $a_page_id),
319 "user_id" => array(
"integer", $a_user_id)
321 self::writeData(
"wiki_stat_page_user", $primary, $a_values);
333 "wiki_id" => array(
"integer", $a_wiki_id),
334 "user_id" => array(
"integer", $a_user_id)
336 self::writeData(
"wiki_stat_user", $primary, $a_values);
353 ?
int $a_page_id = null
381 "num_pages" => array(
"integer", self::countPages($a_page_obj->
getWikiId())),
382 "del_pages" => array(
"integer", 0),
383 "avg_rating" => array(
"integer", 0)
392 "new_pages" => array(
"increment", 1)
403 array $a_page_data = null
406 self::writeStatPageUser(
408 $a_page_obj->
getId(),
411 "changes" => array(
"increment", 1)
417 "int_links" => array(
"integer", $a_page_data[
"int_links"]),
418 "ext_links" => array(
"integer", $a_page_data[
"ext_links"]),
419 "footnotes" => array(
"integer", $a_page_data[
"footnotes"]),
420 "num_words" => array(
"integer", $a_page_data[
"num_words"]),
421 "num_chars" => array(
"integer", $a_page_data[
"num_chars"]),
422 "num_ratings" => array(
"integer", 0),
423 "avg_rating" => array(
"integer", 0)
425 self::writeStatPage($a_page_obj->
getWikiId(), $a_page_obj->
getId(), $values);
433 self::writeStatPageUser(
435 $a_page_obj->
getId(),
438 "read_events" => array(
"increment", 1)
449 $ilDB = $DIC->database();
453 " FROM wiki_stat_page" .
454 " WHERE wiki_id = " .
$ilDB->quote($a_page_obj->
getWikiId(),
"integer") .
455 " AND page_id = " .
$ilDB->quote($a_page_obj->
getId(),
"integer") .
457 $ilDB->setLimit(1, 0);
458 $set =
$ilDB->query($sql);
461 if (
$ilDB->numRows($set)) {
466 "int_links" => array(
"integer",
$data[
"int_links"]),
467 "ext_links" => array(
"integer",
$data[
"ext_links"]),
468 "footnotes" => array(
"integer",
$data[
"footnotes"]),
469 "num_words" => array(
"integer",
$data[
"num_words"]),
470 "num_chars" => array(
"integer",
$data[
"num_chars"]),
471 "num_ratings" => array(
"integer",
$data[
"num_ratings"]),
472 "avg_rating" => array(
"integer",
$data[
"avg_rating"]),
474 self::writeStatPage($a_page_obj->
getWikiId(), $a_page_obj->
getId(), $values);
478 $ilDB->manipulate(
"UPDATE wiki_stat_page" .
479 " SET deleted = " .
$ilDB->quote(1,
"integer") .
480 " WHERE page_id = " .
$ilDB->quote($a_page_obj->
getId(),
"integer") .
481 " AND wiki_id = " .
$ilDB->quote($a_page_obj->
getWikiId(),
"integer"));
484 $rating = self::getAverageRating($a_page_obj->
getWikiId());
488 "del_pages" => array(
"increment", 1),
489 "num_pages" => array(
"integer", self::countPages($a_page_obj->
getWikiId())),
490 "avg_rating" => array(
"integer", $rating[
"avg"] * 100)
500 $rating = self::getAverageRating($a_page_obj->
getWikiId(), $a_page_obj->
getId());
505 $a_page_obj->
getId(),
507 "num_ratings" => array(
"integer", $rating[
"cnt"]),
508 "avg_rating" => array(
"integer", $rating[
"avg"] * 100),
512 $rating = self::getAverageRating($a_page_obj->
getWikiId());
515 $is_update = self::writeStat(
518 "avg_rating" => array(
"integer", $rating[
"avg"] * 100)
527 "num_pages" => array(
"integer", self::countPages($a_page_obj->
getWikiId()))
544 string $a_aggr_value,
545 ?
string $a_sub_field = null,
546 ?
int $a_sub_id = null,
547 bool $a_build_full_period =
false 551 $ilDB = $DIC->database();
556 $sql =
"SELECT ts_day, " . sprintf($a_aggr_value, $a_field) .
" " . $a_field;
557 if ($a_table ===
"wiki_stat_page" && $a_sub_field) {
558 $sql .=
", MAX(deleted) deleted";
560 $sql .=
" FROM " . $a_table .
561 " WHERE wiki_id = " .
$ilDB->quote($a_wiki_id,
"integer") .
562 " AND ts_day >= " .
$ilDB->quote($a_day_from,
"text") .
563 " AND ts_day <= " .
$ilDB->quote($a_day_to,
"text");
564 if (!$a_build_full_period) {
566 $sql .=
" AND " . $a_field .
" > " .
$ilDB->quote(0,
"integer") .
567 " AND " . $a_field .
" IS NOT NULL";
570 $sql .=
" AND " . $a_sub_field .
" = " .
$ilDB->quote($a_sub_id,
"integer");
572 $sql .=
" GROUP BY ts_day" .
574 $set =
$ilDB->query($sql);
575 while ($row =
$ilDB->fetchAssoc($set)) {
576 $res[$row[
"ts_day"]] = $row[$a_field];
578 $deleted = max(($row[
"deleted"] ?? 0), $deleted);
581 if ($a_build_full_period) {
582 $period_first = $a_day_from;
583 $period_last = $a_day_to;
586 if ($a_table ===
"wiki_stat_page" && $a_sub_field && $deleted) {
587 $sql =
"SELECT MAX(ts_day) last_day, MIN(ts_day) first_day" .
588 " FROM " . $a_table .
589 " WHERE wiki_id = " .
$ilDB->quote($a_wiki_id,
"integer") .
590 " AND " . $a_sub_field .
" = " .
$ilDB->quote($a_sub_id,
"integer");
591 $set =
$ilDB->query($sql);
592 $row =
$ilDB->fetchAssoc($set);
593 $last_day = $row[
"last_day"];
594 if ($last_day < $period_last) {
595 $period_last = $last_day;
597 $first_day = $row[
"first_day"];
598 if ($first_day > $period_first) {
599 $period_first = $first_day;
603 $last_before_period = null;
604 if (!(
$res[$a_day_from] ??
false)) {
605 $last_before_period = self::getWikiLast($a_wiki_id, $a_day_from, $a_table, $a_field, $a_sub_field, $a_sub_id);
609 self::buildFullPeriodData(
$res, $period_first, $period_last, $last_before_period);
620 ?
string $a_sub_field = null,
621 ?
int $a_sub_id = null
625 $ilDB = $DIC->database();
628 $sql =
"SELECT MAX(" . $a_field .
") latest" .
629 " FROM " . $a_table .
630 " WHERE wiki_id = " .
$ilDB->quote($a_wiki_id,
"integer") .
631 " AND ts_day < " .
$ilDB->quote($a_day_from,
"text");
633 $sql .=
" AND " . $a_sub_field .
" = " .
$ilDB->quote($a_sub_id,
"integer");
635 $sql .=
" GROUP BY ts_day" .
636 " ORDER BY ts_day DESC";
637 $ilDB->setLimit(1, 0);
638 $set =
$ilDB->query($sql);
639 $last_before_period =
$ilDB->fetchAssoc($set);
640 return (
int) ($last_before_period[
"latest"] ?? 0);
650 string $a_aggr_value,
652 ?
string $a_sub_field = null,
653 ?
int $a_sub_id = null,
654 bool $a_build_full_period =
false 658 $ilDB = $DIC->database();
662 if (!$a_build_full_period) {
663 $sql =
"SELECT ts_day, " . sprintf($a_aggr_value, $a_field) .
" " . $a_field .
666 " SELECT ts_day, " . sprintf($a_aggr_sub, $a_field) .
" " . $a_field .
667 " FROM " . $a_table .
668 " WHERE wiki_id = " .
$ilDB->quote($a_wiki_id,
"integer") .
669 " AND ts_day >= " .
$ilDB->quote($a_day_from,
"text") .
670 " AND ts_day <= " .
$ilDB->quote($a_day_to,
"text") .
671 " AND " . $a_field .
" > " .
$ilDB->quote(0,
"integer") .
672 " AND " . $a_field .
" IS NOT NULL";
674 $sql .=
" AND " . $a_sub_field .
" = " .
$ilDB->quote($a_sub_id,
"integer");
676 $sql .=
" GROUP BY ts_day, " . $a_aggr_by .
680 $set =
$ilDB->query($sql);
681 while ($row =
$ilDB->fetchAssoc($set)) {
682 $res[$row[
"ts_day"]] = $row[$a_field];
685 $tmp = $all_aggr_ids = $deleted_in_period = $first_day_in_period = array();
687 if ($a_table !==
"wiki_stat_page") {
688 echo
"can only build full period averages for wiki_stat_page";
695 " SELECT " . $a_aggr_by .
", MAX(deleted) deleted, MAX(ts_day) last_day, MIN(ts_day) first_day" .
696 " FROM " . $a_table .
697 " WHERE wiki_id = " .
$ilDB->quote($a_wiki_id,
"integer") .
698 " GROUP BY " . $a_aggr_by .
700 " WHERE first_day <= " .
$ilDB->quote($a_day_to,
"text") .
701 " AND (last_day >= " .
$ilDB->quote($a_day_from,
"text") .
702 " OR deleted = " .
$ilDB->quote(0,
"integer") .
")";
703 $set =
$ilDB->query($sql);
704 while ($row =
$ilDB->fetchAssoc($set)) {
705 $all_aggr_ids[] = $row[$a_aggr_by];
708 if ($row[
"deleted"] && $row[
"last_day"] < $a_day_to) {
709 $deleted_in_period[$row[$a_aggr_by]] = $row[
"last_day"];
712 if ($row[
"first_day"] > $a_day_from) {
713 $first_day_in_period[$row[$a_aggr_by]] = $row[
"first_day"];
718 $sql =
" SELECT ts_day, " . $a_aggr_by .
", " . sprintf($a_aggr_sub, $a_field) .
" " . $a_field .
719 " FROM " . $a_table .
720 " WHERE wiki_id = " .
$ilDB->quote($a_wiki_id,
"integer") .
721 " AND ts_day >= " .
$ilDB->quote($a_day_from,
"text") .
722 " AND ts_day <= " .
$ilDB->quote($a_day_to,
"text");
723 $sql .=
" GROUP BY ts_day, " . $a_aggr_by;
724 $set =
$ilDB->query($sql);
725 while ($row =
$ilDB->fetchAssoc($set)) {
726 if (!in_array($row[$a_aggr_by], $all_aggr_ids)) {
727 throw new ilWikiException(
"Unexpected wiki_stat_page_entry: " . print_r($row,
true));
729 $tmp[$row[$a_aggr_by]][$row[
"ts_day"]] = $row[$a_field];
733 foreach ($all_aggr_ids as $aggr_by_id) {
735 if (!isset($tmp[$aggr_by_id])) {
736 $tmp[$aggr_by_id] = array();
740 $last_before_period = null;
741 if (!($tmp[$aggr_by_id][$a_day_from] ??
false)) {
742 $last_before_period = self::getWikiLast($a_wiki_id, $a_day_from, $a_table, $a_field, $a_aggr_by, $aggr_by_id);
746 $first_period_day = $first_day_in_period[$aggr_by_id] ?? $a_day_from;
749 $last_period_day = $deleted_in_period[$aggr_by_id] ?? $a_day_to;
752 self::buildFullPeriodData($tmp[$aggr_by_id], $first_period_day, $last_period_day, $last_before_period,
true);
755 foreach ($tmp[$aggr_by_id] as $day => $value) {
756 $res[$day][$aggr_by_id] = $value;
761 foreach (
$res as $day => $values) {
762 switch ($a_aggr_value) {
764 $res[$day] = array_sum($values) / count($values);
768 $res[$day] = array_sum($values);
785 ?
int $a_last_before_period = null,
786 bool $a_allow_zero =
false 791 $today = date(
"Y-m-d");
792 $current = explode(
"-", $a_day_from);
793 $current = date(
"Y-m-d", mktime(0, 0, 1, $current[1], $current[2], $current[0]));
794 while ($current <= $a_day_to &&
796 if (!isset($a_res[$current])) {
797 if ($current <= $today) {
799 if ($last !== null) {
800 $a_res[$current] = $last;
803 elseif ($a_last_before_period || $a_allow_zero) {
804 $a_res[$current] = $a_last_before_period;
808 $last = $a_res[$current];
811 $current = explode(
"-", $current);
812 $current = date(
"Y-m-d", mktime(0, 0, 1, $current[1], $current[2] + 1, $current[0]));
826 return self::getWikiAggr($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat",
"num_pages",
"MAX(%s)", null, null,
true);
834 return self::getWikiAggr($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_user",
"new_pages",
"SUM(%s)");
842 return self::getWikiAggrSub($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_user",
"new_pages",
"user_id",
"AVG(%s)",
"SUM(%s)");
850 return self::getWikiAggr($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat",
"del_pages",
"SUM(%s)");
858 return self::getWikiAggr($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page_user",
"read_events",
"SUM(%s)");
868 $ilDB = $DIC->database();
872 $sql =
"SELECT ts_day, COUNT(DISTINCT(page_id)) num_changed_pages" .
873 " FROM wiki_stat_page_user" .
874 " WHERE wiki_id = " .
$ilDB->quote($a_wiki_id,
"integer") .
875 " AND ts_day >= " .
$ilDB->quote($a_day_from,
"text") .
876 " AND ts_day <= " .
$ilDB->quote($a_day_to,
"text") .
877 " AND changes > " .
$ilDB->quote(0,
"integer") .
878 " AND changes IS NOT NULL" .
881 $set =
$ilDB->query($sql);
882 while ($row =
$ilDB->fetchAssoc($set)) {
883 $res[$row[
"ts_day"]] = $row[
"num_changed_pages"];
896 $ilDB = $DIC->database();
900 $sql =
"SELECT ts_day, AVG(num_changed_pages) num_changed_pages" .
903 " SELECT ts_day, COUNT(DISTINCT(page_id)) num_changed_pages" .
904 " FROM wiki_stat_page_user" .
905 " WHERE wiki_id = " .
$ilDB->quote($a_wiki_id,
"integer") .
906 " AND ts_day >= " .
$ilDB->quote($a_day_from,
"text") .
907 " AND ts_day <= " .
$ilDB->quote($a_day_to,
"text") .
908 " AND changes > " .
$ilDB->quote(0,
"integer") .
909 " AND changes IS NOT NULL" .
910 " GROUP BY ts_day, user_id" .
914 $set =
$ilDB->query($sql);
915 while ($row =
$ilDB->fetchAssoc($set)) {
916 $res[$row[
"ts_day"]] = $row[
"num_changed_pages"];
926 ?
string $a_sub_field = null,
927 ?
int $a_sub_id = null
931 $ilDB = $DIC->database();
935 $sql =
"SELECT ts_day, COUNT(DISTINCT(user_id)) num_changed_users" .
936 " FROM wiki_stat_page_user" .
937 " WHERE wiki_id = " .
$ilDB->quote($a_wiki_id,
"integer") .
938 " AND ts_day >= " .
$ilDB->quote($a_day_from,
"text") .
939 " AND ts_day <= " .
$ilDB->quote($a_day_to,
"text") .
940 " AND changes > " .
$ilDB->quote(0,
"integer") .
941 " AND changes IS NOT NULL";
943 $sql .=
" AND " . $a_sub_field .
" = " .
$ilDB->quote($a_sub_id,
"integer");
945 $sql .=
" GROUP BY ts_day" .
947 $set =
$ilDB->query($sql);
948 while ($row =
$ilDB->fetchAssoc($set)) {
949 $res[$row[
"ts_day"]] = $row[
"num_changed_users"];
962 $ilDB = $DIC->database();
966 $sql =
"SELECT ts_day, AVG(num_changed_users) num_changed_users" .
969 " SELECT ts_day, COUNT(DISTINCT(user_id)) num_changed_users" .
970 " FROM wiki_stat_page_user" .
971 " WHERE wiki_id = " .
$ilDB->quote($a_wiki_id,
"integer") .
972 " AND ts_day >= " .
$ilDB->quote($a_day_from,
"text") .
973 " AND ts_day <= " .
$ilDB->quote($a_day_to,
"text") .
974 " AND changes > " .
$ilDB->quote(0,
"integer") .
975 " AND changes IS NOT NULL" .
976 " GROUP BY ts_day, page_id" .
980 $set =
$ilDB->query($sql);
981 while ($row =
$ilDB->fetchAssoc($set)) {
982 $res[$row[
"ts_day"]] = $row[
"num_changed_users"];
993 return self::getWikiAggr($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"num_ratings",
"SUM(%s)");
1001 return self::getWikiAggrSub($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"num_ratings",
"page_id",
"AVG(%s)",
"SUM(%s)");
1009 $res = self::getWikiAggr($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat",
"avg_rating",
"AVG(%s)");
1011 foreach (array_keys(
$res) as $day) {
1024 return self::getWikiAggrSub($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"int_links",
"page_id",
"SUM(%s)",
"MAX(%s)", null, null,
true);
1032 return self::getWikiAggrSub($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"int_links",
"page_id",
"AVG(%s)",
"MAX(%s)", null, null,
true);
1040 return self::getWikiAggrSub($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"ext_links",
"page_id",
"SUM(%s)",
"MAX(%s)", null, null,
true);
1048 return self::getWikiAggrSub($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"ext_links",
"page_id",
"AVG(%s)",
"MAX(%s)", null, null,
true);
1056 return self::getWikiAggrSub($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"num_words",
"page_id",
"SUM(%s)",
"MAX(%s)", null, null,
true);
1064 return self::getWikiAggrSub($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"num_words",
"page_id",
"AVG(%s)",
"MAX(%s)", null, null,
true);
1072 return self::getWikiAggrSub($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"num_chars",
"page_id",
"SUM(%s)",
"MAX(%s)", null, null,
true);
1080 return self::getWikiAggrSub($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"num_chars",
"page_id",
"AVG(%s)",
"MAX(%s)", null, null,
true);
1088 return self::getWikiAggrSub($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"footnotes",
"page_id",
"SUM(%s)",
"MAX(%s)", null, null,
true);
1096 return self::getWikiAggrSub($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"footnotes",
"page_id",
"AVG(%s)",
"MAX(%s)", null, null,
true);
1110 return self::getWikiAggr($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page_user",
"changes",
"SUM(%s)",
"page_id", $a_page_id);
1119 return self::getWikiAggrSub($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page_user",
"changes",
"user_id",
"AVG(%s)",
"SUM(%s)",
"page_id", $a_page_id);
1128 return self::getWikiUserEditPages($a_wiki_id, $a_day_from, $a_day_to,
"page_id", $a_page_id);
1137 return self::getWikiAggr($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page_user",
"read_events",
"SUM(%s)",
"page_id", $a_page_id);
1146 return self::getWikiAggr($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"int_links",
"MAX(%s)",
"page_id", $a_page_id,
true);
1155 return self::getWikiAggr($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"ext_links",
"MAX(%s)",
"page_id", $a_page_id,
true);
1164 return self::getWikiAggr($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"num_words",
"MAX(%s)",
"page_id", $a_page_id,
true);
1173 return self::getWikiAggr($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"num_chars",
"MAX(%s)",
"page_id", $a_page_id,
true);
1182 return self::getWikiAggr($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"footnotes",
"MAX(%s)",
"page_id", $a_page_id,
true);
1191 return self::getWikiAggr($a_wiki_id, $a_day_from, $a_day_to,
"wiki_stat_page",
"num_ratings",
"SUM(%s)",
"page_id", $a_page_id);
1204 $ilDB = $DIC->database();
1209 $set =
$ilDB->query(
"SELECT DISTINCT(SUBSTR(ts_day, 1, 7)) " .
$ilDB->quoteIdentifier(
"month") .
1210 " FROM wiki_stat_page_user" .
1211 " WHERE wiki_id = " .
$ilDB->quote($a_wiki_id,
"integer") .
1212 " AND ts_day IS NOT NULL");
1213 while ($row =
$ilDB->fetchAssoc($set)) {
1214 $res[] = $row[
"month"];
1223 self::KEY_FIGURE_WIKI_NUM_PAGES
1224 ,self::KEY_FIGURE_WIKI_NEW_PAGES
1225 ,self::KEY_FIGURE_WIKI_NEW_PAGES_AVG
1226 ,self::KEY_FIGURE_WIKI_EDIT_PAGES
1227 ,self::KEY_FIGURE_WIKI_EDIT_PAGES_AVG
1228 ,self::KEY_FIGURE_WIKI_DELETED_PAGES
1229 ,self::KEY_FIGURE_WIKI_READ_PAGES
1230 ,self::KEY_FIGURE_WIKI_USER_EDIT_PAGES
1231 ,self::KEY_FIGURE_WIKI_USER_EDIT_PAGES_AVG
1232 ,self::KEY_FIGURE_WIKI_NUM_RATING
1233 ,self::KEY_FIGURE_WIKI_NUM_RATING_AVG
1234 ,self::KEY_FIGURE_WIKI_RATING_AVG
1235 ,self::KEY_FIGURE_WIKI_INTERNAL_LINKS
1236 ,self::KEY_FIGURE_WIKI_INTERNAL_LINKS_AVG
1237 ,self::KEY_FIGURE_WIKI_EXTERNAL_LINKS
1238 ,self::KEY_FIGURE_WIKI_EXTERNAL_LINKS_AVG
1239 ,self::KEY_FIGURE_WIKI_WORDS
1240 ,self::KEY_FIGURE_WIKI_WORDS_AVG
1241 ,self::KEY_FIGURE_WIKI_CHARS
1242 ,self::KEY_FIGURE_WIKI_CHARS_AVG
1243 ,self::KEY_FIGURE_WIKI_FOOTNOTES
1244 ,self::KEY_FIGURE_WIKI_FOOTNOTES_AVG
1251 self::KEY_FIGURE_WIKI_PAGE_CHANGES
1252 ,self::KEY_FIGURE_WIKI_PAGE_CHANGES_AVG
1253 ,self::KEY_FIGURE_WIKI_PAGE_USER_EDIT
1254 ,self::KEY_FIGURE_WIKI_PAGE_READ
1255 ,self::KEY_FIGURE_WIKI_PAGE_INTERNAL_LINKS
1256 ,self::KEY_FIGURE_WIKI_PAGE_EXTERNAL_LINKS
1257 ,self::KEY_FIGURE_WIKI_PAGE_WORDS
1258 ,self::KEY_FIGURE_WIKI_PAGE_CHARS
1259 ,self::KEY_FIGURE_WIKI_PAGE_FOOTNOTES
1260 ,self::KEY_FIGURE_WIKI_PAGE_RATINGS
1269 $lng = $DIC->language();
1273 self::KEY_FIGURE_WIKI_NUM_PAGES =>
$lng->txt(
"wiki_stat_num_pages")
1274 ,self::KEY_FIGURE_WIKI_NEW_PAGES =>
$lng->txt(
"wiki_stat_new_pages")
1275 ,self::KEY_FIGURE_WIKI_NEW_PAGES_AVG =>
$lng->txt(
"wiki_stat_new_pages_avg")
1276 ,self::KEY_FIGURE_WIKI_EDIT_PAGES =>
$lng->txt(
"wiki_stat_edit_pages")
1277 ,self::KEY_FIGURE_WIKI_EDIT_PAGES_AVG =>
$lng->txt(
"wiki_stat_edit_pages_avg")
1278 ,self::KEY_FIGURE_WIKI_DELETED_PAGES =>
$lng->txt(
"wiki_stat_deleted_pages")
1279 ,self::KEY_FIGURE_WIKI_READ_PAGES =>
$lng->txt(
"wiki_stat_read_pages")
1280 ,self::KEY_FIGURE_WIKI_USER_EDIT_PAGES =>
$lng->txt(
"wiki_stat_user_edit_pages")
1281 ,self::KEY_FIGURE_WIKI_USER_EDIT_PAGES_AVG =>
$lng->txt(
"wiki_stat_user_edit_pages_avg")
1282 ,self::KEY_FIGURE_WIKI_NUM_RATING =>
$lng->txt(
"wiki_stat_num_rating")
1283 ,self::KEY_FIGURE_WIKI_NUM_RATING_AVG =>
$lng->txt(
"wiki_stat_num_rating_avg")
1284 ,self::KEY_FIGURE_WIKI_RATING_AVG =>
$lng->txt(
"wiki_stat_rating_avg")
1285 ,self::KEY_FIGURE_WIKI_INTERNAL_LINKS =>
$lng->txt(
"wiki_stat_internal_links")
1286 ,self::KEY_FIGURE_WIKI_INTERNAL_LINKS_AVG =>
$lng->txt(
"wiki_stat_internal_links_avg")
1287 ,self::KEY_FIGURE_WIKI_EXTERNAL_LINKS =>
$lng->txt(
"wiki_stat_external_links")
1288 ,self::KEY_FIGURE_WIKI_EXTERNAL_LINKS_AVG =>
$lng->txt(
"wiki_stat_external_links_avg")
1289 ,self::KEY_FIGURE_WIKI_WORDS =>
$lng->txt(
"wiki_stat_words")
1290 ,self::KEY_FIGURE_WIKI_WORDS_AVG =>
$lng->txt(
"wiki_stat_words_avg")
1291 ,self::KEY_FIGURE_WIKI_CHARS =>
$lng->txt(
"wiki_stat_chars")
1292 ,self::KEY_FIGURE_WIKI_CHARS_AVG =>
$lng->txt(
"wiki_stat_chars_avg")
1293 ,self::KEY_FIGURE_WIKI_FOOTNOTES =>
$lng->txt(
"wiki_stat_footnotes")
1294 ,self::KEY_FIGURE_WIKI_FOOTNOTES_AVG =>
$lng->txt(
"wiki_stat_footnotes_avg")
1296 ,self::KEY_FIGURE_WIKI_PAGE_CHANGES =>
$lng->txt(
"wiki_stat_page_changes")
1297 ,self::KEY_FIGURE_WIKI_PAGE_CHANGES_AVG =>
$lng->txt(
"wiki_stat_page_changes_avg")
1298 ,self::KEY_FIGURE_WIKI_PAGE_USER_EDIT =>
$lng->txt(
"wiki_stat_page_user_edit")
1299 ,self::KEY_FIGURE_WIKI_PAGE_READ =>
$lng->txt(
"wiki_stat_page_read")
1300 ,self::KEY_FIGURE_WIKI_PAGE_INTERNAL_LINKS =>
$lng->txt(
"wiki_stat_page_internal_links")
1301 ,self::KEY_FIGURE_WIKI_PAGE_EXTERNAL_LINKS =>
$lng->txt(
"wiki_stat_page_external_links")
1302 ,self::KEY_FIGURE_WIKI_PAGE_WORDS =>
$lng->txt(
"wiki_stat_page_words")
1303 ,self::KEY_FIGURE_WIKI_PAGE_CHARS =>
$lng->txt(
"wiki_stat_page_characters")
1304 ,self::KEY_FIGURE_WIKI_PAGE_FOOTNOTES =>
$lng->txt(
"wiki_stat_page_footnotes")
1305 ,self::KEY_FIGURE_WIKI_PAGE_RATINGS =>
$lng->txt(
"wiki_stat_page_ratings")
1308 return $map[$a_figure];
1317 switch ($a_figure) {
1318 case self::KEY_FIGURE_WIKI_NUM_PAGES:
1319 return self::getWikiNumPages($a_wiki_id, $a_from, $a_to);
1321 case self::KEY_FIGURE_WIKI_NEW_PAGES:
1322 return self::getWikiNewPagesSum($a_wiki_id, $a_from, $a_to);
1324 case self::KEY_FIGURE_WIKI_NEW_PAGES_AVG:
1325 return self::getWikiNewPagesAvg($a_wiki_id, $a_from, $a_to);
1327 case self::KEY_FIGURE_WIKI_EDIT_PAGES:
1328 return self::getWikiEditPagesSum($a_wiki_id, $a_from, $a_to);
1330 case self::KEY_FIGURE_WIKI_EDIT_PAGES_AVG:
1331 return self::getWikiEditPagesAvg($a_wiki_id, $a_from, $a_to);
1333 case self::KEY_FIGURE_WIKI_DELETED_PAGES:
1334 return self::getWikiDeletedPages($a_wiki_id, $a_from, $a_to);
1336 case self::KEY_FIGURE_WIKI_READ_PAGES:
1337 return self::getWikiReadPages($a_wiki_id, $a_from, $a_to);
1339 case self::KEY_FIGURE_WIKI_USER_EDIT_PAGES:
1340 return self::getWikiUserEditPages($a_wiki_id, $a_from, $a_to);
1342 case self::KEY_FIGURE_WIKI_USER_EDIT_PAGES_AVG:
1343 return self::getWikiUserEditPagesAvg($a_wiki_id, $a_from, $a_to);
1345 case self::KEY_FIGURE_WIKI_NUM_RATING:
1346 return self::getWikiNumRating($a_wiki_id, $a_from, $a_to);
1348 case self::KEY_FIGURE_WIKI_NUM_RATING_AVG:
1349 return self::getWikiNumRatingAvg($a_wiki_id, $a_from, $a_to);
1351 case self::KEY_FIGURE_WIKI_RATING_AVG:
1352 return self::getWikiRatingAvg($a_wiki_id, $a_from, $a_to);
1354 case self::KEY_FIGURE_WIKI_INTERNAL_LINKS:
1355 return self::getWikiInternalLinks($a_wiki_id, $a_from, $a_to);
1357 case self::KEY_FIGURE_WIKI_INTERNAL_LINKS_AVG:
1358 return self::getWikiInternalLinksAvg($a_wiki_id, $a_from, $a_to);
1360 case self::KEY_FIGURE_WIKI_EXTERNAL_LINKS:
1361 return self::getWikiExternalLinks($a_wiki_id, $a_from, $a_to);
1363 case self::KEY_FIGURE_WIKI_EXTERNAL_LINKS_AVG:
1364 return self::getWikiExternalLinksAvg($a_wiki_id, $a_from, $a_to);
1366 case self::KEY_FIGURE_WIKI_WORDS:
1367 return self::getWikiWords($a_wiki_id, $a_from, $a_to);
1369 case self::KEY_FIGURE_WIKI_WORDS_AVG:
1370 return self::getWikiWordsAvg($a_wiki_id, $a_from, $a_to);
1372 case self::KEY_FIGURE_WIKI_CHARS:
1373 return self::getWikiCharacters($a_wiki_id, $a_from, $a_to);
1375 case self::KEY_FIGURE_WIKI_CHARS_AVG:
1376 return self::getWikiCharactersAvg($a_wiki_id, $a_from, $a_to);
1378 case self::KEY_FIGURE_WIKI_FOOTNOTES:
1379 return self::getWikiFootnotes($a_wiki_id, $a_from, $a_to);
1381 case self::KEY_FIGURE_WIKI_FOOTNOTES_AVG:
1382 return self::getWikiFootnotesAvg($a_wiki_id, $a_from, $a_to);
1394 switch ($a_figure) {
1395 case self::KEY_FIGURE_WIKI_PAGE_CHANGES:
1396 return self::getWikiPageChanges($a_wiki_id, $a_page_id, $a_from, $a_to);
1398 case self::KEY_FIGURE_WIKI_PAGE_CHANGES_AVG:
1399 return self::getWikiPageChangesAvg($a_wiki_id, $a_page_id, $a_from, $a_to);
1401 case self::KEY_FIGURE_WIKI_PAGE_USER_EDIT:
1402 return self::getWikiPageUserEdit($a_wiki_id, $a_page_id, $a_from, $a_to);
1404 case self::KEY_FIGURE_WIKI_PAGE_READ:
1405 return self::getWikiPageRead($a_wiki_id, $a_page_id, $a_from, $a_to);
1407 case self::KEY_FIGURE_WIKI_PAGE_INTERNAL_LINKS:
1408 return self::getWikiPageInternalLinks($a_wiki_id, $a_page_id, $a_from, $a_to);
1410 case self::KEY_FIGURE_WIKI_PAGE_EXTERNAL_LINKS:
1411 return self::getWikiPageExternalLinks($a_wiki_id, $a_page_id, $a_from, $a_to);
1413 case self::KEY_FIGURE_WIKI_PAGE_FOOTNOTES:
1414 return self::getWikiPageFootnotes($a_wiki_id, $a_page_id, $a_from, $a_to);
1416 case self::KEY_FIGURE_WIKI_PAGE_WORDS:
1417 return self::getWikiPageWords($a_wiki_id, $a_page_id, $a_from, $a_to);
1419 case self::KEY_FIGURE_WIKI_PAGE_CHARS:
1420 return self::getWikiPageCharacters($a_wiki_id, $a_page_id, $a_from, $a_to);
1422 case self::KEY_FIGURE_WIKI_PAGE_RATINGS:
1423 return self::getWikiPageRatings($a_wiki_id, $a_page_id, $a_from, $a_to);
1432 foreach (self::getFigures() as $figure) {
1433 $res[$figure] = self::getFigureTitle($figure);
1443 foreach (self::getFiguresPage() as $figure) {
1444 $res[$figure] = self::getFigureTitle($figure);
static getFigureTitle(int $a_figure)
const KEY_FIGURE_WIKI_PAGE_USER_EDIT
static getWikiAggrSub(int $a_wiki_id, string $a_day_from, string $a_day_to, string $a_table, string $a_field, string $a_aggr_by, string $a_aggr_value, string $a_aggr_sub, ?string $a_sub_field=null, ?int $a_sub_id=null, bool $a_build_full_period=false)
const KEY_FIGURE_WIKI_NUM_RATING
static getWikiInternalLinks(int $a_wiki_id, string $a_day_from, string $a_day_to)
static getWikiNumRating(int $a_wiki_id, string $a_day_from, string $a_day_to)
const KEY_FIGURE_WIKI_WORDS
const KEY_FIGURE_WIKI_FOOTNOTES
const KEY_FIGURE_WIKI_USER_EDIT_PAGES
const KEY_FIGURE_WIKI_PAGE_RATINGS
numRows(ilDBStatement $statement)
const KEY_FIGURE_WIKI_USER_EDIT_PAGES_AVG
const KEY_FIGURE_WIKI_PAGE_READ
const KEY_FIGURE_WIKI_FOOTNOTES_AVG
static getWikiNumRatingAvg(int $a_wiki_id, string $a_day_from, string $a_day_to)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getAverageRating(int $a_wiki_id, ?int $a_page_id=null)
Get average rating for wiki or wiki page.
static getWikiPageChangesAvg(int $a_wiki_id, int $a_page_id, string $a_day_from, string $a_day_to)
const KEY_FIGURE_WIKI_NEW_PAGES_AVG
const KEY_FIGURE_WIKI_PAGE_INTERNAL_LINKS
static getWikiPageExternalLinks(int $a_wiki_id, int $a_page_id, string $a_day_from, string $a_day_to)
static getWikiEditPagesAvg(int $a_wiki_id, string $a_day_from, string $a_day_to)
const KEY_FIGURE_WIKI_INTERNAL_LINKS
static getWikiCharacters(int $a_wiki_id, string $a_day_from, string $a_day_to)
const KEY_FIGURE_WIKI_NUM_RATING_AVG
const KEY_FIGURE_WIKI_NUM_PAGES
static getWikiWords(int $a_wiki_id, string $a_day_from, string $a_day_to)
const KEY_FIGURE_WIKI_PAGE_CHARS
static getWikiLast(int $a_wiki_id, string $a_day_from, string $a_table, string $a_field, ?string $a_sub_field=null, ?int $a_sub_id=null)
const KEY_FIGURE_WIKI_PAGE_EXTERNAL_LINKS
const KEY_FIGURE_WIKI_EXTERNAL_LINKS_AVG
const KEY_FIGURE_WIKI_PAGE_FOOTNOTES
quote($value, string $type)
static handlePageCreated(ilWikiPage $a_page_obj, int $a_user_id)
Handle wiki page creation.
static getAllWikiPages(int $a_wiki_id)
static getWikiFootnotesAvg(int $a_wiki_id, string $a_day_from, string $a_day_to)
const KEY_FIGURE_WIKI_EXTERNAL_LINKS
static getWikiPageInternalLinks(int $a_wiki_id, int $a_page_id, string $a_day_from, string $a_day_to)
static getFigureDataPage(int $a_wiki_id, int $a_page_id, int $a_figure, string $a_from, string $a_to)
static getWikiPageCharacters(int $a_wiki_id, int $a_page_id, string $a_day_from, string $a_day_to)
static getWikiCharactersAvg(int $a_wiki_id, string $a_day_from, string $a_day_to)
static handlePageRating(ilWikiPage $a_page_obj, int $a_user_id)
static getTimestamp()
Get current time frame (hourly)
static getWikiAggr(int $a_wiki_id, string $a_day_from, string $a_day_to, string $a_table, string $a_field, string $a_aggr_value, ?string $a_sub_field=null, ?int $a_sub_id=null, bool $a_build_full_period=false)
static handlePageRead(ilWikiPage $a_page_obj, int $a_user_id)
static writeStatPageUser(int $a_wiki_id, int $a_page_id, int $a_user_id, array $a_values)
Write data to wiki_stat_page_user.
static getWikiPageFootnotes(int $a_wiki_id, int $a_page_id, string $a_day_from, string $a_day_to)
static getWikiEditPagesSum(int $a_wiki_id, string $a_day_from, string $a_day_to)
static getWikiReadPages(int $a_wiki_id, string $a_day_from, string $a_day_to)
static getFigureData(int $a_wiki_id, int $a_figure, string $a_from, string $a_to)
static getWikiPageUserEdit(int $a_wiki_id, int $a_page_id, string $a_day_from, string $a_day_to)
static getFigureOptions()
static handlePageDeletion(ilWikiPage $a_page_obj, int $a_user_id)
static writeData(string $a_table, array $a_primary, array $a_values)
Write data to DB.
static getWikiPageWords(int $a_wiki_id, int $a_page_id, string $a_day_from, string $a_day_to)
const KEY_FIGURE_WIKI_INTERNAL_LINKS_AVG
query(string $query)
Run a (read-only) Query on the database.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static writeStat(string $a_wiki_id, array $a_values)
Write data to wiki_stat.
const KEY_FIGURE_WIKI_RATING_AVG
static getAvailableMonths(int $a_wiki_id)
const KEY_FIGURE_WIKI_EDIT_PAGES_AVG
static getWikiRatingAvg(int $a_wiki_id, string $a_day_from, string $a_day_to)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getWikiExternalLinks(int $a_wiki_id, string $a_day_from, string $a_day_to)
const KEY_FIGURE_WIKI_CHARS
static writeStatUser(int $a_wiki_id, int $a_user_id, array $a_values)
Write to wiki_stat_user.
static countPages(int $a_wiki_id)
Count pages in wiki.
static getWikiPageRead(int $a_wiki_id, int $a_page_id, string $a_day_from, string $a_day_to)
static getWikiNewPagesAvg(int $a_wiki_id, string $a_day_from, string $a_day_to)
static writeStatPage(int $a_wiki_id, int $a_page_id, array $a_values)
Write data to wiki_stat_page.
static getWikiNumPages(int $a_wiki_id, string $a_day_from, string $a_day_to)
static getWikiUserEditPagesAvg(int $a_wiki_id, string $a_day_from, string $a_day_to)
static getWikiPageRatings(int $a_wiki_id, int $a_page_id, string $a_day_from, string $a_day_to)
static getWikiNewPagesSum(int $a_wiki_id, string $a_day_from, string $a_day_to)
static buildFullPeriodData(array &$a_res, string $a_day_from, string $a_day_to, ?int $a_last_before_period=null, bool $a_allow_zero=false)
static getWikiInternalLinksAvg(int $a_wiki_id, string $a_day_from, string $a_day_to)
const KEY_FIGURE_WIKI_NEW_PAGES
static handleEvent(int $a_event, ilWikiPage $a_page_obj, ?int $a_user_id=null, array $a_additional_data=null)
Handle wiki page event.
static getWikiWordsAvg(int $a_wiki_id, string $a_day_from, string $a_day_to)
const KEY_FIGURE_WIKI_EDIT_PAGES
const KEY_FIGURE_WIKI_CHARS_AVG
static getWikiPageChanges(int $a_wiki_id, int $a_page_id, string $a_day_from, string $a_day_to)
const KEY_FIGURE_WIKI_PAGE_WORDS
static getFigureOptionsPage()
static getOverallRatingForObject(int $a_obj_id, string $a_obj_type, int $a_sub_obj_id=null, string $a_sub_obj_type=null, int $a_category_id=null)
Get overall rating for an object.
manipulate(string $query)
Run a (write) Query on the database.
const KEY_FIGURE_WIKI_READ_PAGES
static handlePageUpdated(ilWikiPage $a_page_obj, int $a_user_id, array $a_page_data=null)
Handle wiki page update.
const KEY_FIGURE_WIKI_WORDS_AVG
static getWikiExternalLinksAvg(int $a_wiki_id, string $a_day_from, string $a_day_to)
const KEY_FIGURE_WIKI_DELETED_PAGES
static getWikiUserEditPages(int $a_wiki_id, string $a_day_from, string $a_day_to, ?string $a_sub_field=null, ?int $a_sub_id=null)
static getWikiDeletedPages(int $a_wiki_id, string $a_day_from, string $a_day_to)
const KEY_FIGURE_WIKI_PAGE_CHANGES
const KEY_FIGURE_WIKI_PAGE_CHANGES_AVG
static getWikiFootnotes(int $a_wiki_id, string $a_day_from, string $a_day_to)