acl_check('administration', 'edit', 'users', $my->usertype, 'components', 'all') | $acl->acl_check('administration', 'edit', 'users', $my->usertype, 'components', 'com_sef'))) { mosRedirect('index2.php', _NOT_AUTH); } // Setup paths. $sef_config_class = $GLOBALS['mosConfig_absolute_path']."/administrator/components/com_sef/sh404sef.class.php"; $sef_config_file = $GLOBALS['mosConfig_absolute_path']."/administrator/components/com_sef/config/config.sef.php"; // shumisha 2007-03-13 added URL and iso code caching require_once($GLOBALS['mosConfig_absolute_path'].'/components/com_sef/shCache.php'); require_once($mainframe->getPath('admin_html')); // Make sure class was loaded. if (!class_exists('SEFConfig')) { // V 1.2.4.T was wrong variable name $SEFConfig_class instead of $sef_config_class if (is_readable($sef_config_class)) require_once($sef_config_class); else die(_COM_SEF_NOREAD."( $sef_config_class )
"._COM_SEF_CHK_PERMS); } // V 1.2.4.t include language file shIncludeLanguageFile(); $cid = mosGetParam($_REQUEST, 'cid', array(0)); $sortby = mosGetParam($_REQUEST, 'sortby', 0); // V 1.2.4.q initialize variable, to prevent E_NOTICE errors if (!isset($ViewModeId)) { $ViewModeId = mosGetParam($_REQUEST, 'ViewModeId', 0); } if (!isset($section)) { $section = mosGetParam($_REQUEST, 'section', null); } if (!isset($task)) { $task = mosGetParam($_REQUEST, 'section', null); } if (!isset($eraseCache)) { $eraseCache = mosGetParam($_REQUEST, 'eraseCache', null); } if (!isset($returnTo)) { // V 1.2.4.t $returnTo = mosGetParam($_REQUEST, 'returnTo', 0); } $sefConfig = new SEFConfig(); if (!is_array($cid)) $cid = array(0); // Action switch. switch ($task) { case 'cancel': { cancelsh404($option, $section, $returnTo); // V 1.2.4.t added returnTo break; } case 'edit': { if ($section == 'meta') editMeta($cid[0], $option); else editSEF($cid[0], $option); break; } case 'help': { HTML_sef::help(); break; } case 'info': { include ($GLOBALS['mosConfig_absolute_path'].'/administrator/components/com_sef/readme.inc.php'); break; } case 'new': { editSEF(0, $option); break; } case 'newMeta': { editMeta(0, $option, 0); // V 1.2.4.t always return to Meta Mngt screen break; } case 'newMetaFromSEF': { editMeta(0, $option, 1, $cid[0]); // V 1.2.4.t return to where we're coming from break; } case 'newHomeMeta': { editHomeMeta(0, $option, 0); // V 1.2.4.t always return to Meta Mngt screen break; } case 'newHomeMetaFromSEF': { editHomeMeta(0, $option, 1); // V 1.2.4.t return to where we're coming from break; } case 'deleteHomeMeta': { deleteHomeMeta($option, 0); // V 1.2.4.t return to where we're coming from break; } case 'deleteHomeMetaFromSEF': { deleteHomeMeta( $option, 1); // V 1.2.4.t return to where we're coming from break; } case 'homeAlias' : editHomeAlias(); break; case 'purge': { purge($option, $ViewModeId); break; } case 'purgeMeta': { purgeMeta($option); break; } case 'remove': { if ($section == 'meta') removeMeta($cid, $option); else removeSEF($cid, $option); break; } case 'save': { switch ($section) { case 'config' : saveConfig($eraseCache); break; case 'meta' : saveMeta($option, empty($returnTo)?0:$returnTo); break; case 'homeAlias' : saveHomeAlias(); break; default: saveSEF($option); break; } break; } case 'saveconfig': { saveConfig($eraseCache); break; } case 'showconfig': { showConfig ($option); break; } case 'view': { viewSEF($option, $ViewModeId); break; } case 'viewDuplicates': { viewDuplicates( !empty($cid[0]) ? $cid[0]:$id, $option); break; } case 'viewMeta': { viewMeta( $option); break; } case 'makeMainUrl': { makeMainUrl( !empty($cid[0]) ? $cid[0]:$id, $option); break; } case 'import_export': { HTML_sef::import_export($ViewModeId); break; } case 'import_export_meta': { HTML_sef::import_export_meta(); break; } case 'import': { $userfile = mosGetParam($_FILES, 'userfile', null); if (!$userfile) { echo '

ERROR UPLOADING FILE

'; exit(); } else{ import_custom_CSV($userfile, $ViewModeId); break; } } case 'setStandardAdmin': $sefConfig->shAdminInterfaceType = SH404SEF_STANDARD_ADMIN; saveConfig($eraseCache); break; case 'setAdvancedAdmin': $sefConfig->shAdminInterfaceType = SH404SEF_ADVANCED_ADMIN; saveConfig($eraseCache); break; case 'updateSecStats': updateSecStats(); break; case 'importOpenSEF': { $userfile = mosGetParam($_FILES, 'userfile', null); if (!$userfile) { echo '

ERROR UPLOADING FILE

'; exit(); } else{ import_custom_CSV_OPEN_SEF($userfile, $ViewModeId); break; } } case 'import_meta': { $userfile = mosGetParam($_FILES, 'userfile', null); if (!$userfile) { echo '

ERROR UPLOADING FILE

