function delete()
 {
     if (!can_manage_dimension_members(logged_user())) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     $member = Members::findById(get_id());
     if (!$member instanceof Member) {
         ajx_current("empty");
         return;
     }
     $ret = array();
     Hook::fire('check_additional_member_permissions', array('action' => 'delete', 'member' => $member, 'pg_id' => logged_user()->getPermissionGroupId()), $ret);
     if (count($ret) > 0 && !array_var($ret, 'ok')) {
         flash_error(array_var($ret, 'message'));
         ajx_current("empty");
         return;
     }
     try {
         DB::beginWork();
         if (!$member->canBeDeleted($error_message)) {
             throw new Exception($error_message);
         }
         $dim_id = $member->getDimensionId();
         // Remove from sharing table
         $sqlDeleteSharingTable = "DELETE sh FROM `" . TABLE_PREFIX . "sharing_table` sh\r\n\t\t\t\t\t\t\t\t\t\tLEFT JOIN `" . TABLE_PREFIX . "object_members` om\r\n\t\t\t\t\t\t\t\t\t\tON        om.object_id = sh.object_id\r\n\t\t\t\t\t\t\t\t\t\tWHERE     om.member_id = " . $member->getId() . " AND om.is_optimization = 0;";
         DB::execute($sqlDeleteSharingTable);
         $affectedObjectsRows = DB::executeAll("SELECT distinct(object_id) AS object_id FROM " . TABLE_PREFIX . "object_members where member_id = " . $member->getId() . " AND is_optimization = 0");
         if (is_array($affectedObjectsRows) && count($affectedObjectsRows) > 0) {
             $ids_str = "";
             foreach ($affectedObjectsRows as $row) {
                 $oid = $row['object_id'];
                 $ids_str .= ($ids_str == "" ? "" : ",") . $oid;
             }
             add_multilple_objects_to_sharing_table($ids_str, logged_user());
         }
         // remove member associations
         MemberPropertyMembers::delete('member_id = ' . $member->getId() . ' OR property_member_id = ' . $member->getId());
         MemberRestrictions::delete('member_id = ' . $member->getId() . ' OR restricted_member_id = ' . $member->getId());
         // remove from permissions tables
         ContactMemberPermissions::delete('member_id = ' . $member->getId());
         PermissionContexts::delete('member_id = ' . $member->getId());
         // remove associated content object
         if ($member->getObjectId() > 0) {
             $mobj = Objects::findObject($member->getObjectId());
             if ($mobj instanceof ContentDataObject) {
                 $mobj->delete();
             }
         }
         // delete from object_members
         ObjectMembers::delete('member_id = ' . $member->getId());
         Hook::fire('delete_member', $member, $ret);
         $parent_id = $member->getParentMemberId();
         $ok = $member->delete(false);
         if ($ok) {
             evt_add("reload dimension tree", array('dim_id' => $dim_id, 'node' => null));
             evt_add("try to select member", array('dimension_id' => $dim_id, 'id' => $parent_id));
         }
         DB::commit();
         flash_success(lang('success delete member', $member->getName()));
         if (get_id('start')) {
             ajx_current("start");
         } else {
             if (get_id('dont_reload')) {
                 ajx_current("empty");
             } else {
                 ajx_current("reload");
             }
         }
     } catch (Exception $e) {
         DB::rollback();
         flash_error($e->getMessage());
         ajx_current("empty");
     }
 }
Exemplo n.º 2
0
	function delete() {
		if(!can_manage_dimension_members(logged_user())) {
			flash_error(lang('no access permissions'));
			ajx_current("empty");
			return;
		}
		$member = Members::findById(get_id());
		try {
			
			DB::beginWork();
			
			if (!$member->canBeDeleted($error_message)) {
				throw new Exception($error_message);
			}
			$dim_id = $member->getDimensionId();
			
			// Remove from shring table
			SharingTables::instance()->delete(" 
				object_id IN (
 				 SELECT distinct(object_id) FROM ".TABLE_PREFIX."object_members WHERE member_id = ".$member->getId()." AND is_optimization = 0
				)
			");
			$affectedObjectsRows = DB::executeAll("SELECT distinct(object_id) AS object_id FROM ".TABLE_PREFIX."object_members where member_id = ".$member->getId()." AND is_optimization = 0") ;
			if (is_array($affectedObjectsRows) && count($affectedObjectsRows) > 0) {
				foreach ( $affectedObjectsRows as $row ) {
					$oid = $row['object_id'];
					$object = Objects::findObject($row['object_id']); // return an instance of Message, contact, etc.
					/* @var $object ContentDataObject */
					if ($object instanceof ContentDataObject) {
						$object->addToSharingTable();
					}
				}
			}
			
			// remove member associations
			MemberPropertyMembers::delete('member_id = '.$member->getId().' OR property_member_id = '.$member->getId());
			MemberRestrictions::delete('member_id = '.$member->getId().' OR restricted_member_id = '.$member->getId());
			
			// remove from permissions tables
			ContactMemberPermissions::delete('member_id = '.$member->getId());
			PermissionContexts::delete('member_id = '.$member->getId());
			
			// remove associated content object
			if ($member->getObjectId() > 0) {
				$mobj = Objects::findObject($member->getObjectId());
				if ($mobj instanceof ContentDataObject) $mobj->delete();
			}
			
			// delete from object_members
			ObjectMembers::delete('member_id = '.$member->getId());
			
			Hook::fire('delete_member', $member, $ret);

//			ApplicationLogs::createLog($member, ApplicationLogs::ACTION_DELETE, false, true);
			$ok = $member->delete(false);
			if ($ok) {
				evt_add("reload dimension tree", array('dim_id' => $dim_id, 'node' => null));
				evt_add("select dimension member", array('dim_id' => $dim_id, 'node' => 'root'));
			}
			
			DB::commit();
			flash_success(lang('success delete member', $member->getName()));
			if (get_id('start')) {
				ajx_current("start");
			} else {
				if (get_id('dont_reload')) {
					ajx_current("empty");
				} else {
					ajx_current("reload");
				}
			}
		} catch (Exception $e) {
			DB::rollback();
			flash_error($e->getMessage());
			ajx_current("empty");
		}
	}
Exemplo n.º 3
0
 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();
 }
Exemplo n.º 4
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 (
			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();
	}