mirror of
https://github.com/Icinga/icingaweb2-module-director.git
synced 2025-07-31 01:34:12 +02:00
PriorityColumn: add new object extension, use...
...it for SyncProperty
This commit is contained in:
parent
3dce2a5d06
commit
4c7b940705
@ -4,6 +4,7 @@ namespace Icinga\Module\Director\Forms;
|
|||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use Icinga\Module\Director\Hook\ImportSourceHook;
|
use Icinga\Module\Director\Hook\ImportSourceHook;
|
||||||
|
use Icinga\Module\Director\Objects\SyncProperty;
|
||||||
use Icinga\Module\Director\Objects\SyncRule;
|
use Icinga\Module\Director\Objects\SyncRule;
|
||||||
use Icinga\Module\Director\Objects\IcingaObject;
|
use Icinga\Module\Director\Objects\IcingaObject;
|
||||||
use Icinga\Module\Director\Objects\ImportSource;
|
use Icinga\Module\Director\Objects\ImportSource;
|
||||||
@ -355,6 +356,7 @@ class SyncPropertyForm extends DirectorObjectForm
|
|||||||
|
|
||||||
public function onSuccess()
|
public function onSuccess()
|
||||||
{
|
{
|
||||||
|
/** @var SyncProperty $object */
|
||||||
$object = $this->getObject();
|
$object = $this->getObject();
|
||||||
$object->set('rule_id', $this->rule->get('id')); // ?!
|
$object->set('rule_id', $this->rule->get('id')); // ?!
|
||||||
|
|
||||||
@ -363,7 +365,6 @@ class SyncPropertyForm extends DirectorObjectForm
|
|||||||
}
|
}
|
||||||
|
|
||||||
$sourceColumn = $this->getValue('source_column');
|
$sourceColumn = $this->getValue('source_column');
|
||||||
unset($this->source_column);
|
|
||||||
$this->removeElement('source_column');
|
$this->removeElement('source_column');
|
||||||
|
|
||||||
if ($sourceColumn !== self::EXPRESSION) {
|
if ($sourceColumn !== self::EXPRESSION) {
|
||||||
@ -376,13 +377,6 @@ class SyncPropertyForm extends DirectorObjectForm
|
|||||||
$object->destination_field = 'vars.' . $destination;
|
$object->destination_field = 'vars.' . $destination;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($object->hasBeenModified()) {
|
|
||||||
if (! $object->hasBeenLoadedFromDb()) {
|
|
||||||
$object->priority = $this->rule->getPriorityForNextProperty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return parent::onSuccess();
|
return parent::onSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
40
library/Director/Objects/Extension/PriorityColumn.php
Normal file
40
library/Director/Objects/Extension/PriorityColumn.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Icinga\Module\Director\Objects\Extension;
|
||||||
|
|
||||||
|
use Zend_Db_Expr as Expr;
|
||||||
|
|
||||||
|
trait PriorityColumn
|
||||||
|
{
|
||||||
|
public function setNextPriority($prioSetColumn = null, $prioColumn = 'priority')
|
||||||
|
{
|
||||||
|
/** @var \Zend_Db_Adapter_Abstract $db */
|
||||||
|
$db = $this->getDb();
|
||||||
|
$prioValue = '(CASE WHEN MAX(priosub.priority) IS NULL THEN 1'
|
||||||
|
. ' ELSE MAX(priosub.priority) + 1 END)';
|
||||||
|
$query = $db->select()
|
||||||
|
->from(
|
||||||
|
['priosub' => $this->getTableName()],
|
||||||
|
"$prioValue"
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($prioSetColumn !== null) {
|
||||||
|
$query->where("priosub.$prioSetColumn = ?", $this->get($prioSetColumn));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->set($prioColumn, new Expr('(' . $query . ')'));
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function refreshPriortyProperty($prioColumn = 'priority')
|
||||||
|
{
|
||||||
|
/** @var \Zend_Db_Adapter_Abstract $db */
|
||||||
|
$db = $this->getDb();
|
||||||
|
$idCol = $this->getAutoincKeyName();
|
||||||
|
$query = $db->select()
|
||||||
|
->from($this->getTableName(), $prioColumn)
|
||||||
|
->where("$idCol = ?", $this->get($idCol));
|
||||||
|
$this->reallySet($prioColumn, $db->fetchOne($query));
|
||||||
|
}
|
||||||
|
}
|
@ -3,16 +3,19 @@
|
|||||||
namespace Icinga\Module\Director\Objects;
|
namespace Icinga\Module\Director\Objects;
|
||||||
|
|
||||||
use Icinga\Module\Director\Data\Db\DbObject;
|
use Icinga\Module\Director\Data\Db\DbObject;
|
||||||
|
use Icinga\Module\Director\Objects\Extension\PriorityColumn;
|
||||||
|
|
||||||
class SyncProperty extends DbObject
|
class SyncProperty extends DbObject
|
||||||
{
|
{
|
||||||
|
use PriorityColumn;
|
||||||
|
|
||||||
protected $table = 'sync_property';
|
protected $table = 'sync_property';
|
||||||
|
|
||||||
protected $keyName = 'id';
|
protected $keyName = 'id';
|
||||||
|
|
||||||
protected $autoincKeyName = 'id';
|
protected $autoincKeyName = 'id';
|
||||||
|
|
||||||
protected $defaultProperties = array(
|
protected $defaultProperties = [
|
||||||
'id' => null,
|
'id' => null,
|
||||||
'rule_id' => null,
|
'rule_id' => null,
|
||||||
'source_id' => null,
|
'source_id' => null,
|
||||||
@ -21,5 +24,17 @@ class SyncProperty extends DbObject
|
|||||||
'priority' => null,
|
'priority' => null,
|
||||||
'filter_expression' => null,
|
'filter_expression' => null,
|
||||||
'merge_policy' => null
|
'merge_policy' => null
|
||||||
);
|
];
|
||||||
|
|
||||||
|
protected function beforeStore()
|
||||||
|
{
|
||||||
|
if (! $this->hasBeenLoadedFromDb()) {
|
||||||
|
$this->setNextPriority('rule_id');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function onInsert()
|
||||||
|
{
|
||||||
|
$this->refreshPriortyProperty();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -111,22 +111,6 @@ class SyncRule extends DbObject
|
|||||||
return $db->fetchOne($query);
|
return $db->fetchOne($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPriorityForNextProperty()
|
|
||||||
{
|
|
||||||
if (! $this->hasBeenLoadedFromDb()) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
$db = $this->getDb();
|
|
||||||
return $db->fetchOne(
|
|
||||||
$db->select()
|
|
||||||
->from(
|
|
||||||
array('p' => 'sync_property'),
|
|
||||||
array('priority' => '(CASE WHEN MAX(p.priority) IS NULL THEN 1 ELSE MAX(p.priority) + 1 END)')
|
|
||||||
)->where('p.rule_id = ?', $this->get('id'))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function matches($row)
|
public function matches($row)
|
||||||
{
|
{
|
||||||
if ($this->get('filter_expression') === null) {
|
if ($this->get('filter_expression') === null) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user