|
/** |
|
* Plugin: Previewer |
|
* Enables a real preview of unsaved changes by updating a fake resource with the given data |
|
*/ |
|
$prev = $modx->getOption('previewer.resource_id'); |
|
$event = $modx->event->name; |
|
switch($event) { |
|
|
|
case 'OnDocFormRender': |
|
$prevRes = $modx->getObject('modResource', $prev); |
|
$prevArr = $prevRes->toArray(); |
|
$prevJso = $modx->toJSON($prevArr); |
|
$prevUrl = $modx->makeUrl($prev, 'web', array(), 'full'); |
|
$_POST['id'] = $prev; |
|
$js =<<<JS |
|
<script type="text/javascript"> |
|
Ext.onReady(function () { |
|
var task = new Ext.util.DelayedTask(function(){ |
|
window.open('$prevUrl'); |
|
}); |
|
var modab = Ext.getCmp("modx-action-buttons"); |
|
modab.add('-'); |
|
modab.add({ |
|
xtype: 'button' |
|
,text: 'Preview' |
|
,method: 'remote' |
|
,process: 'update' |
|
,listeners: { |
|
click: function(btn) { |
|
Ext.getCmp('modx-panel-resource').getForm().findField("modx-resource-id").setValue($prev); |
|
Ext.getCmp('modx-panel-resource').getForm().findField("modx-resource-alias").setValue('preview'); |
|
task.delay(1000); |
|
} |
|
,success: function(data) { |
|
console.log(data); |
|
return false; |
|
} |
|
} |
|
,id: 'modx-abtn-real-preview' |
|
,checkDirty: true |
|
}); |
|
modab.doLayout(); |
|
}); |
|
</script> |
|
JS; |
|
$modx->regClientStartupHTMLBlock($js); |
|
|
|
break; |
|
|
|
case 'OnWebPageComplete': |
|
$res = $modx->resource; |
|
if($res->get('id') !== $prev) |
|
return; |
|
if($_GET['redirect'] && $_GET['redirect'] == 1) |
|
return; |
|
// $modx->sendRedirect('http://modx.com',array('type' => 'REDIRECT_META')); |
|
$modx->sendRedirect($modx->makeUrl($prev, 'web', array('redirect' => 1), 'full'), array('type' => 'REDIRECT_META')); |
|
|
|
break; |
|
|
|
case 'OnBeforeDocFormSave': |
|
if($id != $modx->getOption('previewer.resource_id')) |
|
return; |
|
$modx->log(MODX_LOG_LEVEL_ERROR, $id . ' ' . $modx->getOption('previewer.resource_id')); |
|
$resource->set('parent', 0); |
|
$resource->set('alias', 'preview'); |
|
$resource->set('uri_override', 1); |
|
$resource->set('uri', 'preview'); |
|
$resource->save(); |
|
break; |
|
} |
|
return; |
Is this plugin safe to use on Production environments?