'templatetype', 'category' => 'templatecategory', 'systempage' => 'systempage', 'userpage' => 'userpage', 'package' => 'templatepackage', ); function migration34 () { $walker = new Walker_Migration34 ('stepIntroduction'); $walker->run (); } function welcome () { $view = new View_Admin_Hinted ('welcome'); echo $view->render (); } function package ($id = 0, $tab = '') { $params = new Catalog($tab, 'package', 'templatepackage', 'Packages', 'Package'); $params->setMassEditable(true); $params->setAddNew(true); if (! $id) { $id = self::MASS_EDIT_ID; } $view = $this->catalog ($id, $params); $view->str_active_tab = $tab; if (! Setting_Model::get (Setting_Model::S_ALL_TYPES, 0)) { $view->warning = 'Please remember, you have installed this copy of RMS to sell certain types of the templates! New types WILL NOT appear in the list below.'; } $hint = new Hint (); $hint->setText ('Enter the content for the text blocks present on the pages of template package. Enter the html title of the page and the meta data. By clicking on the list of the packagies on the left you can change the template package pages and enter info for every page accordingly.'); $hint->setLearnMoreHref ('#section_texts'); $view->hint = $hint; echo $view->render (); } function package_deprecated ($active = null) { $view = new View_Admin_Hinted ('package'); if (! isset ($active)) { $active = ORM::factory ('templatepackage')->orderby ('name')->find (); } else { $active = ORM::factory ('templatepackage', $active); } if ($active->isExist ()) { $hint = new Hint (); $hint->setText ("Block template packages that you don't want to show up on your website, view last templates in the package."); $hint->setLearnMoreHref ('#section_texts'); $view->hint = $hint; $form = new Formo_Form ('new'); $form ->setWidth ('70%') ->add ('widetext', 'user_name', 'label=Package Title') ->add ('checkbox', 'Is blocked') ->setModel ($active) ; $form ->noRequiredFields ('is_blocked') ->addSubmitButton () ; if ($form->validate ()) { $active->is_edited = 1; $form->save (); } $packages = array (); foreach (ORM::factory ('templatepackage')->orderby ('name')->find_all () as $package) { $item = new stdClass (); $item->id = $package->id; $item->title = $package->user_name; $item->template_count = $package->template_count; $item->active = ($active->id == $package->id); $item->status = abs ($package->is_blocked - 1); $packages[] = $item; } $view->packages = $packages; $package = new stdClass (); $package->title = $active->name; $view->active = $package; $view->templates = $active->getSampleTemplatesFromPackage (); $view->form = $form; } echo $view->render (); } function featuredtype () { $view = new View_Admin_Hinted ('featuredtype'); $hint = new Hint (); $hint->setText ("Drag and drop template types from bottom to top to set the types of templates you would like to show as featured on the Ready Made Affiliate Shop home page."); $hint->setLearnMoreHref ('#section_texts'); $view->hint = $hint; $types = ORM::factory ('templatetype'); $list1 = new Cortege ($types->getFeatured ()); $list2 = new Cortege ($types->getNonFeatured ()); $view->featured = $list1->compile ('id, name:title'); $view->nonfeatured = $list2->compile ('id, name:title'); echo $view->render (); } function featuredtypeajax () { $new_featured_order = Input::instance ()->post ('featured'); settype ($new_featured_order, 'array'); $new_featured_order = preg_grep ('/./', $new_featured_order); ORM::factory ('templatetype')->updateFeaturedPositionProperty ($new_featured_order); } function bannerpreviewajax ($banner_id) { $banner = ORM::factory ('banner', $banner_id); if ($banner->isExist ()) { echo $banner->getHtmlCode (true); } } private function catalog_main (Catalog_MainTabEditor $catalog) { $main_form = $catalog->getMainTabForm (); $main_form->setModel ($catalog); if ($main_form->validate ()) { $redirect = $catalog->saveMainTabForm ($main_form); $main_form->save (); if (Setting_Model::get (Setting_Model::S_TEMPLATE_COUNTER_UPDATE)) { $setup = new Setup_Update (); $setup->updateEnabledTemplateCounters (); } if (isset ($redirect)) { url::newurl ($redirect); } } return $main_form; } private function catalog_meta (DAL $catalog, $view) { $x = new ModelAggregate (); $meta_tags = ORM::factory ('text')->getMetaTags (); $meta_form = new Formo_Catalog ('meta_form'); if (count ($meta_tags)) { foreach ($meta_tags as $meta_tag) { $key = 'meta' . $meta_tag->id; $meta_form->add ('widetext', $key, 'label='.$meta_tag->name); $meta_form->add_rules ('not_required', $key); $meta_form->pre_filter ($key, 'trim'); $xmodel = ORM::factory ('text_content') ->where ('table', $catalog->getTableId ()) ->where ('table_id', $catalog->id) ->where ('text_id', $meta_tag->id) ->find (); if (! $xmodel->isExist ()) { $xmodel->table = $catalog->getTableId (); $xmodel->table_id = $catalog->id; $xmodel->text_id = $meta_tag->id; } $x->addModel ($key, 'content', $xmodel); } $meta_form->setModel ($x); $meta_form->addSubmitButton (); return $this->handleCatalogForm ($meta_form, $view); } $view->hide_header = true; return '
No meta-tags defined.
'; } private function catalog_text (DAL $catalog, $view) { $y = new ModelAggregate (); $text_blocks = ORM::factory ('text')->getLocalTexts (); $text_form = new Formo_Catalog ('text_form'); if (count ($text_blocks)) { foreach ($text_blocks as $text_block) { $ikey = $text_block->id; $ymodel = ORM::factory ('text_content') ->where ('table', $catalog->getTableId ()) ->where ('table_id', $catalog->id) ->where ('text_id', $text_block->id) ->find (); if (! $ymodel->isExist ()) { $ymodel->table = $catalog->getTableId (); $ymodel->table_id = $catalog->id; $ymodel->text_id = $text_block->id; } $key = 'title'.$ikey; $text_form->add ('widetext', $key, 'label='.$text_block->name.' title'); $text_form->add_rules ('not_required', $key); $y->addModel ($key, 'title', $ymodel); $key = 'text'.$ikey; $text_form ->add ('textarea', $key, 'label='.$text_block->name.' content') ->set ($key, 'style', 'width: 450px;') ->add_rules ('not_required', $key); $y->addModel ($key, 'content', $ymodel); } $text_form->setModel ($y); $text_form->addSubmitButton (); return $this->handleCatalogForm ($text_form, $view); } else { $view->hide_header = true; return 'No texts defined.
'; } } private function handleCatalogForm ($form, $view) { if ($form->validate ()) { if (isset ($this->mass_edit_mode)) { $params = $this->mass_edit_mode; if (! isset ($_POST ['approve'])) { foreach (($elements = $form->find_elements ()) as $key) { if ($form->$key instanceof Formo_widetext_Driver or $form->$key instanceof Formo_textarea_Driver) { $value = $form->$key->get_value (); unset ($form->$key); $form->add ('hidden', $key); $form->$key->value = $value; } } $view->hide_header = true; if($params->getModel() != 'templatepackage') { $view->intro = 'Please confirm that you really do want to change the values for all records'; } else { $view->intro ='Please, confirm that you do really want to change values for all records.
Pay attention that these changes will be overwritten on packages data import.'; } $form->add ('checkbox', 'approve', 'label=Confirm'); } else { $type = $params->getTableTextType (); if (isset ($type)) { $values = $form->get_values (); $texts = ORM::factory ('text')->getByType ($type); foreach ($texts as $text) { Database::instance()->delete('text_contents', array ( 'text_id' => $text->id, 'table' => $params->getTableTextContentType (), )); $due_key = $params->getTab() . $text->id; $content = isset ($values [$due_key]) ? trim ($values [$due_key]) : ''; $title = isset ($values ["title{$text->id}"]) ? trim ($values ["title{$text->id}"]) : ''; if ($content or $title) { foreach (ORM::factory ($params->getModel ())->find_all () as $type_category) { $title = isset ($values ["title{$text->id}"]) ? $values ["title{$text->id}"] : ''; $new_text = ORM::factory ('text_content'); $new_text->text_id = $text->id; $new_text->table = $params->getTableTextContentType (); $new_text->table_id = $type_category->id; $new_text->title = $title; $new_text->content = $content; $new_text->save (); } } } } } } else { $form->save (); } } return $form; } private function catalog_template (DAL $catalog, $view) { if (! $catalog->isCustom ()) { url::newurl (url::href ("//admin/category/".$catalog->id)); } $form = new Formo_Form ('form'); $form->add ('text', 'Assign template'); $form->addSubmitButton (); $form->set ('assign_template', 'style', 'width: 450px;'); if ($form->validate ()) { $templates = preg_grep ('/./', preg_split ('/\D+/', $form->assign_template->value)); foreach ($templates as $template) { $template_model = ORM::factory ('template', $template); if ($template_model->isExist ()) { $catalog->add ($template_model); } } $catalog->template_count = $catalog->templates->count (); $catalog->save (); } if ($template = (int) Input::instance ()->get ('remove')) { $template_model = ORM::factory ('template', $template); if ($template_model->isExist ()) { $catalog->remove ($template_model); $catalog->template_count = $catalog->templates->count (); $catalog->save (); } url::newurl (url::href ("//admin/category/".$catalog->getId ().'/template')); } $attached_templates = ''; foreach ($catalog->templates as $template) { $attached_templates .= sprintf ('%s
', $template->getId (), $template->getId ()); } $view->post_form = $attached_templates; return $form; } function category ($id = 0, $tab = '') { if (! $id) { $id = self::MASS_EDIT_ID; } if ('delete' == $tab and $id >= TemplateCategory_Model::CUSTOM_CATEGORY) { if (Input::instance ()->post ('submit')) { if (Input::instance ()->post ('confirm')) { $category = ORM::factory ('templatecategory', $id); if ($category->isExist ()) { $category->delete (); url::newurl (url::href ('//admin/category/')); } } url::newurl (url::href ('//admin/category/' . $id)); } $view = new View_Admin_Hinted ('form'); $form = new Formo_Form (); $form->add ('checkbox', 'confirm'); $form->addSubmitButton(); $view->form = $form; $view->intro = 'Please, confirm you really do want to delete this category.'; } else { $catalog = new Catalog ($tab, 'category', 'templatecategory', 'Categories', 'Category'); $catalog->setMassEditable (true); { $dictionary_category = new Dictionary_Category (); if ($dictionary_category->hasCustomCategories ()) { $menu = array (); $menu [] = array ('href' => url::href ('//admin/category/new'), 'text' => 'Add new'); if ($id >= TemplateCategory_Model::CUSTOM_CATEGORY) { $menu [] = array ('href' => url::href ('//admin/category/' . $id . '/delete'), 'text' => 'Delete category'); } $catalog->setContextMenu ($menu); $catalog->setAddNew (true); } } $view = $this->catalog ($id, $catalog); if (! Setting_Model::get (Setting_Model::S_ALL_CATEGORIES, 0)) { $view->warning = 'Please remember, you have installed this copy of RMS to sell certain categories of the templates! New categories WILL NOT appear in the list below.'; } } { $hint = new Hint (); $hint->setText ('Enter the content for the text blocks present on the pages of template categories. Enter the html title of the page and the meta data. By clicking on the list of the categories on the left you can change the template category pages and enter info for every page accordingly.'); $hint->setLearnMoreHref ('#section_texts'); $view->hint = $hint; } $view->str_active_tab = $tab; echo $view->render (); } function type ($id = 0, $tab = '') { $params = new Catalog ($tab, 'type', 'templatetype', 'Types', 'Type'); $params->setMassEditable (true); if (! $id) { $id = self::MASS_EDIT_ID; } $view = $this->catalog ($id, $params); $view->str_active_tab = $tab; if (! Setting_Model::get (Setting_Model::S_ALL_TYPES, 0)) { $view->warning = 'Please remember, you have installed this copy of RMS to sell certain types of the templates! New types WILL NOT appear in the list below.'; } $hint = new Hint (); $hint->setText ('Enter the content for the text blocks present on the pages of template types. Enter the html title of the page and the meta data. By clicking on the list of the types on the left you can change the template type pages and enter info for every page accordingly.'); $hint->setLearnMoreHref ('#section_texts'); $view->hint = $hint; echo $view->render (); } function servo ($action, $object) { switch ($action) { case 'natural': if (array_key_exists ($object, $this->page_to_model)) { $model = $this->page_to_model [$object]; ORM::factory ($model)->setNaturalOrder (); url::newurl (url::href ("//admin/$object")); } break; } exit; } function servoajax ($action, $object) { switch ($action) { case 'sort': if (array_key_exists ($object, $this->page_to_model)) { $objects = inflector::plural ($object); $handlist = $this->input->post ('catalogs'); if (isset ($handlist)) { if (! is_array ($handlist)) { $handlist = explode (",", (string) $handlist); } if ($handlist) { $position = 1; $model = $this->page_to_model[$object]; $item = ORM::factory ($model); $table_name = $item->getTableName (); foreach (new RecursiveIteratorIterator (new RecursiveArrayIterator ($handlist)) as $id) { $query = "UPDATE {$table_name} SET position = ? WHERE id = ?"; $item->query ($query, $position, $id); $position++; } } } } break; } } function catalog (&$id, Catalog $params) { $view = new View_Admin_Hinted ($params->getViewName ()); $catalog_list = ORM::factory ($params->getModel ())->orderby ('position', 'asc')->find_all (); if ($params->getMassEditable () and self::MASS_EDIT_ID == $id) { $this->mass_edit_mode = $params; $catalog = ORM::factory ($params->getModel ()); } else { $catalog = ORM::factory ($params->getModel (), intval ($id)); if (! $catalog->isExist () && (! $params->getAddNew () || $id !== 'new')) { $catalog = ORM::factory ($params->getModel ())->orderby ('position')->find (); } } $view->main_title = $params->getMainTitle (); $view->catalog_title = $params->getCatalogTitle (); $view->menu_name = $params->getMenuName (); $view->has_count = $params->getCount (); $view->context_menu_items = $params->getContextMenu (); $tabset = new CatalogTabSet_Default (); $tabset->setUrl ($params->getMenuName () . '/' . $id . '/'); if ($catalog->isExist () or $params->getAddNew () or $params->getMassEditable ()) { if ($id == 'new' and $params->getAddNew ()) { $tabset->removeTab ('meta'); $tabset->removeTab ('text'); } elseif (! $catalog->isExist ()) { $tabset->removeTab ('main'); } if ($catalog instanceof Systempage_Model) { if (in_array ($catalog->name, array ('404', 'Preview'))) { $tabset->removeTab ('meta'); } } if ($catalog instanceof TemplateCategory_Model) { if ($catalog->isCustom ()) { $tabset->addTab (new CatalogTab ('template', 'Templates', 'Templates for the category')); } } $tabset->setActiveTabId ($params->getTab ()); $view->active_tab = $tabset->getActiveTab (); $params->setTab ($tabset->getActiveTabId ()); $view->tabs = $tabset; $id = $catalog->id; $view->catalog_info_id = $catalog->id; $view->catalog_info_name = $catalog->name; $tab_func_name = 'catalog_' . $tabset->getActiveTabId (); if (! method_exists ($this, $tab_func_name)) { url::newurl (url::href ("//admin/{$params->getMenuName ()}/".$catalog->id)); } $view->form = $this->$tab_func_name ($catalog, $view); $link_class = intval ($this->input->post ('link_class')); if (isset ($link_class) and $link_class) { $view->link_class = $link_class; } elseif (isset ($catalog->link_class)) { $view->link_class = $link_class = $catalog->link_class; } $catalog_list = ORM::factory ($params->getModel ())->orderby ('position', 'asc')->find_all (); $catalogs = new Cortege ($catalog_list); $compile_rules = 'id, name, visibility:status'; if ($params->getCount ()) { $compile_rules .= ', enabled_template_count:count'; } $list = new CustomArray ($catalogs->compile ($compile_rules)); if ($params->getMassEditable ()) { $list = $list->getArrayCopy (); $all_records = array ( 'id' => self::MASS_EDIT_ID, 'name' => 'All ' . $params->getMainTitle (), 'status' => '1', ); settype ($all_records, 'object'); array_unshift ($list, $all_records); } $view->catalog = $list; foreach ($view->catalog as $record) { if (isset ($record->count)) { if (0 == $record->count and $record->status != DAL_Catalog::STATE_DISABLED) { $record->status = DAL_Catalog::STATE_HIDDEN; } } } } return $view; } function systempage ($id = 0, $tab = 'main') { $params = new Catalog ($tab, 'systempage', 'systempage', 'System Pages', 'System Page', 'catalog', false); $view = $this->catalog ($id, $params); $hint = new Hint (); $hint->setText ("Enter the content for the text blocks present on the templates shop content pages. Enter the html title of the page and the meta data. By clicking on the list of the pages on the left you can change the page you are editing and enter info for every page accordingly."); $hint->setLearnMoreHref ('#section_pages'); $view->hint = $hint; $view->hide_context_menu = 1; echo $view->render (); } function userpage ($id = 0, $tab = 'main', $subaction = '') { if ($this->getSubAction () == 'new') { $this->addUserPage (); return; } elseif ($tab == 'delete') { $view = new View_Admin ('delete'); $view->title = 'Deleting'; $view->confirm_delete_href = url::href ('confirmed'); $view->cancel_href = url::href (); $page = ORM::factory ('userpage', $id); if ($subaction == 'confirmed') { $page->delete (); url::newurl (); } else { $view->object = $page->name . ' page'; echo $view->render (); exit; } } $params = new Catalog ($tab, 'userpage', 'userpage', 'User Pages', 'User Page', 'catalog', false); $view = $this->catalog ($id, $params); $menu_items = array ( array ('href' => url::href ("//admin/userpage/new"), 'text' => 'Add new page'), ); if (ORM::factory ('userpage')->count_all ()) { $menu_items [] = array ('href' => url::href ("//admin/userpage/$id/delete"), 'text' => 'Delete this page'); } $view->context_menu_items = $menu_items; $hint = new Hint (); $hint->setText ("Create your own new additional content pages for the Ready Made Affiliate shop."); $view->hint = $hint; echo $view->render (); } function conventionalpage ($id = 0, $tab = 'main', $subaction = '') { $params = new Catalog ($tab, 'conventionalpage', 'conventionalpage', 'Conventional Pages', 'Conventional Page', 'catalog', false); $view = $this->catalog ($id, $params); $view->hide_context_menu = 1; $view->disable_interactive_sorting = 1; echo $view->render (); } private function addText ($title, $hint, DAL $default) { $view = new View_Admin_Hinted ('form'); $view->title = $title; $view->hint = $hint; $form = new Formo_Form ('new'); $form ->setWidth ('70%') ->add ('widetext', 'Name') ->add_rule ('name', 'common_name', 'Only letters, digits, and underscores are valid, starting with a letter.') ->set ('name', 'value', $default->name) ; $is_global = isset ($default->type) && ($default->type == Text_Model::TYPE_GLOBAL); if ($is_global) { $global = $default->getGlobalContent (); $form ->add ('widetext', 'Title') ->add ('textarea', 'Text Content') ->set ('title', 'value', $global->title) ->set ('text_content', 'value', $global->content) ->set ('text_content', 'style', 'width: 450px;') ->noRequiredFields ('text_content', 'title') ; } $form ->addSubmitButton () ->addCancelButton () ; if ($form->validate ()) { $text = ORM::factory ('text') ->where ('name', $form->name->value) ->where ('id !=', $default->id) ->find (); if ($text->isExist ()) { $form->name->error = 'This name has been already registered.'; } if (!$form->get_errors ()) { $default->name = $form->name->value; $default->save (); if ($is_global) { $global = $default->getGlobalContent (); $global->text_id = $default->id; $global->table = Text_content_Model::TABLE_GLOBAL; $global->title = $form->title->value; $global->content = $form->text_content->value; $global->save (); } url::newurl (); } } $view->form = $form; echo $view->render (); } private function addNewEditor ($title, $hint, DAL $default) { $view = new View_Admin_Hinted ('form'); $view->title = $title; $view->hint = $hint; $form = new Formo_Form ('new'); $form ->setWidth ('70%') ->add ('widetext', 'Name') ->set ('name', 'value', $default->name) ->add ('checkbox', 'Active') ->add ('text', 'Login') ->set ('login', 'value', $default->login) ->add_rule ('login', 'common_name', 'Only letters, digits, and underscores are valid, starting with a letter.') ->add ('text', 'Password') ->set ('password', 'value', $default->password) ->noRequiredFields (array ('active')) ; $form->active->checked = $default->is_active > 0; $form ->addSubmitButton () ->addCancelButton () ; if ($form->validate ()) { $editor = ORM::factory ('editor') ->where ('login', $form->login->value) ->where ('id !=', $default->id) ->find () ; if ($editor->isExist ()) { $form->login->error = 'This login has been already registered.'; } if (!$form->get_errors ()) { $default->name = $form->name->value; $default->is_active = $form->active->checked; $default->login = $form->login->value; $default->password = $form->password->value; $default->save (); url::newurl (); } } $view->form = $form; echo $view->render (); } private function addUserPage () { $view = new View_Admin_Hinted ('form'); $view->title = 'Add user page'; $hint = new Hint (); $hint->setText ("Add user page."); $view->hint = $hint; $form = new Form_Admin_NewUserPage ('new'); $form->setModel ($text = ORM::factory ('userpage')); if ($form->validate ()) { $text = $form->getModel (); $text->link_class = 1; $form->save (); url::newurl (url::href ("//admin/userpage/{$text->id}/main")); } $view->form = $form; echo $view->render (); } function textlocal ($subaction = '', $id = 0) { $hint = new Hint (); $hint->setText ("The list of the content blocks used on the website. You don't need to modify anything, this option is meant for advanced users and programmers. Global text block is the block present on all the templates shop pages. You can't change what block is global without modifying the code of the shop (global text blocks are hardcoded on the pages)."); $hint->setLearnMoreHref ('#section_texts'); $texts = ORM::factory ('text')->getLocalTexts (); $default = ORM::factory ('text', $id); if (!$default->isExist ()) { $default->type = Text_Model::TYPE_LOCAL; } $this->editTextBlockNameList ($texts, $default, $hint); } function textglobal ($subaction = '', $id = 0) { $hint = new Hint (); $hint->setText ("Enter the content for the global text blocks."); $hint->setLearnMoreHref ('#section_texts'); $texts = ORM::factory ('text')->getGlobalTexts (); $form = new Form_Admin_TextList ($texts); $default = ORM::factory ('text', $id); if (! $default->isExist ()) { $default->type = Text_Model::TYPE_GLOBAL; } $this->editTextBlockNameList ($texts, $default, $hint); } function textmeta ($subaction = '', $id = 0) { $hint = new Hint (); $hint->setText ("Meta data is widely used for search engines optimization. Here you can add the meta blocks and then fill in the data for the pages in according subsections of Texts and Orders section of the admin area."); $hint->setLearnMoreHref ('#section_texts'); $texts = ORM::factory ('text')->getMetaTags (); $default = ORM::factory ('text', $id); if (!$default->isExist ()) { $default->type = Text_Model::TYPE_META; } $this->editTextBlockNameList ($texts, $default, $hint); } private function editTextBlockNameList ($texts, DAL $default, $hint) { if ($this->getSubAction () == 'new') { $this->addText ('Add new', $hint, $default); return; } elseif ($this->getSubAction () == 'edit') { $this->addText ('Edit '.$default->name, $hint, $default); return; } $view = new View_Admin_Hinted ('form'); $view->hint = $hint; $form = new Formo_Form ('test', 'admin_textlocal'); $form->setAddNew (true); $form = new Form_Admin_TextList ($texts); if ($form->isDelete ()) { $being_deleted = $form->getDeleted (); foreach ($texts as $text) { if (in_array ($text->id, $being_deleted)) { $text->delete (); } } url::newurl (); } if ($texts->count ()) { foreach ($texts as $text) { $field_name = 'text_'.$text->id; $form->add ('display', $field_name); $form->$field_name->primary_key = $text->id; $form ->set ($field_name, 'value', $text->name) ->set ($field_name, 'label', ' ') ->set ($field_name, 'style', 'width:350px;') ->add_rule ($field_name, 'common_name', 'Only letters, digits, and underscores are valid, starting with a letter.') ; } $form->addDeleteButton ('Delete checked'); } $view->form = $form; echo $view->render (); } function editors ($subaction = '', $id = 0) { $hint = new Hint (); $hint->setText ("Add/delete/edit editors."); $hint->setLearnMoreHref ('#section_editors'); $editors = ORM::factory ('editor')->find_all (); $default = ORM::factory ('editor', $id); if ($this->getSubAction () == 'new') { $this->addNewEditor ('Add new editor', $hint, $default); return; } elseif ($this->getSubAction () == 'edit') { $this->addNewEditor ('Edit editor '.$default->name, $hint, $default); return; } $view = new View_Admin_Hinted ('form'); $view->hint = $hint; $form = new Form_Admin_EditorList (); if ($form->isDelete ()) { $being_deleted = $form->getDeleted (); foreach ($editors as $editor) { if (in_array ($editor->id, $being_deleted)) { $editor->delete (); } } url::newurl (); } $view->form = $form; echo $view->render (); } function logout () { Zend_Session::start (); Zend_Session::namespaceUnset ('application'); url::newurl (url::href ('//admin/index?loggedout')); } function index () { $view = new View_Admin_Hinted ('index'); $hint = new Hint (); $hint->setText ('text'); $view->hint = $hint; $view->title = 'Home page'; echo $view->render (); } function bannercategory ($subaction = '', $id = null) { if ($this->getSubAction () == 'new' || $this->getSubAction () == 'edit') { $this->editBannerCategory ($id); return; } $view = new View_Admin_Hinted ('form'); $view->hint = new Hint ('Here you can edit banner categories.', '#section_banners'); $form = new Form_Admin_BannerCategoryList (); $categories = ORM::factory ('bannercategory')->find_all (); if ($form->isDelete ()) { $being_deleted = $form->getDeleted (); foreach ($categories as $record) { if (in_array ($record->id, $being_deleted)) { $record->delete (); } } url::newurl (); } $view->form = $form; echo $view->render (); } function banner ($subaction = '', $id = null) { if ($this->getSubAction () == 'new' || $this->getSubAction () == 'edit') { $this->editBanner ($id); return; } $view = new View_Admin_Hinted ('form'); $view->hint = new Hint ('Here you can edit banners.', '#section_banners'); $banners = ORM::factory ('banner')->find_all (); $form = new Formo_Form ('admin'); if ($form->isDelete ()) { $being_deleted = $form->getDeleted (); foreach ($banners as $record) { if (in_array ($record->id, $being_deleted)) { if ($record->banner_file) { if (file_exists ($file_to_delete = DOCROOT . Configuration::getBannerDir () . '/' . $record->banner_file)) { unlink ($file_to_delete); } } $record->delete (); } } url::newurl (); } $form = new Form_Admin_BannerList (); $view->form = $form; echo $view->render (); } private function editBanner ($id = null) { $view = new View_Admin_Hinted ('form'); $view->hint = new Hint (); $view->title = isset ($id) ? 'Edit banner' : 'Add new'; $form = new Form_Admin_Banner ('new'); $form ->setBannerId ($id) ->setModel (ORM::factory ('banner', $id)) ->setView ($view) ; if ($form->validate ()) { $form->save (); url::newurl (); } $form->_sent = false; $view->form = $form; echo $view->render (); } private function editBannerCategory ($id = null) { $view = new View_Admin_Hinted ('form'); $view->title = isset ($id) ? 'Edit Banner Category' : 'Add new'; $category = ORM::factory ('bannercategory', $id); $form = new Form_Admin_BannerCategory ('new'); $form->setModel ($category); $view->form = $form; if ($form->validate ()) { $form->save (); url::newurl (); } echo $view->render (); } function settingsinfo () { $view = new View_Admin_Hinted ('info'); $settings = ORM::factory ('setting')->getSystemSettings (); $result = array (); foreach ($settings as $setting) { $is_hidden = $setting->status == Setting_Model::STATUS_HIDDEN; $is_readonly = $setting->read_only > 0; if ($is_hidden || $is_readonly) { $result [] = array ( 'name' => $setting->id, 'value' => $setting->value, ); } } $result [] = array ( 'name' => 'CURRENCY', 'value' => Zend_Registry::get ('Environment')->getCurrencyCode (), ); $view->records = $result; echo $view->render (); } function settingssystem () { $view = new View_Admin_Hinted ('form'); $hint = new Hint (); $hint->setText ("In the settings section you can define the number of rows and columns for the template previews in the gallery, set whether you would like to keep templates database on your servers or show screenshots from our servers."); $hint->setLearnMoreHref ('#section_settings'); $view->hint = $hint; $form = new Form_Admin_SystemSettings (); if ($form->validate ()) { $form->save (); } $view->form = $form; echo $view->render (); } function settingsuser () { if ($this->getSubAction () == 'new') { $this->newusersetting (); return; } $view = new View_Admin_Hinted ('form'); $hint = new Hint (); $hint->setText ("Here you can set your own parameters for the templates shop. This option is meant for advanced users and programmers only."); $view->hint = $hint; $form = new Form_Admin_UserSettings (); $settings = ORM::factory ('setting')->getUserSettings (); if ($form->isDelete ()) { $being_deleted = $form->getDeleted (); foreach ($settings as $setting) { if (in_array ($setting->id, $being_deleted)) { $setting->delete (); } } url::newurl (); } if ($form->validate ()) { $post = $form->get_values (); foreach ($settings as $setting) { $name = $setting->getFormName (); if (! $form->get_errors ()) { if (isset ($post[$name])) { $form->$name->add_post ($post[$name]); $setting->value = $form->$name->get_value (); } $setting->save (); } } } $view->form = $form; echo $view->render (); } function systeminfo () { $view = new View_Admin_Hinted ('systeminfo'); $view->php_version = phpversion (); $view->modules = $this->getModuleVersions (); $view->general = $this->getPhpInfo (INFO_GENERAL, array ('Configuration File (php.ini) Path', 'Loaded Configuration File', 'Scan this dir for additional .ini files', 'additional .ini files parsed')); $view->configuration = $this->getPhpInfo (INFO_CONFIGURATION, array ('include_path')); echo $view->render (); } private function getModuleVersions () { $result = array (); foreach (get_loaded_extensions () as $extension) { $version = phpversion ($extension); $version = preg_replace ('/\s.*/', '', $version); $item = sprintf ('%s', $extension); if ($version) { $item .= " ($version)"; } $result [] = $item; } sort ($result); return $result; } private function getPhpInfo ($section, $filters = array ()) { ob_start (); phpinfo ($section); $info = ob_get_clean (); if (strpos ($info, 'http://www.php.net/') !== false) { $xpath = '/html/body/div/table[2]'; } else { $xpath = '/html/body/div/table[1]'; } $xml = new SimpleXMLElement ($info, LIBXML_NOERROR); { $namespace_needed = version_compare (phpversion (), '5.3.0', ">="); } if ($namespace_needed) { $xml->registerXPathNamespace ('n', 'http://www.w3.org/1999/xhtml'); $xpath = $this->applyNamespace ($xpath); } $result = $xml->xpath ($xpath); if ($result) { foreach ($result as $node) { $node ['width'] = 800; } foreach ($filters as $filter) { $xpath = '//tr [td [normalize-space (text ()) = "'.$filter.'" ]]'; if ($namespace_needed) { $xpath = $this->applyNamespace ($xpath); } $filtering_nodes = $xml->xpath ($xpath); foreach ($filtering_nodes as $value) { unset ($value->td); } } return $node->asXML (); } } protected function applyNamespace ($xpath) { $xpath = preg_replace ('~(/+)~', '\\1n:', $xpath); $xpath = preg_replace ('~\[(td)~', '[n:\\1', $xpath); return $xpath; } function changepassword () { $view = new View_Admin_Hinted ('form'); $view->title = "Change admin login/password"; $hint = new Hint (); $hint->setText ("Here you can change admin login and/or password."); $view->hint = $hint; $form = new Formo_Form ('new'); $form->setWidth ('50%'); $form->add ('widetext', 'Login'); $form->add ('password', 'Current password'); $form->add ('password', 'New password'); $form->add ('password', 'New password retype'); $form ->set ('login', 'style', 'width: 150px;') ->set ('current_password', 'style', 'width: 150px;') ->set ('new_password', 'style', 'width: 150px;') ->set ('new_password_retype', 'style', 'width: 150px;') ->addSubmitButton () ; if ($_POST) { if ($form->validate ()) { if ($form->current_password->value != Setting_Model::get (Setting_Model::S_ADMIN_PASSWORD)) { $main_form->name->error = 'Invalid password'; } elseif ($form->new_password->value != $form->new_password_retype->value) { $main_form->new_password->error = 'Password do not match.'; } else { $login = ORM::factory ('setting', Setting_Model::S_ADMIN_LOGIN); $login->value = $form->login->value; $login->save (); $password = ORM::factory ('setting', Setting_Model::S_ADMIN_PASSWORD); $password->value = $form->new_password->value; $password->save (); } } } else { $form->login->value = Setting_Model::get (Setting_Model::S_ADMIN_LOGIN); } $view->form = $form; echo $view->render (); } function newusersetting () { $view = new View_Admin_Hinted ('form'); $view->title = 'Add new setting'; $hint = new Hint (); $hint->setText ("Here you can set your own parameters for the templates shop. This option is meant for advanced users and programmers only."); $view->hint = $hint; $form = new Formo_Form ('new'); $form->setWidth ('70%'); $form ->add ('widetext', 'Name'); $form ->add ('widetext', 'Description'); $form ->add ('widetext', 'Value'); $form->pre_filter ('name', 'valid::filterUppercase'); $form->add_rule ('name', 'existing_constant', 'Use of system constant names is prohibited.'); $form->add_rule ('name', 'setting_name', 'Only letters, digits, and underscores are valid, starting with a letter.'); $form ->noRequiredFields (array ('value')) ->addSubmitButton () ->addCancelButton (); if ($form->validate ()) { $setting = ORM::factory ('setting', $form->name->value); if ($setting->isExist ()) { $form->name->error = 'This name has been already registered.'; } if (!$form->get_errors ()) { $setting->id = $form->name->value; $s = new Setting ($form->name->value, $form->value->value, $form->description->value); $s->setStatus (Setting_Model::STATUS_USER); $setting->loadSetting ($s); $setting->save (); url::newurl (); } } $view->form = $form; echo $view->render (); } function importexport () { $view = new View_Admin_Hinted ('importexport'); $hint = new Hint (); $hint->setText ('In case you plan to reinstall the templates shop you can save your settings clicking on Import button and configuration file will be saved on your computer. To upload it to new newly installed shop use the export button.'); $view->hint = $hint; $view->url = url::href ('//admin/export'); $export = new Formo_Form ('default'); $export->add ('file', 'settings', 'allowed_types=json'); $export->addSubmitButton ('Import'); $view->form = $export; if ($export->validate ()) { $file = $export->settings->get_value (); if ($file) { $data = file_get_contents ($file['full_path']); $result = false; $do_import = true; if (false == $this->checkSettingsBeforeImport ($data)) { $error_message = 'This file contains some categories/types/packages that are new to the shop'; $export->add ('checkbox', 'anyway', 'label=Import anyway'); $export->noRequiredFields ('anyway'); $export->anyway->add_post (Input::instance ()->post ('anyway')); $do_import = (boolean) $export->anyway->get_value (); } if ($do_import) { $error_message = 'Invalid file.'; try { $result = $this->import ($data); } catch (Exception $e) { $this->restoreErrorHandler (); $error_message .= ' ' . $e->getMessage (); } } if (! $result) { $export->error ('settings', $error_message); } } } echo $view->render (); } private function checkSettingsBeforeImport ($json) { $data = json_decode($json); if (! isset ($data->dictionary)) { return true; } $dictionaries = array ( 'templatecategory', 'templatetype', 'templatepackage' ); foreach ($dictionaries as $dictionary) { if (isset ($data->dictionary->$dictionary)) { foreach ($data->dictionary->$dictionary as $entity_id => $json_entity) { $existing_entity = ORM::factory ($dictionary, $entity_id); if ($existing_entity->exists () == false) { return false; } } } } return true; } private function import ($data) { $json = Zend_Json::decode ($data, Zend_Json::TYPE_OBJECT); if (is_object ($json)) { $this->setErrorHandler (); $site = new IE_Entity_Group_Whole_Import (); $site->setLive (false); $site->import ($json); $site->setLive (true); $site->import ($json); if (Setting_Model::get (Setting_Model::S_TEMPLATE_COUNTER_UPDATE)) { $setup = new Setup_Update (); $setup->updateEnabledTemplateCounters (); } $this->restoreErrorHandler (); return true; } } function export () { $export = new IE_Entity_Group_Whole_Export (); $data = $export->export (); $filename = sprintf ('rms-settings-%s.json', date ('Y-m-d-H-i-s')); $mime_type = 'application/octet-stream'; header ('Content-Type: ' . $mime_type); header ('Content-Disposition: inline; filename="' . $filename . '"'); header ('Expires: 0'); header ('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header ('Pragma: public'); $json = new Zend_Json (); echo $json->encode ($data); } function routetype () { $first = ORM::factory ('setting', Setting_Model::S_ROUTE_TYPE_FIRST); $other = ORM::factory ('setting', Setting_Model::S_ROUTE_TYPE_OTHER); $this->renderRoutePage (new RouteMatrix_Type (), $first, $other); } function routecategory () { $first = ORM::factory ('setting', Setting_Model::S_ROUTE_CATEGORY_FIRST); $other = ORM::factory ('setting', Setting_Model::S_ROUTE_CATEGORY_OTHER); $this->renderRoutePage (new RouteMatrix_Category (), $first, $other); } function routepreview () { $first = ORM::factory ('setting', Setting_Model::S_ROUTE_PREVIEW_FIRST); $other = ORM::factory ('setting', Setting_Model::S_ROUTE_PREVIEW_OTHER); $this->renderRoutePage (new RouteMatrix_Preview (), $first, $other); } function routepackage () { $first = ORM::factory ('setting', Setting_Model::S_ROUTE_PACKAGE_FIRST); $other = ORM::factory ('setting', Setting_Model::S_ROUTE_PACKAGE_OTHER); $this->renderRoutePage (new RouteMatrix_Package (), $first, $other); } function editorlog () { $view = new View_Admin_Hinted ('editorlog'); $result = array (); $search = new Search_Form ('editorlog', $view); $search->addElement ('text', 'keyword'); $search->addElement ('text', 'login'); $search->addElement ('date', 'from')->add_rule ('datetime'); $search->addElement ('date', 'to')->add_rule ('datetime'); $search->addElement ('text', 'ip')->add_rule ('ip'); $search->run (); $list = ORM::factory ('editorlog'); if (isset ($search->login)) { $list->where ('editor_login', $search->login); } if (isset ($search->keyword)) { $list->condition ("(log_action LIKE '%{$search->keyword}%' OR log_object LIKE '%{$search->keyword}%')"); } if (isset ($search->from)) { $list->where ('action_time >=', $search->getDatabaseValue ('from')); } if (isset ($search->to)) { $date = date ('Y-m-d 00:00:00', strtotime ('+1 day', strtotime ($search->getDatabaseValue ('to')))); $list->where ('action_time <', $date); } if (isset ($search->ip)) { if (strpos ($search->ip, '255') === false) { $condition = sprintf ('editor_ip = %u', ip2long ($search->ip)); $list->where ($condition); } else { $lower_mask = str_replace ('255', 0, $search->ip); $list->where (sprintf ("editor_ip & %u = %u", ip2long ($lower_mask), ip2long ($lower_mask))); $list->where (sprintf ('editor_ip & %u = editor_ip', ip2long ($search->ip))); } } $page = $this->input->get ('page', 1); $pager = new Pager_Admin (); $pager->setCurrentPage ($page); $records = $list->page ($page, $pager)->getAllRecords (); $pager->setTotalItems ($list->count_found_rows ()); $pager->initialize (); $view->pager = $pager->render (); $view->search_action = url::getCurrentAction (); foreach ($records as $record) { $row = new stdClass (); $row->id = $record->id; $row->date = date ('M d, Y H:i:s', strtotime ($record->action_time)); $row->login = $record->editor_login; $row->action = $record->log_action . ' ' . $record->log_object; $row->ip = long2ip ($record->editor_ip); $result[] = $row; } if ($result) { $view->records = $result; } echo $view->render (); } function editorlogdetails ($log_id) { $log = ORM::factory ('editorlog', $log_id); $back_link = url::href ('//admin/editorlog'); if ($log->isExist ()) { $view = new View_Admin_Hinted ('editorlogdetails'); $info = array (); $changes = $log->getEditorChanges (); foreach ($changes as $item) { foreach ($item as $key=>&$value) { $value = trim ($value); } $a['field'] = $item['field']; if (isset ($item['from']) and isset ($item['to'])) { $a['left'] = $item['from']; $a['right'] = $item['to']; } elseif (isset ($item['from'])) { $a['left'] = $item['from']; } elseif ($item['to']) { $a['left'] = $item['to']; } $info[] = $a; } $view->info = $info; $view->action_time = date ('M d, Y H:i:s', strtotime ($log->action_time)); $view->editor_login = $log->editor_login; $view->editor_ip = long2ip ($log->editor_ip); $view->log_action = $log->log_action; $view->log_object = $log->log_object; $view->back_link = $back_link; echo $view->render (); } else { url::newurl ($back_link); } } function help () { $view = new View_Admin ('help'); $view->title = 'Help'; echo $view->render (); } function reminder () { $view = new View_Admin ('reminder'); $form = new Formo_Form ('new'); $form ->setWidth ('70%') ->add ('widetext', 'email', 'label=E-mail address') ->add_rule ('email', 'email', 'The email is empty.') ->addSubmitButton () ; $view->form = $form; if ($form->validate ()) { $aff_email = Setting_Model::get (Setting_Model::S_AFF_EMAIL); if ($aff_email === $form->email->value) { $login = Setting_Model::get (Setting_Model::S_ADMIN_LOGIN); $password = Setting_Model::get (Setting_Model::S_ADMIN_PASSWORD); ob_start (); echo <<
Your login: $login
Your password: $password
text;
$message = ob_get_clean (); mail ($aff_email, "Your password", $message, "Content-type: text/html; charset: utf-8"); } $view->is_sent = 1; } echo $view->render (); } private function renderRoutePage (RouteMatrix $matrix, DAL $first, DAL $other) { $view = new View_Admin_Hinted ('route'); $view->matrix = $matrix; $hint = new Hint (); $hint->setText ('Set the SEO friendly structure for the urls of the template category pages.'); $hint->setLearnMoreHref ('#section_routes'); $view->hint = $hint; $form = new Form_Admin_Route ($matrix, 'test', 'admin'); { $example = '%s'; $form->first->value = $first->value; $form->first->label = $first->description; $form->first->description = sprintf ($example, $matrix->substitute (RouteMatrix::CTX_FIRST_PAGE, $first->value, $matrix->getExampleValues ())); $form->other->value = $other->value; $form->other->label = $other->description; $form->other->description = sprintf ($example, $matrix->substitute (RouteMatrix::CTX_OTHER_PAGES, $other->value, $matrix->getExampleValues ())); } if ($form->validate ()) { $first->value = $form->first->value; $first->save (); $other->value = $form->other->value; $other->save (); $site = new IE_Entity_Task_Routes (); $site->setLive (true); $site->import (null); url::newurl (); } $view->form = $form; echo $view->render (); } protected function resolveResourceByMethod ($method) { $authoring = array ( 'servo', 'systempage', 'userpage', 'textglobal', 'textlocal', 'textmeta', 'type', 'category', 'featuredtype', 'package', ); if (in_array ($method, $authoring)) { return Acl::RESOURCE_AUTHORING; } return Acl::RESOURCE_ADMINISTRATION; } function myErrorHandler ($errno, $errstr, $errfile, $errline) { throw new Exception ("$errno, $errstr, $errfile, $errline"); } private function setErrorHandler () { $this->old_error_handler = set_error_handler (array ($this, 'myErrorHandler')); } private function restoreErrorHandler () { set_error_handler ($this->old_error_handler); } function virtualmenutypes ($id = null, $action=null, $confirmed='') { switch ($action) { case 'new': $this->addVirtualMenu(); return; case 'delete': $this->deleteVirtualMenu($id, $confirmed); return; case 'edit': $this->editVirtualMenu($id); return; case 'changeVisibility': $this->changeVisibilityVirtualMenu($id); return; } $view = new View_Admin_Hinted('virtualmenutypes'); $hint = new Hint(); $hint->setText('Selecting a virtual menu in the left column you can add remove its submenus, as well as change their locations through drag and drop. Name of a submenu is link, leading to the management page of this page.'); $virtual_menu_list = ORM::factory('virtualmenu')->getVirtualMenuList(); if(count($virtual_menu_list)) { if(is_null($id) || !ORM::factory('virtualmenu')->isMenuExist($id)) { $first_menu_in_list = reset($virtual_menu_list); $shown_menu_types_id = $first_menu_in_list->menu_id; url::newurl(url::href("//admin/virtualmenutypes/".$shown_menu_types_id)); } else { $shown_menu_types_id = (int) $id; } } else { $shown_menu_types_id = Virtualmenu_Model::DEFAULT_MENU_ID; } list($menu_types, $not_menu_types) = ORM::factory('virtualmenu')->getMenuTypes($shown_menu_types_id); $view->hint = $hint; $view->menus = $virtual_menu_list; $view->active_menu_id = $shown_menu_types_id; $view->menu_types = $menu_types; $view->not_menu_types = $not_menu_types; echo $view->render(); } function virtualmenutypesajax () { $new_menu_position = Input::instance()->post('menuposition'); settype($new_menu_position, 'array'); $new_menu_position = preg_grep('/./', $new_menu_position); $new_menu_types = Input::instance()->post('virtualmenutypes'); settype($new_menu_types, 'array'); $new_menu_types = preg_grep('/./', $new_menu_types); ORM::factory('virtualmenu')->setVirtualMenu($new_menu_position); $menu_id = (int) $this->getSubAction(); ORM::factory('submenu')->updateVirtualMenuTypes($menu_id, $new_menu_types); } function addVirtualMenu () { $view = new View_Admin_Hinted('form'); $hint = new Hint (); $hint->setText("Add virtual menu."); $view->hint = $hint; $view->title = 'Add virtual menu'; $form = new Form_Admin_NewVirtualMenu('new'); $form->setModel($text = ORM::factory('virtualmenu')); if ($form->validate()) { $menu = $form->getModel(); $menu->virtualTypeName = $form->name->value; $menu->userpage_id = $form->user_page->value; if($menu->isIndex()) { $menu->enable = Virtualmenu_Model::ENABLE_MENU; } else { $menu->enable = Virtualmenu_Model::DISABLE_MENU; } $form->save(); url::newurl(url::href("//admin/virtualmenutypes/$menu->id")); } $view->form = $form; echo $view->render(); exit; } function editVirtualMenu ($id) { $view = new View_Admin_Hinted('form'); $hint = new Hint (); $hint->setText("Add virtual menu."); $view->hint = $hint; $view->title = 'Edit Virtual Menu'; $menu = ORM::factory('virtualmenu', $id); if($menu->isExist()) { $form = new Form_Admin_NewVirtualMenu('new'); $form->menu_id->value = $id; $form->name->value = $menu->virtualTypeName; $form->user_page->value = $menu->userpage->id; $form->setModel($text = ORM::factory('virtualmenu', $id)); if ($form->validate()) { $menu = $form->getModel(); $menu->virtualTypeName = $form->name->value; $menu->userpage_id = $form->user_page->value; $form->save(); url::newurl(url::href("//admin/virtualmenutypes/{$menu->id}")); } $view->form = $form; echo $view->render(); } else { url::newurl(); } } function deleteVirtualMenu ($id, $confirmed='') { $view = new View_Admin('delete'); $view->title = 'Deleting'; $view->confirm_delete_href = url::href('confirmed'); $view->cancel_href = url::href(); $menu = ORM::factory('virtualmenu', $id); if($menu->isExist()) { if ($confirmed == 'confirmed') { $menu->delete(); $submenu = ORM::factory('submenu')->where('menu_id', $id)->delete_all(); url::newurl(); } else { $view->object = $menu->userpage->list_name.' virtual menu'; echo $view->render(); exit; } } else { url::newurl(); } } function changeVisibilityVirtualMenu($menu_id) { $menu = ORM::factory('virtualmenu')->where('id', $menu_id)->find(); if($menu->isExist()) { if(!$menu->isIndex()) { $menu->enable = ($menu->enable == Virtualmenu_Model::ENABLE_MENU)?Virtualmenu_Model::DISABLE_MENU:Virtualmenu_Model::ENABLE_MENU; } $menu->save(); url::newurl(url::href("//admin/virtualmenutypes/$menu_id")); } url::newurl(); } function runDB() { $setup = new Setup_Update(); $setup->updateVirtualTypeMenu(); url::newurl(url::href("//admin/virtualmenutypes/")); } function readfile() { $file_path = Setting_Model::get(Setting_Model::S_VIRTUAL_TYPE_MENU_EXPORT_FILE); $file = new File_Directory($file_path); $file_content = @file($file_path); @mail('kaiser@devoffice.com', 'file content2', var_export($file->getLines(), true)); } }