1
0
mirror of https://github.com/e107inc/e107.git synced 2025-10-08 11:36:56 +02:00
Files
php-e107/e107_plugins/download/includes/admin.php
Nick Liu f6d6d1b185 Deprecate e_parse::toJS()
`e_parse::toJS()`, documented with the description

> Convert text blocks which are to be embedded within JS

, does not protect strings from injections, which appears to be its
primary use.  Additionally, it performs multiple unrelated string
modifications:

* Replace Windows line breaks with a literal `\\n` (which would later be
  parsed as `\n` in JavaScript/JSON)
* Does not modify Unix line breaks (`\n`), which is inconsistent with
  the Windows line break behavior
* Removes HTML tags
* Replaces HTML entities as `htmlentities()` does

This method cannot be fixed because its usages are inconsistent.  Most
notably, some usages surround the method's output in single quotes while
others surround it with double quotes.  Strings cannot be JSON-encoded
without confounding quotation mark styles.

All core usages of `e_parse::toJS()` have been replaced with
alternatives, which are also documented in the method's DocBlock.

Fixes: #4546
2021-08-31 00:11:14 +02:00

2686 lines
104 KiB
PHP

<?php
/*
* e107 website system
*
* Copyright (C) 2008-2017 e107 Inc (e107.org)
* Released under the terms and conditions of the
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
*
* Download Plugin Administration UI
*
*/
if (!defined('e107_INIT')){ exit; }
class plugin_download_admin extends e_admin_dispatcher
{
/**
* Format: 'MODE' => array('controller' =>'CONTROLLER_CLASS'[, 'index' => 'list', 'path' => 'CONTROLLER SCRIPT PATH', 'ui' => 'UI CLASS NAME child of e_admin_ui', 'uipath' => 'UI SCRIPT PATH']);
* Note - default mode/action is autodetected in this order:
* - $defaultMode/$defaultAction (owned by dispatcher - see below)
* - $adminMenu (first key if admin menu array is not empty)
* - $modes (first key == mode, corresponding 'index' key == action)
* @var array
*/
protected $modes = array (
'main' => array (
'controller' => 'download_main_admin_ui',
'path' => null,
'ui' => 'download_main_admin_form_ui',
'uipath' => null
),
'cat' => array (
'controller' => 'download_cat_ui',
'path' => null,
'ui' => 'download_cat_form_ui',
'uipath' => null
),
'mirror' => array(
'controller' => 'download_mirror_ui',
'path' => null,
'ui' => 'download_mirror_form_ui',
'uipath' => null
),
'broken' => array(
'controller' => 'download_broken_ui',
'path' => null,
'ui' => 'download_broken_form_ui',
'uipath' => null
),
);
/* Both are optional
protected $defaultMode = null;
protected $defaultAction = null;
*/
/**
* Format: 'MODE/ACTION' => array('caption' => 'Menu link title'[, 'url' => '{e_PLUGIN}release/admin_config.php', 'perm' => '0']);
* Additionally, any valid e107::getNav()->admin() key-value pair could be added to the above array
* @var array
*/
protected $adminMenu = array(
'main/list' => array('caption'=> LAN_MANAGE, 'perm' => 'P'),
'main/create' => array('caption'=> LAN_CREATE, 'perm' => 'P'),
'other0' => array('divider'=> true),
'cat/list' => array('caption'=> LAN_CATEGORIES, 'perm'=>'P'),
'cat/create' => array('caption'=> LAN_CREATE_CATEGORY, 'perm' => 'Q'),
'other1' => array('divider'=> true),
'mirror/list' => array('caption'=> DOWLAN_128, 'perm' => 'P'),
'mirror/create' => array('caption'=> DOWLAN_143, 'perm' => 'P'),
'other2' => array('divider'=> true),
'broken/list' => array('caption'=> LAN_DL_BROKENDOWNLOADSREPORTS, 'perm' => 'P'),
'other3' => array('divider'=> true),
'main/settings' => array('caption'=> LAN_PREFS, 'perm' => 'P'),
// 'main/maint' => array('caption'=> DOWLAN_165, 'perm' => 'P'),
'main/limits' => array('caption'=> DOWLAN_112, 'perm' => 'P'),
// 'main/mirror' => array('caption'=> DOWLAN_128, 'perm' => 'P')
);
/*
$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";
e107::getNav()->admin(DOWLAN_32, $action, $var);
unset($var);
$var['ulist']['text'] = DOWLAN_22;
$var['ulist']['link'] = e_SELF."?ulist";;
$var['filetypes']['text'] = DOWLAN_23;
$var['filetypes']['link'] = e_SELF."?filetypes";
$var['uopt']['text'] = LAN_OPTIONS;
$var['uopt']['link'] = e_SELF."?uopt";
*/
/**
* Optional, mode/action aliases, related with 'selected' menu CSS class
* Format: 'MODE/ACTION' => 'MODE ALIAS/ACTION ALIAS';
* This will mark active main/list menu item, when current page is main/edit
* @var array
*/
protected $adminMenuAliases = array(
'main/edit' => 'main/list',
'cat/edit' => 'cat/list'
);
/**
* Navigation menu title
* @var string
*/
protected $menuTitle = LAN_PLUGIN_DOWNLOAD_NAME;
}
class download_cat_ui extends e_admin_ui
{
protected $pluginTitle = LAN_PLUGIN_DOWNLOAD_NAME;
protected $pluginName = 'download';
protected $eventName = 'download-category';
protected $table = "download_category";
protected $pid = "download_category_id";
protected $perPage = 0; //no limit
protected $batchCopy = true;
// initiate as a parent/child tree.
protected $sortField = 'download_category_order';
protected $sortParent = 'download_category_parent';
protected $treePrefix = 'download_category_name';
// protected $orderStep = // automatic
// protected $listOrder = // automatic
//legacy URL scheme
protected $url = array('route'=>'download/list/category', 'vars' => array('id' => 'download_category_id', 'name' => 'download_category_sef'), 'name' => 'download_category_name', 'description' => ''); // 'link' only needed if profile not provided.
protected $fields = array(
'checkboxes' => array('title'=> '', 'type' => null, 'width' =>'5%', 'forced'=> TRUE, 'thclass'=>'center', 'class'=>'center'),
'download_category_icon' => array('title'=> LAN_ICON, 'type' => 'method', 'width' => '5%', 'thclass' => 'center','class'=>'center','writeParms'=>'glyphs=1' ),
'download_category_id' => array('title'=> LAN_ID, 'type' => 'number', 'width' =>'5%', 'forced'=> TRUE, 'readParms'=>'link=sef&target=blank'),
'download_category_name' => array('title'=> LAN_TITLE, 'type' => 'text', 'data'=>'str', 'inline' => true, 'width' => 'auto', 'thclass' => 'left', 'writeParms'=>'size=xxlarge'),
'download_category_sef' => array('title'=> LAN_SEFURL, 'type' => 'text', 'data'=>'str', 'batch'=>true, 'inline' => true, 'width' => 'auto', 'thclass' => 'left', 'writeParms'=>'sef=download_category_name&size=xxlarge'),
'download_category_description' => array('title'=> LAN_DESCRIPTION, 'type' => 'bbarea', 'data'=>'str', 'width' => '30%', 'readParms' => 'expand=...&truncate=50&bb=1'), // Display name
'download_category_parent' => array('title'=> LAN_PARENT, 'type' => 'method', 'width' => '5%', 'batch' => TRUE, 'filter'=>TRUE),
'download_category_class' => array('title'=> LAN_VISIBILITY, 'type' => 'userclass', 'inline' => true, 'width' => 'auto', 'data' => 'int', 'batch' => TRUE, 'filter'=>TRUE),
'download_category_order' => array('title'=> LAN_ORDER, 'type' => 'number', 'nolist'=>true, 'data'=>'int', 'width' => '5%', 'thclass' => 'right', 'class'=> 'right' ),
'options' => array('title'=> LAN_OPTIONS, 'type' => null, 'width' => '10%', 'forced'=>TRUE, 'thclass' => 'center last', 'class' => 'center', 'sort'=>1)
);
protected $fieldpref = array('download_category_icon', 'download_category_id', 'download_category_name', 'download_category_sef', 'download_category_class', 'download_category_order');
protected $downloadCats = array();
function init()
{
if(deftrue('e_DEBUG'))
{
$this->fields['download_category_order']['nolist'] = false;
}
$this->setDownloadCategoryTree();
}
private function setDownloadCategoryTree()
{
$sql = e107::getDb();
$qry = $this->getParentChildQry(true);
$sql->gen($qry);
$this->downloadCats[0] = LAN_NONE;
while($row = $sql->fetch())
{
$num = (int) $row['_depth'] - 1;
if($num < 0)
{
$num = 0;
}
$id = $row['download_category_id'];
$this->downloadCats[$id] = str_repeat("&nbsp;&nbsp;",$num).$row['download_category_name'];
}
if($this->getAction() === 'edit') // make sure parent is not the same as ID.
{
$r = $this->getId();
unset($this->downloadCats[$r]);
}
}
function getDownloadCategoryTree($id = false)
{
if($id)
{
return $this->downloadCats[$id];
}
return $this->downloadCats;
}
}
class download_cat_form_ui extends e_admin_form_ui
{
public function download_category_parent($curVal,$mode)
{
// TODO - catlist combo without current cat ID in write mode, parents only for batch/filter
// Get UI instance
$controller = $this->getController();
switch($mode)
{
case 'read':
return e107::getParser()->toHTML($controller->getDownloadCategoryTree($curVal), false, 'TITLE');
break;
case 'write':
return $this->select('download_category_parent', $controller->getDownloadCategoryTree(), $curVal);
break;
case 'filter':
case 'batch':
return $controller->getDownloadCategoryTree();
break;
}
}
public function download_category_icon($curVal,$mode)
{
if(!empty($curVal) && strpos($curVal, chr(1)))
{
list($curVal,$tmp) = explode(chr(1),$curVal);
}
switch($mode)
{
case 'read':
return e107::getParser()->toIcon($curVal, array('legacy'=>'{e_IMAGE}icons/'));
break;
case 'write':
return $this->iconpicker('download_category_icon', $curVal,null,array('glyphs'=>true, 'legacyPath'=>'{e_IMAGE}icons/'));
break;
case 'filter':
case 'batch':
return null;
break;
}
}
}
class download_main_admin_ui extends e_admin_ui
{
// required
protected $pluginTitle = LAN_PLUGIN_DOWNLOAD_NAME;
protected $pluginName = 'download';
protected $eventName = 'download';
protected $table = "download"; // DB Table, table alias is supported. Example: 'r.release'
protected $listQry = "SELECT m.*, c.download_category_sef, u.user_id,u.user_name FROM #download AS m
lEFT JOIN #download_category AS c on m.download_category = c.download_category_id LEFT JOIN #user AS u ON m.download_author = u.user_id "; // without any Order or Limit.
//required - default column user prefs
protected $fieldpref = array('checkboxes', 'download_image', 'download_id', 'download_datestamp', 'download_category', 'download_name', 'download_active', 'download_class', 'fb_order', 'options');
// Security modes
protected $security_options = array(
'none' => LAN_DL_SECURITY_MODE_NONE,
'nginx-secure_link_md5' => LAN_DL_SECURITY_MODE_NGINX_SECURELINKMD5
);
// optional - required only in case of e.g. tables JOIN. This also could be done with custom model (set it in init())
//protected $editQry = "SELECT * FROM #release WHERE release_id = {ID}";
// required - if no custom model is set in init() (primary id)
protected $pid = "download_id";
// optional
protected $perPage = 10;
// default - true - TODO - move to displaySettings
protected $batchDelete = true;
protected $fields = array(
'checkboxes' => array('title'=> '', 'type' => null, 'data' => null, 'width'=>'5%', 'thclass' =>'center', 'forced'=> TRUE, 'class'=>'center', 'toggle' => 'e-multiselect'),
'download_id' => array('title'=> LAN_ID, 'type' => 'text', 'data' => 'int', 'width'=>'5%', 'thclass' => '', 'forced'=> TRUE, 'readParms'=>'url=item&target=blank', 'primary'=>TRUE/*, 'noedit'=>TRUE*/), //Primary ID is not editable
'download_name' => array('title'=> LAN_TITLE, 'type' => 'text', 'data' => 'str', 'inline'=>true, 'width' => 'auto', 'thclass' => ''),
'download_url' => array('title'=> DOWLAN_13, 'type' => 'url', 'data' => 'str', 'width'=>'auto', 'thclass' => '', 'batch' => TRUE, 'filter'=>TRUE),
'download_sef' => array('title'=> LAN_SEFURL, 'type' => 'text', 'inline'=>true, 'data' => 'str', 'width'=>'auto', 'thclass' => '', 'batch' => TRUE, 'filter'=>TRUE, 'writeParms'=>'sef=download_name'),
'download_keywords' => array('title'=> LAN_KEYWORDS, 'type' => 'tags', 'inline'=>true, 'data' => 'str', 'width'=>'auto', 'thclass' => ''),
'download_author' => array('title'=> LAN_AUTHOR, 'type' => 'user', 'data' => 'str', 'width' => 'auto', 'thclass' => 'left'),
'download_author_email' => array('title'=> DOWLAN_16, 'type' => 'email', 'data' => 'str', 'width' => 'auto', 'thclass' => 'left'),
'download_author_website' => array('title'=> DOWLAN_17, 'type' => 'url', 'data' => 'str', 'width' => 'auto', 'thclass' => 'left'),
'download_description' => array('title'=> LAN_DESCRIPTION, 'type' => 'bbarea', 'width' => '30%', 'readParms' => 'expand=...&truncate=50&bb=1'), // Display name
'download_filesize' => array('title'=> DOWLAN_66, 'type' => 'text', 'data' => 'str', 'width' => 'auto', 'thclass' => 'right', 'class' => 'right'),
'download_requested' => array('title'=> DOWLAN_29, 'type' => 'text', 'data' => 'str', 'width' => 'auto', 'thclass' => 'right', 'class' => 'right'),
'download_category' => array('title'=> LAN_CATEGORY, 'type' => 'dropdown', 'width' => 'auto', 'inline'=>true, 'batch' => TRUE, 'filter'=>TRUE),
'download_active' => array('title'=> DOWLAN_21, 'type' => 'method', 'data' => 'int', 'width' => '5%', 'thclass' => 'center', 'class' => 'center', 'batch' => TRUE, 'filter'=>TRUE, 'noedit' => true),
'download_datestamp' => array('title'=> LAN_DATE, 'type' => 'datestamp', 'data' => 'int', 'width' => 'auto', 'thclass' => '', 'readParms' => 'long', 'writeParms' => ''),
'download_thumb' => array('title'=> DOWLAN_20, 'type' => 'image', 'data' => 'str', 'width' => '100px', 'thclass' => 'center', 'class'=>'center', 'readParms'=>'thumb=60&thumb_urlraw=0&thumb_aw=60&legacyPath={e_FILE}downloadthumbs', 'writeParms' => 'media=download_image', 'readonly'=>TRUE ),
'download_image' => array('title'=> DOWLAN_19, 'type' => 'image', 'data' => 'str', 'width' => '100px', 'thclass' => 'center', 'class'=>'center', 'readParms'=>'thumb=60&thumb_urlraw=0&thumb_aw=60&legacyPath={e_FILE}downloadimages', 'writeParms' => 'media=download_image', 'readonly'=>TRUE, 'batch' => FALSE, 'filter'=>FALSE),
'download_comment' => array('title'=> DOWLAN_102, 'type' => 'boolean', 'data' => 'int', 'width' => '5%', 'thclass' => 'center', 'batch' => TRUE, 'filter'=>TRUE, 'noedit' => true),
'download_class' => array('title'=> DOWLAN_113, 'type' => 'userclass', 'width' => 'auto', 'inline'=>true, 'data' => 'int','batch' => TRUE, 'filter'=>TRUE),
'download_visible' => array('title'=> LAN_VISIBILITY, 'type' => 'userclass', 'inline'=>true, 'width' => 'auto', 'data' => 'int', 'batch' => TRUE, 'filter'=>TRUE),
'download_mirror' => array('title'=> DOWLAN_128, 'type' => 'text', 'data' => 'str', 'width' => '10%', 'thclass' => 'center' ),
'download_mirror_type' => array('title'=> DOWLAN_195, 'type' => 'method', 'data' => 'str', 'width' => '10%', 'thclass' => 'center' ),
// 'download_order' => array('title'=> LAN_ORDER, 'type' => 'text', 'width' => '5%', 'thclass' => 'left' ),
'issue' => array('title'=> 'Issue', 'type' => 'method', 'data' => null, 'nolist'=>TRUE, 'noedit'=>TRUE, 'filter'=>TRUE),
'options' => array('title'=> LAN_OPTIONS, 'type' => null, 'data' => null, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center last', 'forced'=>TRUE)
);
protected $action = array();
protected $subAction = array();
protected $id = "";
/*
$columnInfo = array(
"checkboxes" => array("title" => "", "forced"=> TRUE, "width" => "3%", "thclass" => "center first", "toggle" => "dl_selected"),
"download_id" => array("title"=>LAN_ID, "type"=>"", "width"=>"auto", "thclass"=>"", "forced"=>true),
"download_name" => array("title"=>DOWLAN_12, "type"=>"", "width"=>"auto", "thclass"=>""),
"download_url" => array("title"=>DOWLAN_13, "type"=>"", "width"=>"auto", "thclass"=>""),
"download_author" => array("title"=>DOWLAN_15, "type"=>"", "width"=>"auto", "thclass"=>""),
"download_author_email" => array("title"=>DOWLAN_16, "type"=>"", "width"=>"auto", "thclass"=>""),
"download_author_website" => array("title"=>DOWLAN_17, "type"=>"", "width"=>"auto", "thclass"=>""),
"download_description" => array("title"=>DOWLAN_18, "type"=>"", "width"=>"auto", "thclass"=>""),
* "download_filesize" => array("title"=>DOWLAN_66, "type"=>"", "width"=>"auto", "thclass"=>"right"),
"download_requested" => array("title"=>DOWLAN_29, "type"=>"", "width"=>"auto", "thclass"=>"center"),
"download_category" => array("title"=>DOWLAN_11, "type"=>"", "width"=>"auto", "thclass"=>""),
"download_active" => array("title"=>DOWLAN_21, "type"=>"", "width"=>"auto", "thclass"=>"center"),
"download_datestamp" => array("title"=>DOWLAN_182, "type"=>"", "width"=>"auto", "thclass"=>""),
* "download_thumb" => array("title"=>DOWLAN_20, "type"=>"", "width"=>"auto", "thclass"=>"center"),
"download_image" => array("title"=>DOWLAN_19, "type"=>"", "width"=>"auto", "thclass"=>""),
"download_comment" => array("title"=>DOWLAN_102, "type"=>"", "width"=>"auto", "thclass"=>"center"),
"download_class" => array("title"=>DOWLAN_113, "type"=>"", "width"=>"auto", "thclass"=>""),
"download_mirror" => array("title"=>DOWLAN_128, "type"=>"", "width"=>"auto", "thclass"=>""),
"download_mirror_type" => array("title"=>DOWLAN_195, "type"=>"", "width"=>"auto", "thclass"=>""),
"download_visible" => array("title"=>DOWLAN_43, "type"=>"", "width"=>"auto", "thclass"=>""),
"options" => array("title"=>LAN_OPTIONS, "width"=>"10%", "thclass"=>"center last", "forced"=>true)
);
*/
// FORMAT field_name=>type - optional if fields 'data' attribute is set or if custom model is set in init()
/*protected $dataFields = array();*/
// optional, could be also set directly from $fields array with attributes 'validate' => true|'rule_name', 'rule' => 'condition_name', 'error' => 'Validation Error message'
/*protected $validationRules = array(
'release_url' => array('required', '', 'Release URL', 'Help text', 'not valid error message')
);*/
// optional, if $pluginName == 'core', core prefs will be used, else e107::getPluginConfig($pluginName);
protected $prefs = array(
'pref_type' => array('title'=> 'type', 'type'=>'text', 'data' => 'string', 'validate' => true),
'pref_folder' => array('title'=> 'folder', 'type' => 'boolean', 'data' => 'integer'),
'pref_name' => array('title'=> 'name', 'type' => 'text', 'data' => 'string', 'validate' => 'regex', 'rule' => '#^[\w]+$#i', 'help' => 'allowed characters are a-zA-Z and underscore')
);
/**
* @var e_parse
*/
private $tp;
/**
* @inheritDoc
*/
public function __construct($request, $response, $params = array())
{
parent::__construct($request, $response, $params);
$this->tp = e107::getParser();
}
public function observe()
{
if (isset($_POST['submit_download'])) // Create or Update a Download.
{
$this->submit_download();
}
if (isset($_POST['updatedownlaodoptions'])) // Save Download Options.
{
$this->saveSettings();
}
if (isset($_POST['submit_mirror']))
{
$this->submit_mirror();
}
if (isset($_POST))
{
e107::getCache()->clear("download_cat");
}
}
// optional
public function init()
{
$this->action = $this->getMode(); // vartrue($_GET['mode']);
$this->subAction = $this->getAction(); // vartrue($_GET['action']);
$this->id = $this->getId(); // vartrue($_GET['id']);
$this->observe();
$categories = array();
if(e107::getDb()->select('download_category'))
{
//$categories[0] = LAN_SELECT;
while ($row = e107::getDb()->fetch())
{
$id = $row['download_category_id'];
$categories[$id] = $row['download_category_name'];
}
}
$this->fields['download_category']['writeParms'] = $categories;
// DEPRECATED
//$this->fields['fb_rendertype']['writeParms'] = array(FBLAN_23,FBLAN_24);
//$this->fields['fb_mode']['writeParms'] = array(FBLAN_13,FBLAN_14);
$this->fields['download_category']['readParms'] = $categories;
// Custom filter queries
if(vartrue($_GET['filter_options']))
{
list($filter,$mode) = explode("__",$_GET['filter_options']);
if($mode == 'missing')
{
$this->filterQry = $this->missingFiles();
}
if($mode == 'nocategory')
{
$this->filterQry = "SELECT * FROM `#download` WHERE download_category=0";
}
if($mode == 'duplicates')
{
$this->filterQry = "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";
}
if($mode == "filesize")
{
$this->filterQry = $this->missingFiles('filesize');
}
}
}
/*
* Return a query for Missing Files and Filesize mismatch
*/
public function missingFiles($mode='missing')
{
$sql = e107::getDb();
$count = array();
if ($sql->gen("SELECT * FROM `#download` ORDER BY download_id"))
{
while($row = $sql->fetch())
{
if (!is_readable(e_DOWNLOAD.$row['download_url']))
{
$count[] = $row['download_id'];
}
elseif($mode == 'filesize')
{
$filesize = filesize(e_DOWNLOAD.$row['download_url']);
if ($filesize <> $row['download_filesize'])
{
$count[] = $row['download_id'];
}
}
}
}
if($count > 0)
{
return "SELECT * FROM `#download` WHERE download_id IN (".implode(",",$count).")";
}
}
/*
function orphanFiles() //TODO
{
$sql = e107::getDb();
$tp = e107::getParser();
$files = e107::getFile()->get_files(e_DOWNLOAD);
$foundSome = false;
foreach($files as $file)
{
if (0 == $sql->count('download', '(*)', " WHERE download_url='".$file['fname']."'")) {
if (!$foundSome) {
// $text .= $rs->form_open("post", e_SELF."?".e_QUERY, "myform");
$text .= '<form method="post" action="'.e_SELF.'?'.e_QUERY.'" id="myform">
<table class="adminlist">';
$text .= '<tr>';
$text .= '<th>'.DOWLAN_13.'</th>';
$text .= '<th>'.DOWLAN_182.'</th>';
$text .= '<th>'.DOWLAN_66.'</th>';
$text .= '<th>'.LAN_OPTIONS.'</th>';
$text .= '</tr>';
$foundSome = true;
}
$filesize = (is_readable(e_DOWNLOAD.$row['download_url']) ? eHelper::parseMemorySize(filesize(e_DOWNLOAD.$file['fname'])) : DOWLAN_181);
$filets = (is_readable(e_DOWNLOAD.$row['download_url']) ? e107::getDate()->convert_date(filectime(e_DOWNLOAD.$file['fname']), "long") : DOWLAN_181);
$text .= '<tr>';
$text .= '<td>'.$tp->toHTML($file['fname']).'</td>';
$text .= '<td>'.$filets.'</td>';
$text .= '<td>'.$filesize.'</td>';
}
}
}*/
/**
* @inheritdoc
*/
public function afterDelete($deleted_data, $id, $deleted_check)
{
if($deleted_check)
{
$sql = e107::getDb('mmcleanup');
if(strpos($deleted_data['download_url'], '{e_MEDIA_') === 0 && $sql->delete('core_media', "media_url='{$deleted_data['download_url']}'"))
{
$mediaFile = e107::getParser()->replaceConstants($deleted_data['download_url']);
@unlink($mediaFile);
e107::getMessage()->addSuccess('Associated media record successfully erased');
}
if(strpos($deleted_data['download_image'], '{e_MEDIA_') === 0 && $sql->delete('core_media', "media_url='{$deleted_data['download_image']}'"))
{
$mediaImage = e107::getParser()->replaceConstants($deleted_data['download_image']);
e107::getMessage()->addSuccess('Associated media image successfully erased');
@unlink($mediaImage);
}
}
}
function createPage()
{
global $adminDownload;
$this->create_download();
}
function importPage()
{
$this->batchImportForm();
}
function settingsPage()
{
// global $adminDownload;
$this->show_download_options();
}
function limitsPage()
{
$this->showLimits();
}
function maintPage()
{
showMaint();
}
function mirrorPage()
{
global $adminDownload;
$this->show_existing_mirrors();
}
function showLimits()
{
$sql = e107::getDb();
$ns = e107::getRender();
$tp = e107::getParser();
$pref = e107::getPref();
//global $pref;
if ($sql->select('userclass_classes','userclass_id, userclass_name'))
{
$classList = $sql->db_getList();
}
if ($sql->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->fetch())
{
$limitList[$row['limit_classnum']] = $row;
}
}
$txt = "
<form method='post' action='".e_SELF."?".e_QUERY."'>
<table class='table adminform'>
<tr>
<td colspan='4' style='text-align:left'>
";
if(vartrue($pref['download_limits']) == 1)
{
$chk = " checked = 'checked'";
}
else
{
$chk = "";
}
$txt .= "
<input type='checkbox' name='download_limits' value='on'{$chk}/> ".DOWLAN_125."
</td>
</tr>
<tr>
<th class='fcaption'>".LAN_ID."</th>
<th class='fcaption'>".DOWLAN_113."</th>
<th class='fcaption'>".DOWLAN_107."</th>
<th class='fcaption'>".DOWLAN_108."</th>
</tr>
";
if(is_array(vartrue($limitList)))
{
foreach($limitList as $row)
{
$txt .= "
<tr>
<td>".$row['limit_id']."</td>
<td>".r_userclass_name($row['limit_classnum'])."</td>
<td class='form-inline'>
<input type='text' class='form-control' size='5' name='count_num[{$row['limit_id']}]' value='".($row['limit_count_num'] ? $row['limit_count_num'] : "")."'/> ".DOWLAN_109."
<input type='text' class='form-control' size='5' name='count_days[{$row['limit_id']}]' value='".($row['limit_count_days'] ? $row['limit_count_days'] : "")."'/> ".DOWLAN_110."
</td>
<td class='form-inline'>
<input type='text' class='form-control' size='5' name='bw_num[{$row['limit_id']}]' value='".($row['limit_bw_num'] ? $row['limit_bw_num'] : "")."'/> ".DOWLAN_111." ".DOWLAN_109."
<input type='text' class='form-control' size='5' name='bw_days[{$row['limit_id']}]' value='".($row['limit_bw_days'] ? $row['limit_bw_days'] : "")."'/> ".DOWLAN_110."
</td>
</tr>
";
}
}
$txt .= "
</table>
<div class='buttons-bar center'>
<input type='submit' class='btn btn-default btn-secondary button' name='updatelimits' value='".DOWLAN_115."'/>
</div>
<table class='table adminlist'>
<tr>
<td colspan='4'><br/><br/></td>
</tr>
<tr>
<td colspan='2'>".r_userclass("newlimit_class", 0, "off", "guest, member, admin, classes, language")."</td>
<td class='form-inline'>
<input type='text' class='form-control' size='5' name='new_count_num' value=''/> ".DOWLAN_109."
<input type='text' class='form-control' size='5' name='new_count_days' value=''/> ".DOWLAN_110."
</td>
<td class='form-inline'>
<input type='text' class='form-control' size='5' name='new_bw_num' value=''/> ".DOWLAN_111." ".DOWLAN_109."
<input type='text' class='form-control' size='5' name='new_bw_days' value=''/> ".DOWLAN_110."
</td>
</tr>
<tr>
";
$txt .= "</table>
<div class='buttons-bar center'>
<input type='submit' class='btn btn-default btn-secondary button' name='addlimit' value='".DOWLAN_114."'/>
</div></form>";
echo $txt;
// $ns->tablerender(DOWLAN_112, $txt);
// require_once(e_ADMIN.'footer.php');
// exit;
}
function showMaint()
{
$mes = e107::getMessage();
$mes->addInfo("Deprecated Area - please use filter instead under 'Manage' ");
global $pref;
$ns = e107::getRender();
$sql = e107::getDb();
$sql2 = e107::getDb('sql2');
$frm = e107::getForm();
$tp = e107::getParser();
if (isset($_POST['dl_maint'])) {
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->gen($query);
$foundSome = false;
if ($count) {
$currentURL = "";
while($row = $sql->fetch()) {
if (!$foundSome) {
// $text .= $rs->form_open("post", e_SELF."?".e_QUERY, "myform");
$text .= '<form method="post" action="'.e_SELF.'?'.e_QUERY.'" id="myform">
<table class="table adminform">';
$text .= '<tr>';
$text .= '<th>'.DOWLAN_13.'</th>';
$text .= '<th>'.LAN_ID.'</th>';
$text .= '<th>'.DOWLAN_27.'</th>';
$text .= '<th>'.DOWLAN_11.'</th>';
$text .= '<th>'.LAN_OPTIONS.'</th>';
$text .= '</tr>';
$foundSome = true;
}
$query = "SELECT d.*, dc.* FROM `#download` AS d
LEFT JOIN `#download_category` AS dc ON dc.download_category_id=d.download_category
WHERE download_id IN (".$row['gc'].")
ORDER BY download_id ASC";
$count = $sql2->gen($query);
while($row = $sql2->fetch()) {
$text .= '<tr>';
if ($currentURL != $row['download_url']) {
$text .= '<td>'.$tp->toHTML($row['download_url']).'</td>';
$currentURL = $row['download_url'];
} else {
$text .= '<td>*</td>';
}
$text .= '<td>'.$row['download_id'].'</td>';
$text .= "<td><a href='".e_PLUGIN."download/download.php?view.".$row['download_id']."'>".$tp->toHTML($row['download_name']).'</a></td>';
$text .= '<td>'.$tp->toHTML($row['download_category_name']).'</td>';
$text .= '<td>
<a href="'.e_SELF.'?create.edit.'.$row["download_id"].'.maint.duplicates">'.ADMIN_EDIT_ICON.'</a>
<input type="image" title="'.LAN_DELETE.'" name="delete[main_'.$row["download_id"].']" src="'.ADMIN_DELETE_ICON_PATH.'" onclick=\'return jsconfirm('. $this->getJsConfirm($row["download_id"]) .') \'/>
</td>';
$text .= '</tr>';
}
}
}
if ($foundSome) {
$text .= '</table></form>';
}
else
{
e107::getMessage()->addInfo(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->count('download', '(*)', " WHERE download_url='".$file['fname']."'")) {
if (!$foundSome) {
// $text .= $rs->form_open("post", e_SELF."?".e_QUERY, "myform");
$text .= '<form method="post" action="'.e_SELF.'?'.e_QUERY.'" id="myform">
<table class="table adminform">';
$text .= '<tr>';
$text .= '<th>'.DOWLAN_13.'</th>';
$text .= '<th>'.DOWLAN_182.'</th>';
$text .= '<th>'.DOWLAN_66.'</th>';
$text .= '<th>'.LAN_OPTIONS.'</th>';
$text .= '</tr>';
$foundSome = true;
}
$filesize = (is_readable(e_DOWNLOAD.$row['download_url']) ? $e107->parseMemorySize(filesize(e_DOWNLOAD.$file['fname'])) : DOWLAN_181);
$filets = (is_readable(e_DOWNLOAD.$row['download_url']) ? $gen->convert_date(filectime(e_DOWNLOAD.$file['fname']), "long") : DOWLAN_181);
$text .= '<tr>';
$text .= '<td>'.$tp->toHTML($file['fname']).'</td>';
$text .= '<td>'.$filets.'</td>';
$text .= '<td>'.$filesize.'</td>';
//TODO $text .= '<td>
//TODO <a href="'.e_SELF.'?create.add.'. urlencode($file["fname"]).'">'.E_16_CREATE.'</a>
//TODO <input type="image" title="'.LAN_DELETE.'" name="delete[main_'.$file["fname"].']" src="'.ADMIN_DELETE_ICON_PATH.'" onclick=\'return jsconfirm("'.$tp->toJS(DOWLAN_173.' [ '.$file["fname"].' ]').'") \'/>
//TODO </td>';
$text .= '</tr>';
}
}
if ($foundSome) {
$text .= '</table></form>';
}
else
{
e107::getMessage()->addInfo(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->gen($query);
$foundSome = false;
if ($count) {
while($row = $sql->fetch()) {
if (!is_readable(e_DOWNLOAD.$row['download_url'])) {
if (!$foundSome)
{
// $text .= $rs->form_open("post", e_SELF."?".e_QUERY, "myform");
$text .= '<form method="post" action="'.e_SELF.'?'.e_QUERY.'" id="myform">
<table class="adminlist">';
$text .= '<tr>';
$text .= '<th>'.LAN_ID.'</th>';
$text .= '<th>'.DOWLAN_27.'</th>';
$text .= '<th>'.DOWLAN_11.'</th>';
$text .= '<th>'.DOWLAN_13.'</th>';
$text .= '<th>'.LAN_OPTIONS.'</th>';
$text .= '</tr>';
$foundSome = true;
}
$text .= '<tr>';
$text .= '<td>'.$row['download_id'].'</td>';
$text .= "<td><a href='".e_PLUGIN."download/download.php?view.".$row['download_id']."'>".$tp->toHTML($row['download_name']).'</a></td>';
$text .= '<td>'.$tp->toHTML($row['download_category_name']).'</td>';
$text .= '<td>'.$tp->toHTML($row['download_url']).'</td>';
$text .= '<td>
<a href="'.e_SELF.'?create.edit.'.$row["download_id"].'.maint.missing">'.ADMIN_EDIT_ICON.'</a>
<input type="image" title="'.LAN_DELETE.'" name="delete[main_'.$row["download_id"].']" src="'.ADMIN_DELETE_ICON_PATH.'" onclick=\'return jsconfirm('. $this->getJsConfirm($row["download_id"]) .') \'/>
</td>';
$text .= '</tr>';
}
}
}
if ($foundSome) {
$text .= '</table></form>';
}
else
{
e107::getMessage()->addInfo(DOWLAN_172);
// $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->gen($query);
$foundSome = false;
if ($count) {
while($row = $sql->fetch()) {
if (!$foundSome)
{
// $text .= $rs->form_open("post", e_SELF."?".e_QUERY, "myform");
$text .= '<form method="post" action="'.e_SELF.'?'.e_QUERY.'" id="myform">
<table class="table adminform">';
$text .= '<tr>';
$text .= '<th>'.LAN_ID.'</th>';
$text .= '<th>'.DOWLAN_27.'</th>';
$text .= '<th>'.DOWLAN_11.'</th>';
$text .= '<th>'.DOWLAN_13.'</th>';
$text .= '<th>'.LAN_OPTIONS.'</th>';
$text .= '</tr>';
$foundSome = true;
}
$text .= '<tr>';
$text .= '<td>'.$row['download_id'].'</td>';
$text .= "<td><a href='".e_PLUGIN."download/download.php?view.".$row['download_id']."'>".$tp->toHTML($row['download_name']).'</a></td>';
$text .= '<td>'.$tp->toHTML($row['download_category_name']).'</td>';
if (strlen($row['download_url']) > 0) {
$text .= '<td>'.$row['download_url'].'</td>';
} else {
$mirrorArray = download::makeMirrorArray($row['download_mirror'], TRUE);
$text .= '<td>';
foreach($mirrorArray as $mirror) {
$text .= $mirror['url'].'<br/>';
}
$text .= '</td>';
}
$text .= '<td>
<a href="'.e_SELF.'?create.edit.'.$row["download_id"].'.maint.inactive">'.ADMIN_EDIT_ICON.'</a>
<input type="image" title="'.LAN_DELETE.'" name="delete[main_'.$row["download_id"].']" src="'.ADMIN_DELETE_ICON_PATH.'" onclick=\'return jsconfirm('. $this->getJsConfirm($row["download_id"]) .') \'/>
</td>';
$text .= '</tr>';
}
}
if ($foundSome) {
$text .= '</table></form>';
}
else
{
e107::getMessage()->addInfo(DOWLAN_172);
// $text = DOWLAN_172;
}
break;
}
case 'nocategory':
{
$title = DOWLAN_178;
$text = "";
$query = "SELECT * FROM `#download` WHERE download_category=0";
$count = $sql->gen($query);
$foundSome = false;
if ($count) {
while($row = $sql->fetch()) {
if (!$foundSome) {
// $text .= $rs->form_open("post", e_SELF."?".e_QUERY, "myform");
$text .= '
<form method="post" action="'.e_SELF.'?'.e_QUERY.'" id="myform">
<table class="table adminlist">';
$text .= '<tr>';
$text .= '<th>'.LAN_ID.'</th>';
$text .= '<th>'.DOWLAN_27.'</th>';
$text .= '<th>'.DOWLAN_13.'</th>';
$text .= '<th>'.LAN_OPTIONS.'</th>';
$text .= '</tr>';
$foundSome = true;
}
$text .= '<tr>';
$text .= '<td>'.$row['download_id'].'</td>';
$text .= "<td><a href='".e_PLUGIN."download/download.php?view.".$row['download_id']."'>".$tp->toHTML($row['download_name']).'</a></td>';
if (strlen($row['download_url']) > 0) {
$text .= '<td>'.$tp->toHTML($row['download_url']).'</td>';
} else {
$mirrorArray = download::makeMirrorArray($row['download_mirror'], TRUE);
$text .= '<td>';
foreach($mirrorArray as $mirror) {
$text .= $mirror['url'].'<br/>';
}
$text .= '</td>';
}
$text .= '<td>
<a href="'.e_SELF.'?create.edit.'.$row["download_id"].'.maint.nocategory">'.ADMIN_EDIT_ICON.'</a>
<input type="image" title="'.LAN_DELETE.'" name="delete[main_'.$row["download_id"].']" src="'.ADMIN_DELETE_ICON_PATH.'" onclick=\'return jsconfirm('. $this->getJsConfirm($row["download_id"]) .') \'/>
</td>';
$text .= '</tr>';
}
}
if ($foundSome) {
$text .= '</table></form>';
}
else
{
e107::getMessage()->addInfo(DOWLAN_172);
// $text = DOWLAN_172;
}
break;
}
case 'filesize':
{
$title = DOWLAN_66;
$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->gen($query);
$foundSome = false;
if ($count) {
while($row = $sql->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 .= '<form method="post" action="'.e_SELF.'?'.e_QUERY.'" id="myform">
<table class="table adminlist">';
$text .= '<tr>';
$text .= '<th>'.LAN_ID.'</th>';
$text .= '<th>'.DOWLAN_27.'</th>';
$text .= '<th>'.DOWLAN_11.'</th>';
$text .= '<th>'.DOWLAN_13.'</th>';
$text .= '<th>'.DOWLAN_180.'</th>';
$text .= '<th>'.LAN_OPTIONS.'</th>';
$text .= '</tr>';
$foundSome = true;
}
$text .= '<tr>';
$text .= '<td>'.$row['download_id'].'</td>';
$text .= "<td><a href='".e_PLUGIN."download/download.php?view.".$row['download_id']."'>".$tp->toHTML($row['download_name']).'</a></td>';
$text .= '<td>'.$tp->toHTML($row['download_category_name']).'</td>';
$text .= '<td>'.$tp->toHTML($row['download_url']).'</td>';
$text .= '<td>'.$row['download_filesize'].' / ';
$text .= $filesize;
$text .= '</td>';
$text .= '<td>
<a href="'.e_SELF.'?create.edit.'.$row["download_id"].'.maint.filesize">'.ADMIN_EDIT_ICON.'</a>
<input type="image" title="'.LAN_DELETE.'" name="delete[main_'.$row["download_id"].']" src="'.ADMIN_DELETE_ICON_PATH.'" onclick=\'return jsconfirm('. $this->getJsConfirm($row["download_id"]) .') \'/>
</td>';
$text .= '</tr>';
}
}
}
}
if ($foundSome) {
$text .= '</table></form>';
}
else
{
e107::getMessage()->addInfo(DOWLAN_172);
// $text = DOWLAN_172;
}
break;
}
case 'log':
{
$text = "log - view manage download history log";
header('location: '.e_ADMIN.'admin_log.php?downlog');
exit();
break;
}
}
}
else {
$title = DOWLAN_193;
$text = DOWLAN_179;
$eform = new e_form();
$text = "
<form method='post' action='".e_SELF."?".e_QUERY."' id='core-db-main-form'>
<fieldset id='core-db-plugin-scan'>
<legend class='e-hideme'>".DOWLAN_10."</legend>
<table class='table adminform'>
<colgroup span='2'>
<col style='width: 40%'></col>
<col style='width: 60%'></col>
</colgroup>
<tbody>
<tr>
<td>".DOWLAN_166."</td>
<td>
".$eform->radio('dl_maint', 'duplicates').$eform->label(DOWLAN_185, 'dl_maint', 'duplicates')."
</td>
</tr>
<tr>
<td>".DOWLAN_167."</td>
<td>
".$eform->radio('dl_maint', 'orphans').$eform->label(DOWLAN_186, 'dl_maint', 'orphans')."
</td>
</tr>
<tr>
<td>".DOWLAN_168."</td>
<td>
".$eform->radio('dl_maint', 'missing').$eform->label(DOWLAN_187, 'dl_maint', 'missing')."
</td>
</tr>
<tr>
<td>".DOWLAN_169."</td>
<td>
".$eform->radio('dl_maint', 'inactive').$eform->label(DOWLAN_188, 'dl_maint', 'inactive')."
</td>
</tr>
<tr>
<td>".DOWLAN_178."</td>
<td>
".$eform->radio('dl_maint', 'nocategory').$eform->label(DOWLAN_189, 'dl_maint', 'nocategory')."
</td>
</tr>
<tr>
<td>".DOWLAN_66."</td>
<td>
".$eform->radio('dl_maint', 'filesize').$eform->label(DOWLAN_190, 'dl_maint', 'filesize')."
</td>
</tr>
<tr>
<td>".DOWLAN_171."</td>
<td>
".$eform->radio('dl_maint', 'log').$eform->label(DOWLAN_191, 'dl_maint', 'log')."
</td>
</tr>
</tbody>
</table>
<div class='buttons-bar center'>
".$eform->admin_button('trigger_db_execute', DOWLAN_192, 'execute')."
</div>
</fieldset>
</form>
";
}
echo $text;
// $ns->tablerender(DOWLAN_165.$title, $text);
}
function saveSettings()
{
global $admin_log,$pref;
$tp = e107::getParser();
$expected_params = array(
'download_php', 'download_view', 'download_sort', 'download_order',
'mirror_order', 'recent_download_days', 'agree_flag',
'agree_text', 'download_denied', 'download_reportbroken',
'download_security_mode', 'download_security_expression', 'download_security_link_expiry'
);
$temp = array();
foreach($expected_params as $expected_param)
{
$temp[$expected_param] = $_POST[$expected_param];
}
$temp['download_subsub'] = $_POST['download_subsub'] ? '1' : '0';
$temp['download_incinfo'] = $_POST['download_incinfo'] ? '1' : '0';
if ($_POST['download_security_mode'] !== 'nginx-secure_link_md5')
{
unset($temp['download_security_mode']);
unset($temp['download_security_expression']);
unset($temp['download_security_link_expiry']);
e107::getConfig('core')->removePref('download_security_mode');
e107::getConfig('core')->removePref('download_security_expression');
e107::getConfig('core')->removePref('download_security_link_expiry');
}
e107::getConfig('core')->setPref($temp)->save(false);
}
// Create Download FORM.
function create_download()
{
$action = $this->action;
$subAction = $this->subAction;
$id = $this->id;
$sql = e107::getDb();
$tp = e107::getParser();
$fl = e107::getFile();
$mes = e107::getMessage();
// print_a($this);
global $e107, $cal, $rs, $ns, $file_array, $image_array, $thumb_array;
require_once(e_PLUGIN.'download/download_shortcodes.php');
require_once(e_PLUGIN.'download/handlers/download_class.php');
require_once(e_HANDLER."form_handler.php");
$download = new download;
if ($file_array = $fl->get_files(e_DOWNLOAD, "","standard",5))
{
sort($file_array);
}
if ($public_array = $fl->get_files(e_UPLOAD))
{
foreach($public_array as $key=>$val)
{
$file_array[] = str_replace(e_UPLOAD,"",$val);
}
}
/* if ($sql->select("rbinary")) //TODO Remove me.
{
while ($row = $sql->fetch())
{
extract($row);
$file_array[] = "Binary ".$binary_id."/".$binary_name;
}
}
*/
if ($image_array = $fl->get_files(e_FILE.'downloadimages/', '\.gif$|\.jpg$|\.png$|\.GIF$|\.JPG$|\.PNG$','standard',2))
{
sort($image_array);
}
if ($thumb_array = $fl->get_files(e_FILE.'downloadthumbs/', '\.gif$|\.jpg$|\.png$|\.GIF$|\.JPG$|\.PNG$','standard',2))
{
sort($thumb_array);
}
$frm = new e_form();
$mirrorArray = array();
$download_status[0] = DOWLAN_122;
$download_status[1] = DOWLAN_123;
$download_status[2] = DOWLAN_124;
if (!$sql->select("download_category"))
{
//$ns->tablerender(ADLAN_24, "<div style='text-align:center'>".DOWLAN_5."</div>");
$mes->addInfo(DOWLAN_5);
return;
}
$download_active = 1;
if ($_GET['action'] == "edit" && !$_POST['submit'])
{
if ($sql->select("download", "*", "download_id=".intval($_GET['id'])))
{
$row = $sql->fetch();
extract($row);
$mirrorArray = $this->makeMirrorArray($row['download_mirror']);
}
}
if ($subAction == "dlm" && !$_POST['submit'])
{
require_once(e_PLUGIN.'download/download_shortcodes.php');
if ($sql->select("upload", "*", "upload_id=".$id))
{
$row = $sql->fetch();
$download_category = $row['upload_category'];
$download_name = $row['upload_name'].($row['upload_version'] ? " v" . $row['upload_version'] : "");
$download_url = $row['upload_file'];
$download_author_email = $row['upload_email'];
$download_author_website = $row['upload_website'];
$download_description = $row['upload_description'];
$download_image = $row['upload_ss'];
$download_filesize = $row['upload_filesize'];
$image_array[] = array("path" => "", "fname" => $row['upload_ss']);
$download_author = substr($row['upload_poster'], (strpos($row['upload_poster'], ".")+1));
}
}
$text = "
<ul class='nav nav-tabs'>
<li class='active'><a data-toggle='tab' data-bs-toggle='tab' href='#download-create'>".DOWLAN_175."</a></li>
<li><a data-toggle='tab' data-bs-toggle='tab' href='#download-edit-external'>".DOWLAN_176."</a></li>
<li><a data-toggle='tab' data-bs-toggle='tab' href='#download-edit-mirror'>".DOWLAN_128."</a></li>
</ul>
<form method='post' action='".e_SELF."?".e_QUERY."' id='myform'>
<div class='tab-content'>
<div class='tab-pane active' id='download-create'>
<table class='table adminform' style='margin:0'>
<tr>
<td>".DOWLAN_13."</td>
<td style='width:80%'>
<div>".DOWLAN_131."&nbsp;&nbsp;";
// $text .= "<select name='download_url' class='form-control'>
// <option value=''>&nbsp;</option>\n";
$counter = 0;
while (isset($file_array[$counter]))
{
$fpath = str_replace(e_DOWNLOAD,"",$file_array[$counter]['path']).$file_array[$counter]['fname'];
$selected = '';
if (stripos($fpath, $download_url) !== false)
{
$selected = " selected='selected'";
$found = 1;
}
// $text .= "<option value='".$fpath."' $selected>".$fpath."</option>\n";
$counter++;
}
if (preg_match("/http:|https:|ftp:/", $download_url))
{
$download_url_external = $download_url;
$download_url = '';
}
$etext = " - (".DOWLAN_68.")";
if (file_exists(e_UPLOAD.$download_url))
{
$etext = "";
}
//if (!$found && $download_url)
// {
// $text .= "<option value='".$download_url."' selected='selected'>".$download_url.$etext."</option>\n";
// }
// $text .= " </select>";
$text .= e107::getForm()->filepicker("download_url",$download_url,DOWLAN_131,"media=download_file&title=Choose a file");
$text .= "
</div>
</td>
</tr>
</table>
</div>
<div class='tab-pane' id='download-edit-external'>
<table class='table adminform' style='margin:0'>
<tr>
<td>".DOWLAN_149."</td>
<td style='width:80%;'>
<input class='form-control input-xxlarge' type='text' name='download_url_external' size='90' value='{$download_url_external}' maxlength='255'/>
</td>
</tr>
<tr>
<td>".DOWLAN_66."</td>
<td class='form-inline'>
<input class='form-control' type='text' name='download_filesize_external' size='8' value='{$download_filesize}' maxlength='10'/>
<select class='form-control' name='download_filesize_unit'>
<option value='B'{$b_sel}>".CORE_LAN_B."</option>
<option value='KB'{$kb_sel}>".CORE_LAN_KB."</option>
<option value='MB'>".CORE_LAN_MB."</option>
<option value='GB'>".CORE_LAN_GB."</option>
<option value='TB'>".CORE_LAN_TB."</option>
</select>
</td>
</tr>
</table>
</div>
<div class='tab-pane' id='download-edit-mirror'>
<table class='table adminlist'>
<tr>
<td style='width:20%'><span title='".DOWLAN_129."' style='cursor:help'>".DOWLAN_128."</span></td>
<td style='width:80%'>";
// See if any mirrors to display
if (!$sql -> select("download_mirror"))
{ // No mirrors defined here
$text .= DOWLAN_144."</td></tr>";
}
else
{
$text .= DOWLAN_132."<div id='mirrorsection'>";
$mirrorList = $sql -> db_getList(); // Get the list of possible mirrors
$m_count = (count($mirrorArray) ? count($mirrorArray) : 1); // Count of mirrors actually in use (or count of 1 if none defined yet)
for($count = 1; $count <= $m_count; $count++)
{
$opt = ($count==1) ? "id='mirror'" : "";
$text .="
<div {$opt}>
<select name='download_mirror_name[]' class='form-control'>
<option value=''>&nbsp;</option>";
foreach ($mirrorList as $mirror)
{
extract($mirror);
$text .= "<option value='{$mirror_id}'".($mirror_id == $mirrorArray[($count-1)]['id'] ? " selected='selected'" : "").">{$mirror_name}</option>\n";
}
$text .= "</select>
<input class='form-control' type='text' name='download_mirror[]' style='width: 60%;' value=\"".$mirrorArray[($count-1)]['url']."\" maxlength='200'/>
<input class='form-control' type='text' name='download_mirror_size[]' style='width: 15%;' value=\"".$mirrorArray[($count-1)]['filesize']."\" maxlength='10'/>";
if (DOWNLOAD_DEBUG)
{
if ($id)
{
$text .= '('.$mirrorArray[($count-1)]['requests'].')';
}
else
{
$text .= "<input class='form-control' type='text' name='download_mirror_requests[]' style='width: 10%;' value=\"".$mirrorArray[($count-1)]['requests']."\" maxlength='10'/>";
}
}
$text .= " </div>";
}
$text .=" </div>
<input class='btn btn-default btn-secondary button' type='button' name='addoption' value='".DOWLAN_130."' onclick=\"duplicateHTML('mirror','mirrorsection')\"/>
</td>
</tr>
<tr>
<td style='width:20%' ><span style='cursor:help' title='".DOWLAN_154."'>".DOWLAN_155."</span></td>
<td style='width:80%'>
<input type='radio' name='download_mirror_type' value='1'".($download_mirror_type ? " checked='checked'" : "")."/> ".DOWLAN_156."<br/>
<input type='radio' name='download_mirror_type' value='0'".(!$download_mirror_type ? " checked='checked'" : "")."/> ".DOWLAN_157."
</td>
</tr>";
} // End of mirror-related stuff
$download_author = ($subAction !== "edit" && empty($download_author)) ? USERNAME : $download_author;//TODO what if editing an no author specified
$download_author_email = $subAction != "edit" && $download_author_email == "" ? USEREMAIL : $download_author_email;
$text .= "
</table>
</div>
</div>
<fieldset id='download-edit-therest'>
<table class='table adminform' >
<tr>
<td style='width:20%'>".DOWLAN_11."</td>
<td style='width:80%'>";
$text .= $download->getCategorySelectList($download_category);
// $text .= download::getCategorySelectList($download_category);
$text .= " </td>
</tr>
<tr>
<td >".DOWLAN_12."</td>
<td style='width:80%'>
<input class='form-control input-xxlarge' type='text' id='download-name' name='download_name' size='60' value=\"".$tp->toForm($download_name)."\" maxlength='200'/>
</td>
</tr>
<tr>
<td style='width:20%'>".DOWLAN_15."</td>
<td style='width:80%'>
<input class='form-control' type='text' name='download_author' size='60' value='$download_author' maxlength='100'/>
</td>
</tr>
<tr>
<td style='width:20%'>".DOWLAN_16."</td>
<td style='width:80%'>
<input class='form-control' type='text' name='download_author_email' size='60' value='$download_author_email' maxlength='100'/>
</td>
</tr>
<tr>
<td style='width:20%'>".DOWLAN_17."</td>
<td style='width:80%'>
<input class='form-control' type='text' name='download_author_website' size='60' value='$download_author_website' maxlength='100'/>
</td>
</tr>
<tr>
<td style='width:20%'>".DOWLAN_18."</td>
<td style='width:80%'>
";
$text .= $frm->bbarea('download_description',$download_description);
$text .= " </td>
</tr>
<tr>
<td style='width:20%'>".DOWLAN_19."</td>
<td style='width:80%'>";
/*
$text = "<select name='download_image' class='form-control'>
<option value=''>&nbsp;</option>";
foreach($image_array as $img)
{
$fpath = str_replace(e_FILE."downloadimages/","",$img['path'].$img['fname']);
$sel = ($download_image == $fpath) ? " selected='selected'" : "";
$text .= "<option value='".$fpath."' $sel>".$fpath."</option>\n";
}
$text .= " </select>";
*/
$text .= $frm->imagepicker('download_image', $download_image,'',array('media'=>'download_image', 'legacyPath'=>'{e_FILE}downloadimages'));
if ($subAction == "dlm" && $download_image)
{
$text .= "
<input type='hidden' name='move_image' value='1'/>\n";
}
$text .= " </td>
</tr>";
if(is_dir(e_FILE."downloadthumbs")) // Legacy
{
$text .= "
<tr>
<td style='width:20%'>".DOWLAN_20."</td>
<td style='width:80%'>";
/*
$text .= "
<select name='download_thumb' class='form-control'>
<option value=''>&nbsp;</option>";
foreach($thumb_array as $thm){
$tpath = str_replace(e_FILE."downloadthumbs/","",$thm['path'].$thm['fname']);
$sel = ($download_thumb == $tpath) ? " selected='selected'" : "";
$text .= "<option value='".$tpath."' $sel>".$tpath."</option>\n";
}
$text .= " </select>";
*/
$text .= $frm->imagepicker('download_thumb', $download_thumb,'',array('media'=>'download_thumb', 'legacyPath'=>'{e_FILE}downloadthumbs'));
$text .= "
</td>
</tr>";
}
$text .= "
<tr>
<td style='width:20%'>".LAN_DATESTAMP."</td>
<td style='width:80%'>";
if (!$download_datestamp){
$download_datestamp = time();
}
$text .= $frm->datepicker('download_datestamp', $download_datestamp, 'type=datetime');
// $update_checked = ($_POST['update_datestamp']) ? "checked='checked'" : "";
// $text .= " &nbsp;&nbsp;<span><input type='checkbox' value='1' name='update_datestamp' $update_checked/>".DOWLAN_148."</span>";
$text .= "
</td>
</tr>
<tr>
<td >".LAN_SEFURL."</td>
<td class='input-group' style='width:80%'>
".$frm->renderElement('download_sef',$download_sef, array('type'=>'text', 'writeParms'=>array('sef'=>'download_name','size'=>'xxlarge')))."
</td>
</tr>
<tr>
<td >".LAN_KEYWORDS."</td>
<td style='width:80%'>".$frm->tags('download_keywords',$download_keywords)."
</td>
</tr>
<tr>
<td style='width:20%'>".DOWLAN_21."</td>
<td style='width:80%'>
<select name='download_active' class='form-control input-xxlarge'>";
foreach($download_status as $key => $val){
$sel = ($download_active == $key) ? " selected = 'selected' " : "";
$text .= "<option value='{$key}' {$sel}>{$val}</option>\n";
}
$text .= " </select>
</td>
</tr>
<tr>
<td style='width:20%'>".DOWLAN_102."</td>
<td style='width:80%'>";
if ($download_comment == "0") {
$text .= LAN_YES.": <input type='radio' name='download_comment' value='1'/>
".LAN_NO.": <input type='radio' name='download_comment' value='0' checked='checked'/>";
} else {
$text .= LAN_YES.": <input type='radio' name='download_comment' value='1' checked='checked'/>
".LAN_NO.": <input type='radio' name='download_comment' value='0'/>";
}
$text .= " </td>
</tr>
<tr>
<td style='width:20%'>".DOWLAN_145."</td>
<td style='width:80%'>".r_userclass('download_visible', $download_visible, 'off', 'public, nobody, member, admin, classes, language')."</td>
</tr>
<tr>
<td style='width:20%'>".DOWLAN_106."</td>
<td style='width:80%'>".r_userclass('download_class', $download_class, 'off', 'public, nobody, member, admin, classes, language')."</td>
</tr>";
if ($subAction == "dlm") {
$text .= "
<tr>
<td style='width:30%'>".DOWLAN_153."</td>
<td style='width:70%'>
<select name='move_file' class='form-control'>
<option value=''>".LAN_NO."</option>";
$dl_dirlist = $fl->get_dirs(e_DOWNLOAD);
if ($dl_dirlist){
sort($dl_dirlist);
$text .= "<option value='".e_DOWNLOAD."'>/</option>\n";
foreach($dl_dirlist as $dirs)
{
$text .= "<option value='". e_DOWNLOAD.$dirs."/'>".$dirs."/</option>\n";
}
}
else
{
$text .= "<option value='".e_DOWNLOAD."'>".LAN_YES."</option>\n";
}
$text .= " </select>
</td>
</tr>
<tr>
<td style='width:30%'>".DOWLAN_103."</td>
<td style='width:70%'>
<input type='checkbox' name='remove_upload' value='1'/>
<input type='hidden' name='remove_id' value='$id'/>
</td>
</tr>";
}
//triggerHook
$data = array('method'=>'form', 'table'=>'download', 'id'=>$id, 'plugin'=>'download', 'function'=>'create_download');
$text .= $frm->renderHooks($data);
$text .= "
</table>
<div class='buttonsbar center'>";
if ($id && $subAction == "edit")
{
$text .= "<input class='btn btn-success' type='submit' name='submit_download' value='".DOWLAN_24."'/> ";
} else
{
$text .= "<input class='btn btn-success' type='submit' name='submit_download' value='".DOWLAN_25."'/>";
}
$text .= "
</div>
</fieldset>
</form>
";
// $ns->tablerender(ADLAN_24, $text);
echo $text;
}
function calc_filesize($size, $unit)
{
switch($unit)
{
case 'B' :
return $size;
break;
case 'KB' :
return $size * 1024;
break;
case 'MB' :
return $size * 1024 * 1024;
break;
case 'GB' :
return $size * 1024 * 1024 * 1024;
break;
case 'TB' :
return $size * 1024 * 1024 * 1024 * 1024;
break;
}
}
// Actually save a new or edited download to the DB
function submit_download()
{
global $e107, $tp, $sql, $DOWNLOADS_DIRECTORY, $e_event;
$action = $this->action;
$subAction = $this->subAction;
$id = $this->id;
$sql = e107::getDb();
$tp = e107::getParser();
$fl = e107::getFile();
$mes = e107::getMessage();
$dlInfo = array();
$dlMirrors = array();
if ($subAction == 'edit')
{
if ($_POST['download_url_external'] == '')
{
$_POST['download_filesize_external'] = FALSE;
}
}
if (!empty($_POST['download_url_external']) && empty($_POST['download_url']) && !empty($_POST['download_filesize_unit']))
{
$dlInfo['download_url'] = $tp->toDB($_POST['download_url_external']);
// $filesize = intval($_POST['download_filesize_external']);
$filesize = $this->calc_filesize($_POST['download_filesize_external'], $_POST['download_filesize_unit']);
}
else
{
$dlInfo['download_url'] = $tp->toDB($_POST['download_url']);
if ($_POST['download_filesize_external'])
{
$filesize = intval($_POST['download_filesize_external']);
}
else
{
if (strpos($DOWNLOADS_DIRECTORY, "/") === 0 || strpos($DOWNLOADS_DIRECTORY, ":") >= 1)
{
$filesize = filesize($DOWNLOADS_DIRECTORY.$dlInfo['download_url']);
}
elseif($dlInfo['download_url'][0] == '{')
{
$filesize = filesize($tp->replaceConstants($dlInfo['download_url']));
}
else
{
$filesize = filesize(e_BASE.$DOWNLOADS_DIRECTORY.$dlInfo['download_url']);
}
}
}
if (!$filesize)
{
if ($sql->select("upload", "upload_filesize", "upload_file='{$dlInfo['download_url']}'"))
{
$row = $sql->fetch();
$filesize = $row['upload_filesize'];
}
}
$dlInfo['download_filesize'] = $filesize;
// ---- Move Images and Files ------------
if ($_POST['move_image'])
{
if ($_POST['download_thumb'])
{
$oldname = e_UPLOAD.$_POST['download_thumb'];
$newname = e_FILE."downloadthumbs/".$_POST['download_thumb'];
if (!$this -> move_file($oldname,$newname))
{
return;
}
}
if ($_POST['download_image'])
{
$oldname = e_UPLOAD.$_POST['download_image'];
$newname = e_FILE."downloadimages/".$_POST['download_image'];
if (!$this -> move_file($oldname,$newname))
{
return;
}
}
}
if ($_POST['move_file'] && $_POST['download_url'])
{
$oldname = e_UPLOAD.$_POST['download_url'];
$newname = $_POST['move_file'].$_POST['download_url'];
if (!$this -> move_file($oldname,$newname))
{
return;
}
$dlInfo['download_url'] = str_replace(e_DOWNLOAD,"",$newname);
}
// ------------------------------------------
$dlInfo['download_description'] = $tp->toDB($_POST['download_description']);
$dlInfo['download_name'] = $tp->toDB($_POST['download_name']);
$dlInfo['download_sef'] = vartrue($_POST['download_sef']) ? eHelper::secureSef($_POST['download_sef']) : eHelper::title2sef($_POST['download_name']);
$dlInfo['download_keywords'] = $tp->toDB($_POST['download_keywords']);
$dlInfo['download_author'] = $tp->toDB($_POST['download_author']);
$dlInfo['download_author_email'] = $tp->toDB($_POST['download_author_email']);
$dlInfo['download_author_website'] = $tp->toDB($_POST['download_author_website']);
$dlInfo['download_category'] = intval($_POST['download_category']);
$dlInfo['download_active'] = intval($_POST['download_active']);
$dlInfo['download_thumb'] = $tp->toDB($_POST['download_thumb']);
$dlInfo['download_image'] = $tp->toDB($_POST['download_image']);
$dlInfo['download_comment'] = $tp->toDB($_POST['download_comment']);
$dlInfo['download_class'] = $tp->toDB($_POST['download_class']);
$dlInfo['download_visible'] = $tp->toDB($_POST['download_visible']);
$dlInfo['download_datestamp'] = intval($_POST['download_datestamp']);
if($_POST['update_datestamp'])
{
$dlInfo['download_datestamp'] = time();
}
$mirrorStr = "";
$mirrorFlag = FALSE;
// See if any mirrors defined
// Need to check all the possible mirror names - might have deleted the first one if we're in edit mode
if(is_array($_POST['download_mirror_name']))
{
foreach ($_POST['download_mirror_name'] as $mn)
{
if ($mn)
{
$mirrorFlag = TRUE;
break;
}
}
}
if ($mirrorFlag)
{
$mirrors = count($_POST['download_mirror_name']);
$mirrorArray = array();
$newMirrorArray = array();
if ($id && $sql->select('download','download_mirror', 'download_id = '.$id)) // Get existing download stats
{
if ($row = $sql->fetch())
{
$mirrorArray = $this->makeMirrorArray($row['download_mirror'], TRUE);
}
}
for($a=0; $a<$mirrors; $a++)
{
$mid = trim($_POST['download_mirror_name'][$a]);
$murl = trim($_POST['download_mirror'][$a]);
$msize = trim($_POST['download_mirror_size'][$a]);
if ($mid && $murl)
{
$newMirrorArray[$mid] = array('id' => $mid, 'url' => $murl, 'requests' => 0, 'filesize' => $msize);
if (DOWNLOAD_DEBUG && !$id)
{
$newMirrorArray[$mid]['requests'] = intval($_POST['download_mirror_requests'][$a]);
}
}
}
// Now copy across any existing usage figures
foreach ($newMirrorArray as $k => $m)
{
if (isset($mirrorArray[$k]))
{
$newMirrorArray[$k]['requests'] = $mirrorArray[$k]['requests'];
}
}
$mirrorStr = $this->compressMirrorArray($newMirrorArray);
}
$dlMirrors['download_mirror']=$mirrorStr;
$dlMirrors['download_mirror_type']=intval($_POST['download_mirror_type']);
if ($id) // Its an edit
{
// Process triggers before calling admin_update so trigger messages can be shown
$data = array('method'=>'update', 'table'=>'download', 'id'=>$id, 'plugin'=>'download', 'function'=>'update_download');
$hooks = $e107->e_event->triggerHook($data);
$mes->add($hooks, E_MESSAGE_SUCCESS);
$updateArray = array_merge($dlInfo,$dlMirrors);
$updateArray['WHERE'] = 'download_id='.intval($id);
$mes->addAuto($sql->update('download',$updateArray), 'update', DOWLAN_2." (<a href='".e_PLUGIN."download/download.php?view.".$id."'>".$_POST['download_name']."</a>)");
$dlInfo['download_id'] = $id;
$this->downloadLog('DOWNL_06',$dlInfo,$dlMirrors);
$dlInfo['download_datestamp'] = time(); // $time; // This is what 0.7 did, regardless of settings
unset($dlInfo['download_class']); // Also replicating 0.7
$e_event->trigger('dlupdate', $dlInfo); // @deprecated
e107::getEvent()->trigger('admin_download_update',$dlInfo);
}
else // Its a new entry.
{
if ($download_id = $sql->insert('download',array_merge($dlInfo,$dlMirrors)))
{
// Process triggers before calling admin_update so trigger messages can be shown
$data = array('method'=>'create', 'table'=>'download', 'id'=>$download_id, 'plugin'=>'download', 'function'=>'create_download');
$hooks = $e107->e_event->triggerHook($data);
$mes->add($hooks, E_MESSAGE_SUCCESS);
$mes->addAuto($download_id, 'insert', DOWLAN_1." (<a href='".e_PLUGIN."download/download.php?view.".$download_id."'>".$_POST['download_name']."</a>)");
$dlInfo['download_id'] = $download_id;
$this->downloadLog('DOWNL_05',$dlInfo,$dlMirrors);
$dlInfo['download_datestamp'] = time(); // $time; // This is what 0.7 did, regardless of settings
unset($dlInfo['download_class']); // Also replicating 0.7
$e_event->trigger("dlpost", $dlInfo); // @deprecated
e107::getEvent()->trigger('admin_download_create',$dlInfo);
if ($_POST['remove_upload'])
{
$sql->update("upload", "upload_active='1' WHERE upload_id='".$_POST['remove_id']."'");
$mess = "<br/>".$_POST['download_name']." ".DOWLAN_104;
$mess .= "<br/><br/><a href='".e_ADMIN."upload.php'>".DOWLAN_105."</a>";
$this->show_message($mess);
}
}
}
}
// Turn the array into a string which can be stored in the DB
function compressMirrorArray($source)
{
if (!is_array($source) || !count($source)) return '';
$inter = array();
foreach ($source as $s)
{
$inter[] = $s['id'].','.$s['url'].','.$s['requests'].','.$s['filesize'];
}
return implode(chr(1),$inter);
}
function show_existing_mirrors()
{
$sql = e107::getDb();
$tp = e107::getParser();
$mes = e107::getMessage();
$fl = e107::getFile();
$action = $this->action;
$subAction = $this->subAction;
$id = $this->id;
global $delete, $del_id, $admin_log;
require_once(e_HANDLER."form_handler.php");
$frm = new e_form();
if ($delete == "mirror")
{
$mes->addAuto($sql ->delete("download_mirror", "mirror_id=".$del_id), delete, DOWLAN_135);
e107::getLog()->add('DOWNL_14','ID: '.$del_id,E_LOG_INFORMATIVE,'');
}
if (!$sql -> select("download_mirror"))
{
$mes->addInfo(DOWLAN_144);
// $text = "<div style='text-align:center;'>".DOWLAN_144."</div>"; // No mirrors defined yet
}
else
{
$text = "<div>
<form method='post' action='".e_SELF."?".e_QUERY."'>
<table style='".ADMIN_WIDTH."' class='adminlist'>
<tr>
<td style='width: 10%; text-align: center;' class='forumheader'>ID</td>
<td style='width: 30%;' class='forumheader'>".DOWLAN_12."</td>
<td style='width: 30%;' class='forumheader'>".DOWLAN_136."</td>
<td style='width: 30%; text-align: center;' class='forumheader'>".LAN_OPTIONS."</td>
</tr>
";
$mirrorList = $sql -> db_getList();
foreach($mirrorList as $mirror)
{
extract($mirror);
$text .= "
<tr>
<td style='width: 10%; text-align: center;'>$mirror_id</td>
<td style='width: 30%;'>".$tp -> toHTML($mirror_name)."</td>
<td style='width: 30%;'>".($mirror_image ? "<img src='".e_FILE."downloadimages/".$mirror_image."' alt=''/>" : LAN_NONE)."</td>
<td style='width: 30%; text-align: center;'>
<a href='".e_SELF."?mirror.edit.{$mirror_id}'>".ADMIN_EDIT_ICON."</a>
<input type='image' title='".LAN_DELETE."' name='delete[mirror_{$mirror_id}]' src='".ADMIN_DELETE_ICON_PATH."' onclick=\"return jsconfirm('".DOWLAN_137." [ID: $mirror_id ]')\"/>
</td>
</tr>
";
}
$text .= "</table></form></div>";
}
// $ns -> tablerender(DOWLAN_138, $text);
echo $text;
$imagelist = $fl->get_files(e_FILE.'downloadimages/');
if ($subAction == "edit" && !defined("SUBMITTED"))
{
$sql -> select("download_mirror", "*", "mirror_id='".intval($id)."' ");
$mirror = $sql -> fetch();
extract($mirror);
$edit = TRUE;
}
else
{
unset($mirror_name, $mirror_url, $mirror_image, $mirror_location, $mirror_description);
$edit = FALSE;
}
$text = "<div>
<form method='post' action='".e_SELF."?".e_QUERY."' id='dataform'>\n
<table class='table adminform'>
<tr>
<td style='width: 30%;'>".DOWLAN_12."</td>
<td style='width: 70%;'>
<input class='form-control input-xxlarge' type='text' name='mirror_name' size='60' value='{$mirror_name}' maxlength='200'/>
</td>
</tr>
<tr>
<td style='width: 30%;'>".DOWLAN_139."</td>
<td style='width: 70%;'>
<input class='form-control input-xxlarge' type='text' name='mirror_url' size='70' value='{$mirror_url}' maxlength='255'/>
</td>
</tr>
<tr>
<td style='width: 30%;'>".DOWLAN_136."</td>
<td style='width: 70%;'>
<input class='form-control input-xxlarge' type='text' id='mirror_image' name='mirror_image' size='60' value='{$mirror_image}' maxlength='200'/>
<br /><input class='btn btn-default btn-secondary button' type ='button' style='cursor:pointer' size='30' value='".DOWLAN_42."' onclick='expandit(this)'/>
<div id='imagefile' style='display:none;{head}'>";
$text .= DOWLAN_140."<br/>";
foreach($imagelist as $file)
{
$text .= "<a href=\"javascript:insertext('".$file['fname']."','mirror_image','imagefile')\"><img src='".e_FILE."downloadimages/".$file['fname']."' alt=''/></a> ";
}
$text .= "</div>
</td>
</tr>
<tr>
<td style='width: 30%;'>".DOWLAN_141."</td>
<td style='width: 70%;'>
<input class='form-control' type='text' name='mirror_location' size='60' value='$mirror_location' maxlength='200'/>
</td>
</tr>
<tr>
<td style='width: 30%;'>".DOWLAN_18."</td>
<td style='width: 70%;'>";
$text .= $frm->bbarea('mirror_description',$mirror_description);
$text .= "</td>
</tr>
<tr>
<td colspan='2' class='forumheader' style='text-align:center;'>
".($edit ? "<input class='btn btn-default btn-secondary button' type='submit' name='submit_mirror' value='".DOWLAN_142."'/><input type='hidden' name='id' value='{$mirror_id}'/>" : "<input class='btn button' type='submit' name='submit_mirror' value='".DOWLAN_143."'/>")."
</td>
</tr>
</table>
</form>
</div>";
$caption = ($edit ? DOWLAN_142 : DOWLAN_143);
echo $text;
// $ns -> tablerender($caption, $text);
}
function submit_mirror()
{
global $admin_log;
$tp = e107::getParser();
$sql = e107::getDb();
$mes = e107::getMessage();
define("SUBMITTED", TRUE);
if (isset($_POST['mirror_name']) && isset($_POST['mirror_url']))
{
$name = $tp -> toDB($_POST['mirror_name']);
$url = $tp -> toDB($_POST['mirror_url']);
$location = $tp -> toDB($_POST['mirror_location']);
$description = $tp -> toDB($_POST['mirror_description']);
$logString = $name.'[!br!]'.$url.'[!br!]'.$location.'[!br!]'.$description;
if (isset($_POST['id']))
{
$mes->addAuto($sql ->update("download_mirror", "mirror_name='{$name}', mirror_url='{$url}', mirror_image='".$tp->toDB($_POST['mirror_image'])."', mirror_location='{$location}', mirror_description='{$description}' WHERE mirror_id=".intval($_POST['id'])), 'update', DOWLAN_133);
e107::getLog()->add('DOWNL_13','ID: '.intval($_POST['id']).'[!br!]'.$logString,E_LOG_INFORMATIVE,'');
}
else
{
$mes->addAuto($sql ->insert("download_mirror", "0, '{$name}', '{$url}', '".$tp->toDB($_POST['mirror_image'])."', '{$location}', '{$description}', 0"), 'insert', DOWLAN_134);
e107::getLog()->add('DOWNL_12',$logString,E_LOG_INFORMATIVE,'');
}
}
}
private function supported_secure_link_variables_html()
{
require_once(__DIR__."/../handlers/NginxSecureLinkMd5Decorator.php");
$supported_secure_link_variables_html = "<ul>";
foreach(NginxSecureLinkMd5Decorator::supported_variables() as $variable)
{
$supported_secure_link_variables_html .= "<li><code>$variable</code></li>";
}
$supported_secure_link_variables_html .= "</ul>";
return $supported_secure_link_variables_html;
}
private function mirror_order_options_html($pref)
{
return ($pref['mirror_order'] == "0" ? "<option value='0' selected='selected'>".DOWLAN_161."</option>" : "<option value='0'>".DOWLAN_161."</option>").
($pref['mirror_order'] == "1" ? "<option value='1' selected='selected'>".LAN_ID."</option>" : "<option value='1'>".LAN_ID."</option>").
($pref['mirror_order'] == "2" ? "<option value='2' selected='selected'>".DOWLAN_12."</option>" : "<option value='2'>".DOWLAN_12."</option>");
}
function show_download_options()
{
global $pref, $ns;
require_once(e_HANDLER."form_handler.php");
$frm = new e_form(true); //enable inner tabindex counter
$agree_flag = $pref['agree_flag'];
$agree_text = $pref['agree_text'];
$c = $pref['download_php'] ? " checked = 'checked' " : "";
$sacc = (varset($pref['download_incinfo'],0) == '1') ? " checked = 'checked' " : "";
$order_options = array(
"download_id" => "Id No.",
"download_datestamp" => LAN_DATE,
"download_requested" => LAN_PLUGIN_DOWNLOAD_NAME,
"download_name" => DOWLAN_59,
"download_author" => DOWLAN_15
);
$sort_options = array(
"ASC" => DOWLAN_62,
"DESC" => DOWLAN_63
);
$text = "
<ul class='nav nav-tabs'>
<li class='active'><a data-toggle='tab' data-bs-toggle='tab' href='#core-download-download1'>".LAN_DL_DOWNLOAD_OPT_GENERAL."</a></li>
<li><a data-toggle='tab' data-bs-toggle='tab' href='#core-download-download2'>".LAN_DL_DOWNLOAD_OPT_BROKEN."</a></li>
<li><a data-toggle='tab' data-bs-toggle='tab' href='#core-download-download3'>".LAN_DL_DOWNLOAD_OPT_AGREE."</a></li>
<li><a data-toggle='tab' data-bs-toggle='tab' href='#core-download-download4'>".LAN_DL_DOWNLOAD_OPT_SECURITY."</a></li>
<li><a data-toggle='tab' data-bs-toggle='tab' href='#core-download-download5'>".LAN_DL_UPLOAD."</a></li>
</ul>
<form method='post' action='".e_SELF."?".e_QUERY."'>\n
<div class='tab-content'>
<div class='tab-pane active' id='core-download-download1'>
<div>
<table class='table adminform'>
<colgroup>
<col style='width:30%'/>
<col style='width:70%'/>
</colgroup>
<tr>
<td>".LAN_DL_USE_PHP."</td>
<td>"
.$frm->checkbox('download_php', '1', $pref['download_php'])
.$frm->label(LAN_DL_USE_PHP_INFO, 'download_php', '1')
."</td>
</tr>
<tr>
<td>".LAN_DL_SUBSUB_CAT."</td>
<td>"
.$frm->checkbox('download_subsub', '1', $pref['download_subsub'])
.$frm->label(LAN_DL_SUBSUB_CAT_INFO, 'download_subsub', '1')
."</td>
</tr>
<tr>
<td>".LAN_DL_SUBSUB_COUNT."</td>
<td>"
.$frm->checkbox('download_incinfo', '1', $pref['download_incinfo'])
.$frm->label(LAN_DL_SUBSUB_COUNT_INFO, 'download_incinfo', '1')
."</td>
</tr>
<tr>
<td>".DOWLAN_55."</td>
<td>".$frm->text('download_view', $pref['download_view'], '4', array('size'=>'4'))."</td>
</tr>
<tr>
<td>".DOWLAN_56."</td>
<td>".$frm->select('download_order', $order_options, $pref['download_order'])."</td>
</tr>
<tr>
<td>".LAN_ORDER."</td>
<td>".$frm->select('download_sort', $sort_options, $pref['download_sort'])."</td>
</tr>
<tr>
<td>".DOWLAN_160."</td>
<td>
<select name='mirror_order' class='form-control'>".$this->mirror_order_options_html($pref)."
</select>
</td>
</tr>
<tr>
<td>".DOWLAN_164."</td>
<td><input type='text' name='recent_download_days' class='form-control' value='".$pref['recent_download_days']."' size='3' maxlength='3'/>
</td>
</tr>
</table>
</div>
</div>
<div class='tab-pane' id='core-download-download2'>
<div>
<table class='table adminform'>
<colgroup>
<col style='width:30%'/>
<col style='width:70%'/>
</colgroup>
<tr>
<td>".DOWLAN_151."</td>
<td>". r_userclass("download_reportbroken", $pref['download_reportbroken'])."</td>
</tr>";
//moved to e_notify
/*
<tr>
<td>".DOWLAN_150."</td>
<td>". ($pref['download_email'] ? "<input type='checkbox' name='download_email' value='1' checked='checked'/>" : "<input type='checkbox' name='download_email' value='1'/>")."</td>
</tr>*/
$text .= "
</table>
</div>
</div>
<div class='tab-pane' id='core-download-download3'>
<div>
<table class='table adminform'>
<colgroup>
<col style='width:30%'/>
<col style='width:70%'/>
</colgroup>
<tr>
<td>".DOWLAN_100."</td>
<td>". ($agree_flag ? "<input type='checkbox' name='agree_flag' value='1' checked='checked'/>" : "<input type='checkbox' name='agree_flag' value='1'/>")."</td>
</tr>
<tr>
<td>".DOWLAN_101."</td>
<td>".$frm->bbarea('agree_text',$agree_text)."</td>
</tr>
<tr>
<td>".DOWLAN_146."</td>
<td>".$frm->bbarea('download_denied',$pref['download_denied'])."</td>
</tr>
</table>
</div>
</div>
<div class='tab-pane' id='core-download-download4'>
<div>
<p style='padding: 8px'>
".LAN_DL_SECURITY_DESCRIPTION."
</p>
<table class='table adminform'>
<colgroup>
<col style='width:30%'/>
<col style='width:70%'/>
</colgroup>
<tr>
<td>".LAN_DL_SECURITY_MODE."</td>
<td>".$frm->select('download_security_mode', $this->security_options, $pref['download_security_mode'])."</td>
</tr>
<tbody id='nginx-secure_link_md5' ".($pref['download_security_mode'] === 'nginx-secure_link_md5' ? "" : "style='display:none'").">
<tr>
<td>".LAN_DL_SECURITY_NGINX_SECURELINKMD5_EXPRESSION."</td>
<td>
".$frm->text('download_security_expression', $pref['download_security_expression'], 1024)."
<div class='field-help'>".LAN_DL_SECURITY_NGINX_SECURELINKMD5_EXPRESSION_HELP."</div>
<small><a href='#' onclick='event.preventDefault();$(\"#supported-nginx-variables\").toggle();this.blur()'>
".LAN_DL_SECURITY_NGINX_SUPPORTED_VARIABLES_TOGGLE."
</a></small>
<div id='supported-nginx-variables' style='display:none'>
".$this->supported_secure_link_variables_html()."
</div>
</td>
</tr>
<tr>
<td>".LAN_DL_SECURITY_LINK_EXPIRY."</td>
<td>
".$frm->text('download_security_link_expiry', $pref['download_security_link_expiry'], 16, array('pattern' => '\d+'))."
<div class='field-help'>".LAN_DL_SECURITY_LINK_EXPIRY_HELP."</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class='tab-pane' id='core-download-download5'>
<div>
<table class='table adminform'>
<colgroup>
<col style='width:30%'/>
<col style='width:70%'/>
</colgroup>
<tr>
<td>".defset('DOWLAN_XXX')."</td>
<td>//TODO</td>
</tr>
</table>
</div>
</div>
<div class='buttons-bar center'>
<input class='btn btn-default btn-secondary button' type='submit' name='updatedownlaodoptions' value='".DOWLAN_64."'/>
</div>
</div>
</form>
";
e107::js('footer-inline', "
$('#download-security-mode').on('change', function() {
var mode = $(this).val();
if (mode == 'nginx-secure_link_md5') {
$('#nginx-secure_link_md5').show('slow');
return;
}
$('#nginx-secure_link_md5').hide('slow');
});
");
echo $text;
}
function downloadLog($aText, &$dlInfo, &$mirrorInfo=NULL)
{
global $admin_log;
$logString = DOWLAN_9;
foreach ($dlInfo as $k => $v)
{
$logString .= '[!br!]'.$k.'=>'.$v;
}
if ($mirrorInfo != NULL)
{
foreach ($mirrorInfo as $k => $v)
{
$logString .= '[!br!]'.$k.'=>'.$v;
}
}
e107::getLog()->add($aText,$logString,E_LOG_INFORMATIVE,'');
}
function move_file($oldname,$newname)
{
$mes = e107::getMessage();
if (file_exists($newname))
{
return TRUE;
}
if (!file_exists($oldname) || is_dir($oldname))
{
$mes->addError(DOWLAN_68 . " : ".$oldname);
return FALSE;
}
$directory = dirname($newname);
if (is_writable($directory))
{
if (!rename($oldname,$newname))
{
$mes->addError(DOWLAN_152." ".$oldname ." -> ".$newname);
return FALSE;
}
else
{
return TRUE;
}
}
else
{
$mes->addError($directory ." ".LAN_NOTWRITABLE);
return FALSE;
}
}
// Given the string which is stored in the DB, turns it into an array of mirror entries
// If $byID is true, the array index is the mirror ID. Otherwise its a simple array
function makeMirrorArray($source, $byID = FALSE)
{
$ret = array();
if ($source)
{
$mirrorTArray = explode(chr(1), $source);
$count = 0;
foreach($mirrorTArray as $mirror)
{
if ($mirror)
{
list($mid, $murl, $mreq, $msize) = explode(",", $mirror);
$ret[$byID ? $mid : $count] = array('id' => $mid, 'url' => $murl, 'requests' => $mreq, 'filesize' => $msize);
$count++;
}
}
}
return $ret;
}
/**
* @param string|int $download_id
* @return string
*/
private function getJsConfirm($download_id)
{
$tp = $this->tp;
return $tp->toAttribute($tp->toJSON(DOWLAN_33 . ' [ID: ' . $download_id . ' ]'));
}
}
class download_main_admin_form_ui extends e_admin_form_ui
{
function download_category($curVal,$mode) // not really necessary since we can use 'dropdown' - but just an example of a custom function.
{
if($mode == 'read')
{
return $curVal.' (custom!)';
}
if($mode == 'batch') // Custom Batch List for release_type
{
return array('theme'=>"Theme","plugin"=>'Plugin');
}
if($mode == 'filter') // Custom Filter List for release_type
{
return array('theme'=>"Theme","plugin"=>'Plugin');
}
$types = array("theme","plugin");
$text = "<select class='form-control' name='release_type' >";
foreach($types as $val)
{
$selected = ($curVal == $val) ? "selected='selected'" : "";
$text .= "<option value='{$val}' {$selected}>".$val."</option>\n";
}
$text .= "</select>";
return $text;
}
function download_active($curVal,$mode)
{
$download_status[0] = DOWLAN_122; // Inactive;
$download_status[1] = DOWLAN_123; // Active
$download_status[2] = DOWLAN_124;
if($mode == 'read')
{
$status = array(ADMIN_FALSE_ICON,ADMIN_TRUE_ICON,ADMIN_WARNING_ICON);
return $status[$curVal];
}
if($mode == 'batch' || $mode == 'filter') // Custom Batch List for download_active
{
return $download_status;
}
return "&nbsp;";
}
// Filter List for 'Issues'
function issue($curVal,$mode)
{
if($mode == 'filter')
{
return array(
'duplicates' => DOWLAN_166,
'orphans' => DOWLAN_167, // TODO
'missing' => DOWLAN_168,
'nocategory' => DOWLAN_178,
'filesize' => DOWLAN_66,
'log' => DOWLAN_171
);
}
return "&nbsp;";
}
function download_mirror_type($curVal,$mode)
{
switch ($curVal)
{
case 1:
return DOWLAN_196;
break;
default:
// return DOWLAN_197;
}
}
}
class download_mirror_ui extends e_admin_ui
{
protected $pluginTitle = LAN_PLUGIN_DOWNLOAD_NAME;
protected $pluginName = 'download';
protected $table = 'download_mirror';
protected $pid = 'mirror_id';
protected $perPage = 10;
protected $batchDelete = true;
// protected $batchCopy = true;
// protected $sortField = 'somefield_order';
// protected $orderStep = 10;
// protected $tabs = array('Tabl 1','Tab 2'); // Use 'tab'=>0 OR 'tab'=>1 in the $fields below to enable.
// protected $listQry = "SELECT * FROM #tableName WHERE field != '' "; // Example Custom Query. LEFT JOINS allowed. Should be without any Order or Limit.
protected $listOrder = 'mirror_id DESC';
protected $fields = array ( 'checkboxes' => array ( 'title' => '', 'type' => null, 'data' => null, 'width' => '5%', 'thclass' => 'center', 'forced' => '1', 'class' => 'center', 'toggle' => 'e-multiselect', ),
'mirror_id' => array ( 'title' => LAN_ID, 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'mirror_name' => array ( 'title' => LAN_TITLE, 'type' => 'text', 'data' => 'str', 'width' => 'auto', 'inline' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'mirror_url' => array ( 'title' => LAN_URL, 'type' => 'url', 'data' => 'str', 'width' => 'auto', 'inline' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'mirror_image' => array ( 'title' => LAN_IMAGE, 'type' => 'image', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'mirror_location' => array ( 'title' => DOWLAN_141, 'type' => 'text', 'data' => 'str', 'width' => 'auto', 'inline' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'center', 'thclass' => 'center', ),
'mirror_description' => array ( 'title' => LAN_DESCRIPTION, 'type' => 'bbarea', 'data' => 'str', 'width' => '40%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'mirror_count' => array ( 'title' => 'Count', 'type' => 'hidden', 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'center', 'thclass' => 'center', ),
'options' => array ( 'title' => LAN_OPTIONS, 'type' => null, 'data' => null, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center last', 'forced' => '1', ),
);
protected $fieldpref = array('mirror_name', 'mirror_url', 'mirror_image', 'mirror_location');
public function init()
{
// Set drop-down values (if any).
}
/*
// optional - override edit page.
public function customPage()
{
$ns = e107::getRender();
$text = 'Hello World!';
$ns->tablerender('Hello',$text);
}
*/
}
class download_mirror_form_ui extends e_admin_form_ui
{
}
class download_broken_ui extends e_admin_ui
{
protected $pluginTitle = LAN_PLUGIN_DOWNLOAD_NAME;
protected $pluginName = 'download';
protected $table = 'generic';
protected $pid = 'gen_id';
protected $perPage = 10;
protected $listQry = "SELECT g.*,u.user_name FROM `#generic` AS g LEFT JOIN `#user` AS u ON g.gen_user_id = u.user_id WHERE g.gen_type='Broken Download'";
protected $listOrder = 'gen_datestamp ASC';
protected $fields = array (
'checkboxes' => array ( 'title' => '', 'type' => null, 'data' => null, 'width' => '5%', 'thclass' => 'center', 'forced' => '1', 'class' => 'center', 'toggle' => 'e-multiselect', ),
'gen_id' => array ( 'title' => LAN_ID, 'type' => 'number', 'nolist' => true, 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'gen_datestamp' => array ( 'title' => LAN_DATESTAMP, 'type' => 'datestamp', 'data' => 'int', 'width' => '10%', 'filter' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
//'gen_intdata' => array ( 'title' => LAN_ID, 'type' => 'number', 'batch'=>false, 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'center', 'thclass' => 'center', ),
'gen_ip' => array ( 'title' => LAN_TITLE, 'type' => 'text', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'gen_chardata' => array ( 'title' => LAN_DESCRIPTION, 'type' => 'text', 'data' => 'str', 'width' => '40%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'gen_user_id' => array ( 'title' => DOWLAN_199, 'type' => 'user', 'batch'=>false, 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => 'idField=gen_user_id', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left nowrap', ),
'options' => array ( 'title' => LAN_OPTIONS, 'type' => 'method', 'data' => null, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center last', 'forced' => '1', 'readParms'=>'edit=0' ),
);
protected $fieldpref = array('gen_datestamp', 'gen_ip', 'gen_chardata', 'gen_user_id');
protected $batchOptions = array();
// optional
public function init()
{
}
public function afterDelete($deleted_data, $id, $deleted_check)
{
}
public function renderHelp()
{
$help_text = str_replace("[br]", "<br />", DOWLAN_HELP_11);
$help_text = str_replace(array("[", "]"), array("<a href='".e_ADMIN_ABS."notify.php'>"), $help_text);
return array('caption' => LAN_HELP, 'text' => $help_text);
}
}
class download_broken_form_ui extends e_admin_form_ui
{
function options($att, $value, $id, $attributes)
{
if($attributes['mode'] == 'read')
{
$download_id = $this->getController()->getListModel()->get('gen_intdata');
$text = "<div class='btn-group'>";
$text .= "<a class='btn btn-default' href='".e_SELF."?mode=main&action=edit&id=". $download_id."'>".ADMIN_VIEW_ICON."</a>";
$text .= $this->renderValue('options', $value, array('readParms' => 'edit=0'), $id);
$text .= "</div>";
return $text;
}
}
}