function mapDocs($object, $with_cancelled, $tri) { // Documents et fichiers $object->loadRefsDocItems($with_cancelled); CStoredObject::massLoadFwdRef($object->_ref_documents, "file_category_id"); foreach ($object->_ref_documents as $_doc) { CDocumentItem::makeIconName($_doc); $_doc->loadContent(false); $_doc->loadRefCategory(); $_doc->_ref_object = $object; $this->_all_docs[$this->makePrefix($tri, $object, $_doc)][] = $_doc; } CStoredObject::massLoadFwdRef($object->_ref_files, "file_category_id"); foreach ($object->_ref_files as $_file) { CDocumentItem::makeIconName($_file); $_file->loadRefCategory(); $_file->_ref_object = $object; $this->_all_docs[$this->makePrefix($tri, $object, $_file)][] = $_file; } // Formulaires $ex_link = new CExLink(); $ex_link->setObject($object); $ex_link->level = "object"; $ex_links = $ex_link->loadMatchingList(); $ex_objects = CExLink::massLoadExObjects($ex_links); CStoredObject::massLoadFwdRef($ex_objects, "object_id"); foreach ($ex_links as $_link) { $_ex = $_link->loadRefExObject(); $_ex->updateCreationFields(); $object = $_ex->loadTargetObject(); $_ex->_ex_class_id = $_link->ex_class_id; $_ex->loadRefExClass(); CDocumentItem::makeIconName($_ex->_ref_ex_class); $this->_all_docs[$this->makePrefix($tri, $object, $_ex)][] = $_link; } }
} } $step = $limit; $total = 0; if ($limit) { $limit = "{$start}, {$limit}"; } $ref_objects_cache = array(); $search = null; if ($concept_search) { $concept_search = stripslashes($concept_search); $search = CExConcept::parseSearch($concept_search); } $ex_class_event = new CExClassEvent(); $ex_class_events = null; $ex_link = new CExLink(); $group_id = $group_id ? $group_id : CGroups::loadCurrent()->_id; $where = array("ex_link.group_id" => "= '{$group_id}'"); if ($ex_class_id) { $where['ex_link.ex_class_id'] = "= '{$ex_class_id}'"; } $ljoin = array(); $creation_context = null; if (!$creation_context_class || !$creation_context_id) { $creation_context_class = $reference_class; $creation_context_id = $reference_id; } if ($creation_context_class) { /** @var CSejour|CPatient|CConsultation $creation_context */ $creation_context = new $creation_context_class(); $creation_context->load($creation_context_id);
$where["ex_link.level"] = "= 'object'"; $ljoin["ex_class"] = "ex_class.ex_class_id = ex_link.ex_class_id"; $fields = array("ex_link.ex_class_id"); $counts = $ex_link->countMultipleList($where, null, "ex_link.ex_class_id", $ljoin, $fields); if (!empty($search)) { $ds = $ex_class->_spec->ds; $where["ex_class_field.concept_id"] = $ds->prepareIn(array_keys($search)); $ljoin["ex_class_field_group"] = "ex_class_field_group.ex_class_id = ex_class.ex_class_id"; $ljoin["ex_class_field"] = "ex_class_field.ex_group_id = ex_class_field_group.ex_class_field_group_id"; unset($where["user_log.object_class"]); } $ex_objects_counts = array(); foreach ($counts as $_row) { $_ex_class_id = $_row["ex_class_id"]; $_count = $_row["total"]; $_ex_link = new CExLink(); if (!empty($search)) { $_ex_class = new CExClass(); $_ex_class->load($_ex_class_id); if ($use_user_logs) { $ljoin["user_log"] = "user_log.object_id = ex_link.ex_object_id AND user_log.object_class = 'CExObject_{$_ex_class_id}'"; } else { $where["ex_link.ex_class_id"] = "= '{$_ex_class_id}'"; } $ljoin_orig = $ljoin; $where_orig = $where; $where["ex_class.ex_class_id"] = "= '{$_ex_class_id}'"; $where = array_merge($where, $_ex_class->getWhereConceptSearch($search)); $ljoin["ex_object_{$_ex_class_id}"] = "ex_object_{$_ex_class_id}.ex_object_id = ex_link.ex_object_id"; $_count = $_ex_link->countList($where, "ex_link.ex_class_id", $ljoin); $where = $where_orig;
$_group->loadRefsFields(); foreach ($_group->_ref_fields as $_field) { $_field->updateTranslation(); } } /** @var CExObject[] $ex_objects */ $ex_objects = array(); $ref_objects_cache = array(); $search = null; if ($concept_search) { $concept_search = stripslashes($concept_search); $search = CExConcept::parseSearch($concept_search); } $ex_class_event = new CExClassEvent(); $ex_class_events = null; $ex_link = new CExLink(); $where = array("ex_link.group_id" => "= '{$group_id}'", "ex_link.ex_class_id" => "= '{$ex_class_id}'", "ex_link.level" => "= 'object'", "ex_link.datetime_create" => "BETWEEN '{$date_min} 00:00:00' AND '{$date_max} 23:59:59'"); $ljoin = array(); if (!empty($search)) { $ljoin["ex_object_{$ex_class_id}"] = "ex_object_{$ex_class_id}.ex_object_id = ex_link.ex_object_id"; //$where = array_merge($where, $ex_class->getWhereConceptSearch($search)); } $order = "ex_class.name ASC, ex_link.ex_object_id DESC"; $ljoin["ex_class"] = "ex_class.ex_class_id = ex_link.ex_class_id"; /** @var CExLink[] $links */ $links = $ex_link->loadList($where, $order, $limit, "ex_link.ex_object_id", $ljoin); //CExLink::massLoadExObjects($links); /** @var CExObject[] $ex_objects */ foreach ($links as $_link) { $_ex = $_link->loadRefExObject(); $_ex->_ex_class_id = $_link->ex_class_id;
/** * Custom delete, will delete any link * * @see parent::delete() */ function delete() { $ex_object_id = $this->_id; $ex_class_id = $this->_ex_class_id; if ($msg = parent::delete()) { return $msg; } // Remove CExLinks $where = array("ex_class_id" => " = '{$ex_class_id}'", "ex_object_id" => " = '{$ex_object_id}'"); $ex_link = new CExLink(); $ex_links = $ex_link->loadList($where); foreach ($ex_links as $_ex_link) { $_ex_link->delete(); } return null; }
/** * Gets the latest CExObject for the given CMbObject host object * * @param CMbObject $object The host object * * @return CExObject The resolved CExObject */ function getLatestExObject(CMbObject $object) { if (isset($this->_latest_ex_object_cache[$object->_class][$object->_id])) { return $this->_latest_ex_object_cache[$object->_class][$object->_id]; } $ex_link = new CExLink(); $where = array("object_class" => " = '{$object->_class}'", "object_id" => " = '{$object->_id}'", "ex_class_id" => " = '{$this->_id}'", "level" => $ex_link->getDS()->prepareIn(array("object", "ref1", "ref2"))); $ex_link->loadObject($where, "ex_object_id DESC"); $ex_object = $ex_link->loadRefExObject(); return $this->_latest_ex_object_cache[$object->_class][$object->_id] = $ex_object; }