diff --git a/3.0/modules/item_links/helpers/item_links_event.php b/3.0/modules/item_links/helpers/item_links_event.php new file mode 100644 index 00000000..12cc94a1 --- /dev/null +++ b/3.0/modules/item_links/helpers/item_links_event.php @@ -0,0 +1,58 @@ +where("item_id", "=", $item->id) + ->find_all(); + + $existing_url = ""; + if (count($item_url) > 0) { + $existing_url = $item_url[0]->url; + } + $form->edit_item + ->input("item_links_url") + ->label(t("Redirect to URL:")) + ->value($existing_url); + } + + static function item_deleted($item) { + // Whenever an item is deleted, delete any corresponding data. + db::build()->delete("item_links")->where("item_id", "=", $item->id)->execute(); + } + + static function item_edit_form_completed($item, $form) { + // Update the database with any changes to the item_links field. + $record = ORM::factory("item_link")->where("item_id", "=", $item->id)->find(); + + if ($form->edit_item->item_links_url->value != "") { + if (!$record->loaded()) { + $record->item_id = $item->id; + } + $record->url = $form->edit_item->item_links_url->value; + $record->save(); + } else { + db::build()->delete("item_links")->where("item_id", "=", $item->id)->execute(); + } + } +} diff --git a/3.0/modules/item_links/helpers/item_links_installer.php b/3.0/modules/item_links/helpers/item_links_installer.php new file mode 100644 index 00000000..f9d34d98 --- /dev/null +++ b/3.0/modules/item_links/helpers/item_links_installer.php @@ -0,0 +1,34 @@ +query("CREATE TABLE IF NOT EXISTS {item_links} ( + `id` int(9) NOT NULL auto_increment, + `item_id` int(9) NOT NULL, + `url` text default NULL, + PRIMARY KEY (`id`), + KEY(`item_id`, `id`)) + DEFAULT CHARSET=utf8;"); + + // Set the module's version number. + module::set_version("item_links", 1); + } +} diff --git a/3.0/modules/item_links/helpers/item_links_theme.php b/3.0/modules/item_links/helpers/item_links_theme.php new file mode 100644 index 00000000..fbfcbb45 --- /dev/null +++ b/3.0/modules/item_links/helpers/item_links_theme.php @@ -0,0 +1,34 @@ +item()) { + $item_url = ORM::factory("item_link") + ->where("item_id", "=", $theme->item->id) + ->find_all(); + if (count($item_url) > 0) { + url::redirect($item_url[0]->url); + } + } + return; + } +} diff --git a/3.0/modules/item_links/models/item_link.php b/3.0/modules/item_links/models/item_link.php new file mode 100644 index 00000000..65335e27 --- /dev/null +++ b/3.0/modules/item_links/models/item_link.php @@ -0,0 +1,21 @@ +page_title = t("Manage pages"); + $view->content = new View("admin_pages.html"); + $query = ORM::factory("static_page"); + $view->content->pages = $query->order_by("name", "ASC")->find_all(); + $view->content->form = $this->get_prefs_form(); + print $view; + } + + public function createpage() { + // Display a form for creating a new page. + $view = new Admin_View("admin.html"); + $view->page_title = t("Create page"); + $view->content = new View("admin_pages_new.html"); + $view->content->form = $this->get_new_page_form(); + print $view; + } + + public function editpage($id) { + // Display a form for editing an existing page. + $existing_page = ORM::factory("static_page", $id); + $view = new Admin_View("admin.html"); + $view->page_title = t("Edit page"); + $view->content = new View("admin_pages_new.html"); + $view->content->form = $this->get_edit_page_form($existing_page); + print $view; + } + + public function savepage() { + // Save a page to the database. + + access::verify_csrf(); + + // Store form values into variables. + $page_id = Input::instance()->post("page_id"); + $page_name = urlencode(trim(Input::instance()->post("page_name"))); + $page_title = Input::instance()->post("page_title"); + $page_code = Input::instance()->post("page_code"); + $display_menu = Input::instance()->post("display_menu"); + + // If $page_id is set, update an existing page. + if (isset($page_id)) { + $update_page = ORM::factory("static_page", $page_id); + $update_page->title = $page_title; + $update_page->html_code = $page_code; + $update_page->display_menu = $display_menu; + $update_page->save(); + message::success(t("Page %page_name updated", array("page_name" => $update_page->name))); + log::success("pages", t("Page %page_name updated", array("page_name" => $update_page->name))); + url::redirect("admin/pages"); + } else { + + // If $page_id is not set, we are dealing with a new page. + // Check and make sure a page with the same names doesn't already exist. + $existing_page = ORM::factory("static_page") + ->where("name", "=", $page_name) + ->find_all(); + + // If the page doesn't exist, save it to the database. + if (count($existing_page) == 0) { + $new_page = ORM::factory("static_page"); + $new_page->name = $page_name; + $new_page->title = $page_title; + $new_page->html_code = $page_code; + $new_page->display_menu = $display_menu; + $new_page->save(); + message::success(t("Page %page_name created", array("page_name" => $page_name))); + log::success("pages", t("Page %page_name created", array("page_name" => $page_name))); + url::redirect("admin/pages"); + } else { + + // If the page does exist, ask the user if they want to overwrite the old page with the new one. + message::error(t("Page %page_name already exists, press Save again to overwrite.", array("page_name" => $page_name))); + $view = new Admin_View("admin.html"); + $view->page_title = t("Edit page"); + $view->content = new View("admin_pages_new.html"); + $view->content->form = $this->get_overwrite_page_form($existing_page[0]->id, $page_name, $page_title, $page_code, $display_menu); + print $view; + } + } + } + + public function form_delete($id) { + // Display a form asking the user if they want to delete a page. + $one_page = ORM::factory("static_page", $id); + if ($one_page->loaded()) { + print $this->get_delete_form($one_page); + } + } + + public function delete($id) { + // Delete the specified page. + + access::verify_csrf(); + + // Make sure $id belongs to an actual page. + $one_page = ORM::factory("static_page", $id); + if (!$one_page->loaded()) { + throw new Kohana_404_Exception(); + } + + // If the form validates, delete the specified page. + $form = $this->get_delete_form($one_page); + if ($form->validate()) { + $name = $one_page->name; + $one_page->delete(); + message::success(t("Deleted page %page_name", array("page_name" => $name))); + log::success("pages", t("Deleted page %page_name", array("page_name" => $name))); + json::reply(array("result" => "success", "location" => url::site("admin/pages"))); + } else { + print $form; + } + } + + public function form_rename($id) { + // Display a form to allow the user to rename a page. + $one_page = ORM::factory("static_page", $id); + if ($one_page->loaded()) { + print InPlaceEdit::factory(urldecode($one_page->name)) + ->action("admin/pages/rename/$id") + ->render(); + } + } + + public function rename($id) { + // Rename an existing page. + access::verify_csrf(); + + // Make sure the page specified by $id exists. + $one_page = ORM::factory("static_page", $id); + if (!$one_page->loaded()) { + throw new Kohana_404_Exception(); + } + + $in_place_edit = InPlaceEdit::factory($one_page->name) + ->action("admin/pages/rename/$one_page->id") + ->rules(array("required", "length[1,64]")); + + // If the form validates, and if the new name doesn't already exist, rename the page. + if ($in_place_edit->validate()) { + $old_name = $one_page->name; + $new_name = urlencode(trim($in_place_edit->value())); + $new_name_exists = ORM::factory("static_page")->where("name", "=", $new_name)->find_all(); + if (count($new_name_exists) == 0) { + $one_page->name = $new_name; + $one_page->save(); + $message = t("Renamed page %old_name to %new_name", + array("old_name" => $old_name, "new_name" => $new_name)); + message::success($message); + log::success("pages", $message); + json::reply(array("result" => "success", "location" => url::site("admin/pages"))); + } else { + json::reply(array("result" => "error", "form" => (string)$in_place_edit->render())); + } + } else { + json::reply(array("result" => "error", "form" => (string)$in_place_edit->render())); + } + } + + static function get_delete_form($one_page) { + // Generate a new form asking the user if they want to delete a page. + $form = new Forge("admin/pages/delete/$one_page->id", "", "post", array("id" => "g-delete-pages-form")); + $group = $form->group("delete_page") + ->label(t("Really delete page %page_name?", array("page_name" => $one_page->name))); + $group->submit("")->value(t("Delete Page")); + return $form; + } + + private function get_new_page_form() { + // Generate a form for creating a new page. + $form = new Forge("admin/pages/savepage", "", "post", + array("id" => "g-pages-admin-form")); + + $pages_group = $form->group("new_page"); + $pages_group->input("page_name") + ->label(t("Name")); + $pages_group->input("page_title") + ->label(t("Title")); + $pages_group->textarea("page_code") + ->label(t("HTML Code")); + $pages_group->checkbox("display_menu") + ->label(t("Display in menu?")) + ->checked(false); + $pages_group->submit("save_page") + ->value(t("Save")); + + return $form; + } + + private function get_overwrite_page_form($id, $name, $title, $html_code, $display_menu) { + // Generate a form for overwriting an existing page. + $form = new Forge("admin/pages/savepage", "", "post", + array("id" => "g-pages-admin-form")); + + $pages_group = $form->group("new_page"); + $pages_group->hidden("page_id") + ->value($id); + $pages_group->input("page_name") + ->label(t("Name")) + ->readonly() + ->value($name); + $pages_group->input("page_title") + ->label(t("Title")) + ->value($title); + $pages_group->textarea("page_code") + ->label(t("HTML Code")) + ->value($html_code); + $pages_group->checkbox("display_menu") + ->label(t("Display in menu?")) + ->checked($display_menu); + $pages_group->submit("save_page") + ->value(t("Save")); + + return $form; + } + + private function get_edit_page_form($existing_page) { + // Generate a form for editing an existing page. Reuse the overwrite form for as it's basically the same thing. + return ($this->get_overwrite_page_form($existing_page->id, $existing_page->name, $existing_page->title, $existing_page->html_code, $existing_page->display_menu)); + } + + private function get_prefs_form() { + // Generate a form for global preferences. + $form = new Forge("admin/pages/saveprefs", "", "post", + array("id" => "g-pages-admin-form")); + + $pages_group = $form->group("preferences")->label(t("Settings")); + $pages_group->checkbox("display_sidebar") + ->label(t("Hide sidebar on Pages?")) + ->checked(module::get_var("pages", "show_sidebar")); + $pages_group->submit("save_prefs") + ->value(t("Save")); + + return $form; + } + + public function saveprefs() { + // Save a preferences to the database. + + access::verify_csrf(); + + // Save form variables. + module::set_var("pages", "show_sidebar", Input::instance()->post("display_sidebar")); + + // Display message and load main pages admin screen. + message::success(t("Your settings have been saved.")); + url::redirect("admin/pages"); + } +} diff --git a/3.0/modules/pages/controllers/pages.php b/3.0/modules/pages/controllers/pages.php new file mode 100644 index 00000000..8b0f7c2d --- /dev/null +++ b/3.0/modules/pages/controllers/pages.php @@ -0,0 +1,42 @@ +where("name", "=", $page_name) + ->find_all(); + + // If it doesn't exist, display a 404 error. + if (count($existing_page) == 0) { + throw new Kohana_404_Exception(); + } + + // Display the page. + $template = new Theme_View("page.html", "other", "Pages"); + $template->page_title = t("Gallery :: ") . $existing_page[0]->title; + $template->content = new View("pages_display.html"); + $template->content->title = $existing_page[0]->title; + $template->content->body = $existing_page[0]->html_code; + print $template; + } +} diff --git a/3.0/modules/pages/css/jHtmlArea.css b/3.0/modules/pages/css/jHtmlArea.css new file mode 100644 index 00000000..641ea291 --- /dev/null +++ b/3.0/modules/pages/css/jHtmlArea.css @@ -0,0 +1,48 @@ +div.jHtmlArea { display: inline block; border: solid 1px #ccc; } +div.jHtmlArea div { padding: 0px; margin: 0px; } +div.jHtmlArea .ToolBar { } +div.jHtmlArea .ToolBar ul { border: solid 0px #ccc; margin: 1px; padding: 1px; position:relative; display: inline; background: #fff url(../images/jHtmlArea_Toolbar_Group_BG.png) repeat-x;} +div.jHtmlArea .ToolBar ul li { list-style-type: none; float: left; border: none; padding: 1px; margin: 1px; } +div.jHtmlArea .ToolBar ul li:hover { border: solid 1px #ccc; background: #ddd url(../images/jHtmlArea_Toolbar_Group__Btn_Select_BG.png); padding: 0; } +div.jHtmlArea .ToolBar ul li a { display: block; width: 16px; height: 16px; background: url(../images/jHtmlArea.png) no-repeat -16px -500px; border: none; cursor: pointer; padding: 0px; } +div.jHtmlArea .ToolBar ul li a.highlighted { border: solid 1px #aaa; background-color: #bbb; padding: 0; } +div.jHtmlArea .ToolBar ul li.separator {height: 16px; margin: 0 2px 0 3px; border-left: 1px solid #ccc;} +div.jHtmlArea .ToolBar ul li.separator:hover { padding: 1px; background-color: #fff; border-top:none; border-bottom:none; border-right:none;} + +div.jHtmlArea .ToolBar ul li a:hover { } +div.jHtmlArea .ToolBar ul li a.bold { background-position: 0 0; } +div.jHtmlArea .ToolBar ul li a.italic { background-position: -16px 0; } +div.jHtmlArea .ToolBar ul li a.underline { background-position: -32px 0; } +div.jHtmlArea .ToolBar ul li a.strikethrough { background-position: -48px 0; } +div.jHtmlArea .ToolBar ul li a.link { background-position: -64px 0; } +div.jHtmlArea .ToolBar ul li a.unlink { background-position: -80px 0; } +div.jHtmlArea .ToolBar ul li a.orderedlist { background-position: -96px 0; } +div.jHtmlArea .ToolBar ul li a.unorderedlist { background-position: -112px 0; } +div.jHtmlArea .ToolBar ul li a.image { background-position: -128px 0; } +div.jHtmlArea .ToolBar ul li a.cut { background-position: -144px 0; } +div.jHtmlArea .ToolBar ul li a.copy { background-position: -160px 0; } +div.jHtmlArea .ToolBar ul li a.paste { background-position: -176px 0; } + +div.jHtmlArea .ToolBar ul li a.html { background-position: -192px 0; opacity:0.6; filter:alpha(opacity=60);} +div.jHtmlArea .ToolBar ul li a.html.highlighted { opacity:1.0; filter:alpha(opacity=100);} + +div.jHtmlArea .ToolBar ul li a.h1 { background-position: 0 -16px;} +div.jHtmlArea .ToolBar ul li a.h2 { background-position: -16px -16px;} +div.jHtmlArea .ToolBar ul li a.h3 { background-position: -32px -16px;} +div.jHtmlArea .ToolBar ul li a.h4 { background-position: -48px -16px;} +div.jHtmlArea .ToolBar ul li a.h5 { background-position: -64px -16px;} +div.jHtmlArea .ToolBar ul li a.h6 { background-position: -80px -16px;} +div.jHtmlArea .ToolBar ul li a.subscript { background-position: -96px -16px;} +div.jHtmlArea .ToolBar ul li a.superscript { background-position: -112px -16px;} +div.jHtmlArea .ToolBar ul li a.indent { background-position: -128px -16px;} +div.jHtmlArea .ToolBar ul li a.outdent { background-position: -144px -16px;} +div.jHtmlArea .ToolBar ul li a.horizontalrule { background-position: -160px -16px;} +div.jHtmlArea .ToolBar ul li a.p { background-position: -176px -16px;} + + +div.jHtmlArea .ToolBar ul li a.justifyleft { background-position: 0 -32px;} +div.jHtmlArea .ToolBar ul li a.justifycenter { background-position: -16px -32px;} +div.jHtmlArea .ToolBar ul li a.justifyright { background-position: -32px -32px;} +div.jHtmlArea .ToolBar ul li a.increasefontsize { background-position: -48px -32px;} +div.jHtmlArea .ToolBar ul li a.decreasefontsize { background-position: -64px -32px;} +div.jHtmlArea .ToolBar ul li a.forecolor { background-position: -80px -32px;} \ No newline at end of file diff --git a/3.0/modules/pages/helpers/pages_block.php b/3.0/modules/pages/helpers/pages_block.php new file mode 100644 index 00000000..089dd12b --- /dev/null +++ b/3.0/modules/pages/helpers/pages_block.php @@ -0,0 +1,57 @@ + t("Pages Links")); + } + + static function get($block_id, $theme) { + $block = ""; + + switch ($block_id) { + case "pages_block": + + // Create a new block with a list of all Pages and their links. + + // Query the database for all existing pages. + // If at least one page exists, display the sidebar block. + $query = ORM::factory("static_page"); + $pages = $query->order_by("title", "ASC")->find_all(); + if (count($pages) > 0) { + + // Loop through each page and generate an HTML list of their links and titles. + $content = ""; + + // Make a new sidebar block. + $block = new Block(); + $block->css_id = "g-pages"; + $block->title = t("Pages"); + $block->content = new View("pages_sidebar.html"); + $block->content->links = $content; + } + break; + } + return $block; + } +} diff --git a/3.0/modules/pages/helpers/pages_event.php b/3.0/modules/pages/helpers/pages_event.php new file mode 100644 index 00000000..9e37aa8b --- /dev/null +++ b/3.0/modules/pages/helpers/pages_event.php @@ -0,0 +1,44 @@ +get("settings_menu") + ->append(Menu::factory("link") + ->id("pages") + ->label(t("Pages Settings")) + ->url(url::site("admin/pages"))); + } + + static function site_menu($menu, $theme) { + $menu_pages = ORM::factory("static_page") + ->where("display_menu", "=", true) + ->order_by("title", "DESC") + ->find_all(); + if (count($menu_pages) > 0) { + foreach ($menu_pages as $one_page) { + $menu->add_after("home", Menu::factory("link") + ->id("pages-" . $one_page->id) + ->label($one_page->title) + ->url(url::site("pages/show/" . $one_page->name))); + } + } + } +} diff --git a/3.0/modules/pages/helpers/pages_installer.php b/3.0/modules/pages/helpers/pages_installer.php new file mode 100644 index 00000000..cd1f1546 --- /dev/null +++ b/3.0/modules/pages/helpers/pages_installer.php @@ -0,0 +1,44 @@ +query("CREATE TABLE IF NOT EXISTS {static_pages} ( + `id` int(9) NOT NULL auto_increment, + `name` varchar(255) default NULL, + `title` varchar(255) default NULL, + `html_code` text default NULL, + `display_menu` boolean default 0, + PRIMARY KEY (`id`), + UNIQUE KEY(`name`)) + DEFAULT CHARSET=utf8;"); + + // Set the module version number. + module::set_version("pages", 2); + } + static function upgrade($version) { + $db = Database::instance(); + if ($version == 1) { + $db->query("ALTER TABLE {static_pages} ADD COLUMN `display_menu` boolean default 0"); + module::set_version("pages", $version = 2); + } + } +} diff --git a/3.0/modules/pages/helpers/pages_theme.php b/3.0/modules/pages/helpers/pages_theme.php new file mode 100644 index 00000000..ec57a2ce --- /dev/null +++ b/3.0/modules/pages/helpers/pages_theme.php @@ -0,0 +1,27 @@ +script("jHtmlArea-0.7.0.js") . + $theme->css("jHtmlArea.css"); + } +} + \ No newline at end of file diff --git a/3.0/modules/pages/images/jHtmlArea.png b/3.0/modules/pages/images/jHtmlArea.png new file mode 100644 index 00000000..54c66a10 Binary files /dev/null and b/3.0/modules/pages/images/jHtmlArea.png differ diff --git a/3.0/modules/pages/images/jHtmlArea_Toolbar_Group_BG.png b/3.0/modules/pages/images/jHtmlArea_Toolbar_Group_BG.png new file mode 100644 index 00000000..bcfb0545 Binary files /dev/null and b/3.0/modules/pages/images/jHtmlArea_Toolbar_Group_BG.png differ diff --git a/3.0/modules/pages/images/jHtmlArea_Toolbar_Group__Btn_Select_BG.png b/3.0/modules/pages/images/jHtmlArea_Toolbar_Group__Btn_Select_BG.png new file mode 100644 index 00000000..4287b5b8 Binary files /dev/null and b/3.0/modules/pages/images/jHtmlArea_Toolbar_Group__Btn_Select_BG.png differ diff --git a/3.0/modules/pages/js/jHtmlArea-0.7.0.js b/3.0/modules/pages/js/jHtmlArea-0.7.0.js new file mode 100644 index 00000000..d1e360c4 --- /dev/null +++ b/3.0/modules/pages/js/jHtmlArea-0.7.0.js @@ -0,0 +1,403 @@ +/* +* jHtmlArea 0.7.0 - WYSIWYG Html Editor jQuery Plugin +* Copyright (c) 2009 Chris Pietschmann +* http://jhtmlarea.codeplex.com +* Licensed under the Microsoft Reciprocal License (Ms-RL) +* http://jhtmlarea.codeplex.com/license +*/ +(function($) { + $.fn.htmlarea = function(opts) { + if (opts && typeof (opts) === "string") { + var args = []; + for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); } + var htmlarea = jHtmlArea(this[0]); + var f = htmlarea[opts]; + if (f) { return f.apply(htmlarea, args); } + } + return this.each(function() { jHtmlArea(this, opts); }); + }; + var jHtmlArea = window.jHtmlArea = function(elem, options) { + if (elem.jquery) { + return jHtmlArea(elem[0]); + } + if (elem.jhtmlareaObject) { + return elem.jhtmlareaObject; + } else { + return new jHtmlArea.fn.init(elem, options); + } + }; + jHtmlArea.fn = jHtmlArea.prototype = { + + // The current version of jHtmlArea being used + jhtmlarea: "0.7.0", + + init: function(elem, options) { + if (elem.nodeName.toLowerCase() === "textarea") { + var opts = $.extend({}, jHtmlArea.defaultOptions, options); + elem.jhtmlareaObject = this; + + var textarea = this.textarea = $(elem); + var container = this.container = $("
").addClass("jHtmlArea").width(textarea.width()).insertAfter(textarea); + + var toolbar = this.toolbar = $("
").addClass("ToolBar").appendTo(container); + priv.initToolBar.call(this, opts); + + var iframe = this.iframe = $("