PageRenderTime 61ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/course/format/page/plugin/lock.php

https://github.com/nadavkav/RTL-BIDI-Hebrew-Moodle-Plugins
PHP | 201 lines | 88 code | 27 blank | 86 comment | 12 complexity | b485a030749c75a6f926a042c146780a MD5 | raw file
Possible License(s): Apache-2.0, GPL-3.0
  1. <?php
  2. /**
  3. * Lock base class
  4. *
  5. * @author Mark Nielsen
  6. * @version $Id: lock.php,v 1.1 2009/12/21 01:00:29 michaelpenne Exp $
  7. * @package format_page
  8. * @todo Define all methods in there (perhaps abstract the class)
  9. **/
  10. abstract class format_page_lock {
  11. /**
  12. * Get all lock type instances
  13. *
  14. * @return array
  15. **/
  16. public static function get_locks() {
  17. global $CFG;
  18. static $locks = false;
  19. if ($locks === false) {
  20. $locks = array();
  21. $files = get_directory_list($CFG->dirroot.'/course/format/page/plugin/lock');
  22. foreach ($files as $file) {
  23. require_once("$CFG->dirroot/course/format/page/plugin/lock/$file");
  24. $name = pathinfo($file, PATHINFO_FILENAME);
  25. $classname = 'format_page_lock_'.$name;
  26. if (!class_exists($classname)) {
  27. error('Lock classname does not exist');
  28. }
  29. $locks[$name] = new $classname();
  30. }
  31. }
  32. return $locks;
  33. }
  34. /**
  35. * Determine if a page is locked or not
  36. *
  37. * @param object $page Format page object
  38. * @return boolean
  39. **/
  40. public static function is_locked($page) {
  41. $locks = self::get_locks();
  42. $lockinfo = self::decode($page->locks);
  43. foreach ($lockinfo['locks'] as $lock) {
  44. if ($locks[$lock['type']]->locked($lock)) {
  45. return true;
  46. }
  47. }
  48. return false;
  49. }
  50. /**
  51. * Determine if the page lock is visible
  52. * or not
  53. *
  54. * @param object $page Format page object
  55. * @return boolean
  56. **/
  57. public static function is_visible_lock($page) {
  58. $lockinfo = self::decode($page->locks);
  59. return ($lockinfo['visible'] == 1);
  60. }
  61. /**
  62. * Print lock pre-requisites message
  63. *
  64. * @param object $page Format page object
  65. * @return void
  66. **/
  67. public static function print_lock_prerequisites($page) {
  68. $lockinfo = self::decode($page->locks);
  69. if ($lockinfo['showprereqs']) {
  70. $locks = self::get_locks();
  71. $messages = array();
  72. foreach ($lockinfo['locks'] as $lock) {
  73. if ($locks[$lock['type']]->locked($lock)) {
  74. $messages[] = $locks[$lock['type']]->get_prerequisite($lock);
  75. }
  76. }
  77. $messages = '<ul><li>'.implode('</li><li>', $messages).'</li></ul>';
  78. $message = get_string('prereqsmessage', 'format_page', $messages);
  79. } else {
  80. $message = get_string('pageislocked', 'format_page');
  81. }
  82. print_box($message, 'generalbox', 'pagelock');
  83. }
  84. /**
  85. * Encode lock data
  86. *
  87. * @param array $locks Lock data
  88. * @return string
  89. **/
  90. public static function encode($locks) {
  91. return base64_encode(serialize($locks));
  92. }
  93. /**
  94. * Decode lock data
  95. *
  96. * @param string $encodedlocks Encoded lock data
  97. * @return array
  98. **/
  99. public static function decode($encodedlocks) {
  100. if (empty($encodedlocks)) {
  101. return array();
  102. } else {
  103. return unserialize(base64_decode($encodedlocks));
  104. }
  105. }
  106. /**
  107. * Restore locks
  108. *
  109. * @return string
  110. **/
  111. public static function restore($restore, $encodedlocks) {
  112. $lockinfo = self::decode($encodedlocks);
  113. $locks = self::get_locks();
  114. $newlocks = array();
  115. foreach ($lockinfo['locks'] as $lock) {
  116. if (array_key_exists($lock['type'], $locks)) {
  117. if ($newlock = $locks[$lock['type']]->restore_hook($restore, $lock)) {
  118. $newlocks[] = $newlock;
  119. }
  120. }
  121. }
  122. if (empty($newlocks)) {
  123. return '';
  124. }
  125. $lockinfo['locks'] = $newlocks;
  126. return self::encode($lockinfo);
  127. }
  128. /**
  129. * Restore a lock
  130. *
  131. * @return mixed
  132. **/
  133. protected function restore_hook($restore, $lock) {
  134. return $lock;
  135. }
  136. /**
  137. * Add form elements for adding a new lock
  138. *
  139. * @param object $mform Moodle Form
  140. * @param array $locks Current locks
  141. * @return void
  142. **/
  143. abstract public function add_form(&$mform, $locks);
  144. /**
  145. * Add form elements for editing current locks
  146. *
  147. * @param object $mform Moodle Form
  148. * @param array $locks Current locks
  149. * @return void
  150. **/
  151. abstract public function edit_form(&$mform, $locks);
  152. /**
  153. * Process form submit for elements added
  154. *
  155. * @param object $data Form data
  156. * @return array
  157. **/
  158. abstract public function process_form($data);
  159. /**
  160. * Is the passed lock locked or not
  161. *
  162. * @param array $lock The lock to check against
  163. * @return boolean
  164. **/
  165. abstract public function locked($lock);
  166. /**
  167. * Generate a prerequisite message for the passed lock
  168. *
  169. * @param array $lock The lock to get the message for
  170. * @return string
  171. **/
  172. abstract public function get_prerequisite($lock);
  173. }
  174. ?>