toDB($tmp[1])),'list'); $id = intval($tmp[2]); $view = intval($tmp[3]); $order = preg_replace("#\W#", "", $tp->toDB($tmp[4])); $sort = preg_replace("#\W#", "", $tp->toDB($tmp[5])); } else { $action = preg_replace("#\W#", "", $tp->toDB($tmp[0])); $id = intval($tmp[1]); $errnum = intval(varset($tmp[2],0)); } switch ($action) { case 'list' : // Category-based listing if (isset($_POST['view'])) { $view = intval($_POST['view']); $sort = varset($_POST['sort'],'DESC'); $order = varset($_POST['order'],'download_datestamp'); } if (!isset($dl_from)) $dl_from = 0; // Get category type, page title if ($sql->db_Select("download_category", "download_category_name,download_category_description,download_category_parent,download_category_class", "(download_category_id='{$id}') AND (download_category_class IN (".USERCLASS_LIST."))") ) { $dlrow = $sql->db_Fetch(); extract($dlrow); $type = $download_category_name; define("e_PAGETITLE", PAGE_NAME." / ".$download_category_name); } else { // No access to this category define("e_PAGETITLE", PAGE_NAME); require_once(HEADERF); $ns->tablerender(LAN_dl_18, "
".LAN_dl_3."
"); require_once(FOOTERF); exit; } if ($download_category_parent == 0) { // It's a main category - change the listing type required $action = 'maincats'; $maincatval = $id; } break; case 'view' : // Details of individual download break; case 'report' : break; case 'mirror' : break; case 'error' : // Errors passed from request.php define("e_PAGETITLE", PAGE_NAME); require_once(HEADERF); switch ($errnum) { case 1 : // No permissions if (strlen($pref['download_denied']) > 0) { $errmsg = $tp->toHTML($pref['download_denied'],true); } else { $errmsg = LAN_dl_63; } break; case 2 : // Quota exceeded $errmsg = LAN_dl_62; break; default: $errmsg = LAN_dl_61." ".$errnum; // Generic error - shouldn't happen } $ns->tablerender(LAN_dl_61, "
".$errmsg."
"); require_once(FOOTERF); exit; } } if (isset($order) && !in_array($order,$order_options)) unset($order); if (isset($sort) && !in_array($sort,$sort_options)) unset($sort); if (!isset($order)) $order = vartrue($pref['download_order'],'download_datestamp'); if (!isset($sort)) $sort = vartrue($pref['download_sort'], 'DESC'); if (!isset($view)) $view = vartrue($pref['download_view'], '10'); //-------------------------------------------------- // GENERATE DISPLAY TEXT //-------------------------------------------------- switch ($action) { // Displaying main category or categories case 'maincats' : require_once(HEADERF); if ($cacheData = $e107cache->retrieve("download_cat".$maincatval,720)) // expires every 12 hours. //TODO make this an option { echo $cacheData; require_once(FOOTERF); exit; } // Load the theme $load_template = 'download_template'; if (!isset($DOWNLOAD_CAT_PARENT_TABLE)) eval($template_load_core); if(!defined("DL_IMAGESTYLE")){ define("DL_IMAGESTYLE","border:1px solid blue");} // Read in tree of categories which this user is allowed to see $dlcat = new downloadCategory(varset($pref['download_subsub'],1),USERCLASS_LIST,$maincatval,varset($pref['download_incinfo'],FALSE)); if ($dlcat->down_count == 0) { $ns->tablerender(LAN_dl_18, "
".LAN_dl_2."
"); require_once(FOOTERF); exit; } $download_cat_table_string = ""; foreach($dlcat->cat_tree as $dlrow) { // Display main category headings, then sub-categories, optionally with sub-sub categories expanded $download_cat_table_string .= $tp->parseTemplate($DOWNLOAD_CAT_PARENT_TABLE, TRUE, $download_shortcodes); foreach($dlrow['subcats'] as $dlsubrow) { $download_cat_table_string .= $tp->parseTemplate($DOWNLOAD_CAT_CHILD_TABLE, TRUE, $download_shortcodes); foreach($dlsubrow['subsubcats'] as $dlsubsubrow) { $download_cat_table_string .= $tp->parseTemplate($DOWNLOAD_CAT_SUBSUB_TABLE, TRUE, $download_shortcodes); } } } $dl_text = $tp->parseTemplate($DOWNLOAD_CAT_TABLE_START, TRUE, $download_shortcodes); $dl_text .= $download_cat_table_string; $dl_text .= $tp->parseTemplate($DOWNLOAD_CAT_TABLE_END, TRUE, $download_shortcodes); $dlbreadcrumb = $dl->getBreadcrumb(array(LAN_dl_18)); $dl_title .= $tp->parseTemplate("{BREADCRUMB=dlbreadcrumb}", TRUE, $download_shortcodes); ob_start(); $ns->tablerender($dl_title, $dl_text); $cache_data = ob_get_flush(); $e107cache->set("download_cat".$maincatval, $cache_data); require_once(FOOTERF); exit; // Add other 'cases' here } // End switch ($action) if (isset($_POST['commentsubmit'])) { if (!$sql->db_Select("download", "download_comment", "download_id = '{$id}' ")) { header("location:".e_BASE."index.php"); exit; } else { $dlrow = $sql->db_Fetch(); if ($dlrow['download_comment'] && (ANON === TRUE || USER === TRUE)) { $clean_authorname = $_POST['author_name']; $clean_comment = $_POST['comment']; $clean_subject = $_POST['subject']; $cobj->enter_comment($clean_authorname, $clean_comment, "download", $id, $pid, $clean_subject); // $e107cache->clear("comment.download.{$sub_action}"); $sub_action not used here $e107cache->clear("comment.download"); } } } //==================================================== // LIST //==================================================== if ($action == "list") { $total_downloads = $sql->db_Count("download", "(*)", "WHERE download_category = '{$id}' AND download_active > 0 AND download_visible REGEXP '".e_CLASS_REGEXP."'"); require_once(HEADERF); /* SHOW SUBCATS ... */ if($sql->db_Select("download_category", "download_category_id", "download_category_parent='{$id}' ")) { /* there are subcats - display them ... */ $qry = " SELECT dc.*, dc2.download_category_name AS parent_name, dc2.download_category_icon as parent_icon, SUM(d.download_filesize) AS d_size, COUNT(d.download_id) AS d_count, MAX(d.download_datestamp) as d_last, SUM(d.download_requested) as d_requests FROM #download_category AS dc LEFT JOIN #download AS d ON dc.download_category_id = d.download_category AND d.download_active > 0 AND d.download_visible IN (".USERCLASS_LIST.") LEFT JOIN #download_category as dc2 ON dc2.download_category_id='{$id}' WHERE dc.download_category_class IN (".USERCLASS_LIST.") AND dc.download_category_parent='{$id}' GROUP by dc.download_category_id ORDER by dc.download_category_order "; $sql->db_Select_gen($qry); $scArray = $sql->db_getList(); $load_template = 'download_template'; if (!isset($DOWNLOAD_CAT_PARENT_TABLE)) eval($template_load_core); if(!defined("DL_IMAGESTYLE")){ define("DL_IMAGESTYLE","border:1px solid blue");} $download_cat_table_string = ""; $dl_text = $tp->parseTemplate($DOWNLOAD_CAT_TABLE_PRE, TRUE, $download_shortcodes); $dl_text .= $tp->parseTemplate($DOWNLOAD_CAT_TABLE_START, TRUE, $download_shortcodes); foreach($scArray as $dlsubsubrow) { $dl_text .= $tp->parseTemplate($DOWNLOAD_CAT_SUBSUB_TABLE, TRUE, $download_shortcodes); } $dl_text .= $tp->parseTemplate($DOWNLOAD_CAT_TABLE_END, TRUE, $download_shortcodes); $dlbreadcrumb = $dl->getBreadcrumb(array(LAN_dl_18=>e_SELF, $type)); $dl_title = $tp->parseTemplate("{BREADCRUMB=dlbreadcrumb}", TRUE, $download_shortcodes); $ns->tablerender($dl_title, $dl_text); $text = ""; // If other files, show in a separate block $dl_title = ""; // Cancel title once displayed } // End of subcategory display // Now display individual downloads if (!check_class($download_category_class)) { $ns->tablerender(LAN_dl_18, "
".LAN_dl_3."
"); require_once(FOOTERF); exit; } if ($total_downloads < $view) { $dl_from = 0; } $load_template = 'download_template'; if (!isset($DOWNLOAD_LIST_TABLE)) eval($template_load_core); if (!defined("DL_IMAGESTYLE")){ define("DL_IMAGESTYLE","border:1px solid blue");} require_once(e_HANDLER."rate_class.php"); $dltdownloads = 0; // $dl_from - first entry to show (note - can get reset due to reuse of query, even if values overridden this time) // $view - number of entries per page // $total_downloads - total number of entries matching search criteria $filetotal = $sql->db_Select("download", "*", "download_category='{$id}' AND download_active > 0 AND download_visible IN (".USERCLASS_LIST.") ORDER BY {$order} {$sort} LIMIT {$dl_from}, {$view}"); if ($filetotal) { // Only show list if some files in it $dl_text = $tp->parseTemplate($DOWNLOAD_LIST_TABLE_START, TRUE, $download_shortcodes); $dlft = ($filetotal < $view ? $filetotal : $view); while ($dlrow = $sql->db_Fetch()) { $agreetext = $tp->toHTML($pref['agree_text'],TRUE,'DESCRIPTION'); $current_row = ($current_row) ? 0 : 1; // Alternating CSS for each row.(backwards compatible) $template = ($current_row == 1) ? $DOWNLOAD_LIST_TABLE : str_replace("forumheader3","forumheader3 forumheader3_alt",$DOWNLOAD_LIST_TABLE); $dl_text .= $tp->parseTemplate($template,TRUE,$download_shortcodes);; $dltdownloads += $dlrow['download_requested']; } $dl_text .= $tp->parseTemplate($DOWNLOAD_LIST_TABLE_END, TRUE, $download_shortcodes); if($sql->db_Select("download_category", "*", "download_category_id='{$download_category_parent}' ")) { $parent = $sql->db_Fetch(); } $dlbreadcrumb = $dl->getBreadcrumb(array(LAN_dl_18=>e_SELF, $parent['download_category_name']=>e_SELF."?list.".$parent['download_category_id'], $type)); $dl_title .= $tp->parseTemplate("{BREADCRUMB=dlbreadcrumb}", TRUE, $download_shortcodes); $ns->tablerender($dl_title, $dl_text); } if(!isset($DOWNLOAD_LIST_NEXTPREV)) { $sc_style['DOWNLOAD_LIST_NEXTPREV']['pre'] = "
"; $sc_style['DOWNLOAD_LIST_NEXTPREV']['post'] = "
"; $DOWNLOAD_LIST_NEXTPREV = "
{DOWNLOAD_BACK_TO_CATEGORY_LIST}

{DOWNLOAD_LIST_NEXTPREV}
"; } $nextprev_parms = $total_downloads.",".$view.",".$dl_from.",".e_SELF."?[FROM].list.{$id}.{$view}.{$order}.{$sort}."; echo $tp->parseTemplate($DOWNLOAD_LIST_NEXTPREV, TRUE, $download_shortcodes); require_once(FOOTERF); exit; } // end of action=="list" //==================================================== // VIEW //==================================================== if ($action == "view") { $gen = new convert; $highlight_search = FALSE; if (isset($_POST['highlight_search'])) { $highlight_search = TRUE; } $query = " SELECT d.*, dc.* FROM #download AS d LEFT JOIN #download_category AS dc ON d.download_category = dc.download_category_id WHERE d.download_id = {$id} AND d.download_active > 0 AND d.download_visible IN (".USERCLASS_LIST.") AND dc.download_category_class IN (".USERCLASS_LIST.") LIMIT 1"; if(!$sql->db_Select_gen($query)){ require_once(HEADERF); $ns->tablerender(LAN_dl_18, "
".LAN_dl_3."
"); require_once(FOOTERF); exit; } $dlrow = $sql->db_Fetch(); $comment_edit_query = 'comment.download.'.$id; $load_template = 'download_template'; if (!isset($DOWNLOAD_VIEW_TABLE)) eval($template_load_core); if(!defined("DL_IMAGESTYLE")){ define("DL_IMAGESTYLE","border:0px");} if(!isset($DL_VIEW_PAGETITLE)) { $DL_VIEW_PAGETITLE = PAGE_NAME." / {DOWNLOAD_CATEGORY} / {DOWNLOAD_VIEW_NAME}"; } $DL_TITLE = $tp->parseTemplate($DL_VIEW_PAGETITLE, TRUE, $download_shortcodes); define("e_PAGETITLE", $DL_TITLE); require_once(HEADERF); $DL_TEMPLATE = $DOWNLOAD_VIEW_TABLE_START.$DOWNLOAD_VIEW_TABLE.$DOWNLOAD_VIEW_TABLE_END; $text = $tp->parseTemplate($DL_TEMPLATE, TRUE, $download_shortcodes); if(!isset($DL_VIEW_NEXTPREV)) { $DL_VIEW_NEXTPREV = "
{DOWNLOAD_VIEW_PREV} {DOWNLOAD_BACK_TO_LIST} {DOWNLOAD_VIEW_NEXT}
"; } // ------- Next/Prev ----------- $text .= $tp->parseTemplate($DL_VIEW_NEXTPREV,TRUE,$download_shortcodes); $dlbreadcrumb = $dl->getBreadcrumb(array(LAN_dl_18=>e_SELF, $dlrow['download_category_name']=>e_SELF."?list.".$dlrow['download_category_id'], $dlrow['download_name'])); $dl_title .= $tp->parseTemplate("{BREADCRUMB=dlbreadcrumb}", TRUE, $download_shortcodes); $ns->tablerender($dl_title, $text); unset($text); if ($dlrow['download_comment']) { $cobj->compose_comment("download", "comment", $id, $width,$dlrow['download_name'], $showrate=FALSE); } require_once(FOOTERF); exit; } //==================================================== // REPORT BROKEN LINKS //==================================================== if ($action == "report" && check_class($pref['download_reportbroken'])) { $query = " SELECT d.*, dc.* FROM #download AS d LEFT JOIN #download_category AS dc ON d.download_category = dc.download_category_id WHERE d.download_id = {$id} AND download_active > 0 LIMIT 1"; if(!$sql->db_Select_gen($query)) { //if (!$sql->db_Select("download", "*", "download_id = {$id} AND download_active > 0")) { require_once(HEADERF); require_once(FOOTERF); exit; } $dlrow = $sql->db_Fetch(); extract($dlrow); if (isset($_POST['report_download'])) { $report_add = $tp->toDB($_POST['report_add']); $download_name = $tp->toDB($download_name); $user = USER ? USERNAME : LAN_dl_52; if ($pref['download_email']) { // this needs to be moved into the NOTIFY, with an event. require_once(e_HANDLER."mail.php"); $subject = LAN_dl_60." ".SITENAME; $report = LAN_dl_58." ".SITENAME.":\n".(substr(SITEURL, -1) == "/" ? SITEURL : SITEURL."/")."download.php?view.".$download_id."\n ".LAN_dl_59." ".$user."\n".$report_add; sendemail(SITEADMINEMAIL, $subject, $report); } $sql->db_Insert('generic', "0, 'Broken Download', ".time().",'".USERID."', '{$download_name}', {$id}, '{$report_add}'"); define("e_PAGETITLE", PAGE_NAME." / ".LAN_dl_47); require_once(HEADERF); $text = LAN_dl_48."

".LAN_dl_49.""; $dlbreadcrumb = $dl->getBreadcrumb(array(LAN_dl_18=>e_SELF, $dlrow['download_category_name']=>e_SELF."?list.".$dlrow['download_category_id'], $dlrow['download_name']=>e_SELF."?view.".$dlrow['download_id'], LAN_dl_50)); $dl_title .= $tp->parseTemplate("{BREADCRUMB=dlbreadcrumb}", TRUE, $download_shortcodes); $ns->tablerender($dl_title, $text); } else { define("e_PAGETITLE", PAGE_NAME." / ".LAN_dl_51." ".$download_name); require_once(HEADERF); $text = "
".LAN_dl_32.": ".$download_name."
".LAN_dl_53."
".LAN_dl_54."
".LAN_dl_55."

"; $dlbreadcrumb = $dl->getBreadcrumb(array(LAN_dl_18=>e_SELF, $dlrow['download_category_name']=>e_SELF."?list.".$dlrow['download_category_id'], $dlrow['download_name']=>e_SELF."?view.".$dlrow['download_id'], LAN_dl_50)); $dl_title .= $tp->parseTemplate("{BREADCRUMB=dlbreadcrumb}", TRUE, $download_shortcodes); $ns->tablerender($dl_title, $text); } require_once(FOOTERF); exit; } //==================================================== // MIRRORS //==================================================== if($action == "mirror") { require_once(HEADERF); $load_template = 'download_template'; if (!isset($DOWNLOAD_MIRROR_START)) eval($template_load_core); $sql->db_Select("download_mirror"); $mirrorList = $sql->db_getList("ALL", 0, 200, "mirror_id"); $query = " SELECT d.*, dc.* FROM #download AS d LEFT JOIN #download_category AS dc ON d.download_category = dc.download_category_id WHERE d.download_id = {$id} LIMIT 1"; if($sql->db_Select_gen($query)) { $dlrow = $sql->db_Fetch(); $array = explode(chr(1), $dlrow['download_mirror']); if (2 == varset($pref['mirror_order'])) { // Order by name, sort array manually usort($array, "sort_download_mirror_order"); } //elseif (1 == varset($pref['mirror_order'])) //{ // // Order by ID - do nothing order is as stored in DB //} elseif (0 == varset($pref['mirror_order'], 0)) { // Shuffle the mirror list into a random order $c = count($array); for ($i=1; $i<$c; $i++) { $d = mt_rand(0, $i); $tmp = $array[$i]; $array[$i] = $array[$d]; $array[$d] = $tmp; } } $dl_text = $tp->parseTemplate($DOWNLOAD_MIRROR_START, TRUE, $download_shortcodes); $download_mirror = 1; foreach($array as $mirrorstring) { if($mirrorstring) { $dlmirrorfile = explode(",", $mirrorstring); $dlmirror = $mirrorList[$dlmirrorfile[0]]; $dl_text .= $tp->parseTemplate($DOWNLOAD_MIRROR, TRUE, $download_shortcodes); } } $dl_text .= $tp->parseTemplate($DOWNLOAD_MIRROR_END, TRUE, $download_shortcodes); $dlbreadcrumb = $dl->getBreadcrumb(array(LAN_dl_18=>e_SELF, $dlrow['download_category_name']=>e_SELF."?list.".$dlrow['download_category_id'], $dlrow['download_name']=>e_SELF."?view.".$dlrow['download_id'], LAN_dl_67)); $dl_title .= $tp->parseTemplate("{BREADCRUMB=dlbreadcrumb}", TRUE, $download_shortcodes); $ns->tablerender($dl_title, $dl_text); require_once(FOOTERF); } } function sort_download_mirror_order($a, $b) { $a = explode(",", $a); $b = explode(",", $b); if ($a[1] == $b[1]) { return 0; } return ($a[1] < $b[1]) ? -1 : 1; } ?>