mirror of
				https://github.com/slawkens/myaac.git
				synced 2025-10-30 15:36:24 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			141 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Plugins
 | |
|  *
 | |
|  * @package   MyAAC
 | |
|  * @author    Slawkens <slawkens@gmail.com>
 | |
|  * @copyright 2019 MyAAC
 | |
|  * @link      https://my-aac.org
 | |
|  */
 | |
| 
 | |
| use MyAAC\Plugins;
 | |
| 
 | |
| defined('MYAAC') or die('Direct access not allowed!');
 | |
| $title = 'Plugin manager';
 | |
| 
 | |
| csrfProtect();
 | |
| 
 | |
| $use_datatable = true;
 | |
| 
 | |
| if (!getBoolean(setting('core.admin_plugins_manage_enable'))) {
 | |
| 	warning('Plugin installation and management is disabled in Settings.<br/>If you wish to enable, go to Settings and enable <strong>Enable Plugins Manage</strong>.');
 | |
| }
 | |
| else {
 | |
| 	$twig->display('admin.plugins.form.html.twig');
 | |
| 
 | |
| 	if (isset($_POST['uninstall'])) {
 | |
| 		$uninstall = $_POST['uninstall'];
 | |
| 
 | |
| 		if (Plugins::uninstall($uninstall)) {
 | |
| 			success('Successfully uninstalled plugin ' . $uninstall);
 | |
| 		} else {
 | |
| 			error('Error while uninstalling plugin ' . $uninstall . ': ' . Plugins::getError());
 | |
| 		}
 | |
| 	} else if (isset($_POST['enable'])) {
 | |
| 		$enable = $_POST['enable'];
 | |
| 		if (Plugins::enable($enable)) {
 | |
| 			success('Successfully enabled plugin ' . $enable);
 | |
| 		} else {
 | |
| 			error('Error while enabling plugin ' . $enable . ': ' . Plugins::getError());
 | |
| 		}
 | |
| 	} else if (isset($_POST['disable'])) {
 | |
| 		$disable = $_POST['disable'];
 | |
| 		if (Plugins::disable($disable)) {
 | |
| 			success('Successfully disabled plugin ' . $disable);
 | |
| 		} else {
 | |
| 			error('Error while disabling plugin ' . $disable . ': ' . Plugins::getError());
 | |
| 		}
 | |
| 	} else if (isset($_FILES['plugin']['name'])) {
 | |
| 		$file = $_FILES['plugin'];
 | |
| 		$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', 'application/octet-stream', 'application/zip-compressed');
 | |
| 
 | |
| 		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). You can enlarge the limits by changing "upload_max_filesize" in php.ini';
 | |
| 					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 (isset($error) && $error != false) {
 | |
| 			error($error);
 | |
| 		} else {
 | |
| 			if (is_uploaded_file($file['tmp_name'])) {
 | |
| 				$filetype = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
 | |
| 				if ($filetype == 'zip') // check if it is zipped/compressed file
 | |
| 				{
 | |
| 					$tmp_filename = pathinfo($filename, PATHINFO_FILENAME);
 | |
| 					$targetzip = BASE . 'plugins/' . $tmp_filename . '.zip';
 | |
| 
 | |
| 					if (move_uploaded_file($tmp_name, $targetzip)) { // move uploaded file
 | |
| 						if (Plugins::install($targetzip)) {
 | |
| 							foreach (Plugins::getWarnings() as $warning) {
 | |
| 								warning($warning);
 | |
| 							}
 | |
| 
 | |
| 							$info = Plugins::getPluginJson();
 | |
| 							success((isset($info['name']) ? '<strong>' . $info['name'] . '</strong> p' : 'P') . 'lugin has been successfully installed.');
 | |
| 						} else {
 | |
| 							$error = Plugins::getError();
 | |
| 							error(!empty($error) ? $error : 'Unexpected error happened while installing plugin. Please try again later.');
 | |
| 						}
 | |
| 
 | |
| 						unlink($targetzip); // delete the Zipped file
 | |
| 					} 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.');
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| $plugins = array();
 | |
| foreach (get_plugins(true) as $plugin) {
 | |
| 	$string = file_get_contents(BASE . 'plugins/' . $plugin . '.json');
 | |
| 	$plugin_info = json_decode($string, true);
 | |
| 
 | |
| 	if (!$plugin_info) {
 | |
| 		warning('Cannot load plugin info ' . $plugin . '.json');
 | |
| 	} else {
 | |
| 		$disabled = (str_contains($plugin, 'disabled.'));
 | |
| 		$pluginOriginal = ($disabled ? str_replace('disabled.', '', $plugin) : $plugin);
 | |
| 		$plugins[] = array(
 | |
| 			'name' => $plugin_info['name'] ?? '',
 | |
| 			'description' => $plugin_info['description'] ?? '',
 | |
| 			'version' => $plugin_info['version'] ?? '',
 | |
| 			'author' => $plugin_info['author'] ?? '',
 | |
| 			'contact' => $plugin_info['contact'] ?? '',
 | |
| 			'file' => $pluginOriginal,
 | |
| 			'enabled' => !$disabled,
 | |
| 			'uninstall' => isset($plugin_info['uninstall'])
 | |
| 		);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| $twig->display('admin.plugins.html.twig', array(
 | |
| 	'plugins' => $plugins
 | |
| ));
 | 
