Skip to content

Commit b308564

Browse files
author
Shaun McCormick
committed
Subpackages now install into packages grid and can be updated
1 parent 9c02b51 commit b308564

File tree

4 files changed

+108
-2
lines changed

4 files changed

+108
-2
lines changed

_build/build.transport.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@
3737
/* version info */
3838
define('PKG_NAME','packman');
3939
define('PKG_NAME_LOWER','packman');
40-
define('PKG_VERSION','1.1.0');
41-
define('PKG_RELEASE','pl');
40+
define('PKG_VERSION','1.2.0');
41+
define('PKG_RELEASE','rc1');
4242

4343
/* set sources */
4444
$root = dirname(dirname(__FILE__)).'/';

core/components/packman/docs/changelog.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
Changelog for PackMan
22

3+
PackMan 1.2.0
4+
====================================
5+
- Subpackages now install into packages grid and can be updated
6+
37
PackMan 1.1.0
48
====================================
59
- Added French, German translations
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
/**
3+
* Add package to packages grid
4+
*
5+
* @package packman
6+
*/
7+
$success= true;
8+
if ($transport && $transport->xpdo) {
9+
$signature = '{signature}';
10+
$provider = '{provider}';
11+
$modx =& $transport->xpdo;
12+
$modx->addPackage('modx.transport',$modx->getOption('core_path').'model/');
13+
14+
switch ($options[xPDOTransport::PACKAGE_ACTION]) {
15+
case xPDOTransport::ACTION_INSTALL:
16+
case xPDOTransport::ACTION_UPGRADE:
17+
/* define version */
18+
$attributes = $modx->fromJSON('{attributes}');
19+
$metadata = $modx->fromJSON('{metadata}');
20+
$sig = explode('-',$signature);
21+
$versionSignature = explode('.',$sig[1]);
22+
23+
/* add in the package as an object so it can be upgraded */
24+
$package = $modx->newObject('transport.modTransportPackage');
25+
$package->set('signature',$signature);
26+
$package->fromArray(array(
27+
'created' => date('Y-m-d h:i:s'),
28+
'updated' => date('Y-m-d h:i:s'),
29+
'installed' => strftime('%Y-%m-%d %H:%M:%S'),
30+
'state' => 1,
31+
'workspace' => 1,
32+
'provider' => $provider,
33+
'disabled' => false,
34+
'source' => $signature.'.transport.zip',
35+
'manifest' => null,
36+
'attributes' => $attributes,
37+
'package_name' => $sig[0],
38+
'metadata' => $metadata,
39+
'version_major' => $versionSignature[0],
40+
'version_minor' => !empty($versionSignature[1]) ? $versionSignature[1] : 0,
41+
'version_patch' => !empty($versionSignature[2]) ? $versionSignature[2] : 0,
42+
));
43+
if (!empty($sig[2])) {
44+
$r = preg_split('/([0-9]+)/',$sig[2],-1,PREG_SPLIT_DELIM_CAPTURE);
45+
if (is_array($r) && !empty($r)) {
46+
$package->set('release',$r[0]);
47+
$package->set('release_index',(isset($r[1]) ? $r[1] : '0'));
48+
} else {
49+
$package->set('release',$sig[2]);
50+
}
51+
}
52+
$success = $package->save();
53+
$modx->logManagerAction('package_install','transport.modTransportPackage',$package->get('id'));
54+
break;
55+
56+
case xPDOTransport::ACTION_UNINSTALL:
57+
/* remove the package on uninstall */
58+
$package = $modx->getObject('transport.modTransportPackage',array('signature' => $signature));
59+
if ($package) {
60+
if ($package->uninstall()) {
61+
$cacheManager= $modx->getCacheManager();
62+
$cacheManager->clearCache();
63+
$modx->logManagerAction('package_uninstall','transport.modTransportPackage',$package->get('id'));
64+
}
65+
}
66+
break;
67+
}
68+
}
69+
70+
return $success;

core/components/packman/processors/build.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,21 +333,37 @@
333333
/* add category vehicle to build */
334334
$builder->putVehicle($vehicle);
335335

336+
337+
336338
/* add in packages */
337339
$packageList = $modx->fromJSON($_POST['packages']);
338340
if (!empty($packageList)) {
341+
$modx->addPackage('modx.transport',$modx->getOption('core_path').'model/');
342+
339343
$packageDir = $modx->getOption('core_path',null,MODX_CORE_PATH).'packages/';
340344
$spAttr = array('vehicle_class' => 'xPDOTransportVehicle');
341345
$spReplaces = array(
342346
'{version}',
343347
'{version_major}',
344348
'{name}',
345349
);
350+
$resolverReplaces = array(
351+
'{signature}',
352+
'{provider}',
353+
'{attributes}',
354+
'{metadata}',
355+
);
346356

347357
foreach ($packageList as $packageData) {
348358
$file = $packageDir.$packageData['signature'].'.transport.zip';
349359
if (!file_exists($file)) continue;
350360

361+
$package = $modx->getObject('transport.modTransportPackage',array('signature' => $packageData['signature']));
362+
if (!$package) {
363+
$modx->log(modX::LOG_LEVEL_ERROR,'[PackMan] Package could not be found with signature: '.$packageData['signature']);
364+
continue;
365+
}
366+
351367
/* create package as subpackage */
352368
$vehicle = $builder->createVehicle(array(
353369
'source' => $file,
@@ -373,6 +389,22 @@
373389
'source' => $cachePath.$cacheKey,
374390
));
375391

392+
/* add resolver to subpackage to add to packages grid */
393+
$cacheKey = 'packman/resolvers/'.$packageData['signature'].'.php';
394+
$resolver = file_get_contents($modx->tp->config['includesPath'].'resolve.subpackage.php');
395+
$resolver = str_replace($resolverReplaces,array(
396+
$packageData['signature'],
397+
$package->get('provider'),
398+
str_replace("'","\'",$modx->toJSON($package->get('attributes'))),
399+
str_replace("'","\'",$modx->toJSON($package->get('metadata'))),
400+
),$resolver);
401+
$modx->cacheManager->writeFile($cachePath.$cacheKey,$resolver);
402+
403+
/* add resolver to vehicle */
404+
$vehicle->resolve('php',array(
405+
'source' => $cachePath.$cacheKey,
406+
));
407+
376408
/* add subpackage to build */
377409
$builder->putVehicle($vehicle);
378410
}

0 commit comments

Comments
 (0)