From edb059f8949a22204e494d61bd9e272de299b937 Mon Sep 17 00:00:00 2001 From: secretr Date: Sat, 17 Jan 2009 22:48:14 +0000 Subject: [PATCH] News administration - done (without 'submitted news' page); ajax added on various places --- e107_admin/newspost.php | 217 +++++++++++++----- e107_files/jslib/core/admin.js | 15 +- e107_files/jslib/e107.js.php | 33 ++- e107_handlers/form_handler.php | 47 +++- e107_handlers/js_helper.php | 55 ++++- e107_languages/English/admin/lan_newspost.php | 10 +- 6 files changed, 284 insertions(+), 93 deletions(-) diff --git a/e107_admin/newspost.php b/e107_admin/newspost.php index 08a279062..1d3e632e5 100644 --- a/e107_admin/newspost.php +++ b/e107_admin/newspost.php @@ -9,8 +9,8 @@ * News Administration * * $Source: /cvs_backup/e107_0.8/e107_admin/newspost.php,v $ - * $Revision: 1.23 $ - * $Date: 2009-01-17 01:30:35 $ + * $Revision: 1.24 $ + * $Date: 2009-01-17 22:48:14 $ * $Author: secretr $ */ require_once("../class2.php"); @@ -31,6 +31,10 @@ $pst->id = "admin_newspost"; // ------------------------------ $newspost = new admin_newspost(e_QUERY, $pst); + +//Handle Ajax Calls +if($newspost->ajax_observer()) exit; + function headerjs() { global $newspost; @@ -62,6 +66,41 @@ function headerjs() "; + + if($newspost->getAction() == 'cat') + { + $ret .= " + + "; + } + elseif ($newspost->getAction() == 'pref') + { + $ret .= " + + "; + } $ret .= $newspost->_cal->load_files(); return $ret; @@ -163,6 +202,17 @@ class admin_newspost $e107->ecache->clear("othernews"); $e107->ecache->clear("othernews2"); } + + function ajax_observer() + { + $method = 'ajax_exec_'.$this->getAction(); + if(e_AJAX_REQUEST && method_exists($this, $method)) + { + $this->$method(); + return true; + } + return false; + } function observer() { @@ -387,9 +437,9 @@ class admin_newspost } else { - $_POST['category_button'] = $tp->toDB($_POST['category_button']); + $_POST['category_button'] = $e107->tp->toDB($_POST['category_button']); } - $_POST['category_name'] = $tp->toDB($_POST['category_name']); + $_POST['category_name'] = $e107->tp->toDB($_POST['category_name']); $e107->sql->db_Insert('news_category', "'0', '{$_POST['category_name']}', '{$_POST['category_button']}'"); $admin_log->log_event('NEWS_04',$_POST['category_name'].', '.$_POST['category_button'],E_LOG_INFORMATIVE,''); $this->show_message(NWSLAN_35, E_MESSAGE_SUCCESS); @@ -414,17 +464,20 @@ class admin_newspost function _observe_save_prefs() { global $pref, $admin_log; + + $e107 = e107::getInstance(); + $temp = array(); $temp['newsposts'] = intval($_POST['newsposts']); $temp['newsposts_archive'] = intval($_POST['newsposts_archive']); - $temp['newsposts_archive_title'] = $tp->toDB($_POST['newsposts_archive_title']); + $temp['newsposts_archive_title'] = $e107->tp->toDB($_POST['newsposts_archive_title']); $temp['news_cats'] = intval($_POST['news_cats']); $temp['nbr_cols'] = intval($_POST['nbr_cols']); $temp['subnews_attach'] = intval($_POST['subnews_attach']); $temp['subnews_resize'] = intval($_POST['subnews_resize']); $temp['subnews_class'] = intval($_POST['subnews_class']); $temp['subnews_htmlarea'] = intval($_POST['subnews_htmlarea']); - $temp['news_subheader'] = $tp->toDB($_POST['news_subheader']); + $temp['news_subheader'] = $e107->tp->toDB($_POST['news_subheader']); $temp['news_newdateheader'] = intval($_POST['news_newdateheader']); $temp['news_unstemplate'] = intval($_POST['news_unstemplate']); $temp['news_editauthor'] = intval($_POST['news_editauthor']); @@ -1183,27 +1236,49 @@ class admin_newspost "; } - - function show_message($message, $type = E_MESSAGE_INFO, $session = false) + + function ajax_exec_cat() { - // ##### Display comfort --------------------------------------------------------------------------------------------------------- - //global $ns; - //$ns->tablerender("", "
".$message."
"); - $emessage = &eMessage::getInstance(); - $emessage->add($message, $type, $session); + require_once (e_HANDLER.'js_helper.php'); + $e107 = &e107::getInstance(); + + $category = array(); + if ($e107->sql->db_Select("news_category", "*", "category_id=".$this->getId())) + { + $category = $e107->sql->db_Fetch(); + } + + if(empty($category)) + { + e_jshelper::sendAjaxError(404, 'Page not found!', 'Requested news category was not found in the DB.', true); + } + $jshelper = new e_jshelper(); + + //show cancel and update, hide create buttons; disable create button (just in case) + $jshelper->addResponseAction('element-invoke-by-id', array( + 'show' => 'category-clear,update-category', + 'disabled,1' => 'create-category', + 'hide' => 'create-category' + )); + + //category icon alias + $category['category-button'] = $category['category_icon']; + //Send the prefered response type + echo $jshelper->sendXMLResponse('fill-form', $category); } function show_categories() { - require_once(e_HANDLER."userclass_class.php"); require_once(e_HANDLER."form_handler.php"); $frm = new e_form(true); //enable inner tabindex counter $e107 = &e107::getInstance(); - + $category = array(); - if ($this->getSubAction() == "edit") { - if ($e107->sql->db_Select("news_category", "*", "category_id=".$this->getId())) { + if ($this->getSubAction() == "edit") + { + if ($e107->sql->db_Select("news_category", "*", "category_id=".$this->getId())) + { $category = $e107->sql->db_Fetch(); } } @@ -1246,6 +1321,9 @@ class admin_newspost { $text .= " ".$frm->admin_button('create_category', NWSLAN_56, 'create')." + ".$frm->admin_button('update_category', NWSLAN_55, 'update', '', 'other=style="display:none"')." + ".$frm->admin_button('category_clear', LAN_CANCEL, 'cancel', '', 'other=style="display:none"')." + ".$frm->hidden("category_id", 0)." "; } @@ -1257,7 +1335,7 @@ class admin_newspost //XXX LAN - Icon $text .= " -
+
".NWSLAN_51." @@ -1270,7 +1348,7 @@ class admin_newspost - + @@ -1286,11 +1364,11 @@ class admin_newspost $text .= " - - - - + + + @@ -1311,14 +1389,36 @@ class admin_newspost "; - $e107->ns->tablerender(NWSLAN_46, $text); + $e107->ns->tablerender(NWSLAN_46a, $text); } + function _optrange($num , $zero = true) + { + $tmp = range(0, $num < 0 ? 0 : $num); + if(!$zero) unset($tmp[0]); + return $tmp; + } + + function ajax_exec_pref_archnum() + { + global $pref; + + require_once(e_HANDLER."form_handler.php"); + $frm = new e_form(); + + echo $frm->selectbox('newsposts_archive', $this->_optrange(intval($this->getSubAction()) - 1), intval($pref['newsposts_archive']), 'class=tbox&tabindex='.intval($this->getId())); + } + function show_news_prefs() { - global $sql, $rs, $ns, $pref, $frm; + global $pref, $e_userclass; + + require_once(e_HANDLER."form_handler.php"); + $frm = new e_form(true); //enable inner tabindex counter + $e107 = &e107::getInstance(); + $text = "
@@ -1332,26 +1432,19 @@ class admin_newspost
"; @@ -1360,17 +1453,12 @@ class admin_newspost // ##### ADDED FOR NEWS ARCHIVE -------------------------------------------------------------------- // the possible archive values are from "0" to "< $pref['newsposts']" // this should really be made as an onchange event on the selectbox for $pref['newsposts'] ... + //SecretR - Done $text .= " @@ -1383,59 +1471,60 @@ class admin_newspost "; // ##### END -------------------------------------------------------------------------------------- - - require_once(e_HANDLER."userclass_class.php"); - $text .= " @@ -1447,7 +1536,7 @@ class admin_newspost "; - $ns->tablerender(NWSLAN_90, $text); + $e107->ns->tablerender(NWSLAN_90, $text); } @@ -1524,6 +1613,14 @@ class admin_newspost $ns->tablerender(NWSLAN_47, $text); } + + + function show_message($message, $type = E_MESSAGE_INFO, $session = false) + { + // ##### Display comfort --------- + $emessage = &eMessage::getInstance(); + $emessage->add($message, $type, $session); + } function show_options() { @@ -1558,6 +1655,4 @@ function newspost_adminmenu() global $newspost; $newspost->show_options(); } - - -?> +?> \ No newline at end of file diff --git a/e107_files/jslib/core/admin.js b/e107_files/jslib/core/admin.js index c74f812d8..caee49391 100644 --- a/e107_files/jslib/core/admin.js +++ b/e107_files/jslib/core/admin.js @@ -8,8 +8,8 @@ * e107 Admin Helper * * $Source: /cvs_backup/e107_0.8/e107_files/jslib/core/admin.js,v $ - * $Revision: 1.14 $ - * $Date: 2009-01-12 12:05:55 $ + * $Revision: 1.15 $ + * $Date: 2009-01-17 22:48:14 $ * $Author: secretr $ * */ @@ -92,7 +92,16 @@ e107Admin.Helper = { toggleChecked: function(event) { //do nothing if checkbox/form element or link is clicked var tmp = event.element().nodeName.toLowerCase(); - if(tmp == 'input' || tmp == 'a' || tmp == 'select' || tmp == 'textarea' || tmp == 'radio') return; + switch (tmp) { + case 'input': + case 'a': + case 'select': + case 'textarea': + case 'radio': + case 'label': + return; + break; + } //checkbox container element var element = event.findElement('.autocheck'), check = null; diff --git a/e107_files/jslib/e107.js.php b/e107_files/jslib/e107.js.php index 72995247e..b908e72b0 100644 --- a/e107_files/jslib/e107.js.php +++ b/e107_files/jslib/e107.js.php @@ -8,8 +8,8 @@ * e107 Javascript API * * $Source: /cvs_backup/e107_0.8/e107_files/jslib/e107.js.php,v $ - * $Revision: 1.23 $ - * $Date: 2009-01-16 17:57:57 $ + * $Revision: 1.24 $ + * $Date: 2009-01-17 22:48:14 $ * $Author: secretr $ * */ @@ -1486,7 +1486,7 @@ e107Event.register('ajax_loading_element_start', function(event) { if(element) element.startLoading(); }); -e107Event.register('ajax_loading_element_end', function(event) { +e107Event.register('ajax_loading_element_end', function(event) { var element = $(event.memo.overlayElement); if(element) window.setTimeout( function(){ element.stopLoading() }.bind(element), 50); }); @@ -2234,8 +2234,14 @@ var e107AjaxAbstract = Class.create ({ if(field.getAttribute('name')) { var type = field.getAttribute('type'), //not used yet name = field.getAttribute('name'), - eldata = field.firstChild; - parsed[action][name] = eldata ? eldata.data : ''; + eldata = field.firstChild + val = eldata ? eldata.data : ''; + if(parsed[action][name] && Object.isArray(parsed[action][name])) + parsed[action][name].push(val); + else if(parsed[action][name] && Object.isString(parsed[action][name])) + parsed[action][name] = [parsed[action][name], val]; + else + parsed[action][name]= val; } } @@ -2291,6 +2297,8 @@ var e107AjaxAbstract = Class.create ({ * Examples: * {'show': 'id1,id2,id3'} -> show elements with id id1,id2 and id3 * {'writeAttribute,rel,external': 'id1,id2,id3'} -> invoke writeAttribute('rel', 'external') on elements with id id1,id2 and id3 + * {'disabled,1': 'button-el,other-button-el'} -> set disabled property of elements with id button-el,other-button-el to true + * */ _processResponseElementInvokeById: function(response) { //response.key is comma separated list representing method -> args to be invoked on every element @@ -2298,11 +2306,16 @@ var e107AjaxAbstract = Class.create ({ var tmp = $A(key.split(',')), method = tmp[0], args = tmp.slice(1); - //response.value is comma separated element id list - $A(response[key].split(',')).each( function(el) { + //response.value is comma separated element id list or array of element ids + var els = Object.isArray(response[key]) ? response[key] : response[key].split(','); + $A(els).each( function(el) { el = $(el.strip()); - if(el) - el[method].apply(el, args) + if(el) { + if(Object.isFunction(el[method])) + el[method].apply(el, args); + else + el[method] = (args[0] ? true : false); + } }); }); }, @@ -2426,7 +2439,7 @@ e107Ajax.Updater = Class.create({ // Set current version value for container e107History.set(id, version); - } else { + } else { return new Ajax.Updater(container, url, this.options); } } diff --git a/e107_handlers/form_handler.php b/e107_handlers/form_handler.php index a3de36ccb..2b97e44eb 100644 --- a/e107_handlers/form_handler.php +++ b/e107_handlers/form_handler.php @@ -9,8 +9,8 @@ * Form Handler * * $Source: /cvs_backup/e107_0.8/e107_handlers/form_handler.php,v $ - * $Revision: 1.16 $ - * $Date: 2009-01-16 17:57:56 $ + * $Revision: 1.17 $ + * $Date: 2009-01-17 22:48:14 $ * $Author: secretr $ * */ @@ -147,6 +147,11 @@ class e_form return "get_attributes($options, $name, $value)." />"; } + + function checkbox_switch($name, $value, $checked = false, $label = '') + { + return $this->checkbox($name, $value, $checked).$this->label($label ? $label : LAN_ENABLED, $name, $value); + } function checkbox_toggle($name, $selector = 'multitoggle') { @@ -196,6 +201,11 @@ class e_form $options = $this->format_options('select', $name, $options); return "
".LAN_NEWS_45."Icon".NWSLAN_122." ".NWSLAN_6." ".LAN_OPTIONS."
{$category['category_id']}{$category['category_name']} - ".ADMIN_EDIT_ICON." + {$category['category_id']}{$category['category_name']} + ".ADMIN_EDIT_ICON." ".$frm->submit_image("delete[category_{$category['category_id']}]", $category['category_id'], 'delete', $e107->tp->toJS(NWSLAN_37." [ID: {$category['category_id']} ]"))."
".NWSLAN_86." - ".$frm->checkbox('news_cats', '1', ($pref['news_cats'] == 1))." + ".$frm->checkbox_switch('news_cats', 1, $pref['news_cats'])."
".NWSLAN_87." - + ".$frm->selectbox('nbr_cols', $this->_optrange(6, false), $pref['nbr_cols'], 'class=tbox')."
".NWSLAN_88." - ".$frm->text('newsposts', $pref['newsposts'])." + ".$frm->selectbox('newsposts', $this->_optrange(50, false), $pref['newsposts'], 'class=tbox')."
".NWSLAN_115." - +
".$frm->selectbox('newsposts_archive', $this->_optrange(intval($pref['newsposts']) - 1), intval($pref['newsposts_archive']), 'class=tbox')."
".NWSLAN_116."
".LAN_NEWS_51." - ".r_userclass("news_editauthor", $pref['news_editauthor'],"off","nobody,mainadmin,admin,classes")." + ".$e107->user_class->uc_dropdown('news_editauthor', $pref['news_editauthor'], 'nobody,main,admin,classes', "tabindex='".$frm->getNext()."'")."
".NWSLAN_106." - ".r_userclass("subnews_class", $pref['subnews_class'],"off","nobody,public,guest,member,admin,classes")." + ".$e107->user_class->uc_dropdown('subnews_class', $pref['subnews_class'], 'nobody,public,guest,member,admin,classes', "tabindex='".$frm->getNext()."'")."
".NWSLAN_107." - ".$frm->checkbox('subnews_htmlarea', '1', $pref['subnews_htmlarea'])." + ".$frm->checkbox_switch('subnews_htmlarea', '1', $pref['subnews_htmlarea'])."
".NWSLAN_100." - ".$frm->checkbox('subnews_attach', '1', $pref['subnews_attach'])." + ".$frm->checkbox_switch('subnews_attach', '1', $pref['subnews_attach'])."
".NWSLAN_101." - - ".NWSLAN_102." + ".$frm->text('subnews_resize', $pref['subnews_resize'], 5, 'size=6&class=tbox')." +
".NWSLAN_102."
".NWSLAN_111." - ".$frm->checkbox('news_newdateheader', '1', ($pref['news_newdateheader'] == 1))." -
".NWSLAN_112."
+
+ ".$frm->checkbox_switch('news_newdateheader', '1', $pref['news_newdateheader'])." +
".NWSLAN_112."
+
".NWSLAN_113." - ".$frm->checkbox('news_unstemplate', '1', ($pref['news_unstemplate'] == 1))." -
".NWSLAN_114."
+
+ ".$frm->checkbox_switch('news_unstemplate', '1', $pref['news_unstemplate'])." +
".NWSLAN_114."
+
".NWSLAN_120." -
" . display_help('helpb', 2) . " + ".$frm->bbarea('news_subheader', stripcslashes($pref['news_subheader']), 2, 'helpb')."