<?php /** * $Id: ajax_trigger_ex_classes.php 23812 2014-07-02 11:49:14Z phenxdesign $ * * @package Mediboard * @subpackage forms * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision: 23812 $ */ //CCanDo::checkAdmin(); // Don't check permissions $object_guid = CValue::get("object_guid"); $event_name = CValue::get("event_name"); $object = CMbObject::loadFromGuid($object_guid); CExClassConstraint::$_load_lite = true; $ex_class_event = new CExClassEvent(); $ds = $ex_class_event->_spec->ds; $group_id = CGroups::loadCurrent()->_id; $where = array("ex_class_event.host_class" => $ds->prepare("=%", $object->_class), "ex_class_event.event_name" => $ds->prepare("=%", $event_name), "ex_class_event.disabled" => $ds->prepare("=%", 0), "ex_class.conditional" => $ds->prepare("=%", 0), $ds->prepare("ex_class.group_id = % OR ex_class.group_id IS NULL", $group_id)); $ljoin = array("ex_class" => "ex_class.ex_class_id = ex_class_event.ex_class_id"); /** @var CExClassEvent[] $ex_class_events */ $ex_class_events = $ex_class_event->loadList($where, null, null, null, $ljoin); CStoredObject::massLoadBackRefs($ex_class_events, "constraints"); $ex_class_events_struct = array(); foreach ($ex_class_events as $_ex_class_event) { if ($_ex_class_event->checkConstraints($object)) { $ex_class_events_struct[] = array("ex_class_event_id" => $_ex_class_event->_id, "ex_class_id" => $_ex_class_event->ex_class_id, "event_name" => $event_name, "object_guid" => $object_guid); } } CApp::json($ex_class_events_struct);
<?php /** * $Id: ajax_edit_ex_constraint.php 17759 2013-01-14 11:27:24Z phenxdesign $ * * @package Mediboard * @subpackage forms * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision: 17759 $ */ CCanDo::checkEdit(); $ex_constraint_id = CValue::get("ex_constraint_id"); $ex_class_event_id = CValue::get("ex_class_event_id"); $ex_constraint = new CExClassConstraint(); if (!$ex_constraint->load($ex_constraint_id)) { $ex_constraint->ex_class_event_id = $ex_class_event_id; } else { $ex_constraint->loadRefsNotes(); } $ex_constraint->loadTargetObject(); $event = $ex_constraint->loadRefExClassEvent(); $options = $event->getHostClassOptions(); $host_field_suggestions = CValue::read($options, "hostfield_sugg", array()); $list = $event->buildHostFieldsList(); $smarty = new CSmartyDP(); $smarty->assign("ex_constraint", $ex_constraint); $smarty->assign("class_fields", $list); $smarty->assign("host_field_suggestions", $host_field_suggestions); $smarty->display("inc_edit_ex_constraint.tpl");
/** * attention aux dates, il faut surement checker le log de derniere modif des champs du concept * * @fixme pas trop optimisé */ function getReportedValues(CExClassEvent $event) { $ex_class = $this->_ref_ex_class; $fields = $ex_class->loadRefsAllFields(true); if ($this->_id) { return $fields; } self::$_multiple_load = true; CExClassField::$_load_lite = true; $this->loadRefsLinks(); $latest_ex_objects = array($ex_class->getLatestExObject($this->_ref_object), $ex_class->getLatestExObject($this->_ref_reference_object_1), $ex_class->getLatestExObject($this->_ref_reference_object_2)); if ($this->_ref_object->_id) { $this->_ref_object->loadComplete(); } if ($this->_ref_reference_object_1->_id) { $this->_ref_reference_object_1->loadComplete(); } if ($this->_ref_reference_object_2->_id) { $this->_ref_reference_object_2->loadComplete(); } CStoredObject::massLoadFwdRef($fields, "ex_group_id"); $all_concepts = CStoredObject::massLoadFwdRef($fields, "concept_id"); $all_back_fields = CStoredObject::massLoadBackRefs($all_concepts, "class_fields"); $ex_groups = CStoredObject::massLoadFwdRef($all_back_fields, "ex_group_id"); CStoredObject::massLoadFwdRef($ex_groups, "ex_class_id"); // Cache de concepts $concepts = array(); $ex_classes = array(); // on cherche les champs reportés de l'objet courant foreach ($fields as $_field) { $field_name = $_field->name; $this->_reported_fields[$field_name] = null; // valeur par défaut $spec_obj = $_field->getSpecObject(); $this->{$field_name} = CExClassField::unescapeProp($spec_obj->default); $_concept = null; if ($_field->concept_id) { $_concept = $_field->loadRefConcept(); } // si champ pas reporté, on passe au suivant if (!($_field->report_class || $_field->concept_id && $_concept->native_field)) { continue; } // Native fields if ($_concept && $_concept->native_field) { list($_class, $_path) = explode(" ", $_concept->native_field, 2); if (isset($this->_preview)) { $this->_reported_fields[$field_name] = new $_class(); $this->{$field_name} = "Test"; } else { if ($this->_ref_object->_class == $_class) { $_object = $this->_ref_object; } elseif ($this->_ref_reference_object_1->_class == $_class) { $_object = $this->_ref_reference_object_1; } elseif ($this->_ref_reference_object_2->_class == $_class) { $_object = $this->_ref_reference_object_2; } list($_object, $_path) = CExClassConstraint::getFieldAndObjectStatic($_object, $_path); $_resolved = CExClassConstraint::resolveObjectFieldStatic($_object, $_path); $_obj = $_resolved["object"]; $_field_name = $_resolved["field"]; $this->_reported_fields[$field_name] = $_object; $this->{$field_name} = $_obj->{$_field_name}; } if ($this->{$field_name}) { continue; } } $_report_class = $_field->report_class; // si champ basé sur un concept, il faut parcourir // tous les formulaires qui ont un champ du meme concept if ($_field->concept_id) { if (!isset($concepts[$_field->concept_id])) { $_concept_fields = $_concept->loadRefClassFields(); foreach ($_concept_fields as $_concept_field) { if (!isset($ex_classes[$_concept_field->ex_group_id])) { $ex_classes[$_concept_field->ex_group_id] = $_concept_field->loadRefExClass(); } else { $_concept_field->_ref_ex_class = $ex_classes[$_concept_field->ex_group_id]; } } $concepts[$_field->concept_id] = array($_concept, $_concept_fields); } else { list(, $_concept_fields) = $concepts[$_field->concept_id]; } /** @var CExObject $_latest */ $_latest = null; $_latest_value = null; // on regarde tous les champs du concept foreach ($_concept_fields as $_concept_field) { $_ex_class = $_concept_field->_ref_ex_class; $_concept_latest = null; if ($this->_ref_object->_class == $_report_class) { $_concept_latest = $_ex_class->getLatestExObject($this->_ref_object); } elseif ($this->_ref_reference_object_1->_class == $_report_class) { $_concept_latest = $_ex_class->getLatestExObject($this->_ref_reference_object_1); } elseif ($this->_ref_reference_object_2->_class == $_report_class) { $_concept_latest = $_ex_class->getLatestExObject($this->_ref_reference_object_2); } // si pas d'objet precedemment enregistré if (!$_concept_latest || !$_concept_latest->_id || $_concept_latest->{$_concept_field->name} == "") { continue; } if (!$_latest) { $_latest = $_concept_latest; $_latest_value = $_latest->{$_concept_field->name}; } else { $_date = $_concept_latest->getEditDate(); if ($_date > $_latest->getEditDate()) { $_latest = $_concept_latest; $_latest_value = $_latest->{$_concept_field->name}; } } } if ($_latest) { $_latest->loadTargetObject()->loadComplete(); $this->_reported_fields[$field_name] = $_latest; $this->{$field_name} = self::typeSetSpecIntersect($_field, $_latest_value); } } else { $escape = true; foreach ($latest_ex_objects as $_latest_ex_object) { if ($_latest_ex_object->_id) { $escape = false; break; } } if ($escape) { continue; } /** @var CMbObject $_base */ /* * Comprendre pourquoi parfois il n'y a pas de $_latest_ex_object */ $_base = null; foreach ($latest_ex_objects as $_latest_ex_object) { if (!$_latest_ex_object) { continue; } if ($_latest_ex_object->_ref_reference_object_1 && $_latest_ex_object->_ref_reference_object_1->_class == $_report_class) { $_base = $_latest_ex_object->_ref_reference_object_1; break; } elseif ($_latest_ex_object->_ref_reference_object_2 && $_latest_ex_object->_ref_reference_object_2->_class == $_report_class) { $_base = $_latest_ex_object->_ref_reference_object_2; break; } elseif ($_latest_ex_object->_ref_object && $_latest_ex_object->_ref_object->_class == $_report_class) { $_base = $_latest_ex_object->_ref_object; break; } } if ($this->_ref_object->_id && !$_base) { //$_field_view = CAppUI::tr("$this->_class-$_field->name"); //CAppUI::setMsg("Report de données impossible pour le champ '$_field_view'", UI_MSG_WARNING); continue; } if ($_base->{$field_name} == "") { continue; } $_base->loadTargetObject()->loadComplete(); $_base->loadLastLog(); $this->_reported_fields[$field_name] = $_base; $this->{$field_name} = self::typeSetSpecIntersect($_field, $_base->{$field_name}); } } self::$_multiple_load = false; CExClassField::$_load_lite = false; return $fields; }