'; exit(); } else{ import_custom_CSV_meta($userfile); break; } } case 'export': { export_custom_CSV('sh404SEF_sef_urls.csv', $ViewModeId); break; } case 'export_meta': { export_custom_CSV('sh404SEF_meta.csv', 4); break; } case 'dwnld': { $returnData = 1; $data = $sefConfig->saveConfig($returnData); $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); $data =strtr($data, $trans_tbl); output_attachment('config.sef.php',$data); exit(); } default: { include_once('components/com_sef/404SEF_cpanel.php'); displayCPanel(); break; } } // V 1.2.4.q function displayCPanel() { global $database, $sefConfig; $sql = 'SELECT count(*) FROM #__redirection WHERE '; $database->setQuery($sql. "`dateadd` > '0000-00-00' and `newurl` = '' "); // 404 $Count404 = $database->loadResult(); $database->setQuery($sql. "`dateadd` > '0000-00-00' and `newurl` != '' " ); // custom $customCount = $database->loadResult(); $database->setQuery($sql. "`dateadd` = '0000-00-00'"); // regular $sefCount = $database->loadResult(); // calculate security stats $default = empty($sefConfig->shSecLastUpdated) ? '- -' : '0'; $shSecStats['curMonth'] = empty($sefConfig->shSecCurMonth) ? $default : $sefConfig->shSecCurMonth; if (empty($sefConfig->shSecLastUpdated)) $shSecStats['lastUpdated'] = $default; else $shSecStats['lastUpdated'] = date('Y-m-d H:i:s', $sefConfig->shSecLastUpdated); $monthStart = mktime(0,0,0, empty($sefConfig->shSecLastUpdated) ? 0: intval(date('m', $sefConfig->shSecLastUpdated)), 1, empty($sefConfig->shSecLastUpdated) ? 0 : intval(date('Y', $sefConfig->shSecLastUpdated)) ); $hours = $sefConfig->shSecLastUpdated == $monthStart ? 0.0001 : ($sefConfig->shSecLastUpdated - $monthStart)/3600; $shSecStats['totalAttacks'] = empty($sefConfig->shSecTotalAttacks) ? $default : $sefConfig->shSecTotalAttacks; $shSecStats['totalAttacksHrs'] = $shSecStats['totalAttacks']/$hours; $shSecStats['totalConfigVars'] = empty($sefConfig->shSecTotalConfigVars) ? $default : $sefConfig->shSecTotalConfigVars; $shSecStats['totalConfigVarsHrs'] = $shSecStats['totalConfigVars']/$hours; $shSecStats['totalBase64'] = empty($sefConfig->shSecTotalBase64) ? $default : $sefConfig->shSecTotalBase64; $shSecStats['totalBase64Hrs'] = $shSecStats['totalBase64']/$hours; $shSecStats['totalScripts'] = empty($sefConfig->shSecTotalScripts) ? $default : $sefConfig->shSecTotalScripts; $shSecStats['totalScriptsHrs'] = $shSecStats['totalScripts']/$hours; $shSecStats['totalStandardVars'] = empty($sefConfig->shSecTotalStandardVars) ? $default : $sefConfig->shSecTotalStandardVars; $shSecStats['totalStandardVarsHrs'] = $shSecStats['totalStandardVars']/$hours; $shSecStats['totalImgTxtCmd'] = empty($sefConfig->shSecTotalImgTxtCmd) ? $default : $sefConfig->shSecTotalImgTxtCmd; $shSecStats['totalImgTxtCmdHrs'] = $shSecStats['totalImgTxtCmd']/$hours; $shSecStats['totalIPDenied'] = empty($sefConfig->shSecTotalIPDenied) ? $default : $sefConfig->shSecTotalIPDenied; $shSecStats['totalIPDeniedHrs'] = $shSecStats['totalIPDenied']/$hours; $shSecStats['totalUserAgentDenied'] = empty($sefConfig->shSecTotalUserAgentDenied) ? $default : $sefConfig->shSecTotalUserAgentDenied; $shSecStats['totalUserAgentDeniedHrs'] = $shSecStats['totalUserAgentDenied']/$hours; $shSecStats['totalFlooding'] = empty($sefConfig->shSecTotalFlooding) ? $default : $sefConfig->shSecTotalFlooding; $shSecStats['totalFloodingHrs'] = $shSecStats['totalFlooding']/$hours; $shSecStats['totalPHP'] = empty($sefConfig->shSecTotalPHP) ? $default : $sefConfig->shSecTotalPHP; $shSecStats['totalPHPHrs'] = $shSecStats['totalPHP']/$hours; $shSecStats['totalPHPUserClicked'] = empty($sefConfig->shSecTotalPHPUserClicked) ? $default : $sefConfig->shSecTotalPHPUserClicked; $shSecStats['totalPHPUserClickedHrs'] = $shSecStats['totalPHPUserClicked']/$hours; if (!empty($sefConfig->shSecTotalAttacks)) { $shSecStats['totalConfigVarsPct'] = round($sefConfig->shSecTotalConfigVars/$sefConfig->shSecTotalAttacks*100,1); $shSecStats['totalBase64Pct'] = round($sefConfig->shSecTotalBase64/$sefConfig->shSecTotalAttacks*100,1); $shSecStats['totalScriptsPct'] = round($sefConfig->shSecTotalScripts/$sefConfig->shSecTotalAttacks*100,1); $shSecStats['totalStandardVarsPct'] = round($sefConfig->shSecTotalStandardVars/$sefConfig->shSecTotalAttacks*100,1); $shSecStats['totalImgTxtCmdPct'] = round($sefConfig->shSecTotalImgTxtCmd/$sefConfig->shSecTotalAttacks*100,1); $shSecStats['totalIPDeniedPct'] = round($sefConfig->shSecTotalIPDenied/$sefConfig->shSecTotalAttacks*100,1); $shSecStats['totalUserAgentDeniedPct'] = round($sefConfig->shSecTotalUserAgentDenied/$sefConfig->shSecTotalAttacks*100,1); $shSecStats['totalFloodingPct'] = round($sefConfig->shSecTotalFlooding/$sefConfig->shSecTotalAttacks*100,1); $shSecStats['totalPHPPct'] = round($sefConfig->shSecTotalPHP/$sefConfig->shSecTotalAttacks*100,1); $shSecStats['totalPHPUserClickedPct'] = round($sefConfig->shSecTotalPHPUserClicked/$sefConfig->shSecTotalAttacks*100,1); } else { $shSecStats['totalConfigVarsPct'] = 0; $shSecStats['totalBase64Pct'] = 0; $shSecStats['totalScriptsPct'] = 0; $shSecStats['totalStandardVarsPct'] = 0; $shSecStats['totalImgTxtCmdPct'] = 0; $shSecStats['totalIPDeniedPct'] = 0; $shSecStats['totalUserAgentDeniedPct'] = 0; $shSecStats['totalFloodingPct'] = 0; $shSecStats['totalPHPPct'] = 0; $shSecStats['totalPHPUserClickedPct'] = 0; } displayCPanelHTML( $sefCount, $Count404, $customCount, $shSecStats); } /** * List the records * @param string The current GET/POST option * @param int The mode of view 0= */ function viewSEF($option, $ViewModeId = 0) { global $database, $mainframe, $mosConfig_list_limit; $catid = $mainframe->getUserStateFromRequest( "catid{$option}", 'catid', 0 ); $limit = $mainframe->getUserStateFromRequest( "viewlistlimit", 'limit', $mosConfig_list_limit ); $limitstart = $mainframe->getUserStateFromRequest( "view{$option}limitstart", 'limitstart', 0 ); $ViewModeId = $mainframe->getUserStateFromRequest( "viewmode{$option}", 'viewmode', 0 ); $SortById = $mainframe->getUserStateFromRequest( "SortBy{$option}", 'sortby', 0 ); // V 1.2.4.q added search URL feature, taken from Joomla content page //$search = $mainframe->getUserStateFromRequest( "search{$option}{$sectionid}", 'search', '' ); $search = $mainframe->getUserStateFromRequest( "search{$option}", 'search', '' ); if (get_magic_quotes_gpc()) { $search = stripslashes( $search ); } //echo 'Recherche de : '.$search.'
'; // V 1.2.4.q : initialize variables $is404mode = false; $where = ''; if ($ViewModeId == 1) { $where = "`dateadd` > '0000-00-00' and `newurl` = '' "; // V 1.2.4.q : initialize variables $is404mode = true; }elseif ( $ViewModeId == 2 ) { $where = "`dateadd` > '0000-00-00' and `newurl` != '' "; }else{ $where = "`dateadd` = '0000-00-00'"; } if ( !empty($search) ) { // V 1.2.4.q added search URL feature $where .= empty( $where) ? '': ' AND ' . "oldurl LIKE '%" . $database->getEscaped( trim( strtolower( $search ) ) ) . "%'"; } //echo 'Ajout Requete : '.$where.'
'; // make the select list for the filter $viewmode[] = mosHTML::makeOption( '0', _COM_SEF_SHOW0 ); $viewmode[] = mosHTML::makeOption( '1', _COM_SEF_SHOW1 ); $viewmode[] = mosHTML::makeOption( '2', _COM_SEF_SHOW2 ); $lists['viewmode'] = mosHTML::selectList( $viewmode, 'viewmode', "class=\"inputbox\" onchange=\"document.adminForm.submit();\" size=\"1\"" , 'value', 'text', $ViewModeId ); // make the select list for the filter $orderby[] = mosHTML::makeOption( '0', _COM_SEF_SEFURL._COM_SEF_ASC); $orderby[] = mosHTML::makeOption( '1', _COM_SEF_SEFURL._COM_SEF_DESC ); if ($is404mode != true) { $orderby[] = mosHTML::makeOption( '2', _COM_SEF_REALURL._COM_SEF_ASC ); $orderby[] = mosHTML::makeOption( '3', _COM_SEF_REALURL._COM_SEF_DESC ); } $orderby[] = mosHTML::makeOption( '4', _COM_SEF_HITS._COM_SEF_ASC ); $orderby[] = mosHTML::makeOption( '5', _COM_SEF_HITS._COM_SEF_DESC ); $lists['sortby'] = mosHTML::selectList( $orderby, 'sortby', "class=\"inputbox\" onchange=\"document.adminForm.submit();\" size=\"1\"" , 'value', 'text', $SortById ); switch ($SortById){ case 1 : $sort = "`oldurl` DESC, `rank` ASC"; break; case 2 : $sort = "`newurl`, `rank` ASC"; break; case 3 : $sort = "`newurl` DESC, `rank` ASC"; break; case 4 : $sort = "`cpt`"; break; case 5 : $sort = "`cpt` DESC"; break; default : $sort = "`oldurl`, `rank` ASC"; break; } // get the total number of records $query = "SELECT count(*) FROM #__redirection WHERE ".$where; $database->setQuery( $query ); $total = $database->loadResult(); require_once( $GLOBALS['mosConfig_absolute_path'] . '/administrator/includes/pageNavigation.php' ); $pageNav = new mosPageNav( $total, $limitstart, $limit ); // get the subset (based on limits) of required records $query = "SELECT * FROM #__redirection WHERE ".$where." ORDER BY ".$sort. " LIMIT $pageNav->limitstart,$pageNav->limit"; $database->setQuery( $query ); $rows = $database->loadObjectList(); if ($database->getErrorNum()) { echo $database->stderr(); return false; } //echo 'Requete : '.$query.'
'; //var_dump($rows); //die(); // V 1.2.4.q added search feature //HTML_sef::viewSEF( $rows, $lists, $pageNav, $option, $ViewModeId); HTML_sef::viewSEF( $rows, $lists, $pageNav, $option, $ViewModeId, $search ); } function viewDuplicates( $id, $option) { global $database, $mainframe, $mosConfig_list_limit; $limit = $mainframe->getUserStateFromRequest( "viewlistlimit", 'limit', $mosConfig_list_limit ); $limitstart = $mainframe->getUserStateFromRequest( "view{$option}limitstart", 'limitstart', 0 ); $SortById = $mainframe->getUserStateFromRequest( "SortBy{$option}", 'sortby', 0 ); // V 1.2.4.q added search URL feature, taken from Joomla content page //$search = $mainframe->getUserStateFromRequest( "search{$option}{$sectionid}", 'search', '' ); //$search = $mainframe->getUserStateFromRequest( "search{$option}", 'search', '' ); //if (get_magic_quotes_gpc()) { // $search = stripslashes( $search ); //} //echo 'Recherche de : '.$search.'
'; // V 1.2.4.q : initialize variables $sql = 'SELECT oldurl FROM #__redirection WHERE id = "'.$id.'"'; $database->setQuery($sql); $oldUrl = $database->loadResult(); if (!empty($oldUrl)) { $where = 'oldurl = "'.$oldUrl.'"'; //if ( !empty($search) ) { // V 1.2.4.q added search URL feature // $where .= empty( $where) ? '': ' AND ' . "oldurl LIKE '%" . // $database->getEscaped( trim( strtolower( $search ) ) ) . "%'"; //} //echo 'Ajout Requete : '.$where.'
'; // make the select list for the filter $orderby[] = mosHTML::makeOption( '0', _COM_SEF_MANAGE_DUPLICATES_RANK._COM_SEF_ASC ); $orderby[] = mosHTML::makeOption( '1', _COM_SEF_MANAGE_DUPLICATES_RANK._COM_SEF_DESC ); $orderby[] = mosHTML::makeOption( '2', _COM_SEF_REALURL._COM_SEF_ASC ); $orderby[] = mosHTML::makeOption( '3', _COM_SEF_REALURL._COM_SEF_DESC ); $lists['sortby'] = mosHTML::selectList( $orderby, 'sortby', "class=\"inputbox\" onchange=\"document.adminForm.submit();\" size=\"1\"" , 'value', 'text', $SortById ); switch ($SortById){ case 1 : $sort = "`rank` DESC"; break; case 2 : $sort = "`oldurl` ASC"; break; case 3 : $sort = "`oldurl` DESC"; break; default: $sort = "`rank` ASC"; break; } // get the total number of records $query = "SELECT count(*) FROM #__redirection WHERE ".$where; $database->setQuery( $query ); $total = $database->loadResult(); require_once( $GLOBALS['mosConfig_absolute_path'] . '/administrator/includes/pageNavigation.php' ); $pageNav = new mosPageNav( $total, $limitstart, $limit ); // get the subset (based on limits) of required records $query = "SELECT * FROM #__redirection WHERE ".$where." ORDER BY ".$sort. " LIMIT $pageNav->limitstart,$pageNav->limit"; $database->setQuery( $query ); $rows = $database->loadObjectList(); if ($database->getErrorNum()) { echo $database->stderr(); return false; } //echo 'Requete : '.$query.'
'; //var_dump($rows); //die(); // V 1.2.4.q added search feature //HTML_sef::viewSEF( $rows, $lists, $pageNav, $option, $ViewModeId); HTML_sef::viewDuplicates( $rows, $lists, $pageNav, $option, $id // ,$search ); } } function makeMainUrl( $id, $option) { // find out about selected URL global $database; $sql = 'SELECT oldurl, rank,id FROM #__redirection WHERE id = "'.$id.'"'; $database->setQuery($sql); $database->loadObject($selectedUrl); //echo '$id : '.$id.'
'; //var_dump($selectedUrl); //die(); if (!empty($selectedUrl)) { if ($selectedUrl->rank == 0) { mosRedirect( 'index2.php?option='.$option.'&task=view', _COM_SEF_BAD_DUPLICATES_NOTHING_TO_DO ); } else { // we need to find what it the current main URL, then we'll swap ranks $sql = 'SELECT id, rank FROM #__redirection WHERE oldurl = "'.$selectedUrl->oldurl.'" ORDER BY `rank` ASC'; $database->setQuery($sql); $database->loadObject($prevMainUrl); //var_dump($prevMainUrl); if (!empty($prevMainUrl)) { // update both URL $sql = 'UPDATE #__redirection SET rank ="'.$selectedUrl->rank.'" WHERE `id` = "'.$prevMainUrl->id.'"'; //echo '
$sql : '.$sql.'
'; $database->setQuery($sql); $shErr = !$database->query(); $sql = 'UPDATE #__redirection SET rank="0" WHERE `id` = "'.$id.'"'; //echo '
$sql : '.$sql.'
'; $database->setQuery($sql); $shErr = !$database->query() && $shErr; //die(); mosRedirect( 'index2.php?option='.$option.'&task=view', $shErr ? _COM_SEF_MAKE_MAIN_URL_ERROR:_COM_SEF_MAKE_MAIN_URL_OK ); } else mosRedirect( 'index2.php?option='.$option.'&task=view', _COM_SEF_BAD_DUPLICATES_DATA ); } } else mosRedirect( 'index2.php?option='.$option.'&task=view', _COM_SEF_BAD_DUPLICATES_DATA ); } /** * Creates a new or edits and existing user record * @param int The id of the user, 0 if a new entry * @param string The current GET/POST option */ function editSEF( $id, $option ) { global $database, $my, $mainframe; $LinkTypeId = $mainframe->getUserStateFromRequest( "linktype{$option}", 'linktype', 0 ); $SectionId = $mainframe->getUserStateFromRequest( "sectionid{$option}", 'sectionid', 0 ); $CategoryId = $mainframe->getUserStateFromRequest( "categoryid{$option}", 'categoryid', 0 ); $ContentId = $mainframe->getUserStateFromRequest( "contentid{$option}", 'contentid', 0 ); $row = new shMosSEF( $database ); // load the row from the db table $row->load( $id ); if ($id) { // do stuff for existing records if ($row->dateadd != "0000-00-00" ) $row->dateadd = date("Y-m-d"); } else { // do stuff for new records $row->dateadd = date("Y-m-d"); } // V 1.3.1 fetch aliases $query = 'SELECT alias FROM #__sh404sef_aliases as a, #__redirection as r ' . 'WHERE r.newurl = a.newurl AND r.id = \''.$id.'\''; $database->setQuery($query); $aliases = $database->loadObjectList(); $lists['shAliasList'] = ''; if (!empty($aliases)) foreach($aliases as $alias) $lists['shAliasList'] .= $alias->alias."\n"; HTML_sef::editSEF( $row, $lists, $option ); } function viewMeta($option) { global $database, $mainframe, $mosConfig_list_limit; $limit = $mainframe->getUserStateFromRequest( "viewlistlimit", 'limit', $mosConfig_list_limit ); $limitstart = $mainframe->getUserStateFromRequest( "view{$option}limitstart", 'limitstart', 0 ); $SortById = $mainframe->getUserStateFromRequest( "SortBy{$option}", 'sortby', 0 ); // V 1.2.4.q added search URL feature, taken from Joomla content page //$search = $mainframe->getUserStateFromRequest( "search{$option}{$sectionid}", 'search', '' ); $search = $mainframe->getUserStateFromRequest( "searchMeta{$option}", 'searchMeta', '' ); if (get_magic_quotes_gpc()) { $search = stripslashes( $search ); } // V 1.2.4.t exclude homepage meta, which are edited using a specific button, as URl may vary $where = 'newurl != \''.sh404SEF_HOMEPAGE_CODE.'\''; if ( !empty($search) ) { // V 1.2.4.q added search URL feature $where .= " AND newurl LIKE '%" . $database->getEscaped( trim( strtolower( $search ) ) ) . "%'"; } // make the select list for the filter $orderby[] = mosHTML::makeOption( '0', _COM_SEF_REALURL._COM_SEF_ASC ); $orderby[] = mosHTML::makeOption( '1', _COM_SEF_REALURL._COM_SEF_DESC ); $lists['sortby'] = mosHTML::selectList( $orderby, 'sortby', "class=\"inputbox\" onchange=\"document.adminForm.submit();\" size=\"1\"" , 'value', 'text', $SortById ); switch ($SortById){ case 1 : $sort = "`newurl` DESC"; break; default : $sort = "`newurl` ASC"; break; } // get the total number of records $query = "SELECT count(*) FROM #__sh404SEF_meta WHERE ".$where; //echo '$query : '.$query.'
'; $database->setQuery( $query ); $total = $database->loadResult(); require_once( $GLOBALS['mosConfig_absolute_path'] . '/administrator/includes/pageNavigation.php' ); $pageNav = new mosPageNav( $total, $limitstart, $limit ); // get the subset (based on limits) of required records $query = "SELECT * FROM #__sh404SEF_meta WHERE ".$where." ORDER BY ".$sort. " LIMIT $pageNav->limitstart,$pageNav->limit"; //echo '$query : '.$query.'
'; $database->setQuery( $query ); $rows = $database->loadObjectList(); if ($database->getErrorNum()) { echo $database->stderr(); return false; } HTML_sef::viewMeta( $rows, $lists, $pageNav, $option, $search ); } /** * Creates a new or edits and existing user record * @param int The id of the user, 0 if a new entry, $returnTO = 0 : back to Metamanagement, 1 = to SEF URl list * @param string The current GET/POST option */ function editMeta( $id, $option, $returnTo = 0, $redirId = 0 ) { global $database, $my, $mainframe; $row = new sh404SEFMeta( $database ); // load the row from the db table $url = ''; $row->load( $id ); if ($redirId) { // do stuff for existing records $sql = 'SELECT oldurl, newurl FROM #__redirection WHERE id=\''.$redirId.'\';'; $database->setQuery($sql); $database->loadObject($url); if (!empty($url)) { $row->newurl = $url->newurl; $sql = 'SELECT * from #__sh404SEF_meta WHERE newurl = \''.$url->newurl.'\';'; $database->setQuery($sql); $database->loadObject($newMeta); if (!empty($newMeta)) { $row->id = $newMeta->id; $row->metatitle = $newMeta->metatitle; $row->metadesc = $newMeta->metadesc; $row->metakey = $newMeta->metakey; $row->metarobots = $newMeta->metarobots; $row->metalang = $newMeta->metalang; } } } if ($returnTo == 1) // V 1.2.4.t $editUrl = 0; else $editUrl = 1; HTML_sef::editMeta( $row, $option, $returnTo, $editUrl, empty($url) ? '':$url->oldurl); } // V 1.2.4.t edit homepage meta function editHomeMeta( $id, $option, $returnTo = 0) { // 0 = return to Meta page, 1 = return to SEF URL page global $database, $my, $mainframe; $row = new sh404SEFMeta( $database ); // load the row from the db table $row->load( $id ); $row->newurl = sh404SEF_HOMEPAGE_CODE; $sql = 'SELECT * from #__sh404SEF_meta WHERE newurl = "'.$row->newurl.'"'; $database->setQuery($sql); $database->loadObject($newMeta); if (!empty($newMeta)) { $row->id = $newMeta->id; $row->metatitle = $newMeta->metatitle; $row->metadesc = $newMeta->metadesc; $row->metakey = $newMeta->metakey; $row->metarobots = $newMeta->metarobots; $row->metalang = $newMeta->metalang; } HTML_sef::editMeta( $row, $option, $returnTo, 0, ''); // V 1.2.4.t never edit URL if home meta } function deleteHomeMeta( $option, $returnTo = 0) { global $database, $my, $mainframe; $sql = 'DELETE from #__sh404SEF_meta WHERE newurl = "'.sh404SEF_HOMEPAGE_CODE.'"'; $database->setQuery($sql); $database->query(); if ($database->getErrorNum()) { $mosmsg = $database->stderr(); } else $mosmsg = _COM_SEF_SUCCESSPURGE; $returnTask = empty($returnTo) ? '&task=viewMeta' : '&task=view'; mosRedirect( 'index2.php?option='.$option.$returnTask.'&mosmsg='.$mosmsg ); } /** * Saves the record from an edit form submit * @param string The current GET/POST option */ function saveSEF( $option ) { global $database, $my, $sefConfig; $mosMsg = ''; // V 1.2.4.t $row = new shMosSEF( $database ); $saveOldUrl = mosGetParam($_POST, 'saveOldUrl'); if (!$row->bind( $_POST )) { echo "\n"; exit(); } // pre-save checks $check = $row->check(); if (!$check) { echo "\n"; exit(); } if ($check === true) { // shumisha 2007-03-16 remove previous redirection from cache shLoadURLCache(); // must load cache from disk, so that it can be written back later, with new url $urlType = $row->dateadd == '0000-00-00' ? sh404SEF_URLTYPE_AUTO : sh404SEF_URLTYPE_CUSTOM; // V 1.2.4.t if ( ($urlType == sh404SEF_URLTYPE_CUSTOM) && !preg_match( '/(&|\?)lang=[a-zA-Z]{2,3}/iU', $row->newurl)) { // no lang string, let's add default $shTemp = explode( '_', $GLOBALS['mosConfig_locale']); $shLangTemp = $shTemp[0] ? $shTemp[0] : 'en'; $row->newurl .= '&lang='.$shLangTemp; } $row->newurl = shSortUrl($row->newurl); // V 1.2.4.t $query = "SELECT newurl, rank, id FROM #__redirection WHERE oldurl = '".$row->oldurl."' ORDER BY rank ASC"; $database->setQuery($query); $dbUrlList = $database->loadObjectList(); if (count($dbUrlList) > 0) { // there are URL with same SEF URL if (!$sefConfig->shRecordDuplicates) { // we don't allow duplicates : reject this URL $mosMsg = _COM_SEF_DUPLICATE_NOT_ALLOWED; }else { // same SEF, but we allow duplicates $existingRecord = null; foreach ($dbUrlList as $urlInDB) { // same SEF, but is the non-sef in this list of URl with same SEF ? if ($urlInDB->newurl == $row->newurl) { $existingRecord = $urlInDB; $mosMsg = _COM_SEF_URLEXIST; } } if (empty( $existingRecord)) { // this new non-sef does not already exists $shTemp = array('nonSefURL' => $row->newurl); // which means we must update the record for the old non-sef url shRemoveURLFromCache($shTemp); // remove the old url from cache $shNewMaxRank = $dbUrlList[count($dbUrlList)-1]->rank+1; $query = "UPDATE #__redirection SET oldurl='".$row->oldurl."', newurl='" .$row->newurl."', rank='".$shNewMaxRank."', dateadd='".$row->dateadd."' WHERE id = '".$row->id."'"; // update DB $database->setQuery($query); $database->query(); shAddSefURLToCache( $row->newurl, $row->oldurl, $urlType); // put custom URL in DB and cache // V 1.3.1 add old SEF to alias list if (strpos($_POST['shAliasList'], $saveOldUrl) === false) $_POST['shAliasList'] .= $saveOldUrl. "\n"; } else { // the old non-sef does not exists, we are creating a new record from scratch $shTemp = array('nonSefURL' => $row->newurl); shAddSefURLToCache( $row->newurl, $row->oldurl, $URLType); // add also cache if (!$row->store()) { // simply store URL. If there is already one with same non-sef, this will raise an error in store() echo "\n"; exit(); } } } } else { // there is no URL with same SEF URL $shTemp = array('nonSefURL' => $row->newurl); shRemoveURLFromCache($shTemp); // remove it from cache shAddSefURLToCache( $row->newurl, $row->oldurl, $URLType); // add also cache if (!$row->store()) { // simply store URL. If there is already one with same non-sef, this will raise an error in store() echo "\n"; exit(); } // V 1.3.1 add old SEF to alias list if (strpos($_POST['shAliasList'], $saveOldUrl) === false) $_POST['shAliasList'] .= $saveOldUrl. "\n"; } } // V 1.3.1 update alias list in db in $row->shAliasList $aliases = mosGetParam($_POST, 'shAliasList'); saveAliases( $aliases, $row->newurl); mosRedirect( 'index2.php?option='.$option.'&task=view'.(empty($mosMsg)?'':'&mosmsg='.$mosMsg) ); } // save aliases attached to non-sef newurl function saveAliases($aliases, $newurl) { global $database; $aliases = explode("\n", $aliases); // delete them all. We should do a transaction, but not worth it $query = 'DELETE from #__sh404sef_aliases where newurl = \''.$newurl.'\''; $database->setQuery($query); $database->query(); // Write new aliases if (!empty($aliases[0])) { $query = 'INSERT INTO #__sh404sef_aliases (newurl, alias) VALUES __shValues__;'; $values = ''; $endOfLine = array("\r\n", "\n", "\r"); foreach($aliases as $alias) { $alias = str_replace($endOfLine, '', $alias); if (!empty($alias)) $values .= '(\''.$newurl.'\', \''.$alias.'\'),'; } $query = str_replace('__shValues__', rtrim($values, ','), $query); $database->setQuery($query); $database->query(); } } function editHomeAlias() { // edit aliases for homepage global $database; $query = 'SELECT alias FROM #__sh404sef_aliases WHERE newurl = \''.sh404SEF_HOMEPAGE_CODE.'\';'; $database->setQuery($query); $aliases = $database->loadObjectList(); $lists['shAliasList'] = ''; if (!empty($aliases)) foreach($aliases as $alias) $lists['shAliasList'] .= $alias->alias."\n"; HTML_sef::editHomeAlias( $lists ); } function saveHomeAlias() { // save homepage aliases to DB $aliases = mosGetParam($_POST, 'shAliasList'); saveAliases( $aliases, sh404SEF_HOMEPAGE_CODE); mosRedirect( 'index2.php?option=com_sef&task=view'); } /** * Removes records * @param array An array of id keys to remove * @param string The current GET/POST option */ function removeSEF( &$cid, $option ) { global $database; if (!is_array( $cid ) || count( $cid ) < 1) { echo "\n"; exit; } if (count( $cid )) { $cids = implode( ',', $cid ); // shumisha 2007-03-16 remove also from URL cache $query = "SELECT `newurl` FROM #__redirection" . "\n WHERE id IN ($cids)"; $database->setQuery( $query ); $rows = $database->loadResultArray(); shLoadURLCache(); // must load cache from disk, so that it can be written back later properly shRemoveURLFromCache($rows); // shumisha end of change $query = "DELETE FROM #__redirection" . "\n WHERE id IN ($cids)" ; $database->setQuery( $query ); if (!$database->query()) { echo "\n"; } } mosRedirect( 'index2.php?option='.$option.'&task=view' ); } /** * Saves the record from an edit form submit * @param string The current GET/POST option * $returnTo : 0 -> return to meta management, 1 return to SEF URL List */ function saveMeta( $option, $returnTo = 0 ) { global $database, $my; $row = new sh404SEFMeta( $database ); if (!$row->bind( $_POST )) { echo "\n"; exit(); } if ( $row->newurl != sh404SEF_HOMEPAGE_CODE && // don't add on homepage !preg_match( '/(&|\?)lang=[a-zA-Z]{2,3}/iU', $row->newurl)) { // no lang string, let's add default $shTemp = explode( '_', $GLOBALS['mosConfig_locale']); $shLangTemp = $shTemp[0] ? $shTemp[0] : 'en'; $row->newurl .= '&lang='.$shLangTemp; } if ( $row->newurl != sh404SEF_HOMEPAGE_CODE) $row->newurl = shSortUrl($row->newurl); // V 1.2.4.t // pre-save checks if (!$row->check()) { echo "\n"; exit(); } //echo '
after check;
'; // save the changes if (!$row->store()) { echo "\n"; exit(); } $returnTask = empty($returnTo) ? '&task=viewMeta' : '&task=view'; mosRedirect( 'index2.php?option='.$option.$returnTask ); } /** * Removes records * @param array An array of id keys to remove * @param string The current GET/POST option */ function removeMeta( &$cid, $option ) { global $database; if (!is_array( $cid ) || count( $cid ) < 1) { echo "\n"; exit; } if (count( $cid )) { $cids = implode( ',', $cid ); $query = "DELETE FROM #__sh404SEF_meta" . "\n WHERE id IN ($cids)"; $database->setQuery( $query ); if (!$database->query()) { echo "\n"; } } mosRedirect( 'index2.php?option='.$option.'&task=viewMeta' ); } /** * Cancels an edit operation * @param string The current GET/POST option */ function cancelsh404( $option, $section, $returnTo ) { // V 1.2.4.s reworked for meta V 1.2.4.t added returnTo if (!empty($returnTo)) mosRedirect( 'index2.php?option='.$option.'&task=view' ); switch ($section) { case 'config': mosRedirect( 'index2.php?option='.$option ); break; case 'meta' : mosRedirect( 'index2.php?option='.$option.'&task=viewMeta' ); break; default: mosRedirect( 'index2.php?option='.$option.'&task=view' ); break; } } function showConfig($option) { global $sefConfig, $sef_config_file; global $database; $std_opt = 'class="inputbox" size="2"'; $lists['enabled'] = mosHTML::yesnoRadioList('Enabled', $std_opt, $sefConfig->Enabled ); $lists['lowercase'] = mosHTML::yesnoRadioList('LowerCase', $std_opt, $sefConfig->LowerCase ); $lists['showsection'] = mosHTML::yesnoRadioList('ShowSection', $std_opt, $sefConfig->ShowSection ); $lists['showcat'] = mosHTML::yesnoRadioList('ShowCat', $std_opt, $sefConfig->ShowCat ); // shumisha 2007-04-01 new params for cache : $lists['shUseURLCache'] = mosHTML::yesnoRadioList('shUseURLCache', $std_opt, $sefConfig->shUseURLCache ); // shumisha 2007-04-03 new params for translation and Itemid : $lists['shTranslateURL'] = mosHTML::yesnoRadioList('shTranslateURL', $std_opt, $sefConfig->shTranslateURL ); $lists['shInsertLanguageCode'] = mosHTML::yesnoRadioList('shInsertLanguageCode', $std_opt, $sefConfig->shInsertLanguageCode ); $lists['shInsertGlobalItemidIfNone'] = mosHTML::yesnoRadioList('shInsertGlobalItemidIfNone', $std_opt, $sefConfig->shInsertGlobalItemidIfNone ); $lists['shInsertTitleIfNoItemid'] = mosHTML::yesnoRadioList('shInsertTitleIfNoItemid', $std_opt, $sefConfig->shInsertTitleIfNoItemid ); $lists['shAlwaysInsertMenuTitle'] = mosHTML::yesnoRadioList('shAlwaysInsertMenuTitle', $std_opt, $sefConfig->shAlwaysInsertMenuTitle ); $lists['shAlwaysInsertItemid'] = mosHTML::yesnoRadioList('shAlwaysInsertItemid', $std_opt, $sefConfig->shAlwaysInsertItemid ); // shumisha 2007-04-11 new params for Numerical Id insert : $lists['shInsertNumericalId'] = mosHTML::yesnoRadioList('shInsertNumericalId', $std_opt, $sefConfig->shInsertNumericalId ); // build the html select list for category : copied from rd_rss admin file // note : we could do only one request to db and sort in memory ! $lookup = ''; if ( $sefConfig->shInsertNumericalIdCatList ) { // V 1.2.4.q shInsertNumericalIdCatList can be empty so let's protect query $shANDCatList = implode(', ', $sefConfig->shInsertNumericalIdCatList); if (!empty($shANDCatList)) $shANDCatList = "\n AND c.id IN ( ".$shANDCatList." )"; $query = "SELECT c.id AS `value`, c.section AS `id`, CONCAT_WS( ' / ', s.title, c.title) AS `text`" . "\n FROM #__sections AS s" . "\n INNER JOIN #__categories AS c ON c.section = s.id" . "\n WHERE s.scope = 'content'" // V 1.2.4.q shInsertNumericalIdCatList can be empty so let's protect query . $shANDCatList . "\n ORDER BY s.name,c.name" ; $database->setQuery( $query ); $lookup = $database->loadObjectList(); } $category[] = mosHTML::makeOption( '', _COM_SEF_SH_INSERT_NUMERICAL_ID_ALL_CAT ); $query = "SELECT c.id AS `value`, c.section AS `id`, CONCAT_WS( ' / ', s.title, c.title) AS `text`" . "\n FROM #__sections AS s" . "\n INNER JOIN #__categories AS c ON c.section = s.id" . "\n WHERE s.scope = 'content'" . "\n ORDER BY s.name,c.name" ; $database->setQuery( $query ); $catList = $database->loadObjectList(); if (is_array($catList)) $category = array_merge( $category, $catList ); $category = mosHTML::selectList( $category, 'shInsertNumericalIdCatList[]', 'class="inputbox" size="10" multiple="multiple"', 'value', 'text', $lookup ); $lists['shInsertNumericalIdCatList'] = $category; // shumisha 2007-04-03 new params for Virtuemart plugin : $lists['shVmInsertShopName'] = mosHTML::yesnoRadioList('shVmInsertShopName', $std_opt, $sefConfig->shVmInsertShopName ); $lists['shInsertProductId'] = mosHTML::yesnoRadioList('shInsertProductId', $std_opt, $sefConfig->shInsertProductId ); $lists['shVmUseProductSKU'] = mosHTML::yesnoRadioList('shVmUseProductSKU', $std_opt, $sefConfig->shVmUseProductSKU ); $lists['shVmInsertManufacturerName'] = mosHTML::yesnoRadioList('shVmInsertManufacturerName', $std_opt, $sefConfig->shVmInsertManufacturerName ); $lists['shInsertManufacturerId'] = mosHTML::yesnoRadioList('shInsertManufacturerId', $std_opt, $sefConfig->shInsertManufacturerId ); $shVMInsertCat[] = mosHTML::makeOption( '0', _COM_SEF_SH_VM_DO_NOT_SHOW_CATEGORIES ); $shVMInsertCat[] = mosHTML::makeOption( '1', _COM_SEF_SH_VM_SHOW_LAST_CATEGORY ); $shVMInsertCat[] = mosHTML::makeOption( '2', _COM_SEF_SH_VM_SHOW_ALL_CATEGORIES ); $lists['shVMInsertCategories'] = mosHTML::selectList( $shVMInsertCat, 'shVMInsertCategories', "class=\"inputbox\" size=\"1\"" , 'value', 'text', $sefConfig->shVMInsertCategories); $lists['shInsertCategoryId'] = mosHTML::yesnoRadioList('shInsertCategoryId', $std_opt, $sefConfig->shInsertCategoryId ); $lists['shVmInsertFlypage'] = mosHTML::yesnoRadioList('shVmInsertFlypage', // V 1.2.4.q $std_opt, $sefConfig->shVmInsertFlypage ); // shumisha 2007-04-03 end of new params for Virtuemart plugin // V 1.2.4.q new param for URL encoding $lists['shEncodeUrl'] = mosHTML::yesnoRadioList('shEncodeUrl', $std_opt, $sefConfig->shEncodeUrl ); $lists['guessItemidOnHomepage'] = mosHTML::yesnoRadioList('guessItemidOnHomepage', $std_opt, $sefConfig->guessItemidOnHomepage ); $lists['shForceNonSefIfHttps'] = mosHTML::yesnoRadioList('shForceNonSefIfHttps', // V 1.2.4.q $std_opt, $sefConfig->shForceNonSefIfHttps ); $shRewriteMode[] = mosHTML::makeOption( '0', _COM_SEF_SH_RW_MODE_NORMAL ); $shRewriteMode[] = mosHTML::makeOption( '1', _COM_SEF_SH_RW_MODE_INDEXPHP ); $shRewriteMode[] = mosHTML::makeOption( '2', _COM_SEF_SH_RW_MODE_INDEXPHP2 ); $lists['shRewriteMode'] = mosHTML::selectList( $shRewriteMode, 'shRewriteMode', "class=\"inputbox\" size=\"1\"" , 'value', 'text', $sefConfig->shRewriteMode); $lists['shRecordDuplicates'] = mosHTML::yesnoRadioList('shRecordDuplicates', // V 1.2.4.r $std_opt, $sefConfig->shRecordDuplicates ); $lists['shRemoveGeneratorTag'] = mosHTML::yesnoRadioList('shRemoveGeneratorTag', // V 1.2.4.r $std_opt, $sefConfig->shRemoveGeneratorTag ); $lists['shPutH1Tags'] = mosHTML::yesnoRadioList('shPutH1Tags', // V 1.2.4.r $std_opt, $sefConfig->shPutH1Tags ); $lists['shMetaManagementActivated'] = mosHTML::yesnoRadioList('shMetaManagementActivated', // V 1.2.4.r $std_opt, $sefConfig->shMetaManagementActivated ); $lists['shInsertContentTableName'] = mosHTML::yesnoRadioList('shInsertContentTableName', // V 1.2.4.r $std_opt, $sefConfig->shInsertContentTableName ); $lists['shAutoRedirectWww'] = mosHTML::yesnoRadioList('shAutoRedirectWww', // V 1.2.4.r $std_opt, $sefConfig->shAutoRedirectWww ); $lists['shVmInsertProductName'] = mosHTML::yesnoRadioList('shVmInsertProductName', // V 1.2.4.s $std_opt, $sefConfig->shVmInsertProductName ); //$lists['usealias'] = mosHTML::yesnoRadioList('UseAlias', $std_opt, $sefConfig->UseAlias ); if ($sefConfig->UseAlias == 0) { $fulltitle = 'checked="checked"'; $titlealias = ''; } else { $titlealias = 'checked="checked"'; $fulltitle = ''; } $lists['usealias'] = ' ' . _FULL_TITLE . ' ' . _TITLE_ALIAS . ' '; // shumisha 2007-04-11 new params for non-sef to sef 301 redirect : $lists['shRedirectNonSefToSef'] = mosHTML::yesnoRadioList('shRedirectNonSefToSef', $std_opt, $sefConfig->shRedirectNonSefToSef ); // shumisha 2007-05-04 new params for joomla sef to sef 301 redirect : $lists['shRedirectJoomlaSefToSef'] = mosHTML::yesnoRadioList('shRedirectJoomlaSefToSef', $std_opt, $sefConfig->shRedirectJoomlaSefToSef ); // shumisha 2007-04-25 new params to activate iJoomla magazine in content : $lists['shActivateIJoomlaMagInContent'] = mosHTML::yesnoRadioList('shActivateIJoomlaMagInContent', $std_opt, $sefConfig->shActivateIJoomlaMagInContent ); $lists['shInsertIJoomlaMagIssueId'] = mosHTML::yesnoRadioList('shInsertIJoomlaMagIssueId', $std_opt, $sefConfig->shInsertIJoomlaMagIssueId ); $lists['shInsertIJoomlaMagName'] = mosHTML::yesnoRadioList('shInsertIJoomlaMagName', $std_opt, $sefConfig->shInsertIJoomlaMagName ); $lists['shInsertIJoomlaMagMagazineId'] = mosHTML::yesnoRadioList('shInsertIJoomlaMagMagazineId', $std_opt, $sefConfig->shInsertIJoomlaMagMagazineId ); $lists['shInsertIJoomlaMagArticleId'] = mosHTML::yesnoRadioList('shInsertIJoomlaMagArticleId', $std_opt, $sefConfig->shInsertIJoomlaMagArticleId ); // shumisha 2007-04-27 new params for Community Builder : $lists['shInsertCBName'] = mosHTML::yesnoRadioList('shInsertCBName', $std_opt, $sefConfig->shInsertCBName ); $lists['shCBInsertUserName'] = mosHTML::yesnoRadioList('shCBInsertUserName', $std_opt, $sefConfig->shCBInsertUserName ); $lists['shCBInsertUserId'] = mosHTML::yesnoRadioList('shCBInsertUserId', $std_opt, $sefConfig->shCBInsertUserId ); $lists['shCBUseUserPseudo'] = mosHTML::yesnoRadioList('shCBUseUserPseudo', $std_opt, $sefConfig->shCBUseUserPseudo ); // V 1.2.4.k 404 errors loggin is now optional $lists['shLog404Errors'] = mosHTML::yesnoRadioList('shLog404Errors', $std_opt, $sefConfig->shLog404Errors ); $lists['shVmAdditionalText'] = mosHTML::yesnoRadioList('shVmAdditionalText', $std_opt, $sefConfig->shVmAdditionalText ); $lists['shVmInsertFlypage'] = mosHTML::yesnoRadioList('shVmInsertFlypage', $std_opt, $sefConfig->shVmInsertFlypage ); // V 1.2.4.m added fireboard params $lists['shInsertFireboardName'] = mosHTML::yesnoRadioList('shInsertFireboardName', $std_opt, $sefConfig->shInsertFireboardName ); $lists['shFbInsertCategoryName'] = mosHTML::yesnoRadioList('shFbInsertCategoryName', $std_opt, $sefConfig->shFbInsertCategoryName ); $lists['shFbInsertCategoryId'] = mosHTML::yesnoRadioList('shFbInsertCategoryId', $std_opt, $sefConfig->shFbInsertCategoryId ); $lists['shFbInsertMessageSubject'] = mosHTML::yesnoRadioList('shFbInsertMessageSubject', $std_opt, $sefConfig->shFbInsertMessageSubject ); $lists['shFbInsertMessageId'] = mosHTML::yesnoRadioList('shFbInsertMessageId', $std_opt, $sefConfig-> shFbInsertMessageId); // V 1.2.4.r MyBlog params $lists['shInsertMyBlogName'] = mosHTML::yesnoRadioList('shInsertMyBlogName', $std_opt, $sefConfig->shInsertMyBlogName ); $lists['shMyBlogInsertPostId'] = mosHTML::yesnoRadioList('shMyBlogInsertPostId', $std_opt, $sefConfig->shMyBlogInsertPostId ); $lists['shMyBlogInsertTagId'] = mosHTML::yesnoRadioList('shMyBlogInsertTagId', $std_opt, $sefConfig->shMyBlogInsertTagId ); $lists['shMyBlogInsertBloggerId'] = mosHTML::yesnoRadioList('shMyBlogInsertBloggerId', $std_opt, $sefConfig->shMyBlogInsertBloggerId ); /* Docman parameters V 1.2.4.r*/ $lists['shInsertDocmanName'] = mosHTML::yesnoRadioList('shInsertDocmanName', $std_opt, $sefConfig->shInsertDocmanName ); $lists['shDocmanInsertDocId'] = mosHTML::yesnoRadioList('shDocmanInsertDocId', $std_opt, $sefConfig->shDocmanInsertDocId ); $lists['shDocmanInsertDocName'] = mosHTML::yesnoRadioList('shDocmanInsertDocName', $std_opt, $sefConfig->shDocmanInsertDocName ); $lists['shDMInsertCategoryId'] = mosHTML::yesnoRadioList('shDMInsertCategoryId', // V 1.2.4.t $std_opt, $sefConfig->shDMInsertCategoryId ); $shDMInsertCat[] = mosHTML::makeOption( '0', _COM_SEF_SH_VM_DO_NOT_SHOW_CATEGORIES ); $shDMInsertCat[] = mosHTML::makeOption( '1', _COM_SEF_SH_VM_SHOW_LAST_CATEGORY ); $shDMInsertCat[] = mosHTML::makeOption( '2', _COM_SEF_SH_VM_SHOW_ALL_CATEGORIES ); $lists['shDMInsertCategories'] = mosHTML::selectList( $shDMInsertCat, 'shDMInsertCategories', "class=\"inputbox\" size=\"1\"" , 'value', 'text', $sefConfig->shDMInsertCategories); $lists['shInsertContentBlogName'] = mosHTML::yesnoRadioList('shInsertContentBlogName', // V 1.2.4.t $std_opt, $sefConfig->shInsertContentBlogName ); $lists['shInsertMTreeName'] = mosHTML::yesnoRadioList('shInsertMTreeName', // V 1.2.4.t $std_opt, $sefConfig->shInsertMTreeName ); $lists['shMTreeInsertListingName'] = mosHTML::yesnoRadioList('shMTreeInsertListingName', // V 1.2.4.t $std_opt, $sefConfig->shMTreeInsertListingName ); $lists['shMTreeInsertListingId'] = mosHTML::yesnoRadioList('shMTreeInsertListingId', // V 1.2.4.t $std_opt, $sefConfig->shMTreeInsertListingId ); $lists['shMTreePrependListingId'] = mosHTML::yesnoRadioList('shMTreePrependListingId', // V 1.2.4.t $std_opt, $sefConfig->shMTreePrependListingId ); $shMTreeInsertCat[] = mosHTML::makeOption( '0', _COM_SEF_SH_VM_DO_NOT_SHOW_CATEGORIES ); $shMTreeInsertCat[] = mosHTML::makeOption( '1', _COM_SEF_SH_VM_SHOW_LAST_CATEGORY ); $shMTreeInsertCat[] = mosHTML::makeOption( '2', _COM_SEF_SH_VM_SHOW_ALL_CATEGORIES ); $lists['shMTreeInsertCategories'] = mosHTML::selectList( $shMTreeInsertCat, 'shMTreeInsertCategories', "class=\"inputbox\" size=\"1\"" , 'value', 'text', $sefConfig->shMTreeInsertCategories); $lists['shMTreeInsertCategoryId'] = mosHTML::yesnoRadioList('shMTreeInsertCategoryId', // V 1.2.4.t $std_opt, $sefConfig->shMTreeInsertCategoryId ); $lists['shMTreeInsertUserName'] = mosHTML::yesnoRadioList('shMTreeInsertUserName', // V 1.2.4.t $std_opt, $sefConfig->shMTreeInsertUserName ); $lists['shMTreeInsertUserId'] = mosHTML::yesnoRadioList('shMTreeInsertUserId', // V 1.2.4.t $std_opt, $sefConfig->shMTreeInsertUserId ); $lists['shInsertNewsPName'] = mosHTML::yesnoRadioList('shInsertNewsPName', // V 1.2.4.t $std_opt, $sefConfig->shInsertNewsPName ); $lists['shNewsPInsertCatId'] = mosHTML::yesnoRadioList('shNewsPInsertCatId', // V 1.2.4.t $std_opt, $sefConfig->shNewsPInsertCatId ); $lists['shNewsPInsertSecId'] = mosHTML::yesnoRadioList('shNewsPInsertSecId', // V 1.2.4.t $std_opt, $sefConfig->shNewsPInsertSecId ); /* Remository parameters V 1.2.4.t */ $lists['shInsertRemoName'] = mosHTML::yesnoRadioList('shInsertRemoName', $std_opt, $sefConfig->shInsertRemoName ); $lists['shRemoInsertDocId'] = mosHTML::yesnoRadioList('shRemoInsertDocId', $std_opt, $sefConfig->shRemoInsertDocId ); $lists['shRemoInsertDocName'] = mosHTML::yesnoRadioList('shRemoInsertDocName', $std_opt, $sefConfig->shRemoInsertDocName ); $lists['shRemoInsertCategoryId'] = mosHTML::yesnoRadioList('shRemoInsertCategoryId', // V 1.2.4.t $std_opt, $sefConfig->shRemoInsertCategoryId ); $shRemoInsertCat[] = mosHTML::makeOption( '0', _COM_SEF_SH_VM_DO_NOT_SHOW_CATEGORIES ); $shRemoInsertCat[] = mosHTML::makeOption( '1', _COM_SEF_SH_VM_SHOW_LAST_CATEGORY ); $shRemoInsertCat[] = mosHTML::makeOption( '2', _COM_SEF_SH_VM_SHOW_ALL_CATEGORIES ); $lists['shRemoInsertCategories'] = mosHTML::selectList( $shRemoInsertCat, 'shRemoInsertCategories', "class=\"inputbox\" size=\"1\"" , 'value', 'text', $sefConfig->shRemoInsertCategories); // V 1.2.4.t 16/08/2007 15:43:31 $lists['shCBShortUserURL'] = mosHTML::yesnoRadioList('shCBShortUserURL', $std_opt, $sefConfig->shCBShortUserURL ); // V 1.2.4.t 19/08/2007 16:26:46 $lists['shKeepStandardURLOnUpgrade'] = mosHTML::yesnoRadioList('shKeepStandardURLOnUpgrade', $std_opt, $sefConfig->shKeepStandardURLOnUpgrade ); $lists['shKeepCustomURLOnUpgrade'] = mosHTML::yesnoRadioList('shKeepCustomURLOnUpgrade', $std_opt, $sefConfig->shKeepCustomURLOnUpgrade ); $lists['shKeepMetaDataOnUpgrade'] = mosHTML::yesnoRadioList('shKeepMetaDataOnUpgrade', $std_opt, $sefConfig->shKeepMetaDataOnUpgrade ); $lists['shKeepModulesSettingsOnUpgrade'] = mosHTML::yesnoRadioList('shKeepModulesSettingsOnUpgrade', $std_opt, $sefConfig->shKeepModulesSettingsOnUpgrade ); // V 1.2.4.t 24/08/2007 12:56:16 $lists['shMultipagesTitle'] = mosHTML::yesnoRadioList('shMultipagesTitle', $std_opt, $sefConfig->shMultipagesTitle ); // V x $lists['shKeepConfigOnUpgrade'] = mosHTML::yesnoRadioList('shKeepConfigOnUpgrade', $std_opt, $sefConfig->shKeepConfigOnUpgrade ); // security parameters V x $lists['shSecEnableSecurity'] = mosHTML::yesnoRadioList('shSecEnableSecurity', $std_opt, $sefConfig->shSecEnableSecurity ); $lists['shSecLogAttacks'] = mosHTML::yesnoRadioList('shSecLogAttacks', $std_opt, $sefConfig->shSecLogAttacks ); $lists['shSecOnlyNumVars'] = implode("\n",$sefConfig->shSecOnlyNumVars); $lists['shSecAlphaNumVars'] = implode("\n",$sefConfig->shSecAlphaNumVars); $lists['shSecNoProtocolVars'] = implode("\n",$sefConfig->shSecNoProtocolVars); $lists['ipWhiteList'] = implode("\n",$sefConfig->ipWhiteList); $lists['ipBlackList'] = implode("\n",$sefConfig->ipBlackList); $lists['uAgentWhiteList'] = implode("\n",$sefConfig->uAgentWhiteList); $lists['uAgentBlackList'] = implode("\n",$sefConfig->uAgentBlackList); $lists['shSecCheckHoneyPot'] = mosHTML::yesnoRadioList('shSecCheckHoneyPot', $std_opt, $sefConfig->shSecCheckHoneyPot ); $lists['shSecActivateAntiFlood'] = mosHTML::yesnoRadioList('shSecActivateAntiFlood', $std_opt, $sefConfig->shSecActivateAntiFlood ); $lists['shSecAntiFloodOnlyOnPOST'] = mosHTML::yesnoRadioList('shSecAntiFloodOnlyOnPOST', $std_opt, $sefConfig->shSecAntiFloodOnlyOnPOST ); //$lists['insertSectionInBlogTableLinks'] = mosHTML::yesnoRadioList('insertSectionInBlogTableLinks', // $std_opt, $sefConfig->insertSectionInBlogTableLinks ); // V x : per language insert iso code and translate URl params and page text $activeLanguages = shGetActiveLanguages(); $lists['activeLanguages'][] = $GLOBALS['mosConfig_lang']; // put default in first place $shLangOption[] = mosHTML::makeOption( '0', _COM_SEF_SH_DEFAULT ); $shLangOption[] = mosHTML::makeOption( '1', _COM_SEF_SH_YES ); $shLangOption[] = mosHTML::makeOption( '2', _COM_SEF_SH_NO ); foreach ($activeLanguages as $language) { $currentLang = $language->code; if ($currentLang != $GLOBALS['mosConfig_lang']) $lists['activeLanguages'][] = $currentLang; $lists['languages_'.$currentLang.'_translateURL'] = mosHTML::selectList( $shLangOption, 'languages_'.$currentLang.'_translateURL', "class=\"inputbox\" size=\"1\"" , 'value', 'text', $sefConfig->shLangTranslateList[$currentLang]); $lists['languages_'.$currentLang.'_insertCode'] = mosHTML::selectList( $shLangOption, 'languages_'.$currentLang.'_insertCode', "class=\"inputbox\" size=\"1\"" , 'value', 'text', $sefConfig->shLangInsertCodeList[$currentLang]); } // V 1.3 RC shCustomTags params $lists['shInsertNoFollowPDFPrint'] = mosHTML::yesnoRadioList('shInsertNoFollowPDFPrint', $std_opt, $sefConfig->shInsertNoFollowPDFPrint ); $lists['shInsertReadMorePageTitle'] = mosHTML::yesnoRadioList('shInsertReadMorePageTitle', $std_opt, $sefConfig->shInsertReadMorePageTitle ); $lists['shMultipleH1ToH2'] = mosHTML::yesnoRadioList('shMultipleH1ToH2', $std_opt, $sefConfig->shMultipleH1ToH2 ); // V 1.3.1 RC $lists['shVmUsingItemsPerPage'] = mosHTML::yesnoRadioList('shVmUsingItemsPerPage', $std_opt, $sefConfig->shVmUsingItemsPerPage ); $lists['shSecCheckPOSTData'] = mosHTML::yesnoRadioList('shSecCheckPOSTData', $std_opt, $sefConfig->shSecCheckPOSTData ); $lists['shInsertSMFName'] = mosHTML::yesnoRadioList('shInsertSMFName', $std_opt, $sefConfig->shInsertSMFName ); $lists['shInsertSMFBoardId'] = mosHTML::yesnoRadioList('shInsertSMFBoardId', $std_opt, $sefConfig->shInsertSMFBoardId ); $lists['shInsertSMFTopicId'] = mosHTML::yesnoRadioList('shInsertSMFTopicId', $std_opt, $sefConfig->shInsertSMFTopicId ); $lists['shinsertSMFUserName'] = mosHTML::yesnoRadioList('shinsertSMFUserName', $std_opt, $sefConfig->shinsertSMFUserName ); $lists['shInsertSMFUserId'] = mosHTML::yesnoRadioList('shInsertSMFUserId', $std_opt, $sefConfig->shInsertSMFUserId ); $lists['debugToLogFile'] = mosHTML::yesnoRadioList('debugToLogFile', $std_opt, $sefConfig->debugToLogFile ); // V 1.3.1 $lists['shInsertOutboundLinksImage'] = mosHTML::yesnoRadioList('shInsertOutboundLinksImage', $std_opt, $sefConfig->shInsertOutboundLinksImage ); $shInsertImgLnk[] = mosHTML::makeOption( 'external-black.png', _COM_SEF_SH_OUTBOUND_LINKS_IMAGE_BLACK ); $shInsertImgLnk[] = mosHTML::makeOption( 'external-white.png', _COM_SEF_SH_OUTBOUND_LINKS_IMAGE_WHITE ); $lists['shImageForOutboundLinks'] = mosHTML::selectList( $shInsertImgLnk, 'shImageForOutboundLinks', "class=\"inputbox\" size=\"1\"" , 'value', 'text', $sefConfig->shImageForOutboundLinks); // get a list of the static content items for 404 page $query = "SELECT id, title" . "\n FROM #__content" . "\n WHERE sectionid = 0 AND title != '404'" . "\n AND catid = 0" . "\n ORDER BY ordering" ; $database->setQuery( $query ); $items = $database->loadObjectList(); $options = array( mosHTML::makeOption( 0, "("._COM_SEF_DEF_404_PAGE.")") ); //$options[] = mosHTML::makeOption( 9999999, "(Front Page)" ); // 1.2.4.t // assemble menu items to the array foreach ( $items as $item ) { $options[] = mosHTML::makeOption( $item->id, $item->title ); } $lists['page404'] = mosHTML::selectList( $options, 'page404', 'class="inputbox" size="1"', 'value', 'text', $sefConfig->page404 ); $sql='SELECT id,introtext FROM #__content WHERE `title`="404"'; $row = null; $database->setQuery($sql); $database->loadObject( $row ); if (!empty($row) && !empty($row->introtext)) // V 1.2.4.t $txt404 = $row->introtext; else $txt404 = _COM_SEF_DEF_404_MSG; // get list of installed components for advanced config $installed_components = $undefined_components = array(); $sql='SELECT SUBSTRING(link,8) AS name FROM #__components WHERE CHAR_LENGTH(link) > 0 ORDER BY name'; $database->setQuery($sql); $installed_components = $database->loadResultArray(); $installed_components = str_replace('com_', '', $installed_components); // V 1.2.4.m $undefined_components= array_values(array_diff($installed_components,array_intersect($sefConfig->predefined, $installed_components))); //build mode list and create the list $mode = array(); $mode[] = mosHTML::makeOption( 0, _COM_SEF_USE_DEFAULT); $mode[] = mosHTML::makeOption( 1, _COM_SEF_NOCACHE); $mode[] = mosHTML::makeOption( 2, _COM_SEF_SKIP); $modeTranslate[] = mosHTML::makeOption( 0, _COM_SEF_SH_TRANSLATE_URL); // V 1.2.4.m $modeTranslate[] = mosHTML::makeOption( 1, _COM_SEF_SH_DO_NOT_TRANSLATE_URL); $modeInsertIso[] = mosHTML::makeOption( 0, _COM_SEF_SH_INSERT_LANGUAGE_CODE); $modeInsertIso[] = mosHTML::makeOption( 1, _COM_SEF_SH_DO_NOT_INSERT_LANGUAGE_CODE); $modeshDoNotOverrideOwnSef[] = mosHTML::makeOption( 0, _COM_SEF_SH_OVERRIDE_SEF_EXT); $modeshDoNotOverrideOwnSef[] = mosHTML::makeOption( 1, _COM_SEF_SH_DO_NOT_OVERRIDE_SEF_EXT); while (list($index, $name) = each($undefined_components)){ $selectedmode = ((in_array($name,$sefConfig->nocache))*1)+((in_array($name,$sefConfig->skip))*2); $lists['adv_config'][$name]['manageURL'] = mosHTML::selectList( $mode, 'com_'.$name.'___manageURL', 'class="inputbox" size="1"', 'value', 'text',$selectedmode); $selectedmode = in_array($name,$sefConfig->notTranslateURLList); $lists['adv_config'][$name]['translateURL'] = mosHTML::selectList( $modeTranslate, 'com_'.$name.'___translateURL', 'class="inputbox" size="1"', 'value', 'text',$selectedmode); $selectedmode = in_array($name,$sefConfig->notInsertIsoCodeList); $lists['adv_config'][$name]['insertIsoCode'] = mosHTML::selectList( $modeInsertIso, 'com_'.$name.'___insertIsoCode', 'class="inputbox" size="1"', 'value', 'text',$selectedmode); $selectedmode = in_array($name,$sefConfig->shDoNotOverrideOwnSef); $lists['adv_config'][$name]['shDoNotOverrideOwnSef'] = mosHTML::selectList( $modeshDoNotOverrideOwnSef, 'com_'.$name.'___shDoNotOverrideOwnSef', 'class="inputbox" size="1"', 'value', 'text',$selectedmode); $defaultString = empty($sefConfig->defaultComponentStringList[@$name]) ? '':$sefConfig->defaultComponentStringList[$name]; $compName = 'com_'.$name.'___defaultComponentString'; $lists['adv_config'][$name]['defaultComponentString'] = ''; $defaultItemid = empty($sefConfig->defaultComponentItemidList[@$name]) ? '':$sefConfig->defaultComponentItemidList[$name]; $compName = 'com_'.$name.'___defaultComponentItemid'; $lists['adv_config'][$name]['defaultComponentItemid'] = ''; } $lists['UseDefaultItemids'] = mosHTML::yesnoRadioList('UseDefaultItemids', $std_opt, $sefConfig->UseDefaultItemids ); $lists['defaultParamList'] = $sefConfig->defaultParamList; // echo "
";
  //	print_r($undefined_components);
  //	print_r($lists);
  //	echo "
