Some big update

* added option to change character name in accountmanagement
* added automatic database updater (data migrations)
* renamed events to hooks
* moved hooks to database
* now you can use hooks in plugins
* set account.type field to 5, if TFS 1.0+
* added example plugin
* new, latest google analytics code
* fixed bug with loading account.name that has numbers in it
* fixed many bugs in player editor in admin panel
* added error handling to plugin manager and some more verification in
file has been correctly unpacked/uploaded
* fixed Statistics page in admin panel when using account.number
* fixed bug when creating/recovering account on servers with
account.salt field (TFS 0.3 for example)
* fixed forum showing thread with html tags (added from news manager)
* new, actual code for youtube videos in movies
* fixed showing vocation images when using
$config['online_vocations_images']
* many fixes in polls (also importing proper schema)
* fixed hovering on buttons in kathrine template (on accountmanagement
page)
* many fixes in signatures
* added missing gesior signature system
This commit is contained in:
slawkens1
2017-05-11 04:13:16 +02:00
parent 956e551872
commit a177c93e97
40 changed files with 943 additions and 483 deletions

View File

@@ -10,6 +10,8 @@
*/
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Plugin manager';
require(SYSTEM . 'hooks.php');
?>
<form enctype="multipart/form-data" method="post">
<input type="hidden" name="upload_plugin" />
@@ -37,33 +39,100 @@ if(isset($_FILES["plugin"]["name"]))
$filename = $file["name"];
$tmp_name = $file["tmp_name"];
$type = $file["type"];
$name = explode(".", $filename);
$accepted_types = array('application/zip', 'application/x-zip-compressed', 'multipart/x-zip', 'application/x-compressed');
if(in_array($type, $accepted_types) && strtolower($name[1]) == 'zip') // check if it is zipped/compressed file
{
$targetdir = BASE;
$targetzip = BASE . 'plugins/' . $name[0] . '.zip';
if(isset($file['error'])) {
$error = 'Error uploading file';
switch( $file['error'] ) {
case UPLOAD_ERR_OK:
$error = false;
break;
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
$error .= ' - file too large (limit of '.ini_get('upload_max_filesize').' bytes).';
break;
case UPLOAD_ERR_PARTIAL:
$error .= ' - file upload was not completed.';
break;
case UPLOAD_ERR_NO_FILE:
$error .= ' - zero-length file uploaded.';
break;
default:
$error .= ' - internal error #' . $file['error'];
break;
}
}
if(move_uploaded_file($tmp_name, $targetzip)) { // move uploaded file
$zip = new ZipArchive();
$x = $zip->open($targetzip); // open the zip file to extract
if ($x === true) {
$zip->extractTo($targetdir); // place in the directory with same name
$zip->close();
unlink($targetzip); // delete the Zipped file
$string = file_get_contents(BASE . 'plugins/' . $name[0] . '.json');
$plugin_info = json_decode($string, true);
$message = '<p class="success"><strong>' . $plugin_info['name'] . '</strong> plugin has been successfully installed.</p>';
if(isset($error) && $error != false) {
error($error);
}
else {
if(is_uploaded_file($file['tmp_name']) ) {
if(in_array($type, $accepted_types) && strtolower($name[1]) == 'zip') // check if it is zipped/compressed file
{
$targetdir = BASE;
$targetzip = BASE . 'plugins/' . $name[0] . '.zip';
if(move_uploaded_file($tmp_name, $targetzip)) { // move uploaded file
$zip = new ZipArchive();
$x = $zip->open($targetzip); // open the zip file to extract
if ($x === true) {
if($zip->extractTo($targetdir)) { // place in the directory with same name
$string = file_get_contents(BASE . 'plugins/' . $name[0] . '.json');
$plugin = json_decode($string, true);
if($plugin == NULL) {
warning('Cannot load ' . BASE . 'plugins/' . $name[0] . '.json. File might be not valid json code.');
}
if(isset($plugin['install'])) {
if(file_exists(BASE . $plugin['install']))
require(BASE . $plugin['install']);
else
warning('Cannot load install script. Your plugin might be not working correctly.');
}
if(isset($plugin['hooks'])) {
foreach($plugin['hooks'] as $_name => $info) {
if(isset($hook_types[$info['type']])) {
$query = $db->query('SELECT `id` FROM `' . TABLE_PREFIX . 'hooks` WHERE `name` = ' . $db->quote($_name) . ';');
if($query->rowCount() == 1) { // found something
$query = $query->fetch();
$db->query('UPDATE `' . TABLE_PREFIX . 'hooks` SET `type` = ' . $hook_types[$info['type']] . ', `file` = ' . $db->quote($info['file']) . ' WHERE `id` = ' . (int)$query['id'] . ';');
}
else {
$db->query('INSERT INTO `' . TABLE_PREFIX . 'hooks` (`id`, `name`, `type`, `file`) VALUES (NULL, ' . $db->quote($_name) . ', ' . $hook_types[$info['type']] . ', ' . $db->quote($info['file']) . ');');
}
}
else
warning('Unknown event type: ' . $info['type']);
}
}
success('<strong>' . $plugin['name'] . '</strong> plugin has been successfully installed.');
}
else {
error('There was a problem with extracting zip archive.');
}
$zip->close();
unlink($targetzip); // delete the Zipped file
}
else {
error('There was a problem with opening zip archive.');
}
}
else
error('There was a problem with the upload. Please try again.');
}
else {
error('The file you are trying to upload is not a .zip file. Please try again.');
}
}
else {
error('Error uploading file - unknown error.');
}
}
else
$message = '<p class="error">There was a problem with the upload. Please try again.</p>';
}
else
$message = '<p class="error">The file you are trying to upload is not a .zip file. Please try again.</p>';
}
echo $message;
@@ -78,12 +147,12 @@ echo $message;
<th>Contact</th>
<?php
$plugins = array();
$path = PLUGINS;
foreach(scandir($path) as $file)
{
$file_info = explode('.', $file);
if($file == '.' || $file == '..' || $file == 'disabled' || is_dir($file) || !$file_info[1] || $file_info[1] != 'json')
if($file == '.' || $file == '..' || $file == 'disabled' || $file == 'example.json' || is_dir($path . $file) || !$file_info[1] || $file_info[1] != 'json')
continue;
$string = file_get_contents(BASE . 'plugins/' . $file_info[0] . '.json');