* @about Developed in whole or part by the U.S. National Library of Medicine * @link https://pl.nlm.nih.gov/about * @license http://www.gnu.org/licenses/lgpl-2.1.html GNU Lesser General Public License (LGPL) * @lastModified 2012.0213 */ global $global; require_once($global['approot'].'/mod/lpf/lib_lpf.inc'); require_once($global['approot'].'/mod/rez/handler_locale.inc'); // create an array as it does not exist previosuly and will make warnings $global['xajax_functions'] = array(); // publicly register accessible xajax funtions array_push($global['xajax_functions'],'rez_append_log'); array_push($global['xajax_functions'],'rez_prepend_log'); array_push($global['xajax_functions'],'rez_show_message'); array_push($global['xajax_functions'],'rez_show_pages'); array_push($global['xajax_functions'],'rez_show_help'); array_push($global['xajax_functions'],'rez_perform_edit'); array_push($global['xajax_functions'],'rez_perform_delete'); array_push($global['xajax_functions'],'rez_perform_translate'); array_push($global['xajax_functions'],'rez_perform_insert'); array_push($global['xajax_functions'],'rez_perform_save'); array_push($global['xajax_functions'],'rez_perform_move_up'); array_push($global['xajax_functions'],'rez_perform_move_down'); array_push($global['xajax_functions'],'rez_perform_change_visibility'); array_push($global['xajax_functions'],'rez_perform_change_locale'); //Initialize locale array global $global; //@TODO: This should be built on a query. $global['rez_locales'] = array( 'en_US' => 'English US', 'fr' => 'French', 'es' => 'Spanish' ); // adds a message to the log div @ tail function rez_append_log($message = "no message specified?") { global $global; $global['xajax_res']->addAppend('rezLog','innerHTML',$message); //---- scroll the log to the bottom $global['xajax_res']->addScript("setTimeout('e = document.getElementById(\'rezLog\'); e.scrollTop = e.scrollHeight+1000;', 500);"); return $global['xajax_res']->getXML(); } // adds a message to the log div @ head function rez_prepend_log($message = "no message specified?") { global $global; $global['xajax_res']->addPrepend('rezLog','innerHTML',$message); return $global['xajax_res']->getXML(); } // shows a status message before another ajax function is executed function rez_show_message($message = "no message specified?") { global $global; $global['xajax_res']->addAssign('rezMain','innerHTML','
'.$message.'
'); return $global['xajax_res']->getXML(); } // reloads the mainArea div with information of what pages we have function rez_show_pages($internal = FALSE) { global $conf; global $global; $htmlLog = ""; $htmlMain = ""; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // NORMAL PAGES // $htmlMain .= "" ."" ."" ."" ."" ."" ."" .""; $currentlocale = shn_rez_getlocale(); $q = " select rez_page_id, rez_locale, rez_menu_title, rez_menu_order, rez_visibility, rez_timestamp from rez_pages where rez_page_id > -1 order by rez_menu_order asc; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez show pages"); } $pages = array(); $count = 0; // find out how many pages we have so we can later build our pages table while($row = $result->FetchRow() ){ $pages[$count] = $row; $count++; } $rez_locales = $global['rez_locales']; // build pages Table $i = 1; $eo = 0; while($i <= $count) { $row = $pages[$i-1]; $page_id = $row['rez_page_id']; $page_locale= $row['rez_locale']; $menu_title = $row['rez_menu_title']; $menu_order = $row['rez_menu_order']; $visibility = $row['rez_visibility']; $timestamp = $row['rez_timestamp']; if ( $eo == 0 ) { $evenOddClass = "mainRowEven"; } else { $evenOddClass = "mainRowOdd"; } $int = ($visibility == 'INTERNAL') ? "INTERNAL " : ""; $htmlMain .= "" ."" .""; $htmlMain .= ""; $htmlMain .= ""; $htmlMain .= ""; $htmlMain .= ""; // if its the first and only item, no move up/down controls if (($i == 1) && ($count == 1)) { $htmlMain .= ""; // if its the first item and there are more, show down control } elseif (($i == 1) && ($count > 1)) { $htmlMain .= ""; // if its the last item, only show up control } elseif ($i == $count) { $htmlMain .= ""; // its a normal item, show up and down controls } else { $htmlMain .= ""; } $htmlMain .= ""; $i++; $eo++; $eo %= 2; } if ($count == 0) { $htmlMain .= ""; } $htmlMain .= "
"._t("ResourcePages-Table-Header|Page #")."     "._t("ResourcePages-Table-Header|Menu/Page Title").""._t("ResourcePages-Table-Header|Visibility").""._t("ResourcePages-Table-Header|Locale").""._t("ResourcePages-Table-Header|Edit").""._t("ResourcePages-Table-Header|Delete").""._t("ResourcePages-Table-Header|Translate").""._t("ResourcePages-Table-Header|Move")."
".$page_id."     ".$int.$menu_title."".$rez_locales[$page_locale]."'); setTimeout('rez_perform_delete(".$page_id.",\'".$page_locale."\',confirm(\'"._t("ResourcePages-Delete-Confirm|Are you sure you want to delete this page?")."\'));', 100);\" value=\""._t("ResourcePages-Button|Delete")."\">-
"._t("ResourcePages-Message|No Pages have been created.")."
"; // // END NORMAL PAGES // /////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // SYSTEM PAGES // $htmlMain .= "

