Skip to content

Commit 5f19fba

Browse files
committed
versión 0.1.0
1 parent 5371ba6 commit 5f19fba

File tree

3 files changed

+118
-21
lines changed

3 files changed

+118
-21
lines changed

hook.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ function plugin_pre_item_delete_rules(CommonDBTM $item) {
6464
$ruleitem->processRules($item, PluginRulesRule::ONDELETE);
6565
}
6666

67-
function plugin_pre_item_purge_rules(CommonDBTM $item) {
67+
/*function plugin_pre_item_purge_rules(CommonDBTM $item) {
6868
$ruleitem = 'PluginRulesRule' . get_class($item);
6969
$ruleitem = new $ruleitem();
7070
$ruleitem->processRules($item, PluginRulesRule::ONPURGE);
71-
}
71+
}*/
7272

7373
/*function plugin_rule_matched_rules($params) {
7474
$params['subtype'];

inc/rule.class.php

Lines changed: 112 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
*
3030
* */
3131
class PluginRulesRule extends Rule {
32+
3233
/**
3334
* If do history.
3435
* @var bool
@@ -79,6 +80,16 @@ class PluginRulesRule extends Rule {
7980
*/
8081
//const ONPURGE = 8;
8182

83+
/**
84+
* For criteria screen
85+
*/
86+
const CRITERIA = 1;
87+
88+
/**
89+
* For action screen
90+
*/
91+
const ACTION = 2;
92+
8293
/**
8394
* Return the asset of actual class. Based on name.
8495
* @return String
@@ -164,49 +175,91 @@ function showSpecificCriteriasForPreview($fields) {
164175
}
165176
}
166177

167-
public function getCriteriasFromObject(CommonDBTM $object) {
178+
/**
179+
*
180+
* @param CommonDBTM $object
181+
* @param type $criteria_or_action See constants.
182+
* @return string
183+
*/
184+
public function getCriteriasFromObject(CommonDBTM $object, $criteria_or_action) {
168185
$criterias = $object->getSearchOptions();
186+
187+
// for infocom table
188+
$criterias = array_merge($criterias, $this::getInfocomCriterias($object, $criteria_or_action));
169189

170190
foreach ($criterias as $key => $criteria) {
171191
if (!is_numeric($key)) {
172192
unset($criterias[$key]);
193+
173194
// on actions can't view groups
174-
//$criterias_final[$key] = $object->getType() . ' - ' . $key;
195+
if ($criteria_or_action == $this::CRITERIA) {
196+
$criterias_final[$key] = $object->getTypeName() . ' - ' . $key;
197+
}
198+
175199
continue;
176200
}
177201

178-
if ($criterias[$key]['table'] != $object->getTable()) {
202+
// foreing key table
203+
if ($criteria['table'] != $object->getTable()) {
204+
$sufix = "_id";
205+
179206
// if it's foreingkey but don't dropdown
180-
if ($criterias[$key]['datatype'] != 'dropdown') {
181-
unset($criterias[$key]);
182-
continue;
207+
if ($criteria['datatype'] != 'dropdown') {
208+
if ($criteria_or_action == $this::ACTION) {
209+
$sufix = "_" . $criteria['field'];
210+
$item = str_replace("glpi_", "", $criteria['table']);
211+
$item = ucfirst(substr($item, 0, strlen($item) - 1));
212+
if (class_exists($item)) {
213+
$criterias[$key]['name'] = $item::getTypeName(1) . " - " . $criterias[$key]['name'];
214+
} else {
215+
unset($criterias[$key]);
216+
continue;
217+
}
218+
} else {
219+
unset($criterias[$key]);
220+
continue;
221+
}
183222
}
184223

185-
$field = $criterias[$key]['linkfield'] = str_replace("glpi_", "", $criterias[$key]['table']) . "_id";
224+
$field = $criterias[$key]['linkfield'] = str_replace("glpi_", "", $criterias[$key]['table']) . $sufix;
225+
186226
} else {
187227
$field = $criterias[$key]['field'];
188228
}
189229

190230
// the index must be named like the field not a number
191231
$criterias_final[$field] = $criterias[$key];
192-
232+
193233
// type == datatype
194234
$criterias_final[$field]['type'] = $criterias[$key]['datatype'];
195-
235+
196236
// unset the number index
197237
//unset($criterias[$key]);
198238
}
199239

200240
return $criterias_final;
201241
}
202242

243+
/**
244+
* Special item infocom for actions.
245+
* @param type $criteria_or_action See constants.
246+
*/
247+
static function getInfocomCriterias(CommonDBTM $object, $criteria_or_action) {
248+
if ($criteria_or_action == self::ACTION) {
249+
$infocom = new Infocom();
250+
return $infocom->getSearchOptionsToAdd(get_class($object));
251+
}
252+
253+
return array();
254+
}
255+
203256
function getCriterias() {
204257
$criterias = array();
205258

206259
$asset = self::getItem();
207260
$asset = new $asset();
208-
$criterias = $this->getCriteriasFromObject($asset);
209-
261+
$criterias = $this->getCriteriasFromObject($asset, $this::CRITERIA);
262+
210263
return $criterias;
211264
}
212265

@@ -215,7 +268,7 @@ function getActions() {
215268

216269
$asset = self::getItem();
217270
$asset = new $asset();
218-
$criterias = $this->getCriteriasFromObject($asset);
271+
$criterias = $this->getCriteriasFromObject($asset, $this::ACTION);
219272

220273
return $criterias;
221274
}
@@ -227,11 +280,11 @@ function getActions() {
227280
function processRules(CommonDBTM $item, $condition = 0) {
228281
$criterias = $this->getCriteriasFromObject($item);
229282

230-
$ruleCollection = 'PluginRulesRule'.$this->getItem().'Collection';
283+
$ruleCollection = 'PluginRulesRule' . $this->getItem() . 'Collection';
231284
$ruleCollection = new $ruleCollection();
232285

233286
$ruleCollection->setEntity($item->input['entities_id']);
234-
287+
235288
$fields_affected_by_rules = $ruleCollection->processAllRules(
236289
$item->input, array(), array(), array(
237290
'condition' => $condition
@@ -242,7 +295,51 @@ function processRules(CommonDBTM $item, $condition = 0) {
242295
unset($fields_affected_by_rules['_rule_process']);
243296

244297
foreach ($fields_affected_by_rules as $key => $value) {
245-
$item->input[$key] = $value;
298+
// hack for dates
299+
if ($value == "{today}") {
300+
$value = date("Y-m-d");
301+
}
302+
303+
if (isset($item->input[$key])) {
304+
$item->input[$key] = $value;
305+
} else {
306+
// else is a foreing field
307+
// parsing to extract item and field
308+
list($subitem, $field) = explode("_", $key, 2);
309+
// linkfield with the table
310+
$linkfield = $subitem . "_id";
311+
// extract the last s
312+
$subitem = ucfirst(substr($subitem, 0, strlen($subitem) - 1));
313+
// check for caution
314+
if (class_exists($subitem)) {
315+
$subitem = new $subitem();
316+
$input = array();
317+
318+
// hack for infocom
319+
if (get_class($subitem) == 'Infocom') {
320+
if (!$subitem->getFromDBByQuery("WHERE items_id = " . $item->input['id'] . " AND itemtype = '" . get_class($item) . "'")) {
321+
// new infocom
322+
$subitem->add(array(
323+
'items_id'=>$item->input['id'],
324+
'itemtype'=>get_class($item)
325+
));
326+
}
327+
$input["id"] = $subitem->fields['id'];
328+
329+
// hack for dates, the dates don't must change
330+
if (strstr($field, "date") and $subitem->fields[$field] != "") {
331+
continue;
332+
}
333+
334+
} else {
335+
$input["id"] = $item->input[$linkfield];
336+
}
337+
338+
$input[$field] = $value;
339+
$subitem->update($input);
340+
}
341+
}
246342
}
247343
}
344+
248345
}

setup.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,20 +65,20 @@ function plugin_init_rules() {
6565
*/
6666
function plugin_version_rules() {
6767
return array('name' => __('Rules', 'rules'),
68-
'version' => '1.0.0',
68+
'version' => '0.1.0',
6969
'author' => 'Javier Samaniego',
7070
'license' => 'AGPLv3+',
7171
'homepage' => 'https://github.com/jsamaniegog/rules',
72-
'minGlpiVersion' => '0.90');
72+
'minGlpiVersion' => '9.1');
7373
}
7474

7575
/**
7676
* Fonction de vérification des prérequis
7777
* @return boolean
7878
*/
7979
function plugin_rules_check_prerequisites() {
80-
if (version_compare(GLPI_VERSION, '0.90', 'lt')) {
81-
_e('This plugin requires GLPI >= 0.90', 'rules');
80+
if (version_compare(GLPI_VERSION, '9.1', 'lt')) {
81+
_e('This plugin requires GLPI >= 9.1', 'rules');
8282
return false;
8383
}
8484

0 commit comments

Comments
 (0)