function get_dimensions_for_properties() { if (!can_manage_dimension_members(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $dim_id = get_id(); $obj_type = get_id('otype'); $parent_id = get_id('parent'); if ($parent_id == 0) { $dim_obj_type = DimensionObjectTypes::findById(array('dimension_id' => $dim_id, 'object_type_id' => $obj_type)); if (!$dim_obj_type->getIsRoot()) { flash_error(lang('parent member must be selected to set properties')); ajx_current("empty"); return; } } $dimensions = array(); $associations_info = array(); $associations_info_tmp = array(); $member_parents = array(); $associations = DimensionMemberAssociations::getAssociatations($dim_id, $obj_type); foreach ($associations as $assoc) { $assoc_info = array('id' => $assoc->getId(), 'required' => $assoc->getIsRequired(), 'multi' => $assoc->getIsMultiple(), 'ot' => $assoc->getAssociatedObjectType()); $assoc_info['members'] = Members::getByDimensionObjType($assoc->getAssociatedDimensionMemberAssociationId(), $assoc->getAssociatedObjectType()); $ot = ObjectTypes::findById($assoc->getAssociatedObjectType()); $assoc_info['ot_name'] = $ot->getName(); if (!isset($associations_info_tmp[$assoc->getAssociatedDimensionMemberAssociationId()])) { $associations_info_tmp[$assoc->getAssociatedDimensionMemberAssociationId()] = array(); $dimensions[] = Dimensions::getDimensionById($assoc->getAssociatedDimensionMemberAssociationId()); } $associations_info_tmp[$assoc->getAssociatedDimensionMemberAssociationId()][] = $assoc_info; } // check for restrictions if ($parent_id > 0) { $parent = Members::findById($parent_id); $all_parents = $parent->getAllParentMembersInHierarchy(); $all_parent_ids = array($parent_id); foreach ($all_parents as $p) { $all_parent_ids[] = $p->getId(); } } else { $all_parent_ids = array(0); } $all_property_members = array(); foreach ($associations_info_tmp as $assoc_dim => $ot_infos) { foreach ($ot_infos as $info) { $restriction_defs = DimensionMemberRestrictionDefinitions::findAll(array("conditions" => "`dimension_id` = {$dim_id} AND `restricted_dimension_id` = {$assoc_dim} \n\t\t\t\t\tAND `restricted_object_type_id` = " . $info['ot'])); if (!is_array($restriction_defs) || count($restriction_defs) == 0) { // no restriction definitions => include all members $associations_info[$assoc_dim][] = $info; $restricted_dimensions[$assoc_dim] = false; } else { // restriction definition found => filter members $restricted_dimensions[$assoc_dim] = true; $restrictions = array(); $rest_members = array(); $conditions = ""; foreach ($restriction_defs as $rdef) { $conditions = "`restricted_member_id` IN (SELECT `id` FROM " . Members::instance()->getTableName(true) . " WHERE \n\t\t\t\t\t\t\t`object_type_id` = " . $rdef->getRestrictedObjectTypeId() . " AND `dimension_id` = {$assoc_dim}) AND `member_id` IN (" . implode(",", $all_parent_ids) . ")"; $restrictions[] = MemberRestrictions::findAll(array("conditions" => $conditions)); } $to_intersect = array(); foreach ($restrictions as $k => $rests) { $to_intersect[$k] = array(); foreach ($rests as $rest) { $to_intersect[$k][] = $rest->getRestrictedMemberId(); } if (count($to_intersect[$k]) == 0) { unset($to_intersect[$k]); } } $apply_filter = true; $intersection = array_var($to_intersect, 0, array()); if (count($to_intersect) > 1) { $k = 1; while ($k < count($to_intersect)) { $intersection = array_intersect($intersection, $to_intersect[$k++]); } } else { if (count($to_intersect) == 0) { // no restrictions found for members $apply_filter = false; } } if ($apply_filter) { $rest_members = Members::findAll(array("conditions" => "`id` IN (" . implode(",", $intersection) . ")")); } else { $rest_members = $info['members']; } $new_info = $info; $new_info['members'] = $rest_members; $associations_info[$assoc_dim][] = $new_info; foreach ($rest_members as $member) { if (!isset($member_parents[$assoc_dim])) { $member_parents[$assoc_dim] = array(); } if ($member->getParentMemberId() > 0) { $member_parents[$assoc_dim][$member->getId()] = $member->getParentMemberId(); } } } } } foreach ($associations_info as $assoc_dim => $ot_infos) { foreach ($ot_infos as $info) { foreach ($info['members'] as $mem) { $all_property_members[] = $mem->getId(); } } } // para cada $info['ot'] ver si en el resultado hay miembros que los restringen foreach ($associations_info as $assoc_dim => &$ot_infos) { foreach ($ot_infos as &$info) { $restriction_defs = DimensionMemberRestrictionDefinitions::findAll(array("conditions" => "`restricted_dimension_id` = {$assoc_dim} \n\t\t\t\t\tAND `restricted_object_type_id` = " . $info['ot'])); $restrictions = array(); foreach ($restriction_defs as $rdef) { $restrictions_tmp = MemberRestrictions::findAll(array("conditions" => "`member_id` IN (\n\t\t\t\t\t\tSELECT `id` FROM " . Members::instance()->getTableName(true) . " WHERE `dimension_id` = " . $rdef->getDimensionId() . " AND `object_type_id` = " . $rdef->getObjectTypeId() . " AND `id` IN (" . implode(",", $all_property_members) . "))")); $restrictions = array_merge($restrictions, $restrictions_tmp); } $restricted_ids = array(); if (count($restrictions) == 0) { continue; } foreach ($restrictions as $rest) { $restricted_ids[] = $rest->getRestrictedMemberId(); } $tmp = array(); foreach ($info['members'] as $rmem) { if (in_array($rmem->getId(), $restricted_ids)) { $tmp[] = $rmem; } } $info['members'] = $tmp; } } $req_dimensions = array(); foreach ($associations_info as $assoc_dim => &$ot_infos) { $required_count = 0; foreach ($ot_infos as &$info) { if ($info['required']) { $required_count++; } } $req_dimensions[$assoc_dim] = $required_count > 0; } $member_id = get_id('mem_id'); $actual_associations_info = array(); if ($member_id > 0) { // actual associations $actual_associations = MemberPropertyMembers::getAssociatedPropertiesForMember($member_id); foreach ($actual_associations as $actual_assoc) { $actual_associations_info[$actual_assoc->getPropertyMemberId()] = true; } } tpl_assign('genid', array_var($_GET, 'genid')); tpl_assign('dimensions', $dimensions); tpl_assign('associations', $associations_info); tpl_assign('actual_associations', $actual_associations_info); tpl_assign('req_dimensions', $req_dimensions); tpl_assign('restricted_dimensions', isset($restricted_dimensions) ? $restricted_dimensions : array()); ajx_extra_data(array('parents' => $member_parents, 'genid' => array_var($_GET, 'genid'))); $this->setTemplate('dim_properties'); }
/** * This function will return paginated result. Result is an array where first element is * array of returned object and second populated pagination object that can be used for * obtaining and rendering pagination data using various helpers. * * Items and pagination array vars are indexed with 0 for items and 1 for pagination * because you can't use associative indexing with list() construct * * @access public * @param array $arguments Query argumens (@see find()) Limit and offset are ignored! * @param integer $items_per_page Number of items per page * @param integer $current_page Current page number * @return array */ function paginate($arguments = null, $items_per_page = 10, $current_page = 1) { if(isset($this) && instance_of($this, 'MemberRestrictions')) { return parent::paginate($arguments, $items_per_page, $current_page); } else { return MemberRestrictions::instance()->paginate($arguments, $items_per_page, $current_page); } // if } // paginate
/** * Return manager instance * * @access protected * @param void * @return MemberRestrictions */ function manager() { if (!$this->manager instanceof MemberRestrictions) { $this->manager = MemberRestrictions::instance(); } return $this->manager; }
function delete() { // change parent of child nodes $child_members = $this->getAllChildren(); if (is_array($child_members)) { $parent = $this->getParentMember(); foreach ($child_members as $child) { $child->setParentMemberId($this->getParentMemberId()); if ($parent instanceof Member) { $child->setDepth($parent->getDepth() + 1); } else { $child->setDepth(1); } $child->save(); } } // delete member restrictions MemberRestrictions::delete(array("`member_id` = ?", $this->getId())); MemberRestrictions::delete(array("`restricted_member_id` = ?", $this->getId())); // delete member properties MemberPropertyMembers::delete(array("`member_id` = ?", $this->getId())); MemberPropertyMembers::delete(array("`property_member_id` = ?", $this->getId())); // delete permissions ContactMemberPermissions::delete(array("member_id = ?", $this->getId())); // delete member objects (if they don't belong to another member) $sql = "SELECT `o`.`object_id` FROM `" . ObjectMembers::instance()->getTableName() . "` `o` WHERE `o`.`is_optimization`=0 AND `o`.`member_id`=" . $this->getId() . " AND NOT EXISTS (\n\t\t\tSELECT `om`.`object_id` FROM `" . ObjectMembers::instance()->getTableName() . "` `om` WHERE `om`.`object_id`=`o`.`object_id` AND `om`.`is_optimization`=0 AND `om`.`member_id`<>" . $this->getId() . ")"; $result = DB::execute($sql); $rows = $result->fetchAll(); if (!is_null($rows)) { foreach ($rows as $row) { $obj = Objects::findById(array_var($row, 'object_id')); $obj->delete(); } } // delete object if member is a dimension_object if ($this->getObjectId()) { $object = Objects::findObject($this->getObjectId()); if ($object instanceof ContentDataObject) { $object->delete(); } } return parent::delete(); }
function delete($check = true) { if ($check && !$this->canBeDeleted($error_message)) { throw new Exception($error_message); } // change parent of child nodes $child_members = $this->getAllChildren(); if (is_array($child_members)) { $parent = $this->getParentMember(); foreach($child_members as $child) { $child->setParentMemberId($this->getParentMemberId()); if ($parent instanceof Member) { $child->setDepth($parent->getDepth()+1); } else $child->setDepth(1); $child->save(); } } // delete member restrictions MemberRestrictions::delete(array("`member_id` = ?", $this->getId())); MemberRestrictions::delete(array("`restricted_member_id` = ?", $this->getId())); // delete member properties MemberPropertyMembers::delete(array("`member_id` = ?", $this->getId())); MemberPropertyMembers::delete(array("`property_member_id` = ?", $this->getId())); // delete permissions ContactMemberPermissions::delete(array("member_id = ?", $this->getId())); // delete member objects (if they don't belong to another member) $sql = "SELECT `o`.`object_id` FROM `".ObjectMembers::instance()->getTableName()."` `o` WHERE `o`.`is_optimization`=0 AND `o`.`member_id`=".$this->getId()." AND NOT EXISTS ( SELECT `om`.`object_id` FROM `".ObjectMembers::instance()->getTableName()."` `om` WHERE `om`.`object_id`=`o`.`object_id` AND `om`.`is_optimization`=0 AND `om`.`member_id`<>".$this->getId().")"; $result = DB::execute($sql); $rows = $result->fetchAll(); if (!is_null($rows)) { foreach ($rows as $row) { $obj = Objects::findById(array_var($row, 'object_id')); $obj->delete(); } } // clean object_members ObjectMembers::delete("member_id = ".$this->getId()); // delete object if member is a dimension_object if ($this->getObjectId()) { $object = Objects::findObject($this->getObjectId()); if ($object instanceof ContentDataObject) $object->delete(); } ApplicationLogs::createLog($this, ApplicationLogs::ACTION_DELETE, false, true, true, 'member deleted'); return parent::delete(); }
/** * Return manager instance * * @access protected * @param void * @return MemberRestrictions */ function manager() { if(!($this->manager instanceof MemberRestrictions)) $this->manager = MemberRestrictions::instance(); return $this->manager; } // manager