diff --git a/e107_plugins/download/admin_download.php b/e107_plugins/download/admin_download.php
new file mode 100644
index 000000000..5225e9358
--- /dev/null
+++ b/e107_plugins/download/admin_download.php
@@ -0,0 +1,827 @@
+load_files();
+}
+
+$e_sub_cat = 'download';
+require_once(e_HANDLER."form_handler.php");
+require_once(e_HANDLER."userclass_class.php");
+require_once(e_HANDLER."file_class.php");
+
+$fl = new e_file;
+
+// -------- Presets. ------------
+require_once(e_HANDLER."preset_class.php");
+$pst = new e_preset;
+$pst->form = array("myform","dlform"); // form id of the form that will have it's values saved.
+$pst->page = array("download.php?create","download.php?cat"); // display preset options on which page(s).
+$pst->id = array("admin_downloads","admin_dl_cat");
+// -------------------------------
+
+$download = new download();
+$adminDownload = new adminDownload();
+require_once(e_ADMIN."auth.php");
+$pst->save_preset(); // unique name(s) for the presets - comma separated.
+
+ /*
+One form example (no arrays needed)
+$pst->form = "myform"; // form id of the form that will have it's values saved.
+$pst->page = "download.php?create"; // display preset options on which page.
+$pst->save_preset("admin_downloads"); // unique name for the preset
+*/
+
+$rs = new form;
+$subAction = '';
+if (e_QUERY)
+{
+ $tmp = explode(".", e_QUERY);
+ $action = $tmp[0];
+ $subAction = varset($tmp[1],'');
+ $id = intval(varset($tmp[2],''));
+ $from = varset($tmp[3], 0);
+ $maintPage = varset($tmp[4], '');
+ unset($tmp);
+}
+
+
+if (isset($_POST['delete']))
+{
+ $tmp = array_keys($_POST['delete']);
+ list($delete, $del_id) = explode("_", $tmp[0]);
+ $del_id = intval($del_id);
+ unset($_POST['searchquery']);
+}
+
+$from = ($from ? $from : 0);
+$amount = 50;
+
+if (isset($_POST))
+{
+ $e107cache->clear("download_cat");
+}
+
+if (isset($_POST['add_category']))
+{
+ $adminDownload->create_category($subAction, $id);
+}
+
+
+if (isset($_POST['submit_download']))
+{
+ $adminDownload->submit_download($subAction, $id);
+ $action = "main";
+ unset($subAction, $id);
+}
+
+
+if (isset($_POST['update_catorder']))
+{
+ foreach($_POST['catorder'] as $key=>$order)
+ {
+ if (is_numeric($_POST['catorder'][$key]))
+ {
+ $sql -> db_Update("download_category", "download_category_order='".intval($order)."' WHERE download_category_id='".intval($key)."'");
+ }
+ }
+ $admin_log->log_event('DOWNL_08',implode(',',array_keys($_POST['catorder'])),E_LOG_INFORMATIVE,'');
+ $ns->tablerender("", "
".LAN_UPDATED."
");
+}
+
+
+if (isset($_POST['updateoptions']))
+{
+ unset($temp);
+ $temp['download_php'] = $_POST['download_php'];
+ $temp['download_view'] = $_POST['download_view'];
+ $temp['download_sort'] = $_POST['download_sort'];
+ $temp['download_order'] = $_POST['download_order'];
+ $temp['mirror_order'] = $_POST['mirror_order'];
+ $temp['recent_download_days'] = $_POST['recent_download_days'];
+ $temp['agree_flag'] = $_POST['agree_flag'];
+ $temp['download_email'] = $_POST['download_email'];
+ $temp['agree_text'] = $tp->toDB($_POST['agree_text']);
+ $temp['download_denied'] = $tp->toDB($_POST['download_denied']);
+ $temp['download_reportbroken'] = $_POST['download_reportbroken'];
+ if ($_POST['download_subsub']) $temp['download_subsub'] = '1'; else $temp['download_subsub'] = '0';
+ if ($_POST['download_incinfo']) $temp['download_incinfo'] = '1'; else $temp['download_incinfo'] = '0';
+ if ($admin_log->logArrayDiffs($temp, $pref, 'DOWNL_01'))
+ {
+ save_prefs();
+ $message = DOWLAN_65;
+ }
+ else
+ {
+ $message = DOWLAN_8;
+ }
+}
+
+$targetFields = array('gen_datestamp', 'gen_user_id', 'gen_ip', 'gen_intdata', 'gen_chardata'); // Fields for download limits
+
+if (isset($_POST['addlimit']))
+{
+ if ($sql->db_Select('generic','gen_id',"gen_type = 'download_limit' AND gen_datestamp = {$_POST['newlimit_class']}"))
+ {
+ $message = DOWLAN_116;
+ }
+ else
+ {
+ $vals = array();
+ $vals['gen_type'] = 'download_limit';
+ foreach(array('newlimit_class','new_bw_num','new_bw_days','new_count_num','new_count_days') as $k => $lName)
+ {
+ $vals[$targetFields[$k]] = intval($_POST[$lName]);
+ }
+ $valString = implode(',',$vals);
+ if ($sql->db_Insert('generic',$vals))
+ {
+ $message = DOWLAN_117;
+ $admin_log->log_event('DOWNL_09',$valString,E_LOG_INFORMATIVE,'');
+ }
+ else
+ {
+ $message = DOWLAN_118;
+ }
+ unset($vals);
+ }
+}
+
+
+if (isset($_POST['updatelimits']))
+{
+
+ if ($pref['download_limits'] != $_POST['download_limits'])
+ {
+ $pref['download_limits'] = ($_POST['download_limits'] == 'on') ? 1 : 0;
+ save_prefs();
+ $message .= DOWLAN_126."
";
+ }
+ foreach(array_keys($_POST['count_num']) as $idLim)
+ {
+ $idLim = intval($idLim);
+ if (!$_POST['count_num'][$idLim] && !$_POST['count_days'][$idLim] && !$_POST['bw_num'][$idLim] && !$_POST['bw_days'][$idLim])
+ {
+ //All entries empty - Remove record
+ if ($sql->db_Delete('generic',"gen_id = {$idLim}"))
+ {
+ $message .= $idLim." - ".DOWLAN_119."
";
+ $admin_log->log_event('DOWNL_11','ID: '.$idLim,E_LOG_INFORMATIVE,'');
+ }
+ else
+ {
+ $message .= $idLim." - ".DOWLAN_120."
";
+ }
+ }
+ else
+ {
+ $vals = array();
+ foreach(array('bw_num','bw_days','count_num','count_days') as $k => $lName)
+ {
+ $vals[$targetFields[$k+1]] = intval($_POST[$lName][$idLim]);
+ }
+ $valString = implode(',',$vals);
+ $sql->db_UpdateArray('generic',$vals," WHERE gen_id = {$idLim}");
+ $admin_log->log_event('DOWNL_10',$idLim.', '.$valString,E_LOG_INFORMATIVE,'');
+ $message .= $idLim." - ".DOWLAN_121."
";
+ unset($vals);
+ }
+ }
+}
+
+
+if (isset($_POST['submit_mirror']))
+{
+ $adminDownload->submit_mirror($subAction, $id);
+}
+
+
+if ($action == "mirror")
+{
+ $adminDownload->show_existing_mirrors();
+}
+
+
+if ($action == "dlm")
+{
+ $action = "create";
+ $id = $subAction;
+ $subAction = "dlm";
+}
+
+
+if ($action == "create")
+{
+ $adminDownload->create_download($subAction, $id);
+}
+
+
+if ($delete == 'category')
+{
+ if (admin_update($sql->db_Delete('download_category', 'download_category_id='.$del_id), 'delete', DOWLAN_49." #".$del_id." ".DOWLAN_36))
+ {
+ $sql->db_Delete('download_category', 'download_category_parent='.$del_id);
+ $admin_log->log_event('DOWNL_04',$del_id,E_LOG_INFORMATIVE,'');
+ }
+}
+
+
+if ($action == 'cat')
+{
+ $adminDownload->show_categories($subAction, $id);
+}
+
+
+if ($delete == 'main')
+{
+ $result = $sql->db_Delete('download', 'download_id='.$del_id);
+ if ($result)
+ {
+ // Process triggers before calling admin_update so trigger messages can be shown
+ $data = array('method'=>'delete', 'table'=>'download', 'id'=>$del_id, 'plugin'=>'download', 'function'=>'delete_download');
+ $hooks = $e107->e_event->triggerHook($data);
+ require_once(e_HANDLER."message_handler.php");
+ $emessage = &eMessage::getInstance();
+ $emessage->add($hooks, E_MESSAGE_SUCCESS);
+
+ admin_update($result, 'delete', DOWLAN_27." #".$del_id." ".DOWLAN_36);
+
+ $admin_log->log_event('DOWNL_07',$del_id,E_LOG_INFORMATIVE,'');
+ admin_purge_related('download', $del_id);
+ $e_event->trigger('dldelete', $del_id);
+ }
+ unset($subAction, $id);
+}
+
+if (isset($message))
+{
+ $ns->tablerender("", "".$message."
");
+}
+
+
+if ($from === "maint" && isset($_POST['submit_download']))
+{ // Return to one of the maintanence pages after submitting the create/edit form
+ $action = $from;
+ $subAction = $maintPage;
+}
+
+if (!e_QUERY || $action == "main")
+{
+ $text = $adminDownload->show_filter_form($action, $subAction, $id, $from, $amount);
+ $text .= $adminDownload->show_existing_items($action, $subAction, $id, $from, $amount);
+ $ns->tablerender(DOWLAN_7, $text);
+}
+
+
+
+
+if ($action == "opt")
+{
+ $adminDownload->show_options();
+}
+
+if ($action == 'maint')
+{
+ global $pref, $ns;
+ switch ($_POST['dl_maint'])
+ {
+ case 'duplicates':
+ {
+ $title = DOWLAN_166;
+ $query = 'SELECT GROUP_CONCAT(d.download_id SEPARATOR ",") as gc, d.download_id, d.download_name, d.download_url, dc.download_category_name
+ FROM #download as d
+ LEFT JOIN #download_category AS dc ON dc.download_category_id=d.download_category
+ GROUP BY d.download_url
+ HAVING COUNT(d.download_id) > 1
+ ';
+ $text = "";
+ $count = $sql->db_Select_gen($query);
+ $foundSome = false;
+ if ($count) {
+ $currentURL = "";
+ while($row = $sql->db_Fetch()) {
+ if (!$foundSome) {
+ $text .= $rs->form_open("post", e_SELF."?".e_QUERY, "myform");
+ $text .= '';
+ }
+ else
+ {
+ $text = DOWLAN_172;
+ }
+ break;
+ }
+ case 'orphans':
+ {
+ $title = DOWLAN_167;
+ $text = "";
+ require_once(e_HANDLER."file_class.php");
+ $efile = new e_file();
+ $files = $efile->get_files(e_DOWNLOAD);
+ $foundSome = false;
+ foreach($files as $file) {
+ if (0 == $sql->db_Count('download', '(*)', " WHERE download_url='".$file['fname']."'")) {
+ if (!$foundSome) {
+ $text .= $rs->form_open("post", e_SELF."?".e_QUERY, "myform");
+ $text .= '';
+ }
+ else
+ {
+ $text = DOWLAN_174;
+ }
+ break;
+ }
+ case 'missing':
+ {
+ $title = DOWLAN_168;
+ $text = "";
+ $query = "SELECT d.*, dc.* FROM `#download` AS d LEFT JOIN `#download_category` AS dc ON dc.download_category_id=d.download_category";
+ $count = $sql->db_Select_gen($query);
+ $foundSome = false;
+ if ($count) {
+ while($row = $sql->db_Fetch()) {
+ if (!is_readable(e_DOWNLOAD.$row['download_url'])) {
+ if (!$foundSome) {
+ $text .= $rs->form_open("post", e_SELF."?".e_QUERY, "myform");
+ $text .= '';
+ }
+ else
+ {
+ $text = DOWLAN_172;
+ }
+ break;
+ }
+ case 'inactive':
+ {
+ $title = DOWLAN_169;
+ $text = "";
+ $query = "SELECT d.*, dc.* FROM `#download` AS d LEFT JOIN `#download_category` AS dc ON dc.download_category_id=d.download_category WHERE download_active=0";
+ $count = $sql->db_Select_gen($query);
+ $foundSome = false;
+ if ($count) {
+ while($row = $sql->db_Fetch()) {
+ if (!$foundSome) {
+ $text .= $rs->form_open("post", e_SELF."?".e_QUERY, "myform");
+ $text .= '';
+ }
+ else
+ {
+ $text = DOWLAN_172;
+ }
+ break;
+ }
+ case 'nocategory':
+ {
+ $title = DOWLAN_178;
+ $text = "";
+ $query = "SELECT * FROM `#download` WHERE download_category=0";
+ $count = $sql->db_Select_gen($query);
+ $foundSome = false;
+ if ($count) {
+ while($row = $sql->db_Fetch()) {
+ if (!$foundSome) {
+ $text .= $rs->form_open("post", e_SELF."?".e_QUERY, "myform");
+ $text .= '';
+ }
+ else
+ {
+ $text = DOWLAN_172;
+ }
+ break;
+ }
+ case 'filesize':
+ {
+ $title = DOWLAN_170;
+ $text = "";
+ $query = "SELECT d.*, dc.* FROM `#download` AS d LEFT JOIN `#download_category` AS dc ON dc.download_category_id=d.download_category WHERE d.download_url<>''";
+ $count = $sql->db_Select_gen($query);
+ $foundSome = false;
+ if ($count) {
+ while($row = $sql->db_Fetch()) {
+ if (is_readable(e_DOWNLOAD.$row['download_url'])) {
+ $filesize = filesize(e_DOWNLOAD.$row['download_url']);
+ if ($filesize <> $row['download_filesize']) {
+ if (!$foundSome) {
+ $text .= $rs->form_open("post", e_SELF."?".e_QUERY, "myform");
+ $text .= '';
+ }
+ else
+ {
+ $text = DOWLAN_172;
+ }
+ break;
+ }
+ case 'log':
+ {
+ $text = "log - view manage download history log";
+ header('location: '.e_ADMIN.'admin_log.php?downlog');
+ exit();
+ break;
+ }
+ default:
+ {
+ $title = DOWLAN_193;
+ $text = DOWLAN_179;
+ $eform = new e_form();
+ $text = "
+
+ ";
+ }
+ }
+ $ns->tablerender(DOWLAN_165.$title, $text);
+}
+
+
+if ($action == 'limits')
+{
+ if ($sql->db_Select('userclass_classes','userclass_id, userclass_name'))
+ {
+ $classList = $sql->db_getList();
+ }
+ if ($sql->db_Select("generic", "gen_id as limit_id, gen_datestamp as limit_classnum, gen_user_id as limit_bw_num, gen_ip as limit_bw_days, gen_intdata as limit_count_num, gen_chardata as limit_count_days", "gen_type = 'download_limit'"))
+ {
+ while($row = $sql->db_Fetch())
+ {
+ $limitList[$row['limit_classnum']] = $row;
+ }
+ }
+ $txt = "
+ ";
+
+ $ns->tablerender(DOWLAN_112, $txt);
+ require_once(e_ADMIN.'footer.php');
+ exit;
+}
+
+require_once(e_ADMIN."footer.php");
+exit;
+
+function admin_download_adminmenu($parms)
+{
+ global $action,$subAction;
+ if ($action == "") {
+ $action = "main";
+ }
+ $var['main']['text'] = DOWLAN_29;
+ $var['main']['link'] = e_SELF;
+ $var['create']['text'] = DOWLAN_30;
+ $var['create']['link'] = e_SELF."?create";
+ $var['cat']['text'] = DOWLAN_31;
+ $var['cat']['link'] = e_SELF."?cat";
+ $var['cat']['perm'] = "Q";
+ $var['opt']['text'] = LAN_OPTIONS;
+ $var['opt']['link'] = e_SELF."?opt";
+ $var['maint']['text'] = DOWLAN_165;
+ $var['maint']['link'] = e_SELF."?maint";
+ $var['limits']['text'] = DOWLAN_112;
+ $var['limits']['link'] = e_SELF."?limits";
+ $var['mirror']['text'] = DOWLAN_128;
+ $var['mirror']['link'] = e_SELF."?mirror";
+ e_admin_menu(DOWLAN_32, $action, $var);
+
+ unset($var);
+ if ($action == "" || $action == "main") {
+ $var['1']['text'] = "//TODO";
+ $var['1']['link'] = "";
+ e_admin_menu(DOWLAN_184, $subAction, $var);
+ }
+}
+?>
\ No newline at end of file