"; HTML_sef::configuration($lists, $txt404); } function shSetArrayParam($value, &$param) { if (!empty($value)) { $param = explode("\n", $value); foreach ($param as $k=>$v) { $param[$k] = trim($v); } } else $param = array(); if (!empty($param)) $param = array_filter($param); } function advancedConfig($key,$value){ GLOBAL $sefConfig; $quoteGPC = get_magic_quotes_gpc(); if ((strpos($key,"com_")) !== false) { // V 1.2.4.m $key = str_replace('com_','',$key); $param = explode('___',$key); switch ($param[1]) { case 'manageURL' : switch ($value) { case 1 : array_push($sefConfig->nocache,$param[0]); break; case 2 : array_push($sefConfig->skip,$param[0]); break; } break; case 'translateURL': if ($value == 1) array_push($sefConfig->notTranslateURLList,$param[0]); break; case 'insertIsoCode': if ($value == 1) array_push($sefConfig->notInsertIsoCodeList,$param[0]); break; case 'shDoNotOverrideOwnSef': if ($value == 1) array_push($sefConfig->shDoNotOverrideOwnSef,$param[0]); break; case 'defaultComponentString': $cleanedUpValue = empty($value) ? '': titleToLocation($value); $cleanedUpValue = trim( $cleanedUpValue, $sefConfig->friendlytrim); $sefConfig->defaultComponentStringList[$param[0]] = $cleanedUpValue; break; case 'defaultComponentItemid': $cleanedUpValue = empty($value) ? '': intval($value); $sefConfig->defaultComponentItemidList[$param[0]] = $cleanedUpValue; break; } } else { switch ($key){ case 'shSecOnlyNumVars': shSetArrayParam($value, $sefConfig->shSecOnlyNumVars); break; case 'shSecAlphaNumVars': shSetArrayParam($value, $sefConfig->shSecAlphaNumVars); break; case 'shSecNoProtocolVars': shSetArrayParam($value, $sefConfig->shSecNoProtocolVars); break; } if (preg_match('/languages_([a-zA-Z]*)_translateURL/U', $key, $matches)) { $sefConfig->shLangTranslateList[$matches[1]] = $value; } if (preg_match('/languages_([a-zA-Z]*)_insertCode/U', $key, $matches)) { $sefConfig->shLangInsertCodeList[$matches[1]] = $value; } if (preg_match('/languages_([a-zA-Z]*)_pageText/U', $key, $matches)) { $sefConfig->pageTexts[$matches[1]] = $value; } } } function saveConfig($eraseCache) { global $database,$sefConfig,$sef_config_file; //set skip and nocache arrays, unless POST is empty, meaning this is first attempt to save config if (!empty($_POST)) { $sefConfig->skip = array(); $sefConfig->nocache = array(); $sefConfig->notTranslateURLList = array(); $sefConfig->notInsertIsoCodeList = array(); $sefConfig->shDoNotOverrideOwnSef = array(); $sefConfig->shSecOnlyNumVars = array(); $sefConfig->shSecAlphaNumVars = array(); $sefConfig->shSecNoProtocolVars = array(); $sefConfig->ipWhiteList = array(); $sefConfig->ipBlackList = array(); $sefConfig->uAgentWhiteList = array(); $sefConfig->uAgentBlackList = array(); $sefConfig->shLangTranslateList = array(); $sefConfig->shLangInsertCodeList = array(); $sefConfig->defaultComponentStringList = array(); $sefConfig->defaultComponentItemidList = array(); } if (empty($_POST['debugToLogFile'])) { $sefConfig->debugStartedAt = 0; } else { $sefConfig->debugStartedAt = empty($sefConfig->debugStartedAt) ? time() : $sefConfig->debugStartedAt; } if (!empty($_POST)) { foreach($_POST as $key => $value) { $sefConfig->set($key, $value); advancedConfig($key, $value); } } $shIntroText = empty($_POST) ? '' : $_POST['introtext']; $sql='SELECT id FROM #__content WHERE `title`="404"'; $database->setQuery( $sql ); if ($id = $database->loadResult()){ $sql = 'UPDATE #__content SET introtext="'.$shIntroText.'", modified ="'.date("Y-m-d H:i:s").'" WHERE `id` = "'.$id.'";'; }else{ $sql='SELECT MAX(id) FROM #__content'; $database->setQuery( $sql ); if ($max = $database->loadResult()){ $max++; $sql = 'INSERT INTO #__content VALUES( "'.$max.'", "404", "404", "'.$shIntroText.'", "", "1", "0", "0", "0", "2004-11-11 12:44:38", "62", "", "'.date("Y-m-d H:i:s").'", "0", "62", "2004-11-11 12:45:09", "2004-10-17 00:00:00", "0000-00-00 00:00:00", "", "", "menu_image=-1\nitem_title=0\npageclass_sfx=\nback_button=\nrating=0\nauthor=0\ncreatedate=0\nmodifydate=0\npdf=0\nprint=0\nemail=0", "1", "0", "0", "", "", "0", "750");'; } } $database->setQuery( $sql ); if (!$database->query()) { echo "\n"; } $config_written = $sefConfig->saveConfig(0); if($config_written != 0) { // V 1.2.4.t 20/08/2007 16:14:37 added another confirm from user if ($eraseCache) mosRedirect( $GLOBALS['mosConfig_live_site'] .'/administrator/index2.php?option=com_sef&task=purge&viewmode=0&confirmed=0'); else mosRedirect( "index2.php?option=com_sef", _COM_SEF_CONFIG_UPDATED ); }else mosRedirect( "index2.php?option=com_sef", _COM_SEF_WRITE_ERROR); } function purge($option, $ViewModeId=0 ) { GLOBAL $database, $mainframe, // shumisha 2007-03-14 URL caching : we must clear URL cache as well $mosConfig_absolute_path; $ViewModeId = $mainframe->getUserStateFromRequest( "viewmode{$option}", 'viewmode', 0 ); $SortById = $mainframe->getUserStateFromRequest( "SortBy{$option}", 'sortby', 0 ); $confirmed = mosGetParam( $_REQUEST, 'confirmed', '' ); // mambo checks default value type, must be '' instead of 0 switch ($ViewModeId) { case '1': // 404 $where = "`dateadd` > '0000-00-00' and `newurl` = '' "; break; case '2': // custom $where = "`dateadd` > '0000-00-00' and `newurl` != '' "; break; default: // automatic $where = "`dateadd` = '0000-00-00'"; break; } if ( !empty($confirmed)){ $query = "DELETE FROM #__redirection WHERE ".$where; // shumisha 2007-03-14 URL caching : we must clear URL cache as well if (file_exists($mosConfig_absolute_path.'/components/com_sef/cache/shCacheContent.php')) unlink($mosConfig_absolute_path.'/components/com_sef/cache/shCacheContent.php'); // shumisha end of addition $database->setQuery( $query ); if (!$database->query()) { echo "\n"; }else{ $message = _COM_SEF_SUCCESSPURGE; } mosRedirect('index2.php?option=com_sef', $message); }else{ // get the total number of records $query = "SELECT count(*) FROM #__redirection WHERE ".$where; $database->setQuery( $query ); $total = $database->loadResult(); if (!$database->query()) { echo "\n"; } switch ($total) { case '0'; $message = _COM_SEF_NORECORDS; mosRedirect('index2.php?option=com_sef', $message); break; case '1'; $message = _COM_SEF_WARNDELETE.$total._COM_SEF_RECORD; break; default: $message = _COM_SEF_WARNDELETE.$total._COM_SEF_RECORDS; } HTML_sef::purge($option, $message, $confirmed); } } function purgeMeta($option ) { // V 1.2.4.s GLOBAL $database, $mainframe; $confirmed = mosGetParam( $_REQUEST, 'confirmed', 0 ); if ( !empty($confirmed)){ $query = "DELETE FROM #__sh404SEF_meta WHERE 1"; $database->setQuery( $query ); if (!$database->query()) { echo "\n"; }else{ $message = _COM_SEF_META_SUCCESS_PURGE; } mosRedirect('index2.php?option=com_sef', $message); }else{ // get the total number of records $query = "SELECT count(*) FROM #__sh404SEF_meta WHERE 1"; $database->setQuery( $query ); $total = $database->loadResult(); if (!$database->query()) { echo "\n"; } switch ($total) { case '0'; $message = _COM_SEF_NORECORDS; mosRedirect('index2.php?option=com_sef', $message); break; case '1'; $message = _COM_SEF_WARNDELETE.$total._COM_SEF_RECORD; break; default: $message = _COM_SEF_WARNDELETE.$total._COM_SEF_RECORDS; } HTML_sef::purgeMeta($option, $message, $confirmed); } } function backup_custom(){ GLOBAL $database; $SQL = array(); $table = $GLOBALS['mosConfig_dbprefix']."redirection"; $query ="SELECT * FROM `$table` WHERE `dateadd` > '0000-00-00' and `newurl` != '' "; $database->setQuery( $query ); if ($rows = $database->loadRowList()) { foreach ($rows as $row) { $SQL[] = "INSERT INTO `$table` VALUES('','".$row[1]."','".$row[2]."','".$row[3]."','".$row[4]."');\n"; } }else{ die(_COM_SEF_NOACCESS.$table); } return $SQL; } function shNonEmpty($string) { // V 1.2.4.s if (empty($string)) return ' '; else return $string; } function shUnEmpty($string) { // V 1.2.4.s if ($string == ' ') return ''; else return $string; } function backup_custom_CSV( $which = 0){ // which = 0:all, 2 = custom redirect, 1 = 404) GLOBAL $database; $CSV = array(); switch ($which) { case 1: // 404 $where = "WHERE `dateadd` > '0000-00-00' and `newurl` == '' "; break; // Custom case 2: $where = "WHERE `dateadd` > '0000-00-00' and `newurl` != '' "; break; default: // default $where = ''; break; } $CSV[] = "\"id\",\"Count\",\"Rank\",\"SEF URL\",\"non-SEF URL\",\"Date added\"\n"; // V 1.2.4.s $query ='SELECT * FROM #__redirection '.$where; $database->setQuery( $query ); $rows = $database->loadRowList(); if (!empty($rows)) { foreach ($rows as $row) { $CSV[] = "\"$row[0]\",\"$row[1]\",\"$row[2]\",\"$row[3]\",\"$row[4]\",\"$row[5]\"\n"; // V 1.2.4.s } }else{ mosRedirect('index2.php?option=com_sef',_COM_SEF_NOACCESS); } return $CSV; } function output_attachment($filename,&$data){ if (!headers_sent()) { header ('Expires: 0'); header ('Last-Modified: '.gmdate ('D, d M Y H:i:s', time()) . ' GMT'); header ('Pragma: public'); header ('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header ('Accept-Ranges: bytes'); header ('Content-Length: ' . strlen($data)); header ('Content-Type: Application/octet-stream'); header ('Content-Disposition: attachment; filename="' . $filename . '"'); header ('Connection: close'); ob_end_clean(); //flush the mambo stuff from the ouput buffer print $data; // and send the sql die(); }else{ mosRedirect('index2.php?option=com_sef',_COM_SEF_FATAL_ERROR_HEADERS); } } function export_custom($filename){ GLOBAL $database; $sql_data = backup_custom(); $sql_data = implode("\r", $sql_data); if (!headers_sent()) { while (ob_get_level() > 0) { ob_end_clean(); //flush the mambo stuff from the ouput buffer } // Determine Browser if (ereg( 'MSIE ([0-9].[0-9]{1,2})',$_SERVER["HTTP_USER_AGENT"],$log_version)) { $BROWSER_VER=$log_version[1]; $BROWSER_AGENT='IE'; } elseif (ereg( 'Opera ([0-9].[0-9]{1,2})',$_SERVER["HTTP_USER_AGENT"],$log_version)) { $BROWSER_VER=$log_version[1]; $BROWSER_AGENT='OPERA'; } elseif (ereg( 'Mozilla/([0-9].[0-9]{1,2})',$_SERVER["HTTP_USER_AGENT"],$log_version)) { $BROWSER_VER=$log_version[1]; $BROWSER_AGENT='MOZILLA'; } else { $BROWSER_VER=0; $BROWSER_AGENT='OTHER'; } ob_start(); header ('Expires: 0'); header ('Last-Modified: '.gmdate ('D, d M Y H:i:s', time()) . ' GMT'); header ('Pragma: public'); header ('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header ('Accept-Ranges: bytes'); header ('Content-Length: ' . strlen($sql_data)); header ('Content-Type: Application/octet-stream'); header ('Content-Disposition: attachment; filename="' . $filename . '"'); header ('Connection: close'); /* if ($BROWSER_AGENT == 'IE') { header('Content-Disposition: inline; filename="'.$filename.'";'); header('Pragma: cache'); header('Cache-Control: public, must-revalidate, max-age=0'); header('Connection: close'); header("Expires: ".gmdate("D, d M Y H:i:s", time()+60)." GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s", time())." GMT"); }else{ $header="Content-Disposition: attachment; filename=".$filename.";"; header($header ); header("Content-Length: ".strlen($sql_data)); } */ echo($sql_data); ob_end_flush(); die(); }else{ echo "Error! Not Good!"; mosRedirect('index2.php?option=com_sef', COM_SEF_FATAL_ERROR_HEADERS); } } function import_custom($userfile){ GLOBAL $database; $uploaddir = $GLOBALS['mosConfig_absolute_path'].'/media/'; $uploadfile = $uploaddir . basename($userfile['name']); if (move_uploaded_file($userfile['tmp_name'], $uploadfile)) { echo '

