form = "linkform";
$pst->page = "links.php?create";
$pst->id = "admin_links";
require_once('auth.php');
// --------------------
$pst->save_preset();
require_once(e_HANDLER.'userclass_class.php');
require_once(e_HANDLER.'form_handler.php');
$rs = new form;
$linkpost = new links;
$action = '';
if (e_QUERY)
{
$tmp = explode('.', e_QUERY);
$action = $tmp[0];
$sub_action = $tmp[1];
$id = $tmp[2];
unset($tmp);
}
define("URL_SEPARATOR",'X'); // Used in names of 'inc' and 'dec' fields
$incdec_action = '';
foreach(array_keys($_POST) as $k)
{
if (preg_match("#(.*?)_delete_(\d+)(.*)#", $k, $matches))
{
$delete = $matches[1];
$del_id = $matches[2];
}
elseif (!$incdec_action && (preg_match("#^(inc|dec)".URL_SEPARATOR."(\d+)".URL_SEPARATOR."(\d+)_[x|y]#", $k, $matches)))
{
$incdec_action = $matches[1];
$linkid = intval($matches[2]);
$link_order = intval($matches[3]);
}
}
if(isset($_POST['generate_sublinks']) && isset($_POST['sublink_type']) && $_POST['sublink_parent'] !="" )
{
$subtype = $_POST['sublink_type'];
$sublink = $linkpost->sublink_list($subtype);
if(!is_object($sql2))
{
$sql2 = new db;
}
$sql -> db_Select("links", "*", "link_id = '".$_POST['sublink_parent']."'");
$par = $sql-> db_Fetch();
extract($par);
$sql -> db_Select($sublink['table'], "*", $sublink['query']);
$count = 1;
while($row = $sql-> db_Fetch()){
$subcat = $row[($sublink['fieldid'])];
$name = $row[($sublink['fieldname'])];
$subname = $name; // eliminate old embedded hierarchy from names. (e.g. 'submenu.TopName.name')
$suburl = str_replace("#",$subcat,$sublink['url']);
$subicon = ($sublink['fieldicon']) ? $row[($sublink['fieldicon'])] : $link_button;
$subdiz = ($sublink['fielddiz']) ? $row[($sublink['fielddiz'])] : $link_description;
$subparent = $_POST['sublink_parent'];
if($sql2->db_Insert("links", "0, '$subname', '$suburl', '$subdiz', '$subicon', '$link_category', '$count', '$subparent', '$link_open', '$link_class' ")){
$message .= LAN_CREATED. " ($name)
";
}else{
$message .= LAN_CREATED_FAILED. " ($name)
";
}
$count++;
}
if($message){
$ns -> tablerender(LAN_CREATED, $message);
}
}
if ($incdec_action == 'inc')
{
$sql->db_Update("links", "link_order=link_order+1 WHERE link_order='".intval($link_order-1)."'");
$sql->db_Update("links", "link_order=link_order-1 WHERE link_id='".intval($linkid)."'");
}
elseif ($incdec_action =='dec')
{
$sql->db_Update("links", "link_order=link_order-1 WHERE link_order='".intval($link_order+1)."'");
$sql->db_Update("links", "link_order=link_order+1 WHERE link_id='".intval($linkid)."'");
}
if (isset($_POST['update']))
{
foreach ($_POST['link_order'] as $loid)
{
$tmp = explode(".", $loid);
$sql->db_Update("links", "link_order=".intval($tmp[1])." WHERE link_id=".intval($tmp[0]));
}
foreach ($_POST['link_class'] as $lckey => $lcid)
{
$sql->db_Update("links", "link_class='".$lcid."' WHERE link_id=".intval($lckey));
}
$e107cache->clear("sitelinks");
$linkpost->show_message(LAN_UPDATED);
}
if (isset($_POST['updateoptions'])) {
$pref['linkpage_screentip'] = $_POST['linkpage_screentip'];
$pref['sitelinks_expandsub'] = $_POST['sitelinks_expandsub'];
save_prefs();
$e107cache->clear("sitelinks");
$linkpost->show_message(LCLAN_1);
}
if ($delete == 'main')
{
if($sql->db_Select("links", "link_id, link_name, link_order", "link_id='".$del_id."'")){
$row = $sql->db_Fetch();
$msg = $linkpost->delete_link($row);
if($msg){
$e107cache->clear("sitelinks");
$linkpost->show_message($msg);
}
}
}
if (isset($_POST['add_link'])) {
$linkpost->submit_link($sub_action, $_POST['link_id']);
unset($id);
}
$linkArray = $linkpost->getLinks();
if ($action == 'create') {
$linkpost->create_link($sub_action, $id);
}
if (!e_QUERY || $action == 'main') {
$linkpost->show_existing_items();
}
if ($action == 'debug')
{
$linkpost->show_existing_items(TRUE);
}
if ($action == 'opt') {
$linkpost->show_pref_options();
}
if($action == "sublinks"){
$linkpost->show_sublink_generator();
}
require_once('footer.php');
exit;
// End ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
class links
{
var $link_total;
var $aIdOptPrep, $aIdOptData, $aIdOptTest;
var $debug_dis = FALSE;
function getLinks()
{
global $sql;
if($this->link_total = $sql->db_Select("links", "*", "ORDER BY link_category,link_order, link_id ASC", "nowhere"))
{
while($row = $sql->db_Fetch())
{
$ret[$row['link_parent']][] = $row;
}
}
return $ret;
}
function linkName($text)
{
// This function is ONLY needed for link databases that have been upgraded from
// before 0.7+ -- all new link collections make use of link_parent instead
// of hierarchy embedded in the link_name. (Unfortunately, the upgraded
// data still includes embedded coding.)
if(substr($text, 0, 8) == "submenu.") // for backwards compatibility only.
{
$tmp = explode(".",$text);
switch (count($tmp)) {
case 3: // submenu.parent.node
$tmp = $tmp[2]; break;
case 5: // submenu.parent.midlev.child.node
$tmp = $tmp[4]; break;
case 2: // submenu.parent (invalid?)
default:
$parentLen = strlen($tmp[1]);
$tmp = substr($text,8+$parentLen+1); // Skip submenu.parent.
}
return $tmp;
}
else
{
return $text;
}
}
function dropdown($curval="", $lid=0, $indent=0)
{ // Drop-down list using on the parent_id. :)
global $linkArray,$id,$sub_action;
if(0 == $indent) {$ret = "\n";}
foreach($linkArray[$lid] as $l)
{
$s = ($l['link_id'] == $curval ? " selected='selected' " : "" );
$thename = $this->linkName($l['link_name']);
// prevent making self the parent.
if ($l['link_id'] == $id) { $thename = "(".$thename.")"; }
if($sub_action == "sub")
{
$thelink = ($l['link_id'] != $lid) ? $l['link_id'] : $l['link_parent'] ;
}
else
{
$thelink = ($l['link_id'] != $id) ? $l['link_id'] : $l['link_parent'] ;
}
$ret .= "\n";
if(array_key_exists($l['link_id'], $linkArray))
{
$ret .= $this->dropdown($curval, $l['link_id'], $indent+1);
}
}
return $ret;
}
function existing($id=0, $level=0)
{
global $linkArray;
$ret = "";
foreach($linkArray[$id] as $l)
{
$s = ($l['link_parent'] == $curval ? " selected='selected' " : "" );
$ret .= $this->display_row($l, $level);
if(array_key_exists($l['link_id'], $linkArray))
{
$ret .= $this->existing($l['link_id'], $level+1);
}
}
return $ret;
}
function show_existing_items($dbg_display=FALSE)
{
global $sql, $rs, $ns, $tp, $linkArray;
$this->debug_dis = $dbg_display;
if (count($linkArray))
{
$this->prepIdOpts(); // Prepare the options list for all links
$text = $rs->form_open("post", e_SELF, "myform_{$link_id}", "", "");
$text .= "
".LCLAN_89." |
".LCLAN_15." |
".LAN_OPTIONS." |
".LCLAN_95." |
".LCLAN_91." |
".LAN_ORDER." |
";
$text .= $this->existing(0);
$text .= "
";
$text .= "
";
$text .= $rs->form_close();
} else {
$text .= "".LCLAN_61."
";
}
$ns->tablerender(LCLAN_8, $text);
}
function prepIdOpts() {
for($a = 1; $a <= $this->link_total; $a++) {
$sTxt = "".$a;
$this->aIdOptData[] = array('val'=>'|||.'.$a, 'txt'=>$sTxt); // Later, ||| becomes Id
$this->aIdOptTest[] = $sTxt;
}
$this->aIdOptPrep = $this->prepOpts($this->aIdOptData);
}
function display_row($row2, $indent = FALSE)
{
global $sql, $rs, $ns, $tp, $linkArray, $previous_cat;
extract($row2);
if($link_category > 1 && $link_category != $previous_cat)
{
$text .= "
".LCLAN_89." |
".LCLAN_15." (".LCLAN_12.": ".$link_category.") |
".LAN_OPTIONS." |
".LCLAN_95." |
".LCLAN_91." |
".LAN_ORDER." |
";
$previous_cat = $link_category;
}
if(strpos($link_name, "submenu.") !== FALSE || $link_parent !=0) // 'submenu' for upgrade compatibility only.
{
$link_name = $this->linkName( $link_name );
}
if ($this->debug_dis)
{
$link_name.= ' ['.$link_url.']';
}
if ($indent)
{
$subimage = "";
$subspacer = ($indent > 1) ? " style='padding-left: ".(($indent - 1) * 16)."px'" : "";
$subindent = "".$subimage." | ";
}
$text .= "";
$text .= "";
$text .= "";
$text .= "";
$text .= "";
$text .= "
";
return $text;
}
function show_message($message) {
global $ns;
$ns->tablerender(LAN_UPDATE, "".$message."
");
}
function create_link($sub_action, $id) {
global $sql, $rs, $ns, $pst,$tp;
$preset = $pst->read_preset("admin_links");
extract($preset);
if ($sub_action == "edit" && !$_POST['submit'])
{
if ($sql->db_Select("links", "*", "link_id='$id' "))
{
$row = $sql->db_Fetch();
extract($row);
}
}
if("sub" == $sub_action)
{
$link_parent = $id;
}
if(strpos($link_name, "submenu.") !== FALSE){ // 'submenu' for upgrade compatibility only.
$link_name = $this->linkName( $link_name );
}
require_once(e_HANDLER."file_class.php");
$fl = new e_file;
if($iconlist = $fl->get_files(e_IMAGE."icons/", ".jpg|.gif|.png|.JPG|.GIF|.PNG")){
sort($iconlist);
}
$text = "";
$ns->tablerender(LCLAN_29, $text);
}
function submit_link($sub_action, $id) {
global $sql, $e107cache, $tp;
if(!is_object($tp)) {
$tp=new e_parse;
}
$parent_id = ($_POST['link_parent']) ? intval($_POST['link_parent']) : 0;
$link_name = $tp->toDB($_POST['link_name']);
$link_url = $tp->createConstants($_POST['link_url']);
$link_url = str_replace("&","&",$link_url); // xhtml compliant links.
$link_description = $tp->toDB($_POST['link_description']);
$link_button = $tp->toDB($_POST['link_button']);
$link_t = $sql->db_Count("links", "(*)");
if ($id) {
$sql->db_Update("links", "link_parent='$parent_id', link_name='$link_name', link_url='$link_url', link_description='$link_description', link_button= '$link_button', link_category='".$_POST['linkrender']."', link_open='".$_POST['linkopentype']."', link_class='".$_POST['link_class']."' WHERE link_id='$id'");
//rename all sublinks to eliminate old embedded 'submenu' etc hierarchy.
// this is for upgrade compatibility only. Current hierarchy uses link_parent.
$e107cache->clear("sitelinks");
$this->show_message(LCLAN_3);
} else {
$sql->db_Insert("links", "0, '$link_name', '$link_url', '$link_description', '$link_button', ".$_POST['linkrender'].", ".($link_t+1).", ".$parent_id.", ".$_POST['linkopentype'].", ".$_POST['link_class']);
$e107cache->clear("sitelinks");
$this->show_message(LCLAN_2);
}
}
function show_pref_options() {
global $pref, $ns;
$text = "";
$ns->tablerender(LCLAN_88, $text);
}
function delete_link($linkInfo) {
global $sql;
if ($sql->db_Select("links", "link_id", "link_order > '{$linkInfo['link_order']}'")){
$linkList = $sql->db_getList();
foreach($linkList as $l){
$sql->db_Update("links", "link_order = link_order -1 WHERE link_id = '{$l['link_id']}'");
}
}
if ($sql->db_Delete("links", "link_id='".$linkInfo['link_id']."'")){
// Update ophaned sublinks.
$sql->db_Update("links", "link_name = SUBSTRING_INDEX(link_name, '.', -1) , link_parent = '0', link_class='255' WHERE link_parent= '".$linkInfo['link_id']."'");
return LCLAN_53." #".$linkInfo['link_id']." ".LCLAN_54."
";
}else{
return DELETED_FAILED;
}
}
// -------------------------- Sub links generator ------------->
function show_sublink_generator() {
global $ns,$sql;
$sublinks = $this->sublink_list();
$text = "";
$ns->tablerender(LINKLAN_4, $text);
}
function sublink_list($name=""){
global $sql,$PLUGINS_DIRECTORY;
$sublink_type['news']['title'] = LINKLAN_8; // "News Categories";
$sublink_type['news']['table'] = "news_category";
$sublink_type['news']['query'] = "category_id !='-2' ORDER BY category_name ASC";
$sublink_type['news']['url'] = "news.php?cat.#";
$sublink_type['news']['fieldid'] = "category_id";
$sublink_type['news']['fieldname'] = "category_name";
$sublink_type['news']['fieldicon'] = "category_icon";
$sublink_type['downloads']['title'] = LINKLAN_9; //"Download Categories";
$sublink_type['downloads']['table'] = "download_category";
$sublink_type['downloads']['query'] = "download_category_parent ='0' ORDER BY download_category_name ASC";
$sublink_type['downloads']['url'] = "download.php?list.#";
$sublink_type['downloads']['fieldid'] = "download_category_id";
$sublink_type['downloads']['fieldname'] = "download_category_name";
$sublink_type['downloads']['fieldicon'] = "download_category_icon";
if ($sql -> db_Select("plugin", "plugin_path", "plugin_installflag = '1'")) {
while ($row = $sql -> db_Fetch()) {
$sublink_plugs[] = $row['plugin_path'];
}
}
foreach ($sublink_plugs as $plugin_id) {
if (is_readable(e_PLUGIN.$plugin_id.'/e_linkgen.php')) {
require_once(e_PLUGIN.$plugin_id.'/e_linkgen.php');
}
}
if($name){
return $sublink_type[$name];
}
return $sublink_type;
}
function prepOpts($aData)
{
//
// Prepare an array that can rapidly (no looping)
// generate an HTML option string, with one item possibly selected.
// prepOpts returns a prepared array containing the possible values in this form:
//
//
//
// $aData is an array containing value/text pairs:
// each entry is array( 'val'=>value, 'txt'=>text )
//
$i=0;
foreach($aData as $aVal)
{
$sVal = $aVal['val'];
$sTxt = $aVal['txt'];
$sOut="";
if ($i) $sOut = '>'.$sTxtPrev.'';
$sOut .= '';
}
return $aPrep;
}
function genOpts($aPrep, $aTest,$sSelected, $sId)
{
//
// Generate an HTML option string, with one item possibly selected.
// aGen is a prepared array containing the possible values in this form.
// if sSelected matches an aTest entry, that entry is selected.
// aTest can be any array that matches one-for-one with the options
//
// if $sId is nonblank, a global search/replace is done to change all "|||" to $sId.
$iKey = array_search( $sSelected, $aTest);
if ($iKey !== FALSE) {
$aNew = $aPrep;
$aNew[$iKey] .= " selected='selected'";
$sOut = implode($aNew);
}
else {
$sOut = implode($aPrep);
}
if (strlen($sId)) $sOut = str_replace("|||",$sId,$sOut);
return $sOut;
}
}
function links_adminmenu() {
global $action;
if ($action == "") {
$action = "main";
}
$var['main']['text'] = LCLAN_62;
$var['main']['link'] = e_SELF;
$var['create']['text'] = LCLAN_63;
$var['create']['link'] = e_SELF."?create";
$var['opt']['text'] = LAN_OPTIONS;
$var['opt']['link'] = e_SELF."?opt";
$var['sub']['text'] = LINKLAN_4;
$var['sub']['link'] = e_SELF."?sublinks";
// $var['debug']['text'] = "List DB";
// $var['debug']['link'] = e_SELF."?debug";
show_admin_menu(LCLAN_68, $action, $var);
}
?>