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, 'MemberPropertyMembers')) {
         return parent::paginate($arguments, $items_per_page, $current_page);
     } else {
         return MemberPropertyMembers::instance()->paginate($arguments, $items_per_page, $current_page);
     }
     // if
 }
 function apply_association_filters($dimension, $dimension_members, $selected_members)
 {
     $members_to_retrieve = array();
     $all_associated_members_ids = array();
     foreach ($selected_members as $member) {
         // ignore selected members that are from the same dimension that is going to be filtered
         if (!$member instanceof Member || $member->getDimensionId() == $dimension->getId()) {
             continue;
         }
         // get dimension associations for selected member object type and the dimension to be filtered
         $association_ids = DimensionMemberAssociations::getAllAssociationIds($member->getDimensionId(), $dimension->getId(), $member->getObjectTypeId());
         if (count($association_ids) > 0) {
             $associated_members_ids = array();
             foreach ($association_ids as $id) {
                 $property_members_members = null;
                 $property_members_props = null;
                 $association = DimensionMemberAssociations::findById($id);
                 //	$children = $member->getAllChildrenInHierarchy();
                 if ($association->getDimensionId() == $dimension->getId()) {
                     if (is_null($property_members_members)) {
                         $property_members_members = MemberPropertyMembers::getAllPropertyMembers($id);
                     }
                     $tmp_assoc_member_ids = array_var($property_members_members, $member->getId(), array());
                     /*		foreach ($children as $child){
                     							$tmp_assoc_member_ids = array_merge($tmp_assoc_member_ids, array_var($property_members_members, $child->getId(), array()));
                     						}
                     				*/
                     $associated_members_ids = array_unique(array_merge($associated_members_ids, $tmp_assoc_member_ids));
                 } else {
                     if (is_null($property_members_props)) {
                         $property_members_props = MemberPropertyMembers::getAllPropertyMembers($id, true);
                     }
                     $tmp_assoc_member_ids = array_var($property_members_props, $member->getId(), array());
                     /*		foreach ($children as $child){
                     							$tmp_assoc_member_ids = array_merge($tmp_assoc_member_ids, array_var($property_members_props, $child->getId(), array()));
                     						}
                     				*/
                     $associated_members_ids = array_unique(array_merge($associated_members_ids, $tmp_assoc_member_ids));
                 }
             }
             $all_associated_members_ids[] = array_unique($associated_members_ids);
         }
     }
     if (isset($association_ids) && count($association_ids) > 0 && count($all_associated_members_ids) > 0) {
         $intersection = array_var($all_associated_members_ids, 0);
         if (count($all_associated_members_ids) > 1) {
             $k = 1;
             while ($k < count($all_associated_members_ids)) {
                 $intersection = array_intersect($intersection, $all_associated_members_ids[$k++]);
             }
         }
         $all_associated_members_ids = $intersection;
         if (count($all_associated_members_ids) > 0) {
             $dimension_member_ids = array();
             foreach ($dimension_members as $dm) {
                 $dimension_member_ids[] = $dm->getId();
             }
             $members_to_retrieve_ids = array();
             $associated_members = Members::findAll(array('conditions' => 'id IN (' . implode(',', $all_associated_members_ids) . ')'));
             foreach ($associated_members as $associated_member) {
                 $context_hierarchy_members = $associated_member->getAllParentMembersInHierarchy(true);
                 foreach ($context_hierarchy_members as $context_member) {
                     if (!in_array($context_member->getId(), $members_to_retrieve_ids) && in_array($context_member->getId(), $dimension_member_ids)) {
                         $members_to_retrieve[$context_member->getName() . "_" . $context_member->getId()] = $context_member;
                         $members_to_retrieve_ids[] = $context_member->getId();
                     }
                 }
             }
             // alphabetical order
             $members_to_retrieve = array_ksort($members_to_retrieve);
         }
     } else {
         $members_to_retrieve = $dimension_members;
     }
     return $members_to_retrieve;
 }
 static function prepareAssociationConditions($redefined_context, $dimensions, $properties, $object_type_id, $pg_ids, $selection_members)
 {
     $is_property = array();
     foreach ($properties as $p => $value) {
         //obtener miembros de la dimension asociada que tienen como propiedad los miembros seleccionados de esta dimension
         foreach ($value as $v) {
             $associations = DimensionMemberAssociations::getAllAssociations($v, $p);
             if (!is_null($associations)) {
                 foreach ($associations as $association) {
                     $is_property[$v] = true;
                     $v_ids_csv = is_array($dimensions[$v]['allowed_members']) && count($dimensions[$v]['allowed_members']) > 0 ? implode(",", $dimensions[$v]['allowed_members']) : '0';
                     $p_ids_csv = is_array($dimensions[$p]['allowed_members']) && count($dimensions[$p]['allowed_members']) > 0 ? implode(",", $dimensions[$p]['allowed_members']) : '0';
                     $prop_members = MemberPropertyMembers::getAssociatedMembers($association->getId(), $v_ids_csv, $p_ids_csv);
                     if (count($prop_members) > 0) {
                         $property_members[] = $prop_members;
                     }
                 }
             }
         }
     }
     // intersect the allowed members for each property
     $member_intersection = array_var($property_members, 0, array());
     if (count($property_members) > 1) {
         $k = 1;
         while ($k < count($property_members)) {
             $member_intersection = array_intersect($member_intersection, $property_members[$k++]);
         }
     }
     $association_conditions = "";
     foreach ($redefined_context as $key => $value) {
         $dimension = Dimensions::getDimensionById($value);
         if (!isset($is_property[$value])) {
             $member_ids = $dimensions[$value]['allowed_members'];
         } else {
             $member_ids = $member_intersection;
         }
         $association_conditions .= self::prepareQuery($association_conditions, $dimension, $member_ids, $object_type_id, $pg_ids, 'AND', $selection_members);
     }
     $dims = Dimensions::findAll();
     foreach ($dims as $dim) {
         if (!in_array($dim->getId(), $redefined_context) && !isset($properties[$dim->getId()]) && $dim->canContainObjects()) {
             $member_ids = array();
             $all_members = $dim->getAllMembers();
             foreach ($all_members as $member) {
                 $member_ids[] = $member->getId();
             }
             $association_conditions .= self::prepareQuery($association_conditions, $dim, $member_ids, $object_type_id, $pg_ids, 'OR', $selection_members, true);
         }
     }
     return $association_conditions;
 }
