Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Поддержка MODX3 #2

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
257 changes: 130 additions & 127 deletions _build/build.php

Large diffs are not rendered by default.

83 changes: 53 additions & 30 deletions _build/resolvers/setup.php
Original file line number Diff line number Diff line change
@@ -1,12 +1,23 @@
<?php
/** @var xPDOTransport $transport */

use MODX\Revolution\modX as modX3;
use MODX\Revolution\Transport\modTransportPackage as modTransportPackage3;
use MODX\Revolution\Transport\modTransportProvider as modTransportProvider3;
use xPDO\Transport\xPDOTransport as xPDOTransport3;

/** @var xPDOTransport|xPDOTransport3 $transport */
/** @var array $options */
/** @var modX $modx */
/** @var modX|modX3 $modx */
if (!$transport->xpdo || !($transport instanceof xPDOTransport)) {
return false;
}

$modx =& $transport->xpdo;
$modx = $transport->xpdo;

if (!defined('MODX3')) {
define('MODX3', class_exists('MODX\Revolution\modX'));
}

$packages = [
'FormIt' => [
'version' => '4.0.1-pl',
Expand Down Expand Up @@ -42,14 +53,14 @@
};

$installPackage = function ($packageName, $options = []) use ($modx, $downloadPackage) {
/** @var modTransportProvider $provider */
/** @var modTransportProvider|modTransportProvider3 $provider */
if (!empty($options['service_url'])) {
$provider = $modx->getObject('transport.modTransportProvider', [
$provider = $modx->getObject(MODX3 ? modTransportProvider3::class : 'transport.modTransportProvider', [
'service_url:LIKE' => '%' . $options['service_url'] . '%',
]);
}
if (empty($provider)) {
$provider = $modx->getObject('transport.modTransportProvider', 1);
$provider = $modx->getObject(MODX3 ? modTransportProvider3::class : 'transport.modTransportProvider', 1);
}
$modx->getVersionData();
$productVersion = $modx->version['code_name'] . '-' . $modx->version['full_version'];
Expand All @@ -59,13 +70,29 @@
'query' => $packageName,
]);

if (!empty($response)) {
$foundPackages = simplexml_load_string($response->response);
foreach ($foundPackages as $foundPackage) {
/** @var modTransportPackage $foundPackage */
/** @noinspection PhpUndefinedFieldInspection */
if ($foundPackage->name == $packageName) {
$sig = explode('-', $foundPackage->signature);
if (empty($response)) {
return [
'success' => 0,
'message' => "Could not find <b>{$packageName}</b> in MODX repository",
];
}

$foundPackages = simplexml_load_string(MODX3 ? $response->getBody()->getContents() : $response->response);
foreach ($foundPackages as $foundPackage) {
/** @var modTransportPackage $foundPackage */
/** @noinspection PhpUndefinedFieldInspection */
if ((string)$foundPackage->name === $packageName) {
if (MODX3) {
/** @var modTransportPackage $package */
$package = $provider->transfer((string)$foundPackage->signature);
if ($package && $package->install()) {
return [
'success' => 1,
'message' => "<b>{$packageName}</b> was successfully installed",
];
}
} else {
$sig = explode('-', (string)$foundPackage->signature);
$versionSignature = explode('.', $sig[1]);
/** @noinspection PhpUndefinedFieldInspection */
$url = $foundPackage->location;
Expand Down Expand Up @@ -110,20 +137,14 @@
'success' => 1,
'message' => "<b>{$packageName}</b> was successfully installed",
];
} else {
return [
'success' => 0,
'message' => "Could not save package <b>{$packageName}</b>",
];
}
break;
}

return [
'success' => 0,
'message' => "Could not save package <b>{$packageName}</b>",
];
}
} else {
return [
'success' => 0,
'message' => "Could not find <b>{$packageName}</b> in MODX repository",
];
}

return true;
Expand All @@ -137,19 +158,21 @@
if (!is_array($data)) {
$data = ['version' => $data];
}
$installed = $modx->getIterator('transport.modTransportPackage', ['package_name' => $name]);
/** @var modTransportPackage $package */
$installed = $modx->getIterator(MODX3 ? modTransportPackage3::class : 'transport.modTransportPackage', ['package_name' => $name]);
/** @var modTransportPackage|modTransportPackage3 $package */
foreach ($installed as $package) {
if ($package->compareVersion($data['version'], '<=')) {
continue(2);
}
}
$modx->log(modX::LOG_LEVEL_INFO, "Trying to install <b>{$name}</b>. Please wait...");
$response = $installPackage($name, $data);
$level = $response['success']
? modX::LOG_LEVEL_INFO
: modX::LOG_LEVEL_ERROR;
$modx->log($level, $response['message']);
if (is_array($response)) {
$level = $response['success']
? modX::LOG_LEVEL_INFO
: modX::LOG_LEVEL_ERROR;
$modx->log($level, $response['message']);
}
}
$success = true;
break;
Expand Down
42 changes: 34 additions & 8 deletions assets/components/fetchit/action.php
Original file line number Diff line number Diff line change
@@ -1,25 +1,51 @@
<?php

/** @var modX $modx */
use FetchIt\FetchIt;
use MODX\Revolution\Error\modError;

if (!file_exists($_SERVER['DOCUMENT_ROOT'] . '/config.core.php')) {
header("HTTP/1.1 500 Internal Server Error");
exit('Server initialization error!');
}

define('MODX_API_MODE', true);
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php';
$modx->getService('error', 'error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');
require_once $_SERVER['DOCUMENT_ROOT'] . '/config.core.php';
require_once MODX_CORE_PATH . 'model/modx/modx.class.php';

/** @var MODX\Revolution\modX|modX $modx */
$modx = new modX();
$modx->initialize('web');

$isMODX3 = class_exists('MODX\Revolution\modX');

if ($isMODX3) {
if (!$modx->services->has('error')) {
$modx->services->add('error', new modError($modx));
}
$modx->error = $modx->services->get('error');
} else {
$modx->getService('error', 'error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');
}

// Switch context if need
if (!empty($_REQUEST['pageId'])) {
if ($resource = $modx->getObject('modResource', (int)$_REQUEST['pageId'])) {
if ($resource->get('context_key') != 'web') {
if ($resource->get('context_key') !== 'web') {
$modx->switchContext($resource->get('context_key'));
}
$modx->resource = $resource;
}
}

/** @var FetchIt $FetchIt */
$FetchIt = $modx->getService('fetchit', 'FetchIt', $modx->getOption('fetchit.core_path', null,
$modx->getOption('core_path') . 'components/fetchit/') . 'model/', []);
if ($isMODX3 && $modx->services->has(FetchIt::class)) {
$FetchIt = $modx->services->get(FetchIt::class);
} else {
require_once $modx->getOption('fetchit.core_path', null, $modx->getOption('core_path') . 'components/fetchit/') . 'model/fetchit.class.php';
$FetchIt = new FetchIt($modx);
}

if (!isset($_POST)) {
$modx->sendRedirect($modx->makeUrl($modx->getOption('site_start'), '', '', 'full'));
Expand Down
12 changes: 12 additions & 0 deletions core/components/fetchit/bootstrap.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

/**
* @var \MODX\Revolution\modX $modx
* @var array $namespace
*/

\MODX\Revolution\modX::getLoader()->addPsr4('FetchIt\\', $namespace['path'] . 'src/');

$modx->services->add('FetchIt', function() use ($modx) {
return new \FetchIt\FetchIt($modx);
});
11 changes: 10 additions & 1 deletion core/components/fetchit/elements/plugins/fetchit.php
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
<?php

use FetchIt\FetchIt;

/** @var modX $modx */
/** @var array $scriptProperties */
/** @var FetchIt $FetchIt */

switch ($modx->event->name) {
case 'OnWebPagePrerender':
if ($FetchIt = $modx->getService('FetchIt', 'FetchIt', MODX_CORE_PATH . 'components/fetchit/model/')) {
$isMODX3 = class_exists('MODX\Revolution\modX');

if ($FetchIt =
$isMODX3 && $modx->services->has(FetchIt::class) ?
$modx->services->get(FetchIt::class) :
$modx->getService('FetchIt', FetchIt::class, MODX_CORE_PATH . 'components/fetchit/model/')
) {
$FetchIt->registerScript();
}

break;
}
11 changes: 10 additions & 1 deletion core/components/fetchit/elements/snippets/fetchit.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
<?php

use FetchIt\FetchIt;

/** @var modX $modx */
/** @var FetchIt $FetchIt */
/** @var array $scriptProperties */
Expand All @@ -10,8 +13,14 @@
$snippet = $modx->getOption('snippet', $scriptProperties, 'FormIt', true);
$tpl = $modx->getOption('form', $scriptProperties, 'tpl.FetchIt.example', true);

$isMODX3 = class_exists('MODX\Revolution\modX');

/** @var pdoTools $pdo */
if (class_exists('pdoTools') && $pdo = $modx->getService('pdoTools')) {
if ($pdo =
$isMODX3 && $modx->services->has('pdoTools') ?
$modx->services->get('pdoTools') :
$modx->getService('pdoTools')
) {
$content = $pdo->getChunk($tpl, $scriptProperties);
} else {
$content = $modx->getChunk($tpl, $scriptProperties);
Expand Down