Source for file reservation.php

Documentation is available at reservation.php

  1. <?php
  2.  
  3. class net_nemein_reservations_reservation extends net_nemein_reservations__base {
  4. var $_debug_prefix;
  5. var $resource;
  6. var $event;
  7. var $dm;
  8. function net_nemein_reservations_reservation($id = null) {
  9. parent::net_nemein_reservations__base();
  10. debug_push($this->_debug_prefix . "c'tor");
  11. if (is_null($id)) {
  12. $this->resrouce = null;
  13. $this->event = null;
  14. } else if (is_string($id) && strlen($id) == 32) {
  15. $this->event = mgd_get_object_by_guid($id);
  16. if ( ! $this->event
  17. || $this->event->__table__ != "event")
  18. {
  19. debug_add("Could not load event [$id], invalid GUID: " . mgd_errstr(), MIDCOM_LOG_ERROR);
  20. debug_print_r("Retrieved object was:", $this->event);
  21. $this = false;
  22. debug_pop();
  23. return false;
  24. }
  25. } else if (is_numeric($id)) {
  26. $this->event = mgd_get_event($id);
  27. if (! $this->event) {
  28. debug_add("Could not load event [$id]: " . mgd_errstr(), MIDCOM_LOG_ERROR);
  29. $this = false;
  30. debug_pop();
  31. return false;
  32. }
  33. } else if (is_object($id) && is_a($id, "net_nemein_reservations_resource")) {
  34. $this->resource =& $resource;
  35. $this->event = null;
  36. } else {
  37. $this->event = mgd_get_event($id);
  38. debug_add("Unknown constructor argument.", MIDCOM_LOG_ERROR);
  39. debug_print_r("Argument was:", $id);
  40. $this = false;
  41. debug_pop();
  42. return false;
  43. }
  44. if (! is_null($this->event)) {
  45. if ($this->event->up != $this->_root_event->id) {
  46. debug_add("The event " . $this->event->id . " is not a child of the root event "
  47. . $this->_root_event->id . ", aborting object creation.", MIDCOM_LOG_ERROR);
  48. debug_print_r("Event record was: ", $this->event);
  49. $this = false;
  50. debug_pop();
  51. return false;
  52. }
  53. $members = mgd_list_event_members($this->event->id);
  54. if (! $members) {
  55. debug_add("The event " . $this->event->id . " has no event member records: "
  56. . mgd_errstr(), MIDCOM_LOG_ERROR);
  57.  
  58. debug_print_r("Event record was: ", $this->event);
  59. $this = false;
  60. debug_pop();
  61. return false;
  62. }
  63. $members->fetch(); /* Fetch 1st record, there should only be one */
  64. $this->resource = new net_nemein_reservations_resource($members->uid);
  65. if (! $this->resource) {
  66. debug_add("The event " . $this->event->id . " has an invalid event member record.",
  67. MIDCOM_LOG_ERROR);
  68. debug_print_r("Event record was: ", $this->event);
  69. debug_print_r("Last membership fetchable state: ", $members);
  70. $this = false;
  71. debug_pop();
  72. return false;
  73. }
  74. if ($members->fetch() != false) {
  75. debug_add("The event " . $this->event->id . " has more then one event member record.",
  76. MIDCOM_LOG_ERROR);
  77. debug_print_r("Event record was: ", $this->event);
  78. debug_print_r("Last membership fetchable state: ", $members);
  79. $this = false;
  80. debug_pop();
  81. return false;
  82. }
  83. }
  84. if (!$this->_init_datamanager()) {
  85. debug_pop();
  86. $this = false;
  87. return false;
  88. }
  89. debug_pop();
  90. }
  91. function delete () {
  92. debug_push($this->_debug_prefix . "delete");
  93. if (is_null($this->event)) {
  94. debug_add("Delete request for a null'd event, igonring.", MIDCOM_LOG_INFO);
  95. debug_pop();
  96. return true;
  97. }
  98. /* First, set the event to corrupt, in case anything goes wrong. This will
  99. * also catch an access denied at this point already.
  100. */
  101. $this->event->type = $this->_config->get("event_type_corrupt");
  102. if (! $this->event->update()) {
  103. debug_add("Could not set corrupt flag, aborting:", MIDCOM_LOG_ERROR);
  104. debug_pop();
  105. return false;
  106. }
  107. $memberships = mgd_list_event_members($this->event->id);
  108. if ($memberships) {
  109. while ($memberships->fetch()) {
  110. if (! mgd_delete_event_member($memberships->id)) {
  111. debug_add("Could not delete event membership: " . mgd_errstr(), MIDCOM_LOG_ERROR);
  112. debug_print_r("State of the membership fetchable: ", $memberships);
  113. debug_pop();
  114. return false;
  115. }
  116. }
  117. } else {
  118. debug_add ("There don't seem any event members acciociated with this record, which is strange, "
  119. . "there should be at least one, this is ignored silently. Last Midgard error was: " . mgd_errstr(),
  120. MIDCOM_LOG_ERROR);
  121. }
  122. if (! mgd_delete_extensions($this->event)) {
  123. debug_add("Could not delete object extensions: " . mgd_errstr(), MIDCOM_LOG_ERROR);
  124. debug_print_r("You will now have an inconsistent object, what we have left is: ", $this->event);
  125. debug_pop();
  126. return false;
  127. }
  128. if (! $this->event->delete()) {
  129. debug_add("Could not delete the event record: " . mgd_errstr(), MIDCOM_LOG_ERROR);
  130. debug_print_r("You will now have an inconsistent object, what we have left is: ", $this->event);
  131. debug_pop();
  132. return false;
  133. }
  134.  
  135. $this->event = null;
  136. debug_pop();
  137. return true;
  138. }
  139. function finish() {
  140. debug_push($this->_debug_prefix . "finish");
  141. debug_add("Parsing E-Mail Template");
  142. $template = new midcom_helper_mailtemplate($this->_config_dm->data["mail_newreservation"]);
  143. $parameters = Array(
  144. "RESOURCE" => $this->_resource->dm,
  145. "RESERVATION" => $this->dm,
  146. "ISOSTART" => $this->dm->data["start"]["strfulldate"],
  147. "ISOEND" => $this->dm->data["end"]["strfulldate"],
  148. "LOCALSTART" => $this->dm->data["start"]["local_strfulldate"],
  149. "LOCALEND" => $this->dm->data["end"]["local_strfulldate"],
  150. );
  151. $template->set_parameters($parameters);
  152. $template->parse();
  153. $failed = $template->send($this->dm->data["email"]);
  154. if ($failed > 0) {
  155. debug_add("$failed E-Mails could not be sent.", MIDCOM_LOG_WARN);
  156. debug_print_r("Failed addresses:", $template->failed);
  157. }
  158.  
  159. $this->event->type = $this->_config->get("event_type_complete");
  160. $this->event->busy = true;
  161. if (! $this->event->update()) {
  162. debug_print_r("Set event to corrupt, something went wrong while updating it, errstr was " . mgd_errstr(), $this->event);
  163. $memberships = mgd_list_event_members($this->event);
  164. if ($memberships) {
  165. while ($memberships->fetch()) {
  166. if (! mgd_delete_event_member($memberships->id)) {
  167. debug_add("Could not delete event membership: " . mgd_errstr(), MIDCOM_LOG_ERROR);
  168. debug_print_r("State of the membership fetchable: ", $memberships);
  169. $GLOBALS["midcom"]->generate_error(MIDCOM_ERRCRIT, "Could not set event to corrupt, this is really strange.");
  170. }
  171. }
  172. }
  173. $this->event->busy = false;
  174. $this->event->type = $this->_config->get("event_type_corrupt");
  175. if (! $this->event->update()) {
  176. $GLOBALS["midcom"]->generate_error(MIDCOM_ERRCRIT, "Could not set event to corrupt, this is really strange.");
  177. }
  178. $this->errstr = "Could not update event to a finished one, possible data corruption.";
  179. debug_pop();
  180. return false;
  181. }
  182. debug_pop();
  183. return true;
  184. }
  185. function approve() {
  186. debug_push($this->_debug_prefix . "approve");
  187. debug_add("Setting timestamp at the object.");
  188. $this->event->parameter("midcom.helper.datamanager", "data_approved", time());
  189. debug_add("Reloading datamanger");
  190. $this->dm->init($this->event);
  191. debug_add("Parsing E-Mail Template");
  192. $template = new midcom_helper_mailtemplate($this->_config_dm->data["mail_acceptreservation"]);
  193. $parameters = Array(
  194. "RESOURCE" => $this->_resource->dm,
  195. "RESERVATION" => $this->dm,
  196. "ISOSTART" => $this->dm->data["start"]["strfulldate"],
  197. "ISOEND" => $this->dm->data["end"]["strfulldate"],
  198. "LOCALSTART" => $this->dm->data["start"]["local_strfulldate"],
  199. "LOCALEND" => $this->dm->data["end"]["local_strfulldate"],
  200. );
  201. $template->set_parameters($parameters);
  202. $template->parse();
  203. $failed = $template->send($this->dm->data["email"]);
  204. if ($failed > 0) {
  205. debug_add("$failed E-Mails could not be sent.", MIDCOM_LOG_WARN);
  206. debug_print_r("Failed addresses:", $template->failed);
  207. }
  208. $GLOBALS["view_contentmgr"]->msg .= $this->_l10n->get("reservation has been approved") . "<br>\n";
  209. }
  210. function reject_and_delete() {
  211. debug_push($this->_debug_prefix . "reject");
  212. debug_add("Parsing E-Mail Template");
  213. $template = new midcom_helper_mailtemplate($this->_config_dm->data["mail_rejectreservation"]);
  214. $parameters = Array(
  215. "RESOURCE" => $this->_resource->dm,
  216. "RESERVATION" => $this->dm,
  217. "ISOSTART" => $this->dm->data["start"]["strfulldate"],
  218. "ISOEND" => $this->dm->data["end"]["strfulldate"],
  219. "LOCALSTART" => $this->dm->data["start"]["local_strfulldate"],
  220. "LOCALEND" => $this->dm->data["end"]["local_strfulldate"],
  221. );
  222. $template->set_parameters($parameters);
  223. $template->parse();
  224. $failed = $template->send($this->dm->data["email"]);
  225. if ($failed > 0) {
  226. debug_add("$failed E-Mails could not be sent.", MIDCOM_LOG_WARN);
  227. debug_print_r("Failed addresses:", $template->failed);
  228. }
  229. return $this->delete();
  230. }
  231. /****************** Internal Helper Functions ****************************/
  232.  
  233. function _init_datamanager() {
  234. debug_push($this->_debug_prefix . "_init_datamanager");
  235. $this->dm = new midcom_helper_datamanager($this->_config->get("schemadb"));
  236. if (!$this->dm) {
  237. debug_add("Failed to create the datamanager", MIDCOM_LOG_ERROR);
  238. debug_add("Schema path was: " . $this->_config->get("schemadb"));
  239. debug_pop();
  240. return false;
  241. }
  242. if (! is_null($this->event)) {
  243. if (! $this->dm->init($this->event)) {
  244. debug_add("Failed to initialize datamanager for the selected event ["
  245. . $this->event->id . "]", MIDCOM_LOG_ERROR);
  246. debug_print_r("Object dump:", $this->event);
  247. debug_pop();
  248. return false;
  249. }
  250. debug_add("Successfully initialized the datamanager");
  251. } else {
  252. debug_add("No initialization done, we have an null event.");
  253. }
  254. debug_pop();
  255. return true;
  256. }
  257. function init_creation_mode() {
  258. if (! $this->dm->init_creation_mode($this->_config->get("schema_reservation"), $this)) {
  259. debug_add("Failed to initialize the datamanagers creation mode.", MIDCOM_LOG_ERROR);
  260. debug_add("Schema to use was: ", $this->_config->get("schema_reservation"));
  261. debug_pop();
  262. return false;
  263. }
  264. debug_add("Successfully initialized the datamanager in creation mode.");
  265. return true;
  266. }
  267. function _dm_create_callback(&$datamanager) {
  268. debug_push($this->_debug_prefix . "_dm_create_callback");
  269. $result = Array (
  270. "success" => true,
  271. "storage" => null
  272. );
  273. $this->event = $this->create_empty_event(0, 0, $this->_resource);
  274. if (is_null($this->event)) {
  275. debug_pop();
  276. return null;
  277. }
  278. debug_print_r("Assigning this event as new storage object: ", $this->event);
  279. $result["storage"] =& $this->event;
  280. debug_pop();
  281. return $result;
  282. }
  283. /******************** STATIC Query Functions for Reservations **********************/
  284.  
  285. function create_empty_event($start, $end, $resource) {
  286. debug_push($this->_debug_prefix . "_create_empty_event");
  287. $topic = $GLOBALS["midcom"]->get_context_data(MIDCOM_CONTEXT_CONTENTTOPIC);
  288. $root_event =& $GLOBALS["midcom"]->get_custom_context_data("root_event");
  289. $config =& $GLOBALS["midcom"]->get_custom_context_data("configuration");
  290. $event = mgd_get_event();
  291. $event->start = $start;
  292. $event->end = $end;
  293. $event->up = $root_event->id;
  294. $event->owner = $topic->owner;
  295. $event->busy = false;
  296. $event->type = $config->get("event_type_incomplete");
  297. $id = $event->create();
  298. if ($id === false) {
  299. debug_add("Could not create event, last error was: " . mgd_errstr(), MIDCOM_LOG_ERROR);
  300. debug_pop();
  301. return null;
  302. }
  303. $event = mgd_get_event($id);
  304. if (mgd_create_event_member($event->id, $resource->person->id, "") === false) {
  305. debug_add("Could not create event member: " . mgd_errstr(), MIDCOM_LOG_ERROR);
  306. debug_print_r("Removing created event record:", $event);
  307. if (! $event->delete())
  308. debug_add("Could not delete created event record: " . mgd_errstr(), MIDCOM_LOG_ERROR);
  309. $this->event = null;
  310. debug_pop();
  311. return null;
  312. }
  313. debug_pop();
  314. return $event;
  315. }
  316. }
  317.  
  318. ?>

Documentation generated on Mon, 21 Nov 2005 18:21:27 +0100 by phpDocumentor 1.3.0RC3