mirror of
				https://github.com/slawkens/myaac.git
				synced 2025-10-31 16:06:24 +01:00 
			
		
		
		
	 0ea247ce7e
			
		
	
	0ea247ce7e
	
	
	
		
			
			* Check plugins versions from plugins.my-aac.org/api * Improve plugin update check messaging Updated the success message when checking for plugin updates to clarify the source. Added an informational message when outdated plugins are found to improve user feedback. * Use configurable API URI for plugin updates Replaces hardcoded plugin API URI with a configurable value from config, defaulting to the official API. Also fixes a typo in the success message.
		
			
				
	
	
		
			197 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			197 lines
		
	
	
		
			6.1 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 (!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 {
 | |
| 	$pluginUploadEnabled = true;
 | |
| 	if(!\class_exists('\ZipArchive')) {
 | |
| 		error('Please install PHP zip extension. Plugins upload disabled until then.');
 | |
| 		$pluginUploadEnabled = false;
 | |
| 	}
 | |
| 
 | |
| 	$twig->display('admin.plugins.form.html.twig', ['pluginUploadEnabled' => $pluginUploadEnabled]);
 | |
| 
 | |
| 	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($_GET['check-updates'])) {
 | |
| 		$repoUri = $config['admin_plugins_api_uri'] ?? 'https://plugins.my-aac.org/api/';
 | |
| 		success("Fetching latest info from $repoUri..");
 | |
| 
 | |
| 		$adminPlugins = new \MyAAC\Admin\Plugins();
 | |
| 
 | |
| 		$adminPlugins->setApiBaseUri($repoUri);
 | |
| 
 | |
| 		try {
 | |
| 			$plugins = $adminPlugins->getLatestVersions();
 | |
| 		}
 | |
| 		catch (Exception $e) {
 | |
| 			error($e->getMessage());
 | |
| 		}
 | |
| 
 | |
| 		if (isset($plugins) && count($plugins) > 0) {
 | |
| 			$outdated = [];
 | |
| 
 | |
| 			foreach (get_plugins(true) as $plugin) {
 | |
| 				$string = file_get_contents(BASE . 'plugins/' . $plugin . '.json');
 | |
| 				$plugin_info = json_decode($string, true);
 | |
| 
 | |
| 				if (!$plugin_info) {
 | |
| 					continue;
 | |
| 				}
 | |
| 
 | |
| 				$disabled = (str_contains($plugin, 'disabled.'));
 | |
| 				$pluginOriginal = ($disabled ? str_replace('disabled.', '', $plugin) : $plugin);
 | |
| 
 | |
| 				$info = $plugins[$pluginOriginal] ?? false;
 | |
| 				if ($info && version_compare($info['version'], $plugin_info['version'], '>')) {
 | |
| 					$outdated[] = [
 | |
| 						'name' => $pluginOriginal,
 | |
| 						'yourVersion' => $plugin_info['version'],
 | |
| 						'latestVersion' => $info['version'],
 | |
| 						'link' => $info['link'] ?? 'Unknown',
 | |
| 						'download_link' => $info['download_link'] ?? 'Unknown',
 | |
| 					];
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			if (count($outdated) > 0) {
 | |
| 				info('Following updates have been found for your plugins:');
 | |
| 				$twig->display('admin.plugins.outdated.html.twig', ['plugins' => $outdated]);
 | |
| 			}
 | |
| 			else {
 | |
| 				success('All plugins up to date!');
 | |
| 			}
 | |
| 		}
 | |
| 	} 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
 | |
| ));
 |