array(
'en' => 'Kleeja Multi-FTP Uploading',
'ar' => 'تحميل FTP متعدد'
),
# who is developing this plugin?
'plugin_developer' => 'kleeja.com',
# this plugin version
'plugin_version' => '1.1',
# explain what is this plugin, why should i use it?
'plugin_description' => array(
'en' => 'Add Multi-FTP support to Kleeja',
'ar' => 'إضافة دعم التحميل لعدة FTP في كليجا'
),
# min version of kleeja that's required to run this plugin
'plugin_kleeja_version_min' => '2.0',
# max version of kleeja that support this plugin, use 0 for unlimited
'plugin_kleeja_version_max' => '3.9',
# should this plugin run before others?, 0 is normal, and higher number has high priority
'plugin_priority' => 0
);
//after installation message, you can remove it, it's not required
$kleeja_plugin['kj_ftp']['first_run']['ar'] = "
شكراً لاستخدامك إضافة الـFTP المتعدد لكليجا، قم بمراسلتنا بالأخطاء عند ظهورها على البريد:
info@kleeja.com
";
$kleeja_plugin['kj_ftp']['first_run']['en'] = "
Thank you for using our plugin, if you encounter any bugs and errors, contact us:
info@kleeja.com
";
# plugin installation function
$kleeja_plugin['kj_ftp']['install'] = function ($plg_id) {
global $dbprefix, $SQL;
//create table
$sql = "CREATE TABLE IF NOT EXISTS `{$dbprefix}kj_ftp_info` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) COLLATE utf8_bin DEFAULT NULL,
`host` varchar(199) COLLATE utf8_bin DEFAULT NULL,
`username` varchar(199) COLLATE utf8_bin DEFAULT NULL,
`password` varchar(199) COLLATE utf8_bin DEFAULT NULL,
`port` int(4) DEFAULT '21',
`root` varchar(199) COLLATE utf8_bin DEFAULT '',
`passive` tinyint(1) DEFAULT '1',
`ssl` tinyint(1) DEFAULT '1',
`timeout` int(4) DEFAULT '60',
`link` varchar(199) COLLATE utf8_bin DEFAULT NULL,
`active` tinyint(1) NOT NULL DEFAULT '0',
`group` int(4) DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;";
$SQL->query($sql);
//new language variables
add_olang(array(
'R_KJ_FTP_OPTIONS' => 'تحميل الـFTP المتعدد',
#
'KJ_FTP_OPT_NAME' => 'الإسم الثابت',
'KJ_FTP_OPT_NAME_HELP' => 'كليجا تستخدم الإسم الثابت لحفظ وجلب الملفات، عند تغيير الإسم الثابت لن نستطيع جلب الملفات! عدل الإسم في حالة واحدة فقط، وهي لربط ملفات سابقة بحساب قديم تم حذفه.',
'KJ_FTP_OPT_HOST' => 'الخادم',
'KJ_FTP_OPT_HOST_HELP' => ' مثل: kleeja.com أو سب دومين sub.kleeja.com أو آي بي 188.54.12.11',
'KJ_FTP_OPT_USERNAME' => 'اسم المستخدم',
'KJ_FTP_OPT_PASSWORD' => 'كلمة المرور (مخفية، أكتب جديدة فقط لو أردت التغيير)',
'KJ_FTP_OPT_PORT' => 'منفذ',
'KJ_FTP_OPT_ROOT' => 'المسار الجذر',
'KJ_FTP_OPT_ROOT_HELP' => 'المسار الذي ستقوم كليجا بإنشاء مجلد uploads داخله، غالباً دعه فارغ',
'KJ_FTP_OPT_PASSIVE_HELP' => 'وضع FTP الآمن, قد يكون أبطئ',
'KJ_FTP_OPT_ACTIVE' => 'مُفعل',
'KJ_FTP_OPT_ACTIVE_HELP' => 'الحساب غير المفعل لن يستلم تحميلات جديدة ولكن سيتم جلب الملفات التي تم تحميلها مسبقاً منه.',
'KJ_FTP_OPT_LINK' => 'الرابط الفعلي',
'KJ_FTP_OPT_LINK_HELP' => 'مثل: http://kleeja.com أو https://www.example.com/ftp1، لو ترك فارغاً سيتم إستخدام إنتاج رابط من الخادم ومجلد الروت.',
'KJ_FTP_ADD_NEW_ACCOUNT' => 'أضف حساب FTP جديد',
'KJ_FTP_ADD_NEW_ACCOUNT_EXP' => ' هل أنت متأكد من إضافة حساب FTP جديد؟
يمكنك إضافة بيانات الحساب بعد الإضافة وتعديل الحساب.',
'KJ_FTP_ACCOUNT_ADDED' => 'تم إضافة الحساب بنجاح',
'KJ_FTP_ACCOUNT_UPDATED' => 'تم تحديث الحساب بنجاح',
'KJ_FTP_ACCOUNT_NAME_CONFLICT' => 'الأسم الثابت موجود في حساب آخر! لايمكنك إستخدام اسم ثابت واحد في حسابين',
#
'KJ_FTP_NO_ACTIVE_ACCOUNTS_NOTE' => 'لآنه لايوجد أي حساب FTP تم تفعيله للتحميل، فإن كليجا ستستخدم نظام التحميل الإفتراضي المحلي. لجعل كليجا تقوم بالتحميل بإستخدام الإضافة، قم بتفعيل حساب FTP للتحميل الآن!',
),
'ar',
$plg_id);
add_olang(array(
'R_KJ_FTP_OPTIONS' => 'KJ - Multi-FTP Uploading',
#
'KJ_FTP_OPT_NAME' => 'Unique Name',
'KJ_FTP_OPT_NAME_HELP' => 'Kleeja uses this name to identify that a file is related to this FTP account. Changing it will ruin the old files connection. Only edit this if you want to recover a connection of an old FTP account that has been deleted.',
'KJ_FTP_OPT_HOST' => 'Host',
'KJ_FTP_OPT_HOST_HELP' => ' Like: kleeja.com or a subdomain: sub.kleeja.com or an IP: 188.54.12.11',
'KJ_FTP_OPT_USERNAME' => 'Username',
'KJ_FTP_OPT_PASSWORD' => 'Password (hidden, type a new password only you want to change it)',
'KJ_FTP_OPT_PORT' => 'Port',
'KJ_FTP_OPT_ROOT' => 'Root Path',
'KJ_FTP_OPT_ROOT_HELP' => 'The path where Kleeja will create "uploads" folder in. Usually keeping it empty is fine.',
'KJ_FTP_OPT_PASSIVE_HELP' => 'Secure Passive FTP mode, slower.',
'KJ_FTP_OPT_ACTIVE' => 'Active',
'KJ_FTP_OPT_ACTIVE_HELP' => 'Inactive account will not receive new uploads to it, but will continue serving previous upload from it.',
'KJ_FTP_OPT_LINK' => 'Direct Link',
'KJ_FTP_OPT_LINK_HELP' => 'Link: http://kleeja.com or https://www.example.com/ftp1; If left empty, we will try to generate a link from the ftp host and given root folder.',
'KJ_FTP_ADD_NEW_ACCOUNT' => 'Add New FTP Account',
'KJ_FTP_ADD_NEW_ACCOUNT_EXP' => 'Are you sure of adding a new FTP account?
You can edit the account information after adding it.',
'KJ_FTP_ACCOUNT_ADDED' => 'The FTP account has been added successfully!',
'KJ_FTP_ACCOUNT_UPDATED' => 'The FTP account has been updated successfully!',
'KJ_FTP_ACCOUNT_NAME_CONFLICT' => 'The unique name is existed before, you can not have two accounts with same unique name!',
#
'KJ_FTP_NO_ACTIVE_ACCOUNTS_NOTE' => 'Because you did not activate any FTP account, Kleeja will fallback to the default local uploading method. To make Kleeja Use FTP uploading method, activate an FTP account now!',
),
'en',
$plg_id);
};
//plugin update function, called if plugin is already installed but version is different than current
$kleeja_plugin['kj_ftp']['update'] = function ($old_version, $new_version) {
// if(version_compare($old_version, '0.5', '<')){
// //... update to 0.5
// }
//
// if(version_compare($old_version, '0.6', '<')){
// //... update to 0.6
// }
//you could use update_config, update_olang
};
# plugin uninstalling, function to be called at uninstalling
$kleeja_plugin['kj_ftp']['uninstall'] = function ($plg_id) {
//delete options
// delete_config(array(
// 'kj_ftp_home_meta_description',
// 'kj_ftp_home_meta_keywords'
// ));
//delete language variables
foreach (['ar', 'en'] as $language) {
delete_olang(null, $language, $plg_id);
}
};
# plugin functions
$kleeja_plugin['kj_ftp']['functions'] = array(
//add to admin menu
'begin_admin_page' => function ($args)
{
$adm_extensions = $args['adm_extensions'];
$ext_icons = $args['ext_icons'];
$adm_extensions[] = 'kj_ftp_options';
$ext_icons['kj_ftp_options'] = 'cloud-upload';
return compact('adm_extensions', 'ext_icons');
},
'not_exists_kj_ftp_options' => function()
{
$include_alternative = dirname(__FILE__) . '/kj_ftp_options.php';
return compact('include_alternative');
},
'begin_index_page' => function()
{
if(defined('DISABLE_KLJ_FTP')){
return;
}
$uploadingMethodClass = dirname(__FILE__) . '/ftpUploader.php';
return compact('uploadingMethodClass');
},
'kleeja_get_link_func2' => function($args)
{
if(defined('DISABLE_KLJ_FTP')){
return;
}
global $config;
if(($args['pid'] == 'image' || $args['pid'] == 'thumb') && $config['id_form_img'] == 'direct'){
$realFolder = str_replace(array_keys($args['extra']), array_values($args['extra']), $args['links'][$args['pid']]);
$uniqueName = '';
if(strpos($realFolder, 'ftp://') !== false)
{
$afterFTP = explode('ftp://', $realFolder, 2);
$folder = explode(':', $afterFTP[1], 2);
$uniqueName = $folder[0];
$realFolder = $folder[1];
if(empty($uniqueName)){
$return_link = getKleejaFtpInstance()->getLink('') . $realFolder;
}else {
$return_link = getKleejaFtpLink($uniqueName, $realFolder);
}
return compact('return_link');
}
}
},
'down_go_page' => function($args)
{
if(defined('DISABLE_KLJ_FTP')){
return;
}
if(strpos($args['f'], 'ftp://') !== false)
{
define('MAKE_DOPHP_301_HEADER', true);
$afterFTP = explode('ftp://', $args['f'], 2);
$filename = $args['n'];
$folder = explode(':', $afterFTP[1], 2);
$uniqueName = $folder[0];
$realFolder = ig('thmb') || ig('thmbf') ? $folder[1] . '/thumbs' : $folder[1];
$path_file = getKleejaFtpLink($uniqueName, $realFolder, $filename);
return compact('path_file');
}
},
'kleeja_unlink_func' => function($args)
{
if(defined('DISABLE_KLJ_FTP')){
return;
}
if(strpos($args['filePath'], 'ftp://') !== false)
{
$afterFTP = explode('ftp://', $args['filePath'], 2);
$path = explode(':', $afterFTP[1], 2);
$uniqueName = $path[0];
$filePath = $path[1];
$ftpAccount = getKleejaFtpAccount($uniqueName);
getKleejaFtpAccountInstance($ftpAccount)->delete($filePath);
// getKleejaFtpAccountInstance($ftpAccount)->close();
$return = true;
return compact('return');
}
},
'end_common' => function()
{
global $dbprefix, $SQL;
if(!
$SQL->num_rows(
$SQL->query("SELECT active FROM {$dbprefix}kj_ftp_info WHERE active=1")
)
){
define('DISABLE_KLJ_FTP', true);
}
},
'stats_start_admin' => function($args)
{
$ADM_NOTIFICATIONS = $args['ADM_NOTIFICATIONS'];
if(defined('DISABLE_KLJ_FTP')) {
global $lang, $olang;
$ADM_NOTIFICATIONS['kljFtpNoActive'] = array(
'id' => 'kljFtpNoActive',
'msg_type'=> 'info',
'title'=> $lang['NOTE'] . ' (' . $olang['R_KJ_FTP_OPTIONS'] . ')',
'msg'=> $olang['KJ_FTP_NO_ACTIVE_ACCOUNTS_NOTE']
);
}else{
unset($ADM_NOTIFICATIONS['htaccess_u'], $ADM_NOTIFICATIONS['htaccess_t'], $ADM_NOTIFICATIONS['no_thumbs']);
}
return compact('ADM_NOTIFICATIONS');
},
//support video plugin
'plugin:video_player:do_display' => function($args){
$folder = $args['file_info']['folder'];
$filename = $args['file_info']['name'];
if(strpos($folder, 'ftp://') !== false)
{
$afterFTP = explode('ftp://', $folder, 2);
$path = explode(':', $afterFTP[1], 2);
$uniqueName = $path[0];
$realFolder = $path[1];
$video_path = getKleejaFtpLink($uniqueName, $realFolder, $filename);
return compact('video_path');
}
},
//support pdf plugin
'plugin:pdf_viewer:do_display' => function($args){
$folder = $args['file_info']['folder'];
$filename = $args['file_info']['name'];
if(strpos($folder, 'ftp://') !== false)
{
$afterFTP = explode('ftp://', $folder, 2);
$path = explode(':', $afterFTP[1], 2);
$uniqueName = $path[0];
$realFolder = $path[1];
$pdf_path = getKleejaFtpLink($uniqueName, $realFolder, $filename);
return compact('pdf_path');
}
}
);
if(!function_exists('getKleejaFtpInstance'))
{
/**
* @return kleeja_ftp|null
*/
function getKleejaFtpInstance()
{
if (!class_exists('kleeja_ftp'))
{
require_once dirname(__FILE__) . '/ftp.php';
}
/** @var kleeja_ftp $kljFtp */
static $kljFtp = null;
if (is_null($kljFtp))
{
global $dbprefix, $SQL, $cache;
##### ------ > cached random, solve inadequate mySQL RAND.
if (!($ftp_accounts = $cache->get('klj_ftp::ftp_names')))
{
$query = array(
'SELECT' => 'k.name',
'FROM' => "`{$dbprefix}kj_ftp_info` k",
'WHERE' => 'k.active = 1'
);
$result = $SQL->build($query);
$ftp_accounts = array();
while($row=$SQL->fetch_array($result))
{
array_push($ftp_accounts, $row['name']);
}
$SQL->freeresult($result);
$cache->save('klj_ftp::ftp_names', $ftp_accounts);
}
if (sizeof($ftp_accounts) == 0) {
kleeja_show_error(102, 'NO FTP ACCOUNT FOUND!', __FILE__, __LINE__);
return null;
}
####
//random
shuffle($ftp_accounts);
shuffle($ftp_accounts);
shuffle($ftp_accounts);
$ftp_account = getKleejaFtpAccount($ftp_accounts[0]);
$kljFtp = new kleeja_ftp();
$connect = $kljFtp->open(
$ftp_account['host'],
$ftp_account['username'],
$ftp_account['password'],
$ftp_account['port'],
$ftp_account['root'],
$ftp_account['passive'] == 1,
$ftp_account['ssl'] == 1,
$ftp_account['timeout']
);
if(!$connect){
kleeja_show_error(102, 'FTP ACCOUNT CAN NOT CONNECT (' . $ftp_account['name'] . ')!', __FILE__, __LINE__);
}
$kljFtp->setUniqueName($ftp_account['name']);
$kljFtp->setLink($ftp_account['link']);
register_shutdown_function(function() { getKleejaFtpInstance()->close(); } );
}
return $kljFtp;
}
}
if(!function_exists('getKleejaFtpAccountInstance'))
{
/**
* @return kleeja_ftp|null
*/
function getKleejaFtpAccountInstance($ftp_account)
{
if (!class_exists('kleeja_ftp'))
{
require_once dirname(__FILE__) . '/ftp.php';
}
/** @var kleeja_ftp $kljFtp */
static $kljFtp = null;
//
if ($kljFtp === null || $kljFtp->getUniqueName() !== $ftp_account['name'])
{
$kljFtp = new kleeja_ftp();
$connect = $kljFtp->open(
$ftp_account['host'],
$ftp_account['username'],
$ftp_account['password'],
$ftp_account['port'],
$ftp_account['root'],
$ftp_account['passive'] == 1,
$ftp_account['ssl'] == 1,
$ftp_account['timeout']
);
if(!$connect){
kleeja_show_error(102, 'FTP ACCOUNT CAN NOT CONNECT (' . $ftp_account['name'] . ')!', __FILE__, __LINE__);
}
$kljFtp->setUniqueName($ftp_account['name']);
$kljFtp->setLink($ftp_account['link']);
register_shutdown_function(function() use($kljFtp) { $kljFtp->close(); } );
}
return $kljFtp;
}
}
if(!function_exists('getKleejaFtpAccount'))
{
function getKleejaFtpAccount($uniqueName)
{
global $dbprefix, $SQL;
$query = array(
'SELECT' => 'k.*',
'FROM' => "`{$dbprefix}kj_ftp_info` k",
'WHERE' => "k.name = '" . $SQL->escape($uniqueName) . "'",
'LIMIT' => '1'
);
$result = $SQL->build($query);
if($SQL->num_rows($result))
{
return $SQL->fetch_array($result);
}
return false;
}
}
if(!function_exists('getKleejaFtpLink'))
{
function getKleejaFtpLink($uniqueName, $folder, $filename = '')
{
$ftp_account = getKleejaFtpAccount($uniqueName);
if($ftp_account == false)
{
return '...' . $uniqueName . '...';
}
$link = !empty($ftp_account['link']) ? trim($ftp_account['link']) : '';
$host = trim($ftp_account['host']);
$rootPath = trim($ftp_account['root']);
if($link != '')
{
return ltrim($link, '/') . '/' . $folder . ($filename !== '' ? '/' . $filename : '');
}
if ($rootPath != '')
{
if (substr($rootPath, -1, 1) == '/')
{
$rootPath = substr($rootPath, 0, -1);
}
}
return $host . '/' . $rootPath . '/' . $folder . ($filename !== '' ? '/' . $filename : '');
}
}