save.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. /**
  3. * CRUD -- Create and Update actions
  4. *
  5. * @package Lorea
  6. * @subpackage CRUD
  7. *
  8. * Copyright 2012-2013 Lorea Faeries <federation@lorea.org>
  9. *
  10. * This program is free software: you can redistribute it and/or
  11. * modify it under the terms of the GNU Affero General Public License
  12. * as published by the Free Software Foundation, either version 3 of
  13. * the License, or (at your option) any later version.
  14. *
  15. * This program is distributed in the hope that it will be useful, but
  16. * WITHOUT ANY WARRANTY; without even the implied warranty of
  17. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  18. * Affero General Public License for more details.
  19. *
  20. * You should have received a copy of the GNU Affero General Public
  21. * License along with this program. If not, see
  22. * <http://www.gnu.org/licenses/>.
  23. */
  24. elgg_load_library('elgg:crud');
  25. $crud_type = get_input('crud');
  26. $embed_guid = get_input('embed');
  27. $crud = crud_get_handler($crud_type);
  28. $msg_prefix = $crud->module.":$crud_type";
  29. $variables = elgg_get_config($crud_type);
  30. $input = array();
  31. $embedded_variables = array();
  32. foreach ($variables as $name => $field) {
  33. if (!is_array($field)) {
  34. $type = $field;
  35. } else {
  36. $type = $field['type'];
  37. if (!empty($field['embedded'])) {
  38. $embedded_variables[] = $name;
  39. }
  40. }
  41. $input[$name] = get_input($name);
  42. if ($name == 'title') {
  43. $input[$name] = strip_tags($input[$name]);
  44. }
  45. if ($type == 'tags') {
  46. $input[$name] = string_to_tag_array($input[$name]);
  47. }
  48. if ($type == 'date') {
  49. $input[$name] = strtotime($input[$name]." ".date_default_timezone_get());
  50. }
  51. if ($type == 'time') {
  52. $input[$name] = get_input($name . '_hour') * 60 + get_input($name . '_minute');
  53. }
  54. }
  55. // Get guids
  56. $entity_guid = (int)get_input('guid');
  57. $container_guid = (int)get_input('container_guid');
  58. $parent_guid = (int)get_input('parent_guid');
  59. elgg_make_sticky_form($crud_type);
  60. /*if (!$input['title']) {
  61. register_error(elgg_echo($msg_prefix.':error:no_title'));
  62. forward(REFERER);
  63. }*/
  64. if ($entity_guid) {
  65. $entity = get_entity($entity_guid);
  66. if (!$entity || !$entity->canEdit()) {
  67. register_error(elgg_echo($msg_prefix.':error:no_save'));
  68. forward(REFERER);
  69. }
  70. $new_entity = false;
  71. } else {
  72. $entity = new ElggObject();
  73. $entity->subtype = $crud_type;
  74. $new_entity = true;
  75. }
  76. $embedded_child = NULL;
  77. if ($embed_guid && !$new_entity) {
  78. $embedded_child = get_entity($embed_guid);
  79. if ($embedded_child->parent_guid != $entity->guid) {
  80. register_error(elgg_echo($msg_prefix.':error:incoherency'));
  81. forward(REFERER);
  82. }
  83. }
  84. if (sizeof($input) > 0) {
  85. foreach ($input as $name => $value) {
  86. if (!empty($value) && in_array($name, $embedded_variables)) {
  87. // embedded variable
  88. if (!$embedded_child) {
  89. $embedded_child = new ElggObject();
  90. $embedded_child->subtype = $crud->children_type;
  91. $embedded_child->title = $input['title'];
  92. }
  93. $name = $variables[$name]['embedded'];
  94. $embedded_child->$name = $value;
  95. }
  96. else {
  97. // not embedded
  98. $entity->$name = $value;
  99. }
  100. }
  101. }
  102. // set parent if set
  103. if (!empty($parent_guid)) {
  104. $entity->parent_guid = $parent_guid;
  105. }
  106. // need to add check to make sure user can write to container
  107. $entity->container_guid = $container_guid;
  108. if ($entity->save()) {
  109. if ($embedded_child) {
  110. $embedded_child->parent_guid = $entity->guid;
  111. $embedded_child->access_id = $entity->access_id;
  112. $embedded_child->container_guid = $container_guid;
  113. $embedded_child->save();
  114. }
  115. elgg_clear_sticky_form($crud_type);
  116. system_message(elgg_echo($msg_prefix.':saved'));
  117. if ($new_entity) {
  118. add_to_river('river/object/crud/create', 'create', elgg_get_logged_in_user_guid(), $entity->guid);
  119. }
  120. else {
  121. add_to_river('river/object/crud/create', 'edited', elgg_get_logged_in_user_guid(), $entity->guid);
  122. }
  123. forward($entity->getURL());
  124. } else {
  125. register_error(elgg_echo($msg_prefix.':error:no_save'));
  126. forward(REFERER);
  127. }