Functions.php 4.89 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
<?php
namespace ACP3\Installer\Core;

use ACP3\Core;

/**
 * Ist für die häufig verwendeten Funktionen im Installer zuständig
 *
 * @author Tino Goratsch
 * @package ACP3 Installer
 */
12
abstract class Functions {
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

	/**
	 * Gibt eine Box mit den aufgetretenen Fehlern aus
	 *
	 * @param string|array $errors
	 * @return string
	 */
	public static function errorBox($errors) {
		$non_integer_keys = false;
		if (is_array($errors) === true) {
			foreach (array_keys($errors) as $key) {
				if (Core\Validate::isNumber($key) === false) {
					$non_integer_keys = true;
					break;
				}
			}
		} else {
			$errors = (array) $errors;
		}
32 33
		Core\Registry::get('View')->assign('error_box', array('non_integer_keys' => $non_integer_keys, 'errors' => $errors));
		return Core\Registry::get('View')->fetch('error_box.tpl');
34 35 36 37 38 39 40 41 42 43 44 45 46 47
	}

	/**
	 * Führt die Datenbankschema-Änderungen durch
	 *
	 * @param array $queries
	 * 	Array mit den durchzuführenden Datenbankschema-Änderungen
	 * @param integer $version
	 * 	Version der Datenbank, auf welche aktualisiert werden soll
	 */
	public static function executeSqlQueries(array $queries, $version) {
		$bool = Core\ModuleInstaller::executeSqlQueries($queries);

		$result = array(
48
			'text' => sprintf(Core\Registry::get('Lang')->t('update_db_version_to'), $version),
49
			'class' => $bool === true ? 'success' : 'important',
50
			'result_text' => Core\Registry::get('Lang')->t($bool === true ? 'db_update_success' : 'db_update_error')
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
		);

		return $result;
	}

	/**
	 * Führt die Installationsanweisungen des jeweiligen Moduls durch
	 *
	 * @param string $module
	 * @return boolean
	 */
	public static function installModule($module) {
		$bool = false;

		$module = ucfirst($module);
		$path = MODULES_DIR . $module . '/' . $module . 'Installer.php';
		if (is_file($path) === true) {
			$className = Core\ModuleInstaller::buildClassName($module);
69
			$install = new $className();
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
			if ($install instanceof \ACP3\Core\ModuleInstaller) {
				$bool = $install->install();
			}
		}

		return $bool;
	}

	/**
	 * Generiert das Dropdown-Menü mit der zur Verfügung stehenden Installersprachen
	 *
	 * @param string $selected_language
	 * @return array
	 */
	public static function languagesDropdown($selected_language) {
		// Dropdown-Menü für die Sprachen
		$languages = array();
		$path = ACP3_ROOT_DIR . 'installation/languages/';
		$files = scandir($path);
		foreach ($files as $row) {
			if ($row !== '.' && $row !== '..') {
				$lang_info = \ACP3\Core\XML::parseXmlFile($path . $row, '/language/info');
				if (!empty($lang_info)) {
					$languages[] = array(
						'language' => substr($row, 0, -4),
						'selected' => $selected_language === substr($row, 0, -4) ? ' selected="selected"' : '',
						'name' => $lang_info['name']
					);
				}
			}
		}
		return $languages;
	}

	/**
	 * Setzt die Ressourcen-Tabelle auf die Standardwerte zurück
	 */
	public static function resetResources($mode = 1) {
108
		\ACP3\Core\Registry::get('Db')->executeUpdate('TRUNCATE TABLE ' . DB_PRE . 'acl_resources');
109 110 111 112 113 114 115

		// Moduldaten in die ACL schreiben
		$modules = scandir(MODULES_DIR);
		foreach ($modules as $module) {
			$path = MODULES_DIR . $module . '/' . $module . 'Installer.php';
			if ($module !== '.' && $module !== '..' && is_file($path) === true) {
				$className = \ACP3\Core\ModuleInstaller::buildClassName($module);
116
				$install = new $className();
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
				$install->addResources($mode);
			}
		}
	}

	/**
	 * Führt die Updateanweisungen eines Moduls aus
	 *
	 * @param string $module
	 * @return integer
	 */
	public static function updateModule($module) {
		$result = false;

		$module = ucfirst($module);
		$path = MODULES_DIR . $module . '/' . $module . 'Installer.php';
		if (is_file($path) === true) {
			$className = Core\ModuleInstaller::buildClassName($module);
135
			$install = new $className();
136
			if ($install instanceof \ACP3\Core\ModuleInstaller &&
137
					(\ACP3\Core\Modules::isInstalled($module) || count($install->renameModule()) > 0)) {
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
				$result = $install->updateSchema();
			}
		}

		return $result;
	}

	/**
	 * Schreibt die Systemkonfigurationsdatei
	 *
	 * @param array $data
	 * @return boolean
	 */
	public static function writeConfigFile(array $data) {
		$path = ACP3_DIR . 'config.php';
		if (is_writable($path) === true) {
			// Konfigurationsdatei in ein Array schreiben
			ksort($data);

			$content = "<?php\n";
			$content.= "define('INSTALLED', true);\n";
			if (defined('DEBUG') === true)
				$content.= "define('DEBUG', " . ((bool) DEBUG === true ? 'true' : 'false') . ");\n";
			$pattern = "define('CONFIG_%s', %s);\n";
			foreach ($data as $key => $value) {
				if (is_numeric($value) === true)
					$value = $value;
				elseif (is_bool($value) === true)
					$value = $value === true ? 'true' : 'false';
				else
					$value = '\'' . $value . '\'';
				$content.= sprintf($pattern, strtoupper($key), $value);
			}
			$bool = @file_put_contents($path, $content, LOCK_EX);
			return $bool !== false ? true : false;
		}
		return false;
	}
}