function core_dim_remove_contacts_member_associations(Member $member) {
	// one way
	$associations = DimensionMemberAssociations::getAssociatations ( $member->getDimensionId(), $member->getObjectTypeId() );
	foreach ( $associations as $a ) {
		$condition = "association_id = ".$a->getId()." AND member_id = ".$member->getId()." AND property_member_id IN 
			(SELECT m.id FROM ".TABLE_PREFIX."members m WHERE m.object_type_id=".$a->getAssociatedObjectType()." AND m.dimension_id=".$a->getAssociatedDimensionMemberAssociationId().")";
		MemberPropertyMembers::instance()->delete($condition);
	}
	
	// reverse way
	$associations = DimensionMemberAssociations::findAll(array("conditions" => array("`associated_dimension_id` = ? AND `associated_object_type_id` = ?", $member->getDimensionId(), $member->getObjectTypeId())));
	foreach ( $associations as $a ) {
		$condition = "association_id = ".$a->getId()." AND property_member_id = ".$member->getId()." AND member_id IN 
			(SELECT m.id FROM ".TABLE_PREFIX."members m WHERE m.object_type_id=".$a->getObjectTypeId()." AND m.dimension_id=".$a->getDimensionId().")";
		MemberPropertyMembers::instance()->delete($condition);
	}
}
 /**
 * Return manager instance
 *
 * @access protected
 * @param void
 * @return MemberPropertyMembers 
 */
 function manager() {
   if(!($this->manager instanceof MemberPropertyMembers)) $this->manager = MemberPropertyMembers::instance();
   return $this->manager;
 } // manager
