Differences Between: [Versions 39 and 403]
1 <?php 2 3 namespace Moodle; 4 5 /** 6 * The base class for H5P events. Extend to track H5P events in your system. 7 * 8 * @package H5P 9 * @copyright 2016 Joubel AS 10 * @license MIT 11 */ 12 abstract class H5PEventBase { 13 // Constants 14 const LOG_NONE = 0; 15 const LOG_ALL = 1; 16 const LOG_ACTIONS = 2; 17 18 // Static options 19 public static $log_level = self::LOG_ACTIONS; 20 public static $log_time = 2592000; // 30 Days 21 22 // Protected variables 23 protected $id, $type, $sub_type, $content_id, $content_title, $library_name, $library_version, $time; 24 25 /** 26 * Adds event type, h5p library and timestamp to event before saving it. 27 * 28 * Common event types with sub type: 29 * content, <none> – content view 30 * embed – viewed through embed code 31 * shortcode – viewed through internal shortcode 32 * edit – opened in editor 33 * delete – deleted 34 * create – created through editor 35 * create upload – created through upload 36 * update – updated through editor 37 * update upload – updated through upload 38 * upgrade – upgraded 39 * 40 * results, <none> – view own results 41 * content – view results for content 42 * set – new results inserted or updated 43 * 44 * settings, <none> – settings page loaded 45 * 46 * library, <none> – loaded in editor 47 * create – new library installed 48 * update – old library updated 49 * 50 * @param string $type 51 * Name of event type 52 * @param string $sub_type 53 * Name of event sub type 54 * @param string $content_id 55 * Identifier for content affected by the event 56 * @param string $content_title 57 * Content title (makes it easier to know which content was deleted etc.) 58 * @param string $library_name 59 * Name of the library affected by the event 60 * @param string $library_version 61 * Library version 62 */ 63 function __construct($type, $sub_type = NULL, $content_id = NULL, $content_title = NULL, $library_name = NULL, $library_version = NULL) { 64 $this->type = $type; 65 $this->sub_type = $sub_type; 66 $this->content_id = $content_id; 67 $this->content_title = $content_title; 68 $this->library_name = $library_name; 69 $this->library_version = $library_version; 70 $this->time = time(); 71 72 if (self::validLogLevel($type, $sub_type)) { 73 $this->save(); 74 } 75 if (self::validStats($type, $sub_type)) { 76 $this->saveStats(); 77 } 78 } 79 80 /** 81 * Determines if the event type should be saved/logged. 82 * 83 * @param string $type 84 * Name of event type 85 * @param string $sub_type 86 * Name of event sub type 87 * @return boolean 88 */ 89 private static function validLogLevel($type, $sub_type) { 90 switch (self::$log_level) { 91 default: 92 case self::LOG_NONE: 93 return FALSE; 94 case self::LOG_ALL: 95 return TRUE; // Log everything 96 case self::LOG_ACTIONS: 97 if (self::isAction($type, $sub_type)) { 98 return TRUE; // Log actions 99 } 100 return FALSE; 101 } 102 } 103 104 /** 105 * Check if the event should be included in the statistics counter. 106 * 107 * @param string $type 108 * Name of event type 109 * @param string $sub_type 110 * Name of event sub type 111 * @return boolean 112 */ 113 private static function validStats($type, $sub_type) { 114 if ( ($type === 'content' && $sub_type === 'shortcode insert') || // Count number of shortcode inserts 115 ($type === 'library' && $sub_type === NULL) || // Count number of times library is loaded in editor 116 ($type === 'results' && $sub_type === 'content') ) { // Count number of times results page has been opened 117 return TRUE; 118 } 119 elseif (self::isAction($type, $sub_type)) { // Count all actions 120 return TRUE; 121 } 122 return FALSE; 123 } 124 125 /** 126 * Check if event type is an action. 127 * 128 * @param string $type 129 * Name of event type 130 * @param string $sub_type 131 * Name of event sub type 132 * @return boolean 133 */ 134 private static function isAction($type, $sub_type) { 135 if ( ($type === 'content' && in_array($sub_type, array('create', 'create upload', 'update', 'update upload', 'upgrade', 'delete'))) || 136 ($type === 'library' && in_array($sub_type, array('create', 'update'))) ) { 137 return TRUE; // Log actions 138 } 139 return FALSE; 140 } 141 142 /** 143 * A helper which makes it easier for systems to save the data. 144 * Add all relevant properties to a assoc. array. 145 * There are no NULL values. Empty string or 0 is used instead. 146 * Used by both Drupal and WordPress. 147 * 148 * @return array with keyed values 149 */ 150 protected function getDataArray() { 151 return array( 152 'created_at' => $this->time, 153 'type' => $this->type, 154 'sub_type' => empty($this->sub_type) ? '' : $this->sub_type, 155 'content_id' => empty($this->content_id) ? 0 : $this->content_id, 156 'content_title' => empty($this->content_title) ? '' : $this->content_title, 157 'library_name' => empty($this->library_name) ? '' : $this->library_name, 158 'library_version' => empty($this->library_version) ? '' : $this->library_version 159 ); 160 } 161 162 /** 163 * A helper which makes it easier for systems to save the data. 164 * Used in WordPress. 165 * 166 * @return array with strings 167 */ 168 protected function getFormatArray() { 169 return array( 170 '%d', 171 '%s', 172 '%s', 173 '%d', 174 '%s', 175 '%s', 176 '%s' 177 ); 178 } 179 180 /** 181 * Stores the event data in the database. 182 * 183 * Must be overridden by plugin. 184 */ 185 abstract protected function save(); 186 187 /** 188 * Add current event data to statistics counter. 189 * 190 * Must be overridden by plugin. 191 */ 192 abstract protected function saveStats(); 193 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body