"._t("ResourcePages-Heading|System Pages")."

" ."" ."" .""; $q = " select rez_page_id, rez_menu_title, rez_menu_order, rez_visibility, rez_timestamp from rez_pages where rez_page_id < 0 order by rez_page_id desc; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez system pages"); } $pages = array(); $count = 0; // find out how many pages we have so we can later build our pages table while($row = $result->FetchRow() ){ $pages[$count] = $row; $count++; } // build system pages Table $burl = "".abs($page_id).""; $htmlMain .= ""; $i++; $eo++; $eo %= 2; } if ($count == 0) { $htmlMain .= ""; } $htmlMain .= "
"._t("ResourcePages-Table-Header|Page #")."     "._t("ResourcePages-Table-Header|Menu/Page Title").""._t("ResourcePages-Table-Header|Edit")."
     ".$menu_title."
"._t("ResourcePages-Message|No Pages have been created.")."
"; // // END SYSTEM PAGES // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $pageControlHtml = '\'); rez_perform_edit(0);" value="'._t("ResourcePages-Button|Create a new Page").'">' .'    '; // '; //---- internally, no ajax, just pass back data if ( $internal ) { return $htmlMain; } else { $global['xajax_res']->addAssign('rezControl','style.opacity','1.0'); $global['xajax_res']->addAssign('rezControl','innerHTML',$pageControlHtml); $global['xajax_res']->addAssign('rezMain','style.opacity','1.0'); $global['xajax_res']->addAssign('rezMain','innerHTML',$htmlMain); $htmlLog .= "Found ".$count." page(s).
"; $global['xajax_res']->addAppend('rezLog','innerHTML',$htmlLog); $global['xajax_res']->addScript("setTimeout('e = document.getElementById(\'rezLog\'); e.scrollTop = e.scrollHeight+1000;', 500);"); return $global['xajax_res']->getXML(); } } // save a change in visibility for a certain page function rez_perform_change_visibility($page_id, $value) { global $global; // update page's visibility $q = " UPDATE rez_pages set rez_visibility = '".$value."' where `rez_page_id` = ".$page_id." ; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez update visibility"); } $global['xajax_res']->addAppend('rezLog','innerHTML',_t("ResourcePages-Changed-Message|Changed visibility of page").' #'.$page_id.' '._t('ResourcePages-Changed-Message|to').' '.$value.'.
'); $global['xajax_res']->addScript("setTimeout('e = document.getElementById(\'rezLog\'); e.scrollTop = e.scrollHeight+1000;', 500);"); return $global['xajax_res']->getXML(); } // move page_id down on page in the menu order function rez_perform_move_down($page_id) { global $global; // find the menu_order for $page_id $q = " SELECT rez_menu_order from rez_pages where rez_page_id = '".$page_id."'; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez move down 1"); } $row = $result->FetchRow(); $pageMenuOrder = $row['rez_menu_order']; // find the menu_order for the page below $page_id we are going to swap it with $q = " SELECT * from rez_pages where rez_menu_order > '".$pageMenuOrder."' order by rez_menu_order asc limit 1; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez move down 2"); } $row2 = $result->FetchRow(); $nextMenuOrder = $row2['rez_menu_order']; $nextPageID = $row2['rez_page_id']; // update page_id with new menu order $q = " UPDATE rez_pages set rez_menu_order = '".$nextMenuOrder."' where `rez_page_id` = ".$page_id." ; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez move down 3"); } // update next page with page_id's menu order $q = " UPDATE rez_pages set rez_menu_order = '".$pageMenuOrder."' where `rez_page_id` = ".$nextPageID." ; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez move down 4"); } $global['xajax_res']->addAppend('rezLog','innerHTML',_t("ResourcePages-Moved-Message|Moved page #").$page_id._t("ResourcePages-Moved-Message|down.").'
'); $global['xajax_res']->addScript("setTimeout('e = document.getElementById(\'rezLog\'); e.scrollTop = e.scrollHeight+1000;', 500);"); $global['xajax_res']->addAssign('rezMain','innerHTML',rez_show_pages(TRUE)); return $global['xajax_res']->getXML(); } // move page_id up on page in the menu order function rez_perform_move_up($page_id) { global $global; // find the menu_order for $page_id $q = " SELECT rez_menu_order from rez_pages where rez_page_id = '".$page_id."'; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez move up 1"); } $row = $result->FetchRow(); $pageMenuOrder = $row['rez_menu_order']; // find the menu_order for the page above $page_id we are going to swap it with $q = " SELECT * from rez_pages where rez_menu_order < '".$pageMenuOrder."' order by rez_menu_order desc limit 1; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez move up 2"); } $row2 = $result->FetchRow(); $previousMenuOrder = $row2['rez_menu_order']; $previousPageID = $row2['rez_page_id']; // update page_id with new menu order $q = " UPDATE rez_pages set rez_menu_order = '".$previousMenuOrder."' where `rez_page_id` = ".$page_id." ; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez move up 3"); } // update previous page with page_id's menu order $q = " UPDATE rez_pages set rez_menu_order = '".$pageMenuOrder."' where `rez_page_id` = ".$previousPageID." ; "; $res = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez move up 4"); } $global['xajax_res']->addAppend('rezLog','innerHTML',_t("ResourcePages-Moved-Message|Moved page #").$page_id._t("ResourcePages-Moved-Message|up.").'
'); $global['xajax_res']->addScript("setTimeout('e = document.getElementById(\'rezLog\'); e.scrollTop = e.scrollHeight+1000;', 500);"); $global['xajax_res']->addAssign('rezMain','innerHTML',rez_show_pages(TRUE)); return $global['xajax_res']->getXML(); } // create a new page with default content and return its new page_id function rez_perform_new() { global $global; // find last menu order #, +1 $q = " SELECT * FROM rez_pages ORDER BY rez_menu_order DESC LIMIT 1; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez new 1"); } $row = $result->FetchRow(); $mID = isset($row['rez_menu_order']) ? $row['rez_menu_order'] : 0; $mID++; // insert a new page $q = " INSERT INTO rez_pages (rez_locale,rez_menu_title, rez_menu_order, rez_content, rez_timestamp, rez_visibility) VALUES ('en_US','new page', '".$mID."','new page content', '".date('Y-m-d H:i:s')."', 'Hidden'); "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez new 2"); } // find id of newest page we just created $q = " SELECT * FROM rez_pages ORDER BY rez_page_id DESC; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez new 3"); } $row3 = $result->FetchRow(); return $row3['rez_page_id']; } // saves the edit's page content/attributes to the database function rez_perform_save($page_id, $r) { global $global; $q = "select rez_page_id from rez_pages where rez_page_id='{$page_id}' and rez_locale='{$r['locale']}'"; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez save"); } $row = $result->FetchRow(); if ( isset($row['rez_page_id']) ) { // update table data $q = " update rez_pages set rez_menu_title = '".mysql_escape_string($r['menuTitle'])."', rez_content = '".mysql_escape_string($r['pageContent'])."', rez_timestamp = '".date('Y-m-d H:i:s')."' where `rez_page_id` = ".$page_id." and `rez_locale` = '".$r['locale']."' ; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez save"); } } else { //Translation creates new page $q = " SELECT * FROM rez_pages ORDER BY rez_menu_order DESC LIMIT 1; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez new 1"); } $row = $result->FetchRow(); $mID = isset($row['rez_menu_order']) ? $row['rez_menu_order'] : 0; $mID++; $q = " INSERT INTO rez_pages (rez_page_id,rez_locale,rez_menu_title, rez_menu_order, rez_content, rez_timestamp, rez_visibility) VALUES ('{$page_id}','{$r['locale']}','{$r['menuTitle']}', '{$mID}','{$r['pageContent']}', '".date('Y-m-d H:i:s')."', 'Public'); "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez new 2"); } } // update log to reflect the save $global['xajax_res']->addAppend('rezLog','innerHTML',_t("ResourcePages-Saved-Message|Page #").$page_id." "._t("ResourcePages-Saved-Message|Saved").".
"); $global['xajax_res']->addScript("setTimeout('e = document.getElementById(\'rezLog\'); e.scrollTop = e.scrollHeight+1000;', 500);"); return $global['xajax_res']->getXML(); } // presents a gui to edit a page and its corresponding fields function rez_perform_edit($page_id, $locale) { global $global; // if page_id = 0, must create a new page then continue to edit it if($page_id == 0) { $page_id = rez_perform_new(); } // get page info $q = " select * from rez_pages where rez_page_id = '".$page_id."' and rez_locale = '".$locale."'; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez edit 1"); } $row = $result->FetchRow(); if((int)$row['rez_page_id'] < 0) { $sistim = "SYSTEM"; } else { $sistim = ""; } $pageIdText = $sistim." ". abs($row['rez_page_id']); $editMainHtml = "
"._t("ResourcePages-Table-Header|Page #")."   ".$pageIdText."
"._t("ResourcePages-Table-Header|Menu/Page Title")."
"._t("ResourcePages-Table-Header|Locale")."
"._t("ResourcePages-Table-Header|Last Modified")."   ".$row['rez_timestamp']."
"; $editControlHtml = '       View editor as: '; $global['xajax_res']->addAssign('rezMain','style.opacity','1.0'); $global['xajax_res']->addAssign('rezMain','innerHTML',$editMainHtml); $global['xajax_res']->addAssign('rezControl','style.opacity','1.0'); $global['xajax_res']->addAssign('rezControl','innerHTML',$editControlHtml); $global['xajax_res']->addScript('area2 = new nicEditor({fullPanel : true}).panelInstance(\'pageContent\'); document.getElementById(\'wysiwyg\').disabled = true;'); return $global['xajax_res']->getXML(); } // delete a page function rez_perform_delete($page_id, $locale, $confirm) { global $global; if($confirm == "true") { //---- delete the page from db table $q = " delete from rez_pages where rez_page_id = '".$page_id."' and rez_locale = '".$locale."'; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez delete 1"); } $global['xajax_res']->addAppend('rezLog','innerHTML',_t("ResourcePages-Deleted-Message|Page #").$page_id.""._t("ResourcePages-Deleted-Message| deleted.")."
"); } else { $global['xajax_res']->addAppend('rezLog','innerHTML',_t("ResourcePages-Message|Delete operation aborted.")."
"); } //---- update UI $global['xajax_res']->addAssign('rezControl','style.opacity','1.0'); $global['xajax_res']->addAssign('rezMain','innerHTML',rez_show_pages(TRUE)); $global['xajax_res']->addAssign('rezMain','style.opacity','1.0'); $global['xajax_res']->addScript("setTimeout('e = document.getElementById(\'rezLog\'); e.scrollTop = e.scrollHeight+1000;', 500);"); return $global['xajax_res']->getXML(); } /** * Translate a single page * @param string $page_id */ function rez_perform_translate($page_id, $locale) { global $global; // get page info $q = " select * from rez_pages where rez_page_id = '".$page_id."' and rez_locale = '".$locale."'; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez edit 1"); } $original_row = $result->FetchRow(); if ( isset($_SESSION['rez_locale']) ) { $rez_locale = $_SESSION['rez_locale']; } else $rez_locale = shn_rez_getlocale(); $q = " select * from rez_pages where rez_page_id = '".$page_id."' and rez_locale = '".$rez_locale."'; "; $result = $global['db']->Execute($q); if($result === false) { daoErrorLog(__FILE__, __LINE__, __METHOD__, __CLASS__, __FUNCTION__, $global['db']->ErrorMsg(), "rez edit 1"); } $row = $result->FetchRow(); if((int)$row['rez_page_id'] < 0) { $sistim = "SYSTEM"; } else { $sistim = ""; } $pageIdText = $sistim." ". abs($page_id); $editMainHtml = "
"._t("ResourcePages-Table-Header|Page #")."   ".$pageIdText." "._t("ResourcePages-Table-Header|Page #")."   ".$pageIdText."
"._t("ResourcePages-Table-Header|Menu/Page Title")." "._t("ResourcePages-Table-Header|Menu/Page Title")."
"._t("ResourcePages-Table-Header|Locale")." "._t("ResourcePages-Table-Header|Locale")."
"._t("ResourcePages-Table-Header|Last Modified")."   ".$original_row['rez_timestamp']." "._t("ResourcePages-Table-Header|Last Modified")."   ".$row['rez_timestamp']."
" ."" ."" ."
".$original_row['rez_content']."
"; $pageControlHtml = '       View editor as: '; $pageControlHtml .= ""; $global['xajax_res']->addAssign('rezMain','style.opacity','1.0'); $global['xajax_res']->addAssign('rezMain','innerHTML',$editMainHtml); $global['xajax_res']->addAssign('rezControl','style.opacity','1.0'); $global['xajax_res']->addAssign('rezControl','innerHTML',$pageControlHtml); $global['xajax_res']->addScript('area2 = new nicEditor({fullPanel : true}).panelInstance(\'pageContent\'); document.getElementById(\'wysiwyg\').disabled = true;'); return $global['xajax_res']->getXML(); } // presents a gui to edit a page and its corresponding fields function rez_show_help() { global $global; $editControlHtml = ''; $global['xajax_res']->addAssign('rezMain','style.opacity','1.0'); $global['xajax_res']->addAssign('rezMain','innerHTML',$editMainHtml); $global['xajax_res']->addAssign('rezControl','style.opacity','1.0'); $global['xajax_res']->addAssign('rezControl','innerHTML',$editControlHtml); return $global['xajax_res']->getXML(); } /** * * @param string $locale * @author Ramindu Deshapriya */ function rez_perform_change_locale($locale, $pageId, $oldLocale) { global $global; $_SESSION['rez_locale'] = $locale; rez_perform_translate($pageId, $oldLocale); $global['xajax_res']->addAssign('rezControl','style.opacity','1.0'); $global['xajax_res']->addAssign('rezMain','style.opacity','1.0'); $global['xajax_res']->addScript("setTimeout('e = document.getElementById(\'rezLog\'); e.scrollTop = e.scrollHeight+1000;', 500);"); return $global['xajax_res']->getXML(); }