Example #7
0
 function canBeDeleted(&$error_message)
 {
     $childs = $this->getAllChildren();
     if (MemberPropertyMembers::isMemberAssociated($this->getId())) {
         $error_message = lang("cannot delete member is associated");
         return false;
     }
     $continue_check = false;
     if (count($childs) == 0) {
         $continue_check = true;
     } else {
         if ($this->getParentMemberId() > 0) {
             $child_ots = DimensionObjectTypeHierarchies::getAllChildrenObjectTypeIds($this->getDimensionId(), $this->getParentMember()->getObjectTypeId(), false);
         }
         foreach ($childs as $child) {
             // check if child can be put in the parent (or root)
             if ($this->getParentMemberId() == 0) {
                 $dim_ot = DimensionObjectTypes::findOne(array("conditions" => array("`dimension_id` = ? AND `object_type_id` = ?", $this->getDimensionId(), $child->getObjectTypeId())));
                 if (!$dim_ot->getIsRoot()) {
                     $error_message = lang("cannot delete member cannot be root");
                     return false;
                 }
             } else {
                 if (!in_array($child->getObjectTypeId(), $child_ots)) {
                     $error_message = lang("cannot delete member childs cannot be moved to parent");
                     return false;
                 }
             }
         }
         $continue_check = true;
     }
     if (!$continue_check) {
         return false;
     } else {
         $child_ids = $this->getAllChildrenIds();
         $child_ids[] = $this->getId();
         $child_ids_str = implode(",", $child_ids);
         $objects_in_member = ObjectMembers::instance()->findAll(array('conditions' => 'member_id = ' . $this->getId()));
         if (!$objects_in_member || count($objects_in_member) == 0) {
             return true;
         } else {
             $more_conditions = "";
             if (Plugins::instance()->isActivePlugin('core_dimensions')) {
                 $person_dim = Dimensions::findByCode('feng_persons')->getId();
                 $more_conditions = " AND member_id NOT IN (SELECT id FROM " . TABLE_PREFIX . "members WHERE dimension_id={$person_dim})";
             }
             $object_id_condition = $this->getObjectId() > 0 ? " AND o.id <> " . $this->getObjectId() : "";
             foreach ($objects_in_member as $om) {
                 $obj_members = ObjectMembers::findAll(array("conditions" => array("`object_id` = ? AND `is_optimization` = 0 AND member_id IN ({$child_ids_str}) AND EXISTS (SELECT o.id FROM " . TABLE_PREFIX . "objects o WHERE o.id = ? AND o.trashed_by_id=0 {$object_id_condition})" . $more_conditions, $om->getObjectId(), $om->getObjectId())));
                 if (count($obj_members) >= 1) {
                     $error_message = lang("cannot delete member has objects");
                     return false;
                 }
                 $db_res = DB::execute("SELECT object_type_id FROM " . TABLE_PREFIX . "objects WHERE id=" . $om->getObjectId());
                 $row = $db_res->fetchRow();
                 if ($row && array_var($row, 'object_type_id')) {
                     $req_dim_ids = DimensionObjectTypeContents::getRequiredDimensions(array_var($row, 'object_type_id'));
                     if (in_array($this->getDimensionId(), $req_dim_ids)) {
                         $error_message = lang("cannot delete member is required for objects");
                         return false;
                     }
                 }
             }
         }
     }
     return true;
 }
 /**
  * Return manager instance
  *
  * @access protected
  * @param void
  * @return MemberPropertyMembers 
  */
 function manager()
 {
     if (!$this->manager instanceof MemberPropertyMembers) {
         $this->manager = MemberPropertyMembers::instance();
     }
     return $this->manager;
 }
 /**
  * 
  * 
  */
 function list_dimension_members($member_id, $context_dimension_id, $object_type_id, $allowed_member_type_ids)
 {
     if ($member_id != 0) {
         $contact_pg_ids = ContactPermissionGroups::getPermissionGroupIdsByContactCSV(logged_user()->getId(), false);
         $member = members::findById($member_id);
         $dimension = Dimensions::getDimensionById($context_dimension_id);
         if ($object_type_id != null) {
             $dimension_object_type_contents = $dimension->getObjectTypeContent($object_type_id);
             foreach ($dimension_object_type_contents as $dotc) {
                 $dot_id = $dotc->getDimensionObjectTypeId();
                 if (is_null($allowed_member_type_ids) || in_array($dot_id, $allowed_member_type_ids)) {
                     $allowed_object_type_ids[] = $dot_id;
                 }
             }
         }
         if ($dimension instanceof Dimension && $member instanceof Member) {
             if (!$dimension->getDefinesPermissions() || $dimension->hasAllowAllForContact($contact_pg_ids)) {
                 $dimension_members = $dimension->getAllMembers(false, "parent_member_id, name", true);
             } else {
                 if ($dimension->hasCheckForContact($contact_pg_ids)) {
                     $member_list = $dimension->getAllMembers(false, "parent_member_id, name", true);
                     $allowed_members = array();
                     foreach ($member_list as $dim_member) {
                         if (ContactMemberPermissions::instance()->contactCanReadMemberAll($contact_pg_ids, $dim_member->getId(), logged_user())) {
                             $allowed_members[] = $dim_member;
                         }
                     }
                     $dimension_members = $allowed_members;
                 }
             }
             $members_to_retrieve = array();
             $association_ids = DimensionMemberAssociations::getAllAssociationIds($member->getDimensionId(), $context_dimension_id);
             if (count($association_ids) > 0) {
                 $associated_members_ids_csv = '';
                 foreach ($association_ids as $id) {
                     $association = DimensionMemberAssociations::findById($id);
                     $children = $member->getAllChildrenInHierarchy();
                     if ($association->getDimensionId() == $context_dimension_id) {
                         $new_csv = MemberPropertyMembers::getAllMemberIds($id, $member_id);
                         $associated_members_ids_csv .= $new_csv != '' ? $new_csv . "," : '';
                         foreach ($children as $child) {
                             $new_csv = MemberPropertyMembers::getAllMemberIds($id, $child->getId());
                             $associated_members_ids_csv .= $new_csv != '' ? $new_csv . "," : '';
                         }
                     } else {
                         $new_csv = MemberPropertyMembers::getAllPropertyMemberIds($id, $member_id) . ",";
                         $associated_members_ids_csv .= $new_csv != '' ? $new_csv . "," : '';
                         foreach ($children as $child) {
                             $new_csv = MemberPropertyMembers::getAllPropertyMemberIds($id, $child->getId());
                             $associated_members_ids_csv .= $new_csv != '' ? $new_csv . "," : '';
                         }
                     }
                 }
                 $associated_members_ids = explode(',', $associated_members_ids_csv);
                 $associated_members_ids = array_unique($associated_members_ids);
             }
             if (isset($associated_members_ids) && count($associated_members_ids) > 0) {
                 foreach ($associated_members_ids as $id) {
                     $associated_member = Members::findById($id);
                     if (in_array($associated_member, $dimension_members)) {
                         $context_hierarchy_members = $associated_member->getAllParentMembersInHierarchy(true);
                         foreach ($context_hierarchy_members as $context_member) {
                             if (!in_array($context_member, $members_to_retrieve) && in_array($context_member, $dimension_members)) {
                                 $members_to_retrieve[$context_member->getName()] = $context_member;
                             }
                         }
                     }
                 }
                 // alphabetical order
                 $members_to_retrieve = array_ksort($members_to_retrieve);
             } else {
                 $members_to_retrieve[] = $dimension_members;
             }
             $membersset = array();
             foreach ($members_to_retrieve as $m) {
                 $membersset[$m->getId()] = true;
             }
             $members = array();
             // Todo adapt this code to call "buildMemberList" - (performance and code improvement)
             foreach ($members_to_retrieve as $m) {
                 if ($m->getArchivedById() > 0) {
                     continue;
                 }
                 if ($object_type_id != null) {
                     $selectable = in_array($m->getObjectTypeId(), $allowed_object_type_ids) ? true : false;
                 }
                 $tempParent = $m->getParentMemberId();
                 $x = $m;
                 while ($x instanceof Member && !isset($membersset[$tempParent])) {
                     $tempParent = $x->getParentMemberId();
                     $x = $x->getParentMember();
                 }
                 if (!$x instanceof Member) {
                     $tempParent = 0;
                 }
                 if ($dot = DimensionObjectTypes::instance()->findOne(array("conditions" => "\n\t\t\t\t\t\tdimension_id = " . $dimension->getId() . " AND\n\t\t\t\t\t\tobject_type_id = " . $m->getObjectTypeId()))) {
                     $memberOptions = $dot->getOptions(true);
                 } else {
                     $memberOptions = '';
                 }
                 /* @var $m Member */
                 $member = array("id" => $m->getId(), "name" => clean($m->getName()), "parent" => $tempParent, "realParent" => $m->getParentMemberId(), "object_id" => $m->getObjectId(), "options" => $memberOptions, "depth" => $m->getDepth(), "iconCls" => $m->getIconClass(), "selectable" => isset($selectable) ? $selectable : false, "dimension_id" => $m->getDimensionId(), "object_type_id" => $m->getObjectTypeId(), "allow_childs" => $m->allowChilds());
                 if ($oid = $m->getObjectId()) {
                     if ($obj = Objects::instance()->findObject($m->getObjectId())) {
                         $editUrl = $obj->getEditUrl();
                     }
                 }
                 // Member Actions
                 if (can_manage_dimension_members(logged_user())) {
                     if ($oid = $m->getObjectId()) {
                         if ($obj = Objects::instance()->findObject($m->getObjectId())) {
                             $editUrl = $obj->getEditUrl();
                         }
                     } else {
                         $editUrl = get_url('member', 'edit', array('id' => $m->getId()));
                     }
                     $member['actions'] = array(array('url' => $editUrl, 'text' => '', 'iconCls' => 'ico-edit'));
                 }
                 $members[] = $member;
             }
             return $members;
         }
         return null;
     } else {
         $members = $this->initial_list_dimension_members($context_dimension_id, $object_type_id, $allowed_member_type_ids);
         return $members;
     }
 }
Example #10
0
function get_associated_status_member_id($member, $dimension, $ot = null)
{
    if ($member instanceof Member && $dimension instanceof Dimension) {
        $member_dimension = $member->getDimension();
        if (!$member_dimension instanceof Dimension) {
            return 0;
        }
        $a = DimensionMemberAssociations::instance()->findOne(array('conditions' => array('dimension_id=? AND object_type_id=? AND associated_dimension_id=?' . ($ot instanceof ObjectType ? ' AND associated_object_type_id=' . $ot->getId() : ''), $member_dimension->getId(), $member->getObjectTypeId(), $dimension->getId())));
        // create relation between members and remove old relations
        if ($a instanceof DimensionMemberAssociation) {
            $mpm = MemberPropertyMembers::findOne(array('conditions' => array('association_id = ? AND member_id = ?', $a->getId(), $member->getId())));
            if ($mpm instanceof MemberPropertyMember) {
                return $mpm->getPropertyMemberId();
            }
        }
    }
    return 0;
}
Example #11
0
 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 (\r\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();
         }
     }
     // 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();
 }