core/model/modx/processors/context/update.class.php
<?php
/*
* This file is part of MODX Revolution.
*
* Copyright (c) MODX, LLC. All Rights Reserved.
*
* For complete copyright and license information, see the COPYRIGHT and LICENSE
* files found in the top-level directory of this distribution.
*/
/**
* Updates a context.
*
* @param string $key The key of the context
* @param json $settings A json array of context settings
*
* @var modX $this->modx
* @var modProcessor $this
* @var array $scriptProperties
*
* @package modx
* @subpackage processors.context
*/
class modContextUpdateProcessor extends modObjectUpdateProcessor {
public $classKey = 'modContext';
public $languageTopics = array('context');
public $permission = 'edit_context';
public $objectType = 'context';
public $primaryKeyField = 'key';
public function afterSave() {
$this->updateContextSettings();
$this->runOnUpdateEvent();
return parent::afterSave();
}
/**
* Update the context settings for this Context
* @return array
*/
public function updateContextSettings() {
$settings = $this->getProperty('settings');
if (empty($settings)) return array();
$updatedSettings = array();
$settings = $this->modx->fromJSON($settings);
foreach ($settings as $id => $settingArray) {
/** @var modContextSetting $setting */
$setting = $this->modx->getObject('modContextSetting',array(
'context_key' => $this->object->get('key'),
'key' => $settingArray['key'],
));
if (!$setting) continue;
$setting->set('value',$settingArray['value']);
/* if name changed, change lexicon string */
/** @var modLexiconEntry $entry */
$entry = $this->modx->getObject('modLexiconEntry',array(
'namespace' => 'core',
'name' => 'setting_'.$settingArray['key'],
));
if ($entry != null) {
$entry->set('value',$settingArray['name']);
$entry->save();
$entry->clearCache();
}
if ($setting->save()) {
$updatedSettings[] = $setting;
}
}
if (!empty($updatedSettings)) {
$this->modx->cacheManager->refresh(array(
'db' => array(),
'resource' => array('contexts' => array($this->object->get('key'))),
'context_settings' => array('contexts' => array($this->object->get('key'))),
));
}
return $updatedSettings;
}
/**
* Run the OnContextUpdate event
* @return void
*/
public function runOnUpdateEvent() {
$this->modx->invokeEvent('OnContextUpdate',array(
'context' => &$this->object,
'properties' => $this->getProperties(),
));
}
}
return 'modContextUpdateProcessor';