<?php
/*
=====================================================
DataLife Engine - by SoftNews Media Group
-----------------------------------------------------
http://dle-news.ru/
-----------------------------------------------------
Copyright (c) 2004-2021 SoftNews Media Group
=====================================================
This code is protected by copyright
=====================================================
File: plugins.php
-----------------------------------------------------
Use: Plugins Manager
=====================================================
*/
if( !defined( 'DATALIFEENGINE' ) OR !defined( 'LOGGED_IN' ) ) {
header( "HTTP/1.1 403 Forbidden" );
header ( 'Location: ../../' );
die( "Hacking attempt!" );
}
if($member_id['user_group'] != 1){ msg("error", $lang['addnews_denied'], $lang['db_denied']); }
if( isset( $_REQUEST['id'] ) ) $id = intval( $_REQUEST['id'] ); else $id = 0;
function makeDropDown($options, $name, $selected) {
global $config;
$output = "<select class=\"uniform\" name=\"{$name}\" style=\"min-width:100px;\">\r\n";
foreach ( $options as $value => $description ) {
$output .= "<option value=\"".htmlspecialchars( $value, ENT_QUOTES, $config['charset'] )."\"";
if( $selected == $value ) {
$output .= " selected ";
}
$output .= ">{$description}</option>\n";
}
$output .= "</select>";
return $output;
}
if( $_GET['action'] == "on" OR $_GET['action'] == "off" ) {
if( $_REQUEST['user_hash'] == "" or $_REQUEST['user_hash'] != $dle_login_hash ) {
die( "Hacking attempt! User not found" );
}
if( !$config['allow_plugins'] ) {
msg( "error", $lang['addnews_error'], $lang['module_disabled'], "?mod=plugins" );
} elseif( DLEPlugins::$read_only ) {
msg( "error", $lang['addnews_error'], $lang['plugins_errors_6'], "?mod=plugins" );
}
if( !check_referer($_SERVER['PHP_SELF']."?mod=plugins") ) {
msg( "error", $lang['index_denied'], $lang['no_referer'], "javascript:history.go(-1)" );
}
$row = $db->super_query( "SELECT id, dleversion, versioncompare, mysqlenable, mysqldisable, needplugin, phpenable, phpdisable FROM " . PREFIX . "_plugins WHERE id='{$id}'" );
if (!$row['id']) msg( "error", "ID not valid", "ID not valid" );
if( $_GET['action'] == "on" ) {
$active = 1;
if( $row['dleversion'] AND $row['versioncompare'] ) {
if( !version_compare($config['version_id'], $row['dleversion'], $row['versioncompare']) ) {
$row['versioncompare'] = str_replace(array("==", ">=", "<="), array($lang['plugins_vc_1'], $lang['plugins_vc_2'], $lang['plugins_vc_3']), $row['versioncompare']);
$lang['plugins_nerror_2'] = str_replace(array("{version}", "{versioncompare}", "{dleversion}"), array($row['dleversion'],$row['versioncompare'],$config['version_id']), $lang['plugins_nerror_2']);
msg( "error", $lang['addnews_error'], $lang['plugins_nerror_2'], "javascript:history.go(-1)" );
}
}
if ($row['needplugin']) {
$find_need = $db->super_query( "SELECT id FROM " . PREFIX . "_plugins WHERE name='{$row['needplugin']}' AND id!='{$id}'" );
if(!$find_need['id']) {
$lang['plugins_nerror_3'] = str_replace("{plugin}", $row['needplugin'], $lang['plugins_nerror_3']);
msg( "error", $lang['addnews_error'], $lang['plugins_nerror_3'], "javascript:history.go(-1)" );
}
}
if( $row['mysqlenable'] ) {
execute_query($id, $row['mysqlenable']);
}
if($row['phpenable']) {
eval($row['phpenable']);
}
} else {
$active = 0;
if( $row['mysqldisable'] ) {
execute_query($id, $row['mysqldisable']);
}
if( $row['phpdisable'] ) {
eval($row['phpdisable']);
}
}
$db->query( "UPDATE " . PREFIX . "_plugins SET active='{$active}' WHERE id='{$id}'" );
$db->query( "UPDATE " . PREFIX . "_plugins_files SET active='{$active}' WHERE plugin_id='{$id}'" );
$db->query( "INSERT INTO " . USERPREFIX . "_admin_logs (name, date, ip, action, extras) values ('".$db->safesql($member_id['name'])."', '{$_TIME}', '{$_IP}', '114{$active}', '{$id}')" );
clear_all_caches();
header( "Location: ?mod=plugins" );
die();
}
if( $_GET['action'] == "clearerrors" ) {
if( $_REQUEST['user_hash'] == "" or $_REQUEST['user_hash'] != $dle_login_hash ) {
die( "Hacking attempt! User not found" );
}
if( !$config['allow_plugins'] ) {
msg( "error", $lang['addnews_error'], $lang['module_disabled'], "?mod=plugins" );
} elseif( DLEPlugins::$read_only ) {
msg( "error", $lang['addnews_error'], $lang['plugins_errors_6'], "?mod=plugins" );
}
if($id) $db->query( "DELETE FROM " . PREFIX . "_plugins_logs WHERE plugin_id = '{$id}'" );
else $db->query( "DELETE FROM " . PREFIX . "_plugins_logs" );
header( "Location: ?mod=plugins" );
die();
}
if( $_GET['action'] == "delete" ) {
if( $_REQUEST['user_hash'] == "" or $_REQUEST['user_hash'] != $dle_login_hash ) {
die( "Hacking attempt! User not found" );
}
if( !check_referer($_SERVER['PHP_SELF']."?mod=plugins") ) {
msg( "error", $lang['index_denied'], $lang['no_referer'], "javascript:history.go(-1)" );
}
if( !$config['allow_plugins'] ) {
msg( "error", $lang['addnews_error'], $lang['module_disabled'], "?mod=plugins" );
} elseif( DLEPlugins::$read_only ) {
msg( "error", $lang['addnews_error'], $lang['plugins_errors_6'], "?mod=plugins" );
}
$row = $db->super_query( "SELECT id, mysqldelete, filedelete, filelist, phpdelete FROM " . PREFIX . "_plugins WHERE id='{$id}'" );
if (!$row['id']) msg( "error", "ID not valid", "ID not valid" );
if($row['mysqldelete']) {
execute_query($id, $row['mysqldelete']);
}
if($row['filedelete'] AND $row['filelist']) {
$filelist = explode(",", $row['filelist']);
if(count($filelist)) {
foreach($filelist as $file){
$file = trim($file);
if($file) @unlink( ROOT_DIR."/".$file );
}
}
}
$db->query( "DELETE FROM " . PREFIX . "_plugins WHERE id='{$id}'" );
$db->query( "DELETE FROM " . PREFIX . "_plugins_files WHERE plugin_id='{$id}'" );
$db->query( "DELETE FROM " . PREFIX . "_plugins_logs WHERE plugin_id = '{$id}'" );
$db->query( "INSERT INTO " . USERPREFIX . "_admin_logs (name, date, ip, action, extras) values ('".$db->safesql($member_id['name'])."', '{$_TIME}', '{$_IP}', '115', '{$id}')" );
clear_all_caches();
if($row['phpdelete']) {
eval($row['phpdelete']);
}
header( "Location: ?mod=plugins" );
die();
}
if( $_REQUEST['action'] == "download" ) {
if( $_REQUEST['user_hash'] == "" or $_REQUEST['user_hash'] != $dle_login_hash ) {
die( "Hacking attempt!" );
}
$row = $db->super_query( "SELECT * FROM " . PREFIX . "_plugins WHERE id='{$id}'" );
if (!$row['id']) msg( "error", "ID not valid", "ID not valid" );
if($row['versioncompare'] == ">=" ) $row['versioncompare'] = 'greater';
elseif ($row['versioncompare'] == "<=") $row['versioncompare'] = 'less';
$plugin_f_name = totranslit(html_entity_decode($row['name'], ENT_QUOTES, $config['charset']), true, false );
$files = array();
$db->query( "SELECT * FROM " . PREFIX . "_plugins_files WHERE plugin_id='{$id}' ORDER BY id ASC" );
while ( $filerow = $db->get_row() ) {
$filerow['file'] = htmlspecialchars( $filerow['file'], ENT_QUOTES, $config['charset'] );
$files[$filerow['file']][] = array('action' => $filerow['action'], 'searchcode' => $filerow['searchcode'], 'replacecode' => $filerow['replacecode'], 'searchcount' => intval($filerow['searchcount']), 'replacecount' => intval($filerow['replacecount']) );
}
$x='';
if(count($files)) {
foreach( $files as $key => $value ) {
$x .= "\n\t<file name=\"$key\">";
foreach ($value as $value2) {
$x .= "\n\t\t<operation action=\"{$value2['action']}\">";
if($value2['searchcode']) {
$x .= "\n\t\t\t<searchcode><![CDATA[{$value2['searchcode']}]]></searchcode>";
}
if($value2['replacecode']) {
$x .= "\n\t\t\t<replacecode><![CDATA[{$value2['replacecode']}]]></replacecode>";
}
if($value2['searchcount']) {
$x .= "\n\t\t\t<searchcount>{$value2['searchcount']}</searchcount>";
}
if($value2['replacecount']) {
$x .= "\n\t\t\t<replacecount>{$value2['replacecount']}</replacecount>";
}
$x .= "\n\t\t</operation>";
}
$x .= "\n\t</file>";
}
}
$plugin_data = <<<HTML
<?xml version="1.0" encoding="{$config['charset']}"?>
<dleplugin>
<name>{$row['name']}</name>
<description>{$row['description']}</description>
<icon>{$row['icon']}</icon>
<version>{$row['version']}</version>
<dleversion>{$row['dleversion']}</dleversion>
<versioncompare>{$row['versioncompare']}</versioncompare>
<upgradeurl>{$row['upgradeurl']}</upgradeurl>
<filedelete>{$row['filedelete']}</filedelete>
<needplugin>{$row['needplugin']}</needplugin>
<mnotice>{$row['mnotice']}</mnotice>
<mysqlinstall><![CDATA[{$row['mysqlinstall']}]]></mysqlinstall>
<mysqlupgrade><![CDATA[{$row['mysqlupgrade']}]]></mysqlupgrade>
<mysqlenable><![CDATA[{$row['mysqlenable']}]]></mysqlenable>
<mysqldisable><![CDATA[{$row['mysqldisable']}]]></mysqldisable>
<mysqldelete><![CDATA[{$row['mysqldelete']}]]></mysqldelete>
<phpinstall><![CDATA[{$row['phpinstall']}]]></phpinstall>
<phpupgrade><![CDATA[{$row['phpupgrade']}]]></phpupgrade>
<phpenable><![CDATA[{$row['phpenable']}]]></phpenable>
<phpdisable><![CDATA[{$row['phpdisable']}]]></phpdisable>
<phpdelete><![CDATA[{$row['phpdelete']}]]></phpdelete>
<notice><![CDATA[{$row['notice']}]]></notice>{$x}
</dleplugin>
HTML;
header( "Pragma: public" );
header( "Expires: 0" );
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0");
header( "Cache-Control: private", false);
header( "Content-Type: text/xml; charset={$config['charset']}" );
header( 'Content-Disposition: attachment; filename="'.$plugin_f_name.'.xml"' );
header( "Content-Transfer-Encoding: binary" );
header( "Connection: close");
echo $plugin_data;
die();
}
if( $_REQUEST['action'] == "doadd" OR $_REQUEST['action'] == "doedit" ) {
@header('X-XSS-Protection: 0;');
if( $_REQUEST['user_hash'] == "" or $_REQUEST['user_hash'] != $dle_login_hash ) {
msg( "error", $lang['addnews_error'], "Hacking attempt! User not found", "?mod=plugins" );
}
if( !$config['allow_plugins'] ) {
msg( "error", $lang['addnews_error'], $lang['module_disabled'], "?mod=plugins" );
} elseif( DLEPlugins::$read_only ) {
msg( "error", $lang['addnews_error'], $lang['plugins_errors_6'], "?mod=plugins" );
}
if( defined('DEMOVERSION') ) {
msg( "error", $lang['addnews_error'], $lang['upgr_demo_1'], "?mod=plugins" );
}
if( !check_referer($_SERVER['PHP_SELF']."?mod=plugins") ) {
msg( "error", $lang['index_denied'], $lang['no_referer'], "javascript:history.go(-1)" );
}
$name = $db->safesql(htmlspecialchars( trim($_POST['name']), ENT_QUOTES, $config['charset'] ));
$description = $db->safesql(htmlspecialchars( trim($_POST['description']), ENT_QUOTES, $config['charset'] ));
$icon = $db->safesql( clearfilepath( htmlspecialchars( trim($_POST['icon']), ENT_QUOTES, $config['charset'] ), array ("gif", "jpg", "jpeg", "png", "webp" ) ) );
$upgradeurl = $db->safesql( htmlspecialchars( trim($_POST['upgradeurl']), ENT_QUOTES, $config['charset'] ) );
$needplugin = $db->safesql( htmlspecialchars( trim($_POST['needplugin']), ENT_QUOTES, $config['charset'] ) );
$version = $db->safesql(htmlspecialchars( trim($_POST['version']), ENT_QUOTES, $config['charset'] ));
$dleversion = $db->safesql(htmlspecialchars( trim($_POST['dleversion']), ENT_QUOTES, $config['charset'] ));
$mysqlinstall = $db->safesql(trim($_POST['mysqlinstall']));
$mysqlupgrade = $db->safesql(trim($_POST['mysqlupgrade']));
$mysqlenable = $db->safesql(trim($_POST['mysqlenable']));
$mysqldisable = $db->safesql(trim($_POST['mysqldisable']));
$mysqldelete = $db->safesql(trim($_POST['mysqldelete']));
$phpinstall = $db->safesql(trim($_POST['phpinstall']));
$phpupgrade = $db->safesql(trim($_POST['phpupgrade']));
$phpenable = $db->safesql(trim($_POST['phpenable']));
$phpdisable = $db->safesql(trim($_POST['phpdisable']));
$phpdelete = $db->safesql(trim($_POST['phpdelete']));
$notice = $db->safesql(trim($_POST['notice']));
$mnotice = intval($_POST['mnotice']);
$filedelete = intval($_POST['filedelete']);
$plugin_active = 1;
if ( in_array( $_POST['versioncompare'], array("==", ">=", "<=") ) ) $versioncompare = $db->safesql($_POST['versioncompare']); else $versioncompare = '';
if( $dleversion AND $versioncompare) {
if( !version_compare($config['version_id'], $dleversion, $versioncompare) ) $plugin_active = 0;
}
if( !$name ) msg( "error", $lang['addnews_error'], $lang['plugins_nerror'], "javascript:history.go(-1)" );
$files = array();
$allowed_action =array("replace", "before", "after", "replaceall", "create");
if(is_array($_POST['file']) AND count($_POST['file']) ) {
foreach($_POST['file'] as $key => $value) {
$file_name = clearfilepath( trim($value) , array ("php", "lng" ) );
if(!$file_name) continue;
if( in_array( $file_name, DLEPlugins::$protected_files ) ) {
$lang['plugins_errors_7'] = str_replace ("{file}", $file_name, $lang['plugins_errors_7']);
msg( "error", $lang['addnews_error'], $lang['plugins_errors_7'], "javascript:history.go(-1)" );
}
if(is_array($_POST['fileaction'][$key]) AND count($_POST['fileaction'][$key]) ) {
foreach($_POST['fileaction'][$key] as $key2 => $value2) {
if( !in_array($value2, $allowed_action) ) continue;
$file_action = $value2;
$file_search = $_POST['filesearch'][$key][$key2];
$file_replace = $_POST['filereplace'][$key][$key2];
$searchcount = intval($_POST['filefindcount'][$key][$key2]);
$replacecount = intval($_POST['filereplacecount'][$key][$key2]);
if( !trim($file_search) ) $file_search ='';
if( !trim($file_replace) ) $file_replace ='';
if( ($file_action == "replace" OR $file_action == "before" OR $file_action == "after") AND !$file_search ) continue;
if( ($file_action == "before" OR $file_action == "after" OR $file_action == "replaceall" OR $file_action == "create") AND !$file_replace) continue;
$files[$file_name][] = array('action' => $file_action, 'searchcode' => $file_search, 'replacecode' => $file_replace, 'searchcount' => $searchcount, 'replacecount' => $replacecount );
}
}
}
}
if( $_REQUEST['action'] == "doadd" ) {
$row = $db->super_query( "SELECT id FROM " . PREFIX . "_plugins WHERE name='{$name}'" );
if( $row['id'] ) {
msg( "error", $lang['addnews_error'], $lang['plugins_nerror_1'], "javascript:history.go(-1)" );
}
if ($needplugin) {
$row = $db->super_query( "SELECT id FROM " . PREFIX . "_plugins WHERE name='{$needplugin}'" );
if(!$row['id']) $plugin_active = 0;
}
$db->query( "INSERT INTO " . PREFIX . "_plugins (name, description, icon, version, dleversion, versioncompare, active, mysqlinstall, mysqlupgrade, mysqlenable, mysqldisable, mysqldelete, filedelete, upgradeurl, needplugin, phpinstall, phpupgrade, phpenable, phpdisable, phpdelete, notice, mnotice) values ('{$name}', '{$description}','{$icon}','{$version}','{$dleversion}','{$versioncompare}', '{$plugin_active}', '{$mysqlinstall}', '{$mysqlupgrade}','{$mysqlenable}','{$mysqldisable}','{$mysqldelete}', '{$filedelete}', '{$upgradeurl}', '{$needplugin}','{$phpinstall}', '{$phpupgrade}','{$phpenable}','{$phpdisable}','{$phpdelete}', '{$notice}', '{$mnotice}')" );
$id = $db->insert_id();
$db->query( "INSERT INTO " . USERPREFIX . "_admin_logs (name, date, ip, action, extras) values ('".$db->safesql($member_id['name'])."', '{$_TIME}', '{$_IP}', '116', '{$name}')" );
execute_query($id, trim($_POST['mysqlinstall']) );
if ($plugin_active) {
execute_query($id, trim($_POST['mysqlenable']) );
}
$row = $db->super_query( "SELECT phpinstall, phpenable FROM " . PREFIX . "_plugins WHERE id='{$id}'" );
if($row['phpinstall']) {
eval($row['phpinstall']);
}
if($row['phpenable'] AND $plugin_active) {
eval($row['phpenable']);
}
} else {
$row = $db->super_query( "SELECT id FROM " . PREFIX . "_plugins WHERE id='{$id}'" );
if (!$row['id']) msg( "error", "ID not valid", "ID not valid" );
$row = $db->super_query( "SELECT id FROM " . PREFIX . "_plugins WHERE name='{$name}'" );
if( $row['id'] AND $row['id'] != $id ) {
msg( "error", $lang['cat_error'], $lang['plugins_nerror_1'], "javascript:history.go(-1)" );
}
$db->query( "DELETE FROM " . PREFIX . "_plugins_logs WHERE plugin_id = '{$id}'" );
$db->query( "UPDATE " . PREFIX . "_plugins SET name='{$name}', description='{$description}', icon='{$icon}', version='{$version}', dleversion='{$dleversion}', versioncompare='{$versioncompare}', mysqlinstall='{$mysqlinstall}', mysqlupgrade='{$mysqlupgrade}', mysqlenable='{$mysqlenable}', mysqldisable='{$mysqldisable}', mysqldelete='{$mysqldelete}', filedelete='{$filedelete}', upgradeurl='{$upgradeurl}', needplugin='{$needplugin}', phpinstall='{$phpinstall}', phpupgrade='{$phpupgrade}', phpenable='{$phpenable}', phpdisable='{$phpdisable}', phpdelete='{$phpdelete}', notice='{$notice}', mnotice='{$mnotice}' WHERE id='{$id}'" );
$db->query( "INSERT INTO " . USERPREFIX . "_admin_logs (name, date, ip, action, extras) values ('".$db->safesql($member_id['name'])."', '{$_TIME}', '{$_IP}', '117', '{$name}')" );
}
$db->query( "DELETE FROM " . PREFIX . "_plugins_files WHERE plugin_id='{$id}'" );
if(count($files)) {
$row = $db->super_query( "SELECT active FROM " . PREFIX . "_plugins WHERE id='{$id}'" );
foreach( $files as $key => $value ) {
foreach ($value as $value2) {
$key = $db->safesql($key);
$value2['action'] = $db->safesql($value2['action']);
$value2['searchcode'] = $db->safesql($value2['searchcode']);
$value2['replacecode'] = $db->safesql($value2['replacecode']);
$value2['searchcount'] = intval($value2['searchcount']);
$value2['replacecount'] = intval($value2['replacecount']);
$db->query( "INSERT INTO " . PREFIX . "_plugins_files (plugin_id, file, action, searchcode, replacecode, searchcount, active, replacecount) values ('{$id}', '{$key}', '{$value2['action']}', '{$value2['searchcode']}', '{$value2['replacecode']}', '{$value2['searchcount']}', '{$row['active']}', '{$value2['replacecount']}')" );
}
}
}
clear_all_caches();
header( "Location: ?mod=plugins" );
die();
}
if( $_REQUEST['action'] == "add" OR $_REQUEST['action'] == "edit" ) {
$files = array();
if( $_REQUEST['action'] == "add" ) {
$form_action = "?mod=plugins&action=doadd";
$row=array();
$versioncompare = makeDropDown( array ("==" => $lang['plugins_vc_1'], ">=" => $lang['plugins_vc_2'], "<=" => $lang['plugins_vc_3'] ) , "versioncompare", 0 );
$ifch1 = "";
$ifch2 = "";
$row['name'] = '';
$row['icon'] = '';
$row['description'] = '';
$row['mysqlinstall'] = '';
$row['mysqlupgrade'] = '';
$row['mysqlenable'] = '';
$row['mysqldisable'] = '';
$row['mysqldelete'] = '';
$row['version'] = '';
$row['dleversion'] = '';
$row['needplugin'] = '';
$row['upgradeurl'] = '';
$row['notice'] = '';
$row['phpinstall'] = '';
$row['phpupgrade'] = '';
$row['phpenable'] = '';
$row['phpdisable'] = '';
$row['phpdelete'] = '';
$errors = "";
} else {
$form_action = "?mod=plugins&action=doedit&id=" . $id;
$lang['plugins_bread'] = $lang['plugins_bread_1'];
$lang['news_add'] = $lang['news_save'];
$errors = "";
$db->query( "SELECT * FROM " . PREFIX . "_plugins_logs WHERE plugin_id = '{$id}'" );
while ( $row = $db->get_row() ) {
if( $row['plugin_id'] AND $row['type'] == "mysql") {
$area = $lang['upgr_db_query'];
$row['area'] = "<pre><code>".$row['area']."</code></pre>";
} elseif( $row['plugin_id'] AND $row['type'] == "file" ) {
$area = $lang['plugins_filename'];
$row['error'] = $lang['plugins_errors_4']."<pre><code>".$row['error']."</code></pre>";
} elseif( $row['plugin_id'] AND $row['type'] == "upload" ) {
$area = $lang['plugins_filename'];
$row['error'] = "<pre><code>".$row['error']."</code></pre>";
} else {
$area = $lang['plugins_errors_5'];
}
$errors .= "<div class=\"quote\"><b>{$area}</b> {$row['area']}<div class=\"mt-10\"><b>{$lang['upgr_db_errt']}</b> {$row['error']}</div></div>";
}
$row = $db->super_query( "SELECT * FROM " . PREFIX . "_plugins WHERE id='{$id}'" );
$versioncompare = makeDropDown( array ("==" => $lang['plugins_vc_1'], ">=" => $lang['plugins_vc_2'], "<=" => $lang['plugins_vc_3'] ) , "versioncompare", $row['versioncompare'] );
$row['mysqlinstall'] = htmlspecialchars( $row['mysqlinstall'], ENT_QUOTES, $config['charset'] );
$row['mysqlupgrade'] = htmlspecialchars( $row['mysqlupgrade'], ENT_QUOTES, $config['charset'] );
$row['mysqlenable'] = htmlspecialchars( $row['mysqlenable'], ENT_QUOTES, $config['charset'] );
$row['mysqldisable'] = htmlspecialchars( $row['mysqldisable'], ENT_QUOTES, $config['charset'] );
$row['mysqldelete'] = htmlspecialchars( $row['mysqldelete'], ENT_QUOTES, $config['charset'] );
$row['phpinstall'] = htmlspecialchars( $row['phpinstall'], ENT_QUOTES, $config['charset'] );
$row['phpupgrade'] = htmlspecialchars( $row['phpupgrade'], ENT_QUOTES, $config['charset'] );
$row['phpenable'] = htmlspecialchars( $row['phpenable'], ENT_QUOTES, $config['charset'] );
$row['phpdisable'] = htmlspecialchars( $row['phpdisable'], ENT_QUOTES, $config['charset'] );
$row['phpdelete'] = htmlspecialchars( $row['phpdelete'], ENT_QUOTES, $config['charset'] );
$row['notice'] = htmlspecialchars( $row['notice'], ENT_QUOTES, $config['charset'] );
if( $row['filedelete'] ) $ifch1 = " checked"; else $ifch1 = "";
if( $row['mnotice'] ) $ifch2 = " checked"; else $ifch2 = "";
$db->query( "SELECT * FROM " . PREFIX . "_plugins_files WHERE plugin_id='{$id}' ORDER BY id ASC" );
while ( $filerow = $db->get_row() ) {
$filerow['file'] = htmlspecialchars( $filerow['file'], ENT_QUOTES, $config['charset'] );
if($filerow['replacecode'][0] == "\n" OR $filerow['replacecode'][0] == "\r") $filerow['replacecode'] = "\n".$filerow['replacecode'];
$files[$filerow['file']][] = array('action' => htmlspecialchars($filerow['action'], ENT_QUOTES, $config['charset'] ), 'searchcode' => htmlspecialchars($filerow['searchcode'], ENT_QUOTES, $config['charset'] ), 'replacecode' => htmlspecialchars($filerow['replacecode'], ENT_QUOTES, $config['charset'] ), 'searchcount' => intval($filerow['searchcount']), 'replacecount' => intval($filerow['replacecount']) );
}
}
$x = "";
$total_files = 0;
$total_action = 0;
if(count($files)) {
foreach( $files as $key => $value ) {
$total_files ++;
$x .= "<div class=\"well\" id=\"filefieldset_{$total_files}\"><fieldset>";
$x .= "<legend>{$lang['plugins_filename']}<input name=\"file[{$total_files}]\" type=\"text\" class=\"form-control width-500 position-right\" value=\"{$key}\"><i class=\"help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right\" data-rel=\"popover\" data-trigger=\"hover\" data-placement=\"right\" data-content=\"{$lang['plugins_file_h']}\"></i><div class=\"pull-right\"><a onclick=\"javascript:fdel('{$total_files}'); return(false);\"><i class=\"fa fa-trash-o text-danger\"></i></a></div></legend>";
$x .= "<div id=\"actions_{$total_files}\">";
foreach ($value as $value2) {
$total_action ++;
$f_action = array();
$f_action[$value2['action']] = " selected";
$x .= "<fieldset id=\"actionset_{$total_action}\">";
$x .= "<legend><span class=\"position-left\">{$lang['vote_action']}</span>";
$x .= "<select class=\"uniform position-right\" name=\"fileaction[{$total_files}][{$total_action}]\" onchange=\"onActionChange(this, {$total_files}, {$total_action})\">";
$x .= "<option value=\"\">{$lang['xfield_xact']}</option>";
$x .= "<option value=\"replace\"{$f_action['replace']}>{$lang['plugins_aсt_l1']}</option>";
$x .= "<option value=\"before\"{$f_action['before']}>{$lang['plugins_aсt_l2']}</option>";
$x .= "<option value=\"after\"{$f_action['after']}>{$lang['plugins_aсt_l3']}</option>";
$x .= "<option value=\"replaceall\"{$f_action['replaceall']}>{$lang['plugins_aсt_l4']}</option>";
$x .= "<option value=\"create\"{$f_action['create']}>{$lang['plugins_aсt_l5']}</option>";
$x .= "</select>";
$x .= "<div class=\"pull-right\"><a onclick=\"javascript:adel('{$total_action}'); return(false);\"><i class=\"fa fa-trash-o text-danger\"></i></a></div></legend>";
$x .= "<div id=\"searchs_{$total_action}\">";
if($value2['searchcode']) {
$x .= "<div class=\"form-group\">";
$x .= "<label class=\"control-label col-sm-2\">{$lang['plugins_aсt_l6']}</label>";
$x .= "<div class=\"col-sm-10\">";
$x .= "<textarea name=\"filesearch[{$total_files}][{$total_action}]\" id=\"text_search_{$total_files}_{$total_action}\" class=\"classic width-500 php_editor\" rows=\"3\">{$value2['searchcode']}</textarea>";
$x .= "</div>";
$x .= "</div>";
}
if($value2['replacecode'] OR $value2['action'] == "replace" ) {
$rep_lang = $lang['plugins_aсt_l7'];
if($value2['action'] == 'before' ) {
$rep_lang="{$lang['plugins_aсt_l8']}";
} elseif($value2['action'] == 'after') {
$rep_lang="{$lang['plugins_aсt_l9']}";
} elseif($value2['action'] == 'create') {
$rep_lang="{$lang['plugins_aсt_l10']}";
}
$x .= "<div class=\"form-group\">";
$x .= "<label class=\"control-label col-sm-2\">{$rep_lang}</label>";
$x .= "<div class=\"col-sm-10\">";
$x .= "<textarea name=\"filereplace[{$total_files}][{$total_action}]\" id=\"text_replace_{$total_files}_{$total_action}\" class=\"classic width-500 php_editor\" rows=\"5\">{$value2['replacecode']}</textarea>";
$x .= "</div></div>";
}
if($value2['searchcode']) {
if( !$value2['searchcount'] ) $value2['searchcount'] = "";
if( !$value2['replacecount'] ) $value2['replacecount'] = "";
$x .= "<div class=\"form-group\">";
$x .= "<label class=\"control-label col-sm-2\">{$lang['plugins_aсt_l11']}</label>";
$x .= "<div class=\"col-sm-10\">";
$x .= "<input type=\"text\" name=\"filefindcount[{$total_files}][{$total_action}]\" id=\"find_count_{$total_files}_{$total_action}\" class=\"form-control\" maxlength=\"3\" style=\"width:55px;\" value=\"{$value2['searchcount']}\"><i class=\"help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right position-left\" data-rel=\"popover\" data-trigger=\"hover\" data-placement=\"right\" data-content=\"{$lang['plugins_aсt_hint']}\"></i>";
$x .= "</div></div>";
$x .= "<div class=\"form-group\">";
$x .= "<label class=\"control-label col-sm-2\">{$lang['plugins_aсt_l12']}</label>";
$x .= "<div class=\"col-sm-10\">";
$x .= "<input type=\"text\" name=\"filereplacecount[{$total_files}][{$total_action}]\" id=\"replace_count_{$total_files}_{$total_action}\" class=\"form-control\" maxlength=\"3\" style=\"width:55px;\" value=\"{$value2['replacecount']}\"><i class=\"help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right position-left\" data-rel=\"popover\" data-trigger=\"hover\" data-placement=\"right\" data-content=\"{$lang['plugins_rep_hint']}\"></i>";
$x .= "</div></div>";
}
$x .="</div></fieldset>";
}
$x .= "</div>";
$x .= "<button type=\"button\" onclick=\"AddAction('{$total_files}'); return false;\" class=\"btn bg-brown-600 btn-sm btn-raised position-left\"><i class=\"fa fa-plus position-left\"></i>{$lang['plugins_addact']}</button>";
$x .= "</fieldset></div>";
}
}
$js_array[] = "engine/skins/codemirror/js/code.js";
$css_array[] = "engine/skins/codemirror/css/default.css";
echoheader( "<i class=\"fa fa-puzzle-piece position-left\"></i><span class=\"text-semibold\">{$lang['opt_plugins']}</span>", array('?mod=plugins' => $lang['plugins_list'], '' => $lang['plugins_bread'] ) );
if (isset($errors) AND $errors) {
$error_tab = "<li><a href=\"#taberror\" data-toggle=\"tab\" class=\"text-danger\"><i class=\"fa fa-exclamation-triangle position-left\"></i> {$lang['plugins_bread_2']}</a></li>";
$errors = <<<HTML
<div class="tab-pane" id="taberror">
<div class="panel-body">
{$errors}
<a href="?mod=plugins&action=clearerrors&user_hash={$dle_login_hash}&id={$id}" class="btn bg-brown-600 btn-sm btn-raised position-left"><i class="fa fa-trash position-left"></i>{$lang['plugins_errors_2']}</a>
</div>
</div>
HTML;
} else {
$error_tab = "";
}
echo <<<HTML
<style>
.CodeMirror {
height: auto;
border: 1px solid #cccccc;
box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
}
.CodeMirror-scroll {
max-height: 300px;
}
</style>
<form action="{$form_action}" method="post" class="form-horizontal" id="addnews">
<input type="hidden" name="user_hash" value="{$dle_login_hash}" />
<div class="panel panel-default">
<div class="panel-heading">
<ul class="nav nav-tabs nav-tabs-solid">
<li class="active"><a href="#tabhome" data-toggle="tab"><i class="fa fa-home position-left"></i> {$lang['plugins_tab_1']}</a></li>
<li><a href="#tabfiles" data-toggle="tab"><i class="fa fa-file-code-o position-left"></i> {$lang['plugins_tab_2']}</a></li>
<li><a href="#tabmysql" data-toggle="tab"><i class="fa fa-database position-left"></i> {$lang['plugins_tab_3']}</a></li>
<li><a href="#tabphp" data-toggle="tab"><i class="fa fa-code position-left"></i> PHP</a></li>
<li><a href="#notinfo" data-toggle="tab"><i class="fa fa-pencil-square-o position-left"></i> {$lang['main_p_notice']}</a></li>
{$error_tab}
</ul>
<div class="heading-elements">
<ul class="icons-list">
<li><a href="#" class="panel-fullscreen"><i class="fa fa-expand"></i></a></li>
</ul>
</div>
</div>
<div class="panel-tab-content tab-content">
<div class="tab-pane active" id="tabhome">
<div class="panel-body">
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_name']}</label>
<div class="col-sm-10">
<input type="text" class="form-control width-500 position-left" name="name" maxlength="100" value="{$row['name']}"><i class="help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right" data-rel="popover" data-trigger="hover" data-placement="auto right" data-content="{$lang['plugins_name_h']}"></i>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_descr']}</label>
<div class="col-sm-10">
<textarea name="description" class="classic width-500" rows="3">{$row['description']}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['cat_addicon']}</label>
<div class="col-sm-10">
<input type="text" class="form-control width-500 position-left" name="icon" maxlength="255" value="{$row['icon']}"><i class="help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right" data-rel="popover" data-trigger="hover" data-placement="auto right" data-content="{$lang['plugins_icon_h']}"></i>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_ver']}</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="version" maxlength="10" value="{$row['version']}" style="width:100px;">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_dlever']}</label>
<div class="col-sm-10">
<input type="text" class="form-control position-left" name="dleversion" maxlength="10" value="{$row['dleversion']}" style="width:100px;">{$versioncompare}<i class="help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right" data-rel="popover" data-trigger="hover" data-placement="auto right" data-content="{$lang['plugins_dleverh']}"></i>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_needp']}</label>
<div class="col-sm-10">
<input type="text" class="form-control width-500 position-left" name="needplugin" maxlength="100" value="{$row['needplugin']}"><i class="help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right" data-rel="popover" data-trigger="hover" data-placement="auto right" data-content="{$lang['plugins_needp_h']}"></i>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_upgr']}</label>
<div class="col-sm-10">
<input type="text" class="form-control width-500 position-left" name="upgradeurl" maxlength="255" value="{$row['upgradeurl']}"><i class="help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right" data-rel="popover" data-trigger="hover" data-placement="auto right" data-content="{$lang['plugins_upgr_h']}"></i>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2"> </label>
<div class="col-sm-10">
<div class="checkbox"><label><input class="icheck" type="checkbox" name="filedelete" value="1"{$ifch1}>{$lang['plugins_filedel']}</label><i class="help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right" data-rel="popover" data-trigger="hover" data-placement="auto right" data-content="{$lang['plugins_filedelh']}"></i></div>
</div>
</div>
</div>
</div>
<div class="tab-pane" id="tabfiles">
<div class="panel-body">
<div id="container">{$x}</div>
<button type="button" onclick="AddFile(); return false;" class="btn bg-slate-600 btn-sm btn-raised position-left"><i class="fa fa-plus position-left"></i>{$lang['plugins_addfile']}</button>
</div>
</div>
<div class="tab-pane" id="tabmysql">
<div class="panel-body">
<div class="form-group">
<label class="control-label col-sm-12">{$lang['plugins_myinfo_1']}</label>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_myinstall']}</label>
<div class="col-sm-10">
<textarea name="mysqlinstall" class="classic width-500 sql_editor" rows="5">{$row['mysqlinstall']}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_myupgrade']}</label>
<div class="col-sm-10">
<textarea name="mysqlupgrade" class="classic width-500 sql_editor" rows="5">{$row['mysqlupgrade']}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_myenable']}</label>
<div class="col-sm-10">
<textarea name="mysqlenable" class="classic width-500 sql_editor" rows="5">{$row['mysqlenable']}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_mydisable']}</label>
<div class="col-sm-10">
<textarea name="mysqldisable" class="classic width-500 sql_editor" rows="5">{$row['mysqldisable']}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_mydelete']}</label>
<div class="col-sm-10">
<textarea name="mysqldelete" class="classic width-500 sql_editor" rows="5">{$row['mysqldelete']}</textarea>
</div>
</div>
<div class="alert alert-success">{$lang['plugins_myinfo']}</div>
</div>
</div>
<div class="tab-pane" id="tabphp">
<div class="panel-body">
<div class="form-group">
<label class="control-label col-sm-12">{$lang['plugins_pinfo_1']}</label>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_myinstall']}</label>
<div class="col-sm-10">
<textarea name="phpinstall" class="classic width-500 php_editor" rows="5">{$row['phpinstall']}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_myupgrade']}</label>
<div class="col-sm-10">
<textarea name="phpupgrade" class="classic width-500 php_editor" rows="5">{$row['phpupgrade']}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_myenable']}</label>
<div class="col-sm-10">
<textarea name="phpenable" class="classic width-500 php_editor" rows="5">{$row['phpenable']}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_mydisable']}</label>
<div class="col-sm-10">
<textarea name="phpdisable" class="classic width-500 php_editor" rows="5">{$row['phpdisable']}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">{$lang['plugins_mydelete']}</label>
<div class="col-sm-10">
<textarea name="phpdelete" class="classic width-500 php_editor" rows="5">{$row['phpdelete']}</textarea>
</div>
</div>
</div>
</div>
<div class="tab-pane" id="notinfo">
<div class="panel-body">
<textarea name="notice" class="classic" style="width:100%;height:200px;" placeholder="{$lang['main_no_p_notice']}">{$row['notice']}</textarea>
<div class="checkbox mt-10"><label><input class="icheck" type="checkbox" name="mnotice" value="1"{$ifch2}>{$lang['main_p_notice_1']}</label></div>
</div>
</div>
{$errors}
</div>
<div class="panel-footer">
<button type="submit" class="btn bg-teal btn-sm btn-raised position-left"><i class="fa fa-floppy-o position-left"></i>{$lang['news_add']}</button>
</div>
</div>
</form>
<script>
<!--
$(function(){
$(".sql_editor").each(function() {
var editor = CodeMirror.fromTextArea( this, {
mode: "text/x-mysql",
dragDrop: false,
autoRefresh: true,
viewportMargin: Infinity
});
function updateTextArea() {
editor.save();
}
editor.on('change', updateTextArea);
});
$(".php_editor").each(function() {
var editor = CodeMirror.fromTextArea( this, {
mode: "text/x-php",
dragDrop: false,
autoRefresh: true,
viewportMargin: Infinity
});
function updateTextArea() {
editor.save();
}
editor.on('change', updateTextArea);
});
});
var files = {$total_files};
var actions = {$total_action};
function fdel(id){
DLEconfirm( '{$lang['plugins_f_del']}', '{$lang['p_confirm']}', function () {
$("#filefieldset_"+id).remove();
} );
}
function adel(id){
DLEconfirm( '{$lang['plugins_a_del']}', '{$lang['p_confirm']}', function () {
$("#actionset_"+id).remove();
} );
}
function AddFile(){
files ++;
var x = "<div class=\"well\" id=\"filefieldset_" + files + "\"><fieldset>";
x += "<legend>{$lang['plugins_filename']}<input name=\"file[" + files + "]\" type=\"text\" class=\"form-control width-500 position-right\"><i class=\"help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right\" data-rel=\"popover\" data-trigger=\"hover\" data-placement=\"right\" data-content=\"{$lang['plugins_file_h']}\"></i><div class=\"pull-right\"><a onclick=\"javascript:fdel('" + files + "'); return(false);\"><i class=\"fa fa-trash-o text-danger\"></i></a></div></legend>";
x += "<div id=\"actions_" + files + "\"></div>";
x += "<button type=\"button\" onclick=\"AddAction('" + files + "'); return false;\" class=\"btn bg-brown-600 btn-sm btn-raised position-left\"><i class=\"fa fa-plus position-left\"></i>{$lang['plugins_addact']}</button>";
x += "</fieldset></div>";
$("#container").append(x);
$("#filefieldset_" + files).find(".help-button").popover();
}
function AddAction(fileid){
actions ++;
var x = "<fieldset id=\"actionset_" + actions + "\">";
x += "<legend><span class=\"position-left\">{$lang['vote_action']}</span>";
x += "<select class=\"uniform position-right\" name=\"fileaction[" + fileid + "][" + actions + "]\" onchange=\"onActionChange(this, " + fileid + ", " + actions + ")\">";
x += "<option value=\"\">{$lang['xfield_xact']}</option>";
x += "<option value=\"replace\">{$lang['plugins_aсt_l1']}</option>";
x += "<option value=\"before\">{$lang['plugins_aсt_l2']}</option>";
x += "<option value=\"after\">{$lang['plugins_aсt_l3']}</option>";
x += "<option value=\"replaceall\">{$lang['plugins_aсt_l4']}</option>";
x += "<option value=\"create\">{$lang['plugins_aсt_l5']}</option>";
x += "</select>";
x += "<div class=\"pull-right\"><a onclick=\"javascript:adel('" + actions + "'); return(false);\"><i class=\"fa fa-trash-o text-danger\"></i></a></div></legend>";
x += "<div id=\"searchs_" + actions + "\"></div>";
x += "</fieldset>";
$("#actions_" + fileid ).append(x);
$("#actionset_" + actions ).find("select.uniform").selectpicker();
}
function onActionChange(obj, fileid, actionid) {
var value = $(obj).val();
if (value == '') {
$("#searchs_" + actionid ).html('');
return false;
}
var x = "";
if( $("#text_search_" + fileid + "_" + actionid ).val() ) {
var prev_val_search = $("#text_search_" + fileid + "_" + actionid ).val();
} else {
var prev_val_search = '';
}
if( $("#text_replace_" + fileid + "_" + actionid ).val() ) {
var prev_val_replace = $("#text_replace_" + fileid + "_" + actionid ).val();
} else {
var prev_val_replace = '';
}
if( $("#replace_count_" + fileid + "_" + actionid ).val() ) {
var prev_val_replace_count = $("#replace_count_" + fileid + "_" + actionid ).val();
} else {
var prev_val_replace_count = '';
}
if( $("#find_count_" + fileid + "_" + actionid ).val() ) {
var prev_val_find_count = $("#find_count_" + fileid + "_" + actionid ).val();
} else {
var prev_val_find_count = '';
}
if(value != 'replaceall' && value !='create') {
x += "<div class=\"form-group\">";
x += "<label class=\"control-label col-sm-2\">{$lang['plugins_aсt_l6']}</label>";
x += "<div class=\"col-sm-10\">";
x += "<textarea name=\"filesearch[" + fileid + "][" + actionid + "]\" id=\"text_search_" + fileid + "_" + actionid + "\" class=\"classic width-500 php_editor\" rows=\"3\">"+prev_val_search+"</textarea>";
x += "</div>";
x += "</div>";
}
var lang="{$lang['plugins_aсt_l7']}";
if(value == 'before' ) {
lang="{$lang['plugins_aсt_l8']}";
} else if(value == 'after') {
lang="{$lang['plugins_aсt_l9']}";
} else if(value == 'create') {
lang="{$lang['plugins_aсt_l10']}";
}
x += "<div class=\"form-group\">";
x += "<label class=\"control-label col-sm-2\">"+lang+"</label>";
x += "<div class=\"col-sm-10\">";
x += "<textarea name=\"filereplace[" + fileid + "][" + actionid + "]\" id=\"text_replace_" + fileid + "_" + actionid + "\" class=\"classic width-500 php_editor\" rows=\"5\">"+prev_val_replace+"</textarea>";
x += "</div>";
x += "</div>";
if(value != 'replaceall' && value !='create') {
x += "<div class=\"form-group\">";
x += "<label class=\"control-label col-sm-2\">{$lang['plugins_aсt_l11']}</label>";
x += "<div class=\"col-sm-10\">";
x += "<input type=\"text\" name=\"filefindcount[" + fileid + "][" + actionid + "]\" id=\"find_count_" + fileid + "_" + actionid + "\" class=\"form-control\" maxlength=\"3\" style=\"width:55px;\"><i class=\"help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right position-left\" data-rel=\"popover\" data-trigger=\"hover\" data-placement=\"right\" data-content=\"{$lang['plugins_aсt_hint']}\"></i>";
x += "</div>";
x += "</div>";
x += "<div class=\"form-group\">";
x += "<label class=\"control-label col-sm-2\">{$lang['plugins_aсt_l12']}</label>";
x += "<div class=\"col-sm-10\">";
x += "<input type=\"text\" name=\"filereplacecount[" + fileid + "][" + actionid + "]\" id=\"replace_count_" + fileid + "_" + actionid + "\" class=\"form-control\" maxlength=\"3\" style=\"width:55px;\"><i class=\"help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right position-left\" data-rel=\"popover\" data-trigger=\"hover\" data-placement=\"right\" data-content=\"{$lang['plugins_rep_hint']}\"></i>";
x += "</div>";
x += "</div>";
}
$("#searchs_" + actionid ).html(x);
$("#text_search_" + fileid + "_" + actionid ).val(prev_val_search);
$("#text_replace_" + fileid + "_" + actionid ).val(prev_val_replace);
$("#find_count_" + fileid + "_" + actionid ).val(prev_val_find_count);
$("#replace_count_" + fileid + "_" + actionid ).val(prev_val_replace_count);
$("#searchs_" + actionid ).find(".php_editor").each(function() {
var editor = CodeMirror.fromTextArea( this, {
mode: "text/x-php",
dragDrop: false,
autoRefresh: true,
viewportMargin: Infinity
});
function updateTextArea() {
editor.save();
}
editor.on('change', updateTextArea);
});
$("#actionset_" + actionid ).find("[data-rel=popover]").popover();
}
//-->
</script>
HTML;
echofooter();
} elseif($_REQUEST['action'] == "errors") {
$errors = "";
$db->query( "SELECT id, name FROM " . PREFIX . "_plugins" );
while ( $row = $db->get_row() ) {
$plugins_name[$row['id']] = $row['name'];
}
if($id) $db->query( "SELECT * FROM " . PREFIX . "_plugins_logs WHERE plugin_id = '{$id}'" );
else $db->query( "SELECT * FROM " . PREFIX . "_plugins_logs" );
while ( $row = $db->get_row() ) {
if( $row['plugin_id'] AND $row['type'] == "mysql") {
$area = $lang['upgr_db_query'];
$row['area'] = "<pre><code>".$row['area']."</code></pre>";
} elseif( $row['plugin_id'] AND $row['type'] == "file" ) {
$area = $lang['plugins_filename'];
$row['error'] = $lang['plugins_errors_4']."<pre><code>".$row['error']."</code></pre>";
} elseif( $row['plugin_id'] AND $row['type'] == "upload" ) {
$area = $lang['plugins_filename'];
$row['error'] = "<pre><code>".$row['error']."</code></pre>";
} else {
$plugins_name[0] = $lang['plugins_errors_5'];
$area = "";
}
$errors .= "<div class=\"quote\"><b>{$lang['plugins_name']}</b> {$plugins_name[$row['plugin_id']]}<div class=\"mt-10\"><b>{$area}</b> {$row['area']}</div><div class=\"mt-10\"><b>{$lang['upgr_db_errt']}</b> {$row['error']}</div></div>";
}
if(!$errors) msg( "success", $lang['all_info'], $lang['plugins_errors_3'], "javascript:history.go(-1)" );
$js_array[] = "engine/classes/highlight/highlight.code.js";
echoheader( "<i class=\"fa fa-puzzle-piece position-left\"></i><span class=\"text-semibold\">{$lang['opt_plugins']}</span>", array('?mod=plugins' => $lang['plugins_list'], '' => $lang['plugins_bread_2'] ) );
$errors = "<div class=\"panel-body\"><div class=\"text-size-small\">".$errors."</div></div>";
echo <<<HTML
<div class="panel panel-default">
<div class="panel-heading">
{$lang['plugins_bread_2']}
</div>
{$errors}
<div class="panel-footer">
<a href="?mod=plugins" class="btn bg-teal btn-sm btn-raised position-left"><i class="fa fa-forward position-left"></i>{$lang['upgr_next']}</a>
<a href="?mod=plugins&action=clearerrors&user_hash={$dle_login_hash}&id={$id}" class="btn bg-brown-600 btn-sm btn-raised position-left"><i class="fa fa-trash position-left"></i>{$lang['plugins_errors_2']}</a>
</div>
</div>
HTML;
echofooter();
} else {
$parse = new ParseFilter();
$js_array[] = "engine/classes/highlight/highlight.code.js";
echoheader( "<i class=\"fa fa-puzzle-piece position-left\"></i><span class=\"text-semibold\">{$lang['opt_plugins']}</span>", $lang['plugins_list']);
$plugins_errors = array();
$db->query( "SELECT plugin_id, COUNT(id) AS count FROM " . PREFIX . "_plugins_logs GROUP BY plugin_id" );
while ( $row = $db->get_row() ) {
$plugins_errors[$row['plugin_id']] = $row['count'];
}
if( count($plugins_errors) ) {
$error_button = "<button type=\"button\" onclick=\"document.location='?mod=plugins&action=errors'\" class=\"btn bg-brown-600 btn-sm btn-raised position-left\"><i class=\"fa fa-exclamation-triangle position-left\"></i>{$lang['plugins_errors_1']}</button>";
} else $error_button = "";
$db->query( "SELECT * FROM " . PREFIX . "_plugins ORDER BY posi ASC, id DESC" );
$entries = "";
$i=0;
while ( $row = $db->get_row() ) {
if(!$i) $border = "no-border-top "; else $border = "";
if ( !$row['icon'] OR !@file_exists( $row['icon'] )) $row['icon'] = "engine/skins/images/default_icon.png";
if( $row['version'] ) $row['version'] = " v.<span id=\"version{$row['id']}\">". $row['version']."</span>";
if( $row['mnotice'] AND $row['notice']) {
$row['notice'] = $parse->BB_Parse($parse->process($row['notice']), false);
$row['notice'] = "<div class=\"alert alert-info p-5\" style=\"max-height:200px;overflow:auto;cursor:auto;display: grid;\">".stripslashes($row['notice'])."</div>";
} else $row['notice'] = "";
if( $row['active'] ) {
$status = "<span title=\"{$lang['plugins_on_1']}\" class=\"text-success position-left position-right tip\"><b><i class=\"fa fa-check-circle\"></i></b></span>";
$lang['led_active'] = $lang['plugins_off'];
$led_action = "off";
} else {
$status = "<span title=\"{$lang['plugins_off_1']}\" class=\"text-danger position-left position-right tip\"><b><i class=\"fa fa-exclamation-circle\"></i></b></span>";
$lang['led_active'] = $lang['plugins_on'];
$led_action = "on";
}
if (isset($plugins_errors[$row['id']] ) AND $plugins_errors[$row['id']]) {
$plugin_error = "<span class=\"label label-danger\">{$lang['plugins_errors']}</span>";
$menu_error ="<li><a href=\"?mod=plugins&action=errors&id={$row['id']}\"><i class=\"fa fa-exclamation-triangle\"></i> {$lang['plugins_errors_1']}</a></li>";
} else { $plugin_error = ""; $menu_error =""; }
$menu_link = <<<HTML
<div class="btn-group">
<a href="#" class="dropdown-toggle nocolor" data-toggle="dropdown" aria-expanded="true"><i class="fa fa-bars"></i><span class="caret"></span></a>
<ul class="dropdown-menu dropdown-menu-right">
{$menu_error}
<li><a href="?mod=plugins&user_hash={$dle_login_hash}&action={$led_action}&id={$row['id']}"><i class="fa fa-eye"></i> {$lang['led_active']}</a></li>
<li><a href="?mod=plugins&user_hash={$dle_login_hash}&action=download&id={$row['id']}"><i class="fa fa-download"></i> {$lang['plugins_download']}</a></li>
<li class="divider"></li>
<li><a onclick="CheckUpdate('{$row['id']}'); return false;" href="#"><i class="fa fa-search"></i> {$lang['plugins_upgr_c']}</a></li>
<li><a onclick="PluginUpdate('{$row['id']}'); return false;" href="#"><i class="fa fa-upload"></i> {$lang['plugins_update']}</a></li>
<li class="divider"></li>
<li><a onclick="confirmdelete('{$row['id']}'); return false;" href="#"><i class="fa fa-trash-o text-danger"></i> {$lang['cat_del']}</a></li>
</ul>
</div>
HTML;
$entries .= "
<tr class=\"dd-item\" data-id=\"{$row['id']}\">
<td class=\"{$border}dd-handles\"></td>
<td class=\"{$border}cursor-pointer\" onclick=\"document.location = '?mod=plugins&action=edit&id={$row['id']}'; return false;\"><div class=\"media-list\"><div class=\"media-left\"><img src=\"{$row['icon']}\" class=\"img-lg section_icon\"></div><div class=\"media-body\"><h6 class=\"media-heading text-semibold\">{$row['name']}{$row['version']}{$status}{$plugin_error}</h6><span class=\"text-muted text-size-small\">{$row['description']}</span><span id=\"upgrade{$row['id']}\" class=\"label label-success position-right text-size-small\"></span>{$row['notice']}</div></div></td>
<td class=\"{$border}text-center\" style=\"width: 70px\">{$menu_link}</td>
</tr>";
$i++;
}
if(!$entries) {
$entries = "<tr><td class=\"no-border-top\"><div align=\"center\"><br><br>{$lang['plugins_not_found']}<br><br><br></div></td></tr>";
} else {
$entries = "<tbody class=\"dd-list\">".$entries."</tbody>";
}
if( !$config['allow_plugins'] ) {
$alert = "<div class=\"alert alert-warning alert-styled-left alert-arrow-left alert-component\">{$lang['module_disabled']}</div>";
} elseif( !DLEPlugins::$read_only AND !defined('DEMOVERSION') ) {
$alert = "<div class=\"alert alert-warning alert-styled-left alert-arrow-left alert-component\">{$lang['stat_secfault_5']}</div>";
} else $alert = "";
if( !$lic_tr AND defined('DEMOVERSION') ) {
$alert .= "<div class=\"alert alert-warning alert-styled-left alert-arrow-left alert-component\">{$lang['upgr_demo']}</div>";
} elseif( defined('DEMOVERSION') ) {
$alert .= "<div class=\"alert alert-warning alert-styled-left alert-arrow-left alert-component\">{$lang['upgr_demo_1']}</div>";
}
$root = ROOT_DIR;
echo <<<HTML
<div class="panel panel-default">
<div class="panel-heading">
{$lang['plugins_list']}
</div>
<div class="dd" id="nestable">
<table class="table table-xs table-hover">
{$entries}
</table>
</div>
<div class="panel-footer">
<button type="button" onclick="document.location='?mod=plugins&action=add'" class="btn bg-teal btn-sm btn-raised position-left"><i class="fa fa-plus position-left"></i>{$lang['plugins_b_add']}</button>
<button type="button" onclick="PluginUpload(); return false;" class="btn bg-slate-600 btn-sm btn-raised position-left"><i class="fa fa-upload position-left"></i>{$lang['plugins_uploads']}</button>
{$error_button}
<button type="button" onclick="CheckUpdate(0); return false;" class="btn bg-primary-600 btn-sm btn-raised position-left"><i class="fa fa-search position-left"></i>{$lang['plugins_upgr_c']}</button>
</div>
</div>
{$alert}
<div class="modal fade" name="moduleupload" id="moduleupload">
<div class="modal-dialog" role="document">
<div class="modal-content">
<form method="post" autocomplete="off" class="form-horizontal" id="pluginupload" enctype="multipart/form-data">
<input type="hidden" name="user_hash" value="{$dle_login_hash}" />
<input type="hidden" name="id" id="plugin_id" value="0">
<div class="modal-header ui-dialog-titlebar">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<span class="ui-dialog-title">{$lang['plugins_upload']}</span>
</div>
<div class="modal-body">
<div class="form-group">
<div class="col-sm-12">
<input type="file" name="pluginfile" accept="text/xml,application/zip" style="width:304px;" class="icheck">
</div>
</div>
</div>
<div class="modal-footer" style="margin-top:-20px;">
<button type="submit" class="btn bg-teal btn-sm btn-raised position-left"><i class="fa fa-upload position-left"></i>{$lang['plugins_uploads']}</button>
<button type="button" class="btn bg-slate-600 btn-sm btn-raised" data-dismiss="modal">{$lang['p_cancel']}</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" name="needftp" id="needftp">
<div class="modal-dialog" role="document">
<div class="modal-content">
<form method="post" autocomplete="off" class="form-horizontal" id="ftpserver">
<input type="hidden" name="action" value="checkftp">
<input type="hidden" name="user_hash" value="{$dle_login_hash}" />
<div class="modal-header ui-dialog-titlebar">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<span class="ui-dialog-title">{$lang['plugins_upload']}</span>
</div>
<div class="modal-body">
<div class="form-group">
<label class="control-label col-sm-3">{$lang['upgr_ftp_2']}</label>
<div class="col-sm-9">
<label class="radio-inline position-left"><input class="icheck" type="radio" name="ftp[type]" value="ftp" checked>FTP</label>
<label class="radio-inline position-left"><input class="icheck" type="radio" name="ftp[type]" value="sslftp">SSL FTP</label>
<label class="radio-inline position-left"><input class="icheck" type="radio" name="ftp[type]" value="ssh2">SFTP SSH2</label>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3">{$lang['upgr_ftp_3']}</label>
<div class="col-sm-9">
<input type="text" class="form-control width-300 position-left" name="ftp[server]">
<span class="position-left">{$lang['upgr_ftp_4']}</span>
<input type="text" class="form-control position-left" name="ftp[port]" style="width:45px" value="21">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3">{$lang['upgr_ftp_5']}</label>
<div class="col-sm-9">
<input type="text" class="form-control width-350 position-left" name="ftp[username]">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3">{$lang['upgr_ftp_6']}</label>
<div class="col-sm-9">
<input type="text" class="form-control width-350 position-left" name="ftp[password]">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3">{$lang['upgr_ftp_7']}</label>
<div class="col-sm-9">
<input type="text" class="form-control width-450 position-left" name="ftp[path]" value="{$root}">
</div>
</div>
<div class="text-muted text-size-small">{$lang['upgr_ftp_15']}</div>
</div>
<div class="modal-footer" style="margin-top:-20px;">
<button id="checkftpbutton" type="submit" class="btn bg-teal btn-sm btn-raised position-left"><i class="fa fa-forward position-left"></i>{$lang['upgr_next']}</button>
<button type="button" class="btn bg-slate-600 btn-sm btn-raised" data-dismiss="modal">{$lang['p_cancel']}</button>
</div>
</form>
</div>
</div>
</div>
<script>
<!--
function confirmdelete(id){
DLEconfirm( '{$lang['plugins_del']}', '{$lang['p_confirm']}', function () {
document.location="?mod=plugins&action=delete&user_hash={$dle_login_hash}&id="+id;
} );
}
function PluginUpload(){
$('#plugin_id').val('0');
$('#moduleupload').modal();
}
function PluginUpdate(id){
$('#plugin_id').val(id);
$('#moduleupload').modal();
}
function PluginUpdateFromURL(id, url, version){
ShowLoading('');
$.ajax({
url: "engine/ajax/controller.php?mod=plugins",
data: { id: id, url: url, user_hash: "{$dle_login_hash}", action: "updatefromurl" },
type: 'POST',
dataType: 'json',
success: function(data) {
HideLoading('');
if (data) {
if (data.status == "error") {
DLEalert(data.text, '{$lang['p_info']}');
} else if (data.status == "needftp") {
$('#needftp').modal();
} else if (data.status == "succes") {
if(version) {
$("#upgrade"+id).html('');
$("#version"+id).text(version);
} else {
setTimeout("window.location = '?mod=plugins'", 300 );
}
}
}
},
error: function(data) {
HideLoading('');
DLEalert(data.responseText, '{$lang['p_info']}');
}
});
}
function CheckUpdate(id){
ShowLoading('');
$.ajax({
url: "engine/ajax/controller.php?mod=plugins",
data: { id: id, user_hash: "{$dle_login_hash}", action: "checkupdate" },
type: 'POST',
dataType: 'json',
success: function(data) {
HideLoading('');
if (data) {
if (data.status == "error") {
DLEalert(data.text, '{$lang['p_info']}');
} else if (data.status == "succes") {
if(id) {
DLEconfirm( '{$lang['plugins_upgr_s1']} '+data.version+'<br><br>{$lang['plugins_upgr_s2']}', '{$lang['p_info']}', function () {
PluginUpdateFromURL(id, data.url, false)
} );
} else {
$.each( data.versions, function( i, val ) {
$("#upgrade"+val.id).html('{$lang['plugins_upgr_s1']} '+val.version+' <a class="text-danger" onclick="event.stopPropagation(); PluginUpdateFromURL(\''+val.id+'\', \''+val.url+'\', \''+val.version+'\'); return false;" href="#">{$lang['plugins_upgr_s3']}</a>');
});
}
}
}
},
error: function(data) {
HideLoading('');
DLEalert(data.responseText, '{$lang['p_info']}');
}
});
}
$('#pluginupload').submit(function() {
var formData = new FormData($('#pluginupload')[0]);
$('#moduleupload').modal('hide');
$("#pluginupload")[0].reset();
$(".filename").html('{$lang['file_def_1']}');
ShowLoading('');
$.ajax({
url: "engine/ajax/controller.php?mod=plugins",
data: formData,
processData: false,
contentType: false,
type: 'POST',
dataType: 'json',
success: function(data) {
HideLoading('');
if (data) {
if (data.status == "error") {
DLEalert(data.text, '{$lang['p_info']}');
} else if (data.status == "needftp") {
$('#needftp').modal();
} else if (data.status == "succes") {
setTimeout("window.location = '?mod=plugins'", 300 );
}
}
},
error: function(data) {
HideLoading('');
DLEalert(data.responseText, '{$lang['p_info']}');
}
});
return false;
});
$('#ftpserver').submit(function() {
var formData = new FormData($('#ftpserver')[0]);
ShowLoading('');
$('#checkftpbutton').attr("disabled", "disabled");
$.ajax({
url: "engine/ajax/controller.php?mod=plugins",
data: formData,
processData: false,
contentType: false,
type: 'POST',
dataType: 'json',
success: function(data) {
HideLoading('');
$('#checkftpbutton').attr("disabled", false);
if (data.status == "succes") {
setTimeout("window.location = '?mod=plugins'", 300 );
} else if (data.status == "error") {
DLEalert(data.text, '{$lang['all_info']}');
}
},
error: function(data) {
HideLoading('');
$('#checkftpbutton').attr("disabled", false);
DLEalert(data.responseText, '{$lang['p_info']}');
}
});
return false;
});
jQuery(function($){
$('.dd').nestable({
listNodeName: 'tbody',
itemNodeName: 'tr.dd-item',
handleClass: 'dd-handles',
emptyClass: 'dd-emptys',
placeClass: 'dd-placeholders',
placeElementDefault: '<tr class="dd-placeholders"><td> </td><td> </td><td> </td></tr>',
maxDepth: 1
});
$('#nestable').nestable().on('change',function(){
var url = "action=pluginsort&user_hash={$dle_login_hash}&list="+window.JSON.stringify($(this).nestable('serialize'));
ShowLoading('');
$.post('engine/ajax/controller.php?mod=adminfunction', url, function(data){
HideLoading('');
if (data != 'ok') {
DLEalert('{$lang['cat_sort_fail']}', '{$lang['p_info']}');
}
});
});
$(".alert-info").click(function(e){
e.stopPropagation();
});
});
</script>
HTML;
echofooter();
}
?>