PageRenderTime 49ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/3.0/modules/pages_xtra/controllers/admin_pages_xtra.php

http://github.com/gallery/gallery3-contrib
PHP | 331 lines | 230 code | 51 blank | 50 comment | 16 complexity | d5168d7a2cbd596d3eb67eb98be48352 MD5 | raw file
Possible License(s): GPL-3.0, GPL-2.0, LGPL-2.1
  1. <?php defined("SYSPATH") or die("No direct script access.");
  2. /**
  3. * Gallery - a web based photo album viewer and editor
  4. * Copyright (C) 2000-2014 Bharat Mediratta
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 2 of the License, or (at
  9. * your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful, but
  12. * WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program; if not, write to the Free Software
  18. * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. class Admin_Pages_xtra_Controller extends Admin_Controller {
  21. public function index() {
  22. // Display the admin page.
  23. $view = new Admin_View("admin.html");
  24. $view->page_title = t("Manage pages");
  25. $view->content = new View("admin_pages_xtra.html");
  26. $query = ORM::factory("px_static_page");
  27. $view->content->pages = $query->order_by("name", "ASC")->find_all();
  28. $view->content->form = $this->get_prefs_form();
  29. print $view;
  30. }
  31. public function createpage() {
  32. // Display a form for creating a new page.
  33. $view = new Admin_View("admin.html");
  34. $view->page_title = t("Create page");
  35. $view->content = new View("admin_pages_xtra_new.html");
  36. $view->content->form = $this->get_new_page_form();
  37. print $view;
  38. }
  39. public function editpage($id) {
  40. // Display a form for editing an existing page.
  41. $existing_page = ORM::factory("px_static_page", $id);
  42. $view = new Admin_View("admin.html");
  43. $view->page_title = t("Edit page");
  44. $view->content = new View("admin_pages_xtra_new.html");
  45. $view->content->form = $this->get_edit_page_form($existing_page);
  46. print $view;
  47. }
  48. public function savepage() {
  49. // Save a page to the database.
  50. access::verify_csrf();
  51. // Store form values into variables.
  52. $page_id = Input::instance()->post("page_id");
  53. $page_name = urlencode(trim(Input::instance()->post("page_name")));
  54. $page_title = Input::instance()->post("page_title");
  55. // Define relative_url_cache as a derivative of page name
  56. $page_relative_url_cache = "pages_xtra/show/$page_name";
  57. $page_description = Input::instance()->post("page_description");
  58. $page_tags = Input::instance()->post("page_tags");
  59. /* $page_code = stripslashes($_REQUEST["page_code"]); // access var directly to get around xss filtering. */
  60. // Change above line (from Pages module V3) to next line (from Pages module V2) - if data does not save to database!
  61. $page_code = Input::instance()->post("page_code");
  62. $display_menu = Input::instance()->post("display_menu");
  63. $page_type = Input::instance()->post("page_type");
  64. // If $page_id is set, update an existing page.
  65. if (isset($page_id)) {
  66. $update_page = ORM::factory("px_static_page", $page_id);
  67. $update_page->title = $page_title;
  68. $update_page->relative_url_cache = $page_relative_url_cache;
  69. $update_page->description = $page_description;
  70. $update_page->tags = $page_tags;
  71. $update_page->html_code = $page_code;
  72. $update_page->display_menu = $display_menu;
  73. $update_page->type = $page_type;
  74. $update_page->save();
  75. message::success(t("Page %page_name updated", array("page_name" => $update_page->name)));
  76. log::success("pages_xtra", t("Page %page_name updated", array("page_name" => $update_page->name)));
  77. url::redirect("admin/pages_xtra");
  78. } else {
  79. // If $page_id is not set, we are dealing with a new page.
  80. // Check and make sure a page with the same names doesn't already exist.
  81. $existing_page = ORM::factory("px_static_page")
  82. ->where("name", "=", $page_name)
  83. ->find_all();
  84. // If the page doesn't exist, save it to the database.
  85. if (count($existing_page) == 0) {
  86. $new_page = ORM::factory("px_static_page");
  87. $new_page->name = $page_name;
  88. $new_page->title = $page_title;
  89. $new_page->relative_url_cache = $relative_url_cache;
  90. $new_page->description = $page_description;
  91. $new_page->tags = $page_tags;
  92. $new_page->html_code = $page_code;
  93. $new_page->display_menu = $display_menu;
  94. $new_page->type = $page_type;
  95. $new_page->save();
  96. message::success(t("Page %page_name created", array("page_name" => $page_name)));
  97. log::success("pages_xtra", t("Page %page_name created", array("page_name" => $page_name)));
  98. url::redirect("admin/pages_xtra");
  99. } else {
  100. // If the page does exist, ask the user if they want to overwrite the old page with the new one.
  101. message::error(t("Page %page_name already exists, press Save again to overwrite.", array("page_name" => $page_name)));
  102. $view = new Admin_View("admin.html");
  103. $view->page_title = t("Edit page");
  104. $view->content = new View("admin_pages_xtra_new.html");
  105. $view->content->form = $this->get_overwrite_page_form($existing_page[0]->id, $page_name, $page_title, $page_description, $page_tags, $page_code, $display_menu, $page_type);
  106. print $view;
  107. }
  108. }
  109. }
  110. public function form_delete($id) {
  111. // Display a form asking the user if they want to delete a page.
  112. $one_page = ORM::factory("px_static_page", $id);
  113. if ($one_page->loaded()) {
  114. print $this->get_delete_form($one_page);
  115. }
  116. }
  117. public function delete($id) {
  118. // Delete the specified page.
  119. access::verify_csrf();
  120. // Make sure $id belongs to an actual page.
  121. $one_page = ORM::factory("px_static_page", $id);
  122. if (!$one_page->loaded()) {
  123. throw new Kohana_404_Exception();
  124. }
  125. // If the form validates, delete the specified page.
  126. $form = $this->get_delete_form($one_page);
  127. if ($form->validate()) {
  128. $name = $one_page->name;
  129. $one_page->delete();
  130. message::success(t("Deleted page %page_name", array("page_name" => $name)));
  131. log::success("pages_xtra", t("Deleted page %page_name", array("page_name" => $name)));
  132. json::reply(array("result" => "success", "location" => url::site("admin/pages_xtra")));
  133. } else {
  134. print $form;
  135. }
  136. }
  137. public function form_rename($id) {
  138. // Display a form to allow the user to rename a page.
  139. $one_page = ORM::factory("px_static_page", $id);
  140. if ($one_page->loaded()) {
  141. print InPlaceEdit::factory(urldecode($one_page->name))
  142. ->action("admin/pages_xtra/rename/$id")
  143. ->render();
  144. }
  145. }
  146. public function rename($id) {
  147. // Rename an existing page.
  148. access::verify_csrf();
  149. // Make sure the page specified by $id exists.
  150. $one_page = ORM::factory("px_static_page", $id);
  151. if (!$one_page->loaded()) {
  152. throw new Kohana_404_Exception();
  153. }
  154. $in_place_edit = InPlaceEdit::factory($one_page->name)
  155. ->action("admin/pages_xtra/rename/$one_page->id")
  156. ->rules(array("required", "length[1,64]"));
  157. // If the form validates, and if the new name doesn't already exist, rename the page.
  158. if ($in_place_edit->validate()) {
  159. $old_name = $one_page->name;
  160. $new_name = urlencode(trim($in_place_edit->value()));
  161. $new_name_exists = ORM::factory("px_static_page")->where("name", "=", $new_name)->find_all();
  162. if (count($new_name_exists) == 0) {
  163. $one_page->name = $new_name;
  164. $one_page->save();
  165. $message = t("Renamed page <i>%old_name</i> to <i>%new_name</i>",
  166. array("old_name" => $old_name, "new_name" => $new_name));
  167. message::success($message);
  168. log::success("pages_xtra", $message);
  169. json::reply(array("result" => "success", "location" => url::site("admin/pages_xtra")));
  170. } else {
  171. json::reply(array("result" => "error", "form" => (string)$in_place_edit->render()));
  172. }
  173. } else {
  174. json::reply(array("result" => "error", "form" => (string)$in_place_edit->render()));
  175. }
  176. }
  177. static function get_delete_form($one_page) {
  178. // Generate a new form asking the user if they want to delete a page.
  179. $form = new Forge("admin/pages_xtra/delete/$one_page->id", "", "post", array("id" => "g-delete-pages-form"));
  180. $group = $form->group("delete_page")
  181. ->label(t("Really delete page %page_name?", array("page_name" => $one_page->name)));
  182. $group->submit("")->value(t("Delete Page"));
  183. return $form;
  184. }
  185. private function get_new_page_form() {
  186. // Generate a form for creating a new page.
  187. $form = new Forge("admin/pages_xtra/savepage", "", "post",
  188. array("id" => "g-pages-admin-form"));
  189. $pages_group = $form->group("new_page")->label(t("Page Settings"));;
  190. $pages_group->input("page_name")
  191. ->label(t("Name / URL extension &nbsp [No gaps between words. Only hyphen(-) or underscore(_) allowed]"));
  192. $pages_group->input("page_title")
  193. ->label(t("Title"));
  194. $pages_group->input("page_description")
  195. ->label(t("Description [approx 150 chars max]"))
  196. ->css_id("g-description-input");
  197. $pages_group->input("page_tags")
  198. ->label(t("Tags / Keywords [comma separated]"));
  199. $pages_group->textarea("page_code")
  200. ->label(t("HTML Code &nbsp [Notes: 1. Page 'Body' only. &nbsp 2. Tags with 'style=' may not save correctly. Use CSS in your theme]"));
  201. $pages_group->checkbox("display_menu")
  202. ->label(t("Display link in sidebar menu?"))
  203. ->checked(false);
  204. $pages_group->checkbox("page_type")
  205. ->label(t("Include URL in Sitemap? [Requires Sitemap_xtra Module]"))
  206. ->checked(false);
  207. $pages_group->submit("save_page")
  208. ->value(t("Save"));
  209. return $form;
  210. }
  211. // Add all new px_static_pages variables VISIBLE on the form (plus id), to following private overwrite function,
  212. // so all info is called correctly from database.
  213. private function get_overwrite_page_form($id, $name, $title, $description, $tags, $html_code, $display_menu, $type) {
  214. // Generate a form for overwriting an existing page. ie. Edit the Page
  215. $form = new Forge("admin/pages_xtra/savepage", "", "post",
  216. array("id" => "g-pages-admin-form"));
  217. $pages_group = $form->group("new_page")->label(t("Page Settings"));;
  218. $pages_group->hidden("page_id")
  219. ->value($id);
  220. $pages_group->input("page_name")
  221. ->label(t("Name / URL extension &nbsp [No gaps between words. Only hyphen(-) or underscore(_) allowed]"))
  222. ->readonly()
  223. ->value($name);
  224. $pages_group->input("page_title")
  225. ->label(t("Title"))
  226. ->value($title);
  227. $pages_group->input("page_description")
  228. ->label(t("Description [approx 150 chars max]"))
  229. ->value($description);
  230. // ->css_id("g-description-input");
  231. $pages_group->input("page_tags")
  232. ->label(t("Tags / Keywords [comma separated]"))
  233. ->value($tags);
  234. $pages_group->textarea("page_code")
  235. ->label(t("HTML Code &nbsp [Notes: 1. Page 'Body' only. &nbsp 2. Tags with 'style=' may not save correctly. Use CSS in your theme]"))
  236. ->value($html_code);
  237. $pages_group->checkbox("display_menu")
  238. ->label(t("Display link in sidebar menu?"))
  239. ->checked($display_menu);
  240. $pages_group->checkbox("page_type")
  241. ->label(t("Include URL in Sitemap? [Requires Sitemap_xtra Module]"))
  242. ->checked($type);
  243. $pages_group->submit("save_page")
  244. ->value(t("Save"));
  245. return $form;
  246. }
  247. private function get_edit_page_form($existing_page) {
  248. // Generate a form for editing an existing page. Reuse the overwrite form for as it's basically the same thing.
  249. return ($this->get_overwrite_page_form($existing_page->id, $existing_page->name, $existing_page->title, $existing_page->description, $existing_page->tags, $existing_page->html_code, $existing_page->display_menu, $existing_page->type));
  250. }
  251. private function get_prefs_form() {
  252. // Generate a form for global preferences.
  253. $form = new Forge("admin/pages_xtra/saveprefs", "", "post",
  254. array("id" => "g-pages-admin-form"));
  255. $pages_group = $form->group("preferences")->label(t("Global Settings"));
  256. $pages_group->input("site_title")
  257. ->label(t("Website Title"))
  258. ->value(module::get_var("pages_xtra", "site_title"));
  259. $pages_group->checkbox("display_sidebar")
  260. ->label(t("Hide sidebar on Pages?"))
  261. ->checked(module::get_var("pages_xtra", "show_sidebar"));
  262. $pages_group->checkbox("disable_rich_editor")
  263. ->label(t("Disable rich text editor?"))
  264. ->checked(module::get_var("pages_xtra", "disable_rte"));
  265. $pages_group->submit("save_prefs")
  266. ->value(t("Save"));
  267. return $form;
  268. }
  269. public function saveprefs() {
  270. // Save a preferences to the database.
  271. access::verify_csrf();
  272. // Save form variables.
  273. module::set_var("pages_xtra", "show_sidebar", Input::instance()->post("display_sidebar"));
  274. module::set_var("pages_xtra", "disable_rte", Input::instance()->post("disable_rich_editor"));
  275. module::set_var("pages_xtra", "site_title", Input::instance()->post("site_title"));
  276. // Display message and load main pages admin screen.
  277. message::success(t("Your settings have been saved."));
  278. url::redirect("admin/pages_xtra");
  279. }
  280. }