Grav\Plugin\Admin\Gpm::install PHP Method

install() public static method

public static install ( Grav\Common\GPM\Common\Package[] | string[] | string $packages, array $options ) : boolean
$packages Grav\Common\GPM\Common\Package[] | string[] | string
$options array
return boolean
    public static function install($packages, array $options)
    {
        $options = array_merge(self::$options, $options);
        if (!Installer::isGravInstance($options['destination']) || !Installer::isValidDestination($options['destination'], [Installer::EXISTS, Installer::IS_LINK])) {
            return false;
        }
        $packages = is_array($packages) ? $packages : [$packages];
        $count = count($packages);
        $packages = array_filter(array_map(function ($p) {
            return !is_string($p) ? $p instanceof Package ? $p : false : self::GPM()->findPackage($p);
        }, $packages));
        if (!$options['skip_invalid'] && $count !== count($packages)) {
            return false;
        }
        $messages = '';
        foreach ($packages as $package) {
            if (isset($package->dependencies) && $options['install_deps']) {
                $result = static::install($package->dependencies, $options);
                if (!$result) {
                    return false;
                }
            }
            // Check destination
            Installer::isValidDestination($options['destination'] . DS . $package->install_path);
            if (Installer::lastErrorCode() === Installer::EXISTS && !$options['overwrite']) {
                return false;
            }
            if (Installer::lastErrorCode() === Installer::IS_LINK && !$options['ignore_symlinks']) {
                return false;
            }
            $license = Licenses::get($package->slug);
            $local = static::download($package, $license);
            Installer::install($local, $options['destination'], ['install_path' => $package->install_path, 'theme' => $options['theme']]);
            Folder::delete(dirname($local));
            $errorCode = Installer::lastErrorCode();
            if ($errorCode) {
                $msg = Installer::lastErrorMsg();
                throw new \RuntimeException($msg);
            }
            if (count($packages) == 1) {
                $message = Installer::getMessage();
                if ($message) {
                    return $message;
                } else {
                    $messages .= $message;
                }
            }
        }
        return $messages ?: true;
    }

Usage Example

 protected function taskInstallPackage()
 {
     $data = $this->post;
     $package = isset($data['package']) ? $data['package'] : '';
     $type = isset($data['type']) ? $data['type'] : '';
     if (!$this->authorizeTask('install ' . $type, ['admin.' . $type, 'admin.super'])) {
         $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK')];
         return false;
     }
     try {
         $result = Gpm::install($package, ['theme' => $type == 'theme']);
     } catch (\Exception $e) {
         $this->admin->json_response = ['status' => 'error', 'message' => $e->getMessage()];
         return false;
     }
     if ($result) {
         $this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate(is_string($result) ? $result : sprintf($this->admin->translate('PLUGIN_ADMIN.PACKAGE_X_INSTALLED_SUCCESSFULLY', null), $package))];
     } else {
         $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.INSTALLATION_FAILED')];
     }
     return true;
 }
All Usage Examples Of Grav\Plugin\Admin\Gpm::install