getInternalName() . '/Routes.php', __DIR__ . '/../../Web/' . $appInfo->getInternalName() . '/Admin/Install/Application/Routes.php'); } /** * Init hooks. * * @param ApplicationInfo $appInfo Application info * * @return void * * @throws PermissionException * * @since 1.0.0 */ public static function activateHooks(ApplicationInfo $appInfo = null) : void { self::installRoutes(__DIR__ . '/../../Web/' . $appInfo->getInternalName() . '/Hooks.php', __DIR__ . '/../../Web/' . $appInfo->getInternalName() . '/Admin/Install/Application/Hooks.php'); } /** * Install routes. * * @param string $destRoutePath Destination route path * @param string $srcRoutePath Source route path * * @return void * * @throws PermissionException * * @since 1.0.0 */ protected static function installRoutes(string $destRoutePath, string $srcRoutePath) : void { if (!\is_file($destRoutePath)) { \file_put_contents($destRoutePath, 'getInternalName() . '/Routes.php', __DIR__ . '/../../Web/' . $appInfo->getInternalName() . '/Admin/Install/Application/Routes.php'); } /** * Deactivate hooks. * * @param ApplicationInfo $appInfo Application info * * @return void * * @throws PermissionException * * @since 1.0.0 */ public static function deactivateHooks(ApplicationInfo $appInfo) : void { self::installRoutes(__DIR__ . '/../../Web/' . $appInfo->getInternalName() . '/Hooks.php', __DIR__ . '/../../Web/' . $appInfo->getInternalName() . '/Admin/Install/Application/Hooks.php'); } /** * Uninstall routes. * * @param string $destRoutePath Destination route path * @param string $srcRoutePath Source route path * * @return void * * @throws PermissionException * * @since 1.0.0 */ public static function uninstallRoutes(string $destRoutePath, string $srcRoutePath) : void { if (!\is_file($destRoutePath) || !\is_file($srcRoutePath) ) { return; } if (!\is_file($destRoutePath)) { throw new PathException($destRoutePath); } if (!\is_writable($destRoutePath)) { throw new PermissionException($destRoutePath); } /** @noinspection PhpIncludeInspection */ $appRoutes = include $destRoutePath; /** @noinspection PhpIncludeInspection */ $moduleRoutes = include $srcRoutePath; $appRoutes = ArrayUtils::array_diff_assoc_recursive($appRoutes, $moduleRoutes); \file_put_contents($destRoutePath, 'get('update')); $query->update('app') ->sets('app.app_status', ApplicationStatus::NORMAL) ->where('app.app_name', '=', $info->getInternalName()) ->execute(); } /** * Deactivate app. * * @param DatabasePool $dbPool Database instance * @param ApplicationInfo $info Module info * * @return void * * @since 1.0.0 */ public static function deactivate(DatabasePool $dbPool, ApplicationInfo $info) : void { self::deactivateRoutes($info); self::deactivateHooks($info); self::deactivateInDatabase($dbPool, $info); } /** * Deactivate app in database. * * @param DatabasePool $dbPool Database instance * @param ApplicationInfo $info Module info * * @return void * * @since 1.0.0 */ public static function deactivateInDatabase(DatabasePool $dbPool, ApplicationInfo $info) : void { $query = new Builder($dbPool->get('update')); $query->update('app') ->sets('app.app_status', ApplicationStatus::DISABLED) ->where('app.app_name', '=', $info->getInternalName()) ->execute(); } }