'._COM_SEF_UPLOAD_OK.'

'; $results = true; $lines = file($uploadfile); // echo "
";
    //		print_r($lines);
    //		echo "
"; foreach ($lines as $line){ $line = trim($line); if( substr($line,0,40) == "INSERT INTO `".$GLOBALS['mosConfig_dbprefix']."redirection` VALUES('',"){ $database->setQuery( $line ); if (! $database->query()){ echo "

"._COM_SEF_ERROR_IMPORT."

$line

"; $results = false; } }else{ mosRedirect('index2.php?option=com_sef',_COM_SEF_INVALID_SQL.substr($line,0,40)); } } unlink($uploadfile) OR mosRedirect('index2.php?option=com_sef',_COM_SEF_NO_UNLINK); if ($results) echo '

'._COM_SEF_IMPORT_OK.'

'; ?>
"._COM_SEF_WRITE_FAILED."

"; $results = false; } return $result; } function export_custom_CSV($filename, $which = 0){ // which = 0:all, 1 = custom redirect, 2 = 404 // which = 4 V 1.2.4. GLOBAL $database; $csv_data = ($which == 4 )? backup_custom_CSV_meta() : backup_custom_CSV( $which); // 1.2.4.t bug #166 $csv_data = implode("\r", $csv_data); if (!headers_sent()) { while (ob_get_level() > 0) { ob_end_clean(); //flush the mambo stuff from the ouput buffer } // Determine Browser if (ereg( 'MSIE ([0-9].[0-9]{1,2})',$_SERVER["HTTP_USER_AGENT"],$log_version)) { $BROWSER_VER=$log_version[1]; $BROWSER_AGENT='IE'; } elseif (ereg( 'Opera ([0-9].[0-9]{1,2})',$_SERVER["HTTP_USER_AGENT"],$log_version)) { $BROWSER_VER=$log_version[1]; $BROWSER_AGENT='OPERA'; } elseif (ereg( 'Mozilla/([0-9].[0-9]{1,2})',$_SERVER["HTTP_USER_AGENT"],$log_version)) { $BROWSER_VER=$log_version[1]; $BROWSER_AGENT='MOZILLA'; } else { $BROWSER_VER=0; $BROWSER_AGENT='OTHER'; } ob_start(); header ('Expires: 0'); header ('Last-Modified: '.gmdate ('D, d M Y H:i:s', time()) . ' GMT'); header ('Pragma: public'); header ('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header ('Accept-Ranges: bytes'); header ('Content-Length: ' . strlen($csv_data)); header ('Content-Type: Application/octet-stream'); header ('Content-Disposition: attachment; filename="' . $filename . '"'); header ('Connection: close'); echo($csv_data); ob_end_flush(); die(); }else{ echo "Error! Not Good!"; mosRedirect('index2.php?option=com_sef',_COM_SEF_FATAL_ERROR_HEADERS); } } function import_custom_CSV($userfile, $ViewModeId=0) { GLOBAL $database; $uploaddir = $GLOBALS['mosConfig_absolute_path'].'/media/'; $uploadfile = $uploaddir . basename($userfile['name']); if (move_uploaded_file($userfile['tmp_name'], $uploadfile)) { echo '

'._COM_SEF_UPLOAD_OK.'

'; $results = true; $lines = file($uploadfile); array_shift($lines); // remove header line foreach ($lines as $line){ $line = trim($line); $line = trim($line, '"'); $lineBits = explode('","', $line); // V 1.2.4.s : previous version handling switch (count($lineBits)) { case 6 : $q = 'INSERT INTO `#__redirection` VALUES(\'\',"'.$lineBits[1].'", "'.$lineBits[2] .'", "'.$lineBits[3].'", "'.$lineBits[4].'", "'.$lineBits[5].'")'; break; case 5 : // prior to version 1.2.4.q, no rank field : bug fixed in V t $q = 'INSERT INTO `#__redirection` VALUES(\'\',"'.$lineBits[1].'", \'10\', "'.$lineBits[2].'", "' .$lineBits[3].'", "'.$lineBits[4].'" )'; break; } $database->setQuery( $q ); if (! $database->query()){ echo $database->stderr(); echo "

"._COM_SEF_ERROR_IMPORT."

$line

"; $results = false; } } unlink($uploadfile) OR mosRedirect('index2.php?option=com_sef',_COM_SEF_NO_UNLINK); if ($results) echo '

'._COM_SEF_IMPORT_OK.'

'; ?>
"._COM_SEF_WRITE_FAILED."

"; $results = false; } return $results; } function import_custom_CSV_OPEN_SEF($userfile) { // V 1.2.4.t GLOBAL $database; $uploaddir = $GLOBALS['mosConfig_absolute_path'].'/media/'; $uploadfile = $uploaddir . basename($userfile['name']); if (move_uploaded_file($userfile['tmp_name'], $uploadfile)) { echo '

'._COM_SEF_UPLOAD_OK.'

'; $results = true; $fileContent = file($uploadfile); for ($i=1; $i<6;$i++) // remove header array_shift($fileContent); $lines = explode('" "', $fileContent[0]); // only way I could find to split lines $shCount = 0; foreach ($lines as $line){ $line = trim($line); $lineBits = explode(';', $line); $sefUrl = ltrim(trim($lineBits[2],'"'), '/'); $nonSef = trim($lineBits[3], '"'); if ($sefUrl != 'NULL' && $nonSsef != 'NULL') { // don't import records without SEF or non-SEF URL $dateAdd = date('Y-m-d'); if (!preg_match( '/(&|\?)lang=[a-zA-Z]{2,3}/iU', $nonSef)) { // no lang string, let's add default $shTemp = explode( '_', $GLOBALS['mosConfig_locale']); $shLangTemp = $shTemp[0] ? $shTemp[0] : 'en'; $nonSef .= '&lang='.$shLangTemp; } $nonSef = shSortUrl($nonSef); // and sort URl so that we always find it // Link priority works opposed to rank. The highest LP wins, whereas the lowest ranks win // not so simple though, the OSEF system may have several links with same LP, whereas I don't want to have that // So let's do rank = 1000-LP. If there is one link with LP =99, it will be used, as it will have lowest rank; // if there are several, the first one will be used (just as in OpenSEF), but user is still able // to select the URL he wants touse, as doing so in sh404SEF cPanel will set rank=0 $q = 'INSERT INTO `#__redirection` VALUES(\'\',"0", "'.(1000-(int)$lineBits[17]) .'", "'.$sefUrl.'", "'.$nonSef.'", "'.$dateAdd.'")'; $database->setQuery( $q ); if (! $database->query()){ echo $database->stderr(); echo "

"._COM_SEF_ERROR_IMPORT."

$line

"; $results = false; } $shCount++; } } unlink($uploadfile) OR mosRedirect('index2.php?option=com_sef',_COM_SEF_NO_UNLINK); if ($results) echo '

'._COM_SEF_IMPORT_OK.' ('.$shCount.')

'; ?>
"._COM_SEF_WRITE_FAILED."

"; $results = false; } return $results; } function import_custom_CSV_meta($userfile) { // V 1.2.4.s GLOBAL $database; $uploaddir = $GLOBALS['mosConfig_absolute_path'].'/media/'; $uploadfile = $uploaddir . basename($userfile['name']); if (move_uploaded_file($userfile['tmp_name'], $uploadfile)) { echo '

'._COM_SEF_UPLOAD_OK.'

'; $results = true; $lines = file($uploadfile); array_shift($lines); // remove header line foreach ($lines as $line){ $line = trim($line); $line = trim($line, '"'); $lineBits = explode('","', $line); //var_dump($lineBits); $q = 'INSERT INTO `#__sh404SEF_meta` VALUES(\'\',"'.shUnEmpty($lineBits[1]).'", "'.shUnEmpty($lineBits[2]).'", "'.shUnEmpty($lineBits[3]).'", "'.shUnEmpty($lineBits[4]).'", "'.shUnEmpty($lineBits[5]).'", "'.shUnEmpty($lineBits[6]).'")'; $database->setQuery( $q ); if (! $database->query()){ echo "

"._COM_SEF_ERROR_IMPORT."

$line

"; $results = false; } } unlink($uploadfile) OR mosRedirect('index2.php?option=com_sef',_COM_SEF_NO_UNLINK); if ($results) echo '

'._COM_SEF_IMPORT_META_OK.'

'; ?>
"._COM_SEF_WRITE_FAILED."

"; $results = false; } return $results; } function backup_custom_CSV_meta(){ // 1.2.4.s GLOBAL $database; $CSV = array(); $CSV[] = "\"id\",\"newurl\",\"metadesc\",\"metakey\",\"metatitle\",\"metalang\",\"metarobots\" \n"; // V 1.2.4.s $query ='SELECT * FROM #__sh404SEF_meta WHERE 1'; $database->setQuery( $query ); $rows = $database->loadRowList(); if (!empty($rows)) { foreach ($rows as $row) { $CSV[] = "\"".shNonEmpty($row[0])."\",\"".shNonEmpty($row[1])."\",\"".shNonEmpty($row[2])."\",\"".shNonEmpty($row[3])."\",\"".shNonEmpty($row[4])."\",\"".shNonEmpty($row[5])."\",\"".shNonEmpty($row[6])."\" \n"; // V 1.2.4.s } }else{ mosRedirect('index2.php?option=com_sef',_COM_SEF_NOACCESS); } return $CSV; } function shResetSecStats() { global $sefConfig; $sefConfig->shSecCurMonth = ''; $sefConfig->shSecLastUpdated = ''; $sefConfig->shSecTotalAttacks = 0; $sefConfig->shSecTotalConfigVars = 0; $sefConfig->shSecTotalBase64 = 0; $sefConfig->shSecTotalScripts = 0; $sefConfig->shSecTotalStandardVars = 0; $sefConfig->shSecTotalImgTxtCmd = 0; $sefConfig->shSecTotalIPDenied = 0; $sefConfig->shSecTotalUserAgentDenied = 0; $sefConfig->shSecTotalFlooding = 0; $sefConfig->shSecTotalPHP = 0; $sefConfig->shSecTotalPHPUserClicked = 0; } function shDecodeSecLogLine( $line) { global $sefConfig; if (preg_match( '/[0-9]{2}\-[0-9]{2}\-[0-9]{2}/', $line)) { // this is not header or comment line $sefConfig->shSecTotalAttacks++; $bits = explode("\t", $line); switch (substr($bits[2],0, 15)) { case 'Flooding': $sefConfig->shSecTotalFlooding++; break; case 'Caught by Honey': $sefConfig->shSecTotalPHP++; break; case 'Honey Pot but u': $sefConfig->shSecTotalPHPUserClicked++; break; case 'Var not numeric': case 'Var not alpha-n': case 'Var contains ou': $sefConfig->shSecTotalStandardVars++; break; case 'Image file name': $sefConfig->shSecTotalImgTxtCmd++; break; case '