/** * @param $packageName * * @return array|bool */ function installPackage($packageName, $options) { global $modx; /** @var modTransportProvider $provider */ if (isset($options['service_url'])) { $providerParams = array('service_url:LIKE' => '%' . $options['service_url'] . '%'); } else { $providerParams = array('service_url:LIKE' => '%store.simpledream.ru%', 'OR:service_url:LIKE' => '%modstore.pro%'); } $provider = $modx->getObject('transport.modTransportProvider', $providerParams); if (!$provider) { $provider = $modx->getObject('transport.modTransportProvider', 1); } $provider->getClient(); $version = $modx->getVersionData(); $productVersion = $version['code_name'] . '-' . $version['full_version']; $response = $provider->request('package', 'GET', array('supports' => $productVersion, 'query' => $packageName)); if (!empty($response)) { $foundPackages = simplexml_load_string($response->response); foreach ($foundPackages as $foundPackage) { /** @var modTransportPackage $foundPackage */ if ($foundPackage->name == $packageName) { $sig = explode('-', $foundPackage->signature); $versionSignature = explode('.', $sig[1]); $url = $foundPackage->location; if (!downloadPackage($url, MODX_CORE_PATH . 'packages/' . $foundPackage->signature . '.transport.zip')) { return array('success' => 0, 'message' => 'Could not download package <b>' . $packageName . '</b>.'); } // Add in the package as an object so it can be upgraded /** @var modTransportPackage $package */ $package = $modx->newObject('transport.modTransportPackage'); $package->set('signature', $foundPackage->signature); $package->fromArray(array('created' => date('Y-m-d h:i:s'), 'updated' => null, 'state' => 1, 'workspace' => 1, 'provider' => $provider->id, 'source' => $foundPackage->signature . '.transport.zip', 'package_name' => $packageName, 'version_major' => $versionSignature[0], 'version_minor' => !empty($versionSignature[1]) ? $versionSignature[1] : 0, 'version_patch' => !empty($versionSignature[2]) ? $versionSignature[2] : 0)); if (!empty($sig[2])) { $r = preg_split('/([0-9]+)/', $sig[2], -1, PREG_SPLIT_DELIM_CAPTURE); if (is_array($r) && !empty($r)) { $package->set('release', $r[0]); $package->set('release_index', isset($r[1]) ? $r[1] : '0'); } else { $package->set('release', $sig[2]); } } if ($package->save() && $package->install()) { return array('success' => 1, 'message' => '<b>' . $packageName . '</b> was successfully installed'); } else { return array('success' => 0, 'message' => 'Could not save package <b>' . $packageName . '</b>'); } break; } } } else { return array('success' => 0, 'message' => 'Could not find <b>' . $packageName . '</b> in MODX repository'); } return true; }
$dst_ru = $dicts . 'dict_ru.zip'; $src_en = 'http://modhost.pro/dists/morphy-0.3.x-en_EN-windows-1250.zip'; $dst_en = $dicts . 'dict_en.zip'; $modx->log(modX::LOG_LEVEL_INFO, 'Trying to download <b>russian</b> dictionary. Please wait...'); if (!file_exists($dst_ru)) { downloadPackage($src_ru, $dst_ru); } $file = new PclZip($dst_ru); if ($ru = $file->extract(PCLZIP_OPT_PATH, $dicts)) { unlink($dst_ru); } else { $modx->log(xPDO::LOG_LEVEL_ERROR, 'Could not extract dictionaries from ' . $dst_ru . ' to ' . $dicts . '. Error: ' . $file->errorInfo()); } $modx->log(modX::LOG_LEVEL_INFO, 'Trying to download <b>english</b> dictionary. Please wait...'); if (!file_exists($dst_en)) { downloadPackage($src_en, $dst_en); } $file = new PclZip($dst_en); if ($en = $file->extract(PCLZIP_OPT_PATH, $dicts)) { unlink($dst_en); } else { $modx->log(xPDO::LOG_LEVEL_ERROR, 'Could not extract dictionaries from ' . $dst_en . ' to ' . $dicts . '. Error: ' . $file->errorInfo()); } if ($ru && $en) { file_put_contents($path . 'phpmorphy/dicts/.installed', date('Y-m-d H:i:s')); } } $success = true; break; case xPDOTransport::ACTION_UNINSTALL: $success = true;