Пример #1
0
	function exec($args, $stdin, &$stdout, &$stderr, &$system)
	{
		if (!empty($args))
		{
			$path = $args;
			
			if ($path{0} != "/")
				$path = $_SESSION['murrix']['path']."/$path";
				
			$node_id = getNode($path);
			
			if ($node_id > 0)
			{
				$stderr = ucf(i18n("object already exists"));
				return true;
			}
			
			$parent = new mObject(getNode($_SESSION['murrix']['path']));
			
			if (!(isAdmin() || $parent->hasRight("create")))
			{
				$stderr = ucf(i18n("not enough rights to create folder"));
				return true;
			}
			
			$object = new mObject();
			$object->setClassName("folder");
			$object->loadVars();

			$object->name = basename($path);
			$object->language = $_SESSION['murrix']['language'];
			$object->rights = $parent->getMeta("initial_rights", "rwcrwc---");
			$object->group_id = $parent->getMeta("initial_group", $parent->getGroupId());

			if (!$object->save())
			{
				$stderr = "Operation unsuccessfull.\n";
				$stderr .= "Error output:\n";
				$stderr .= $object->getLastError();
				return true;
			}
			
			clearNodeFileCache($parent->getNodeId());
			$object->linkWithNode($parent->getNodeId());
			$stdout = ucf(i18n("created folder successfully"));
		}
		else
		{
			$stdout = "Usage: oadd [name]\n";
			$stdout .= "Example: oadd newfolder";
		}
			
		return true;
	}
Пример #2
0
function createGroup($name, $description, $create_home = true)
{
	if (!isAdmin)
		return ucf(i18n("not enough rights to create new group"));

	if (empty($name))
		return ucf(i18n("a name must be specified"));
	
	$group = new mGroup();
	$group->setByName($name);

	if ($group->id > 0)
		return ucf(i18n("a group with that name already exists"));

	$group->name = $name;
	$group->description = $description;
	$ret = $group->save();
	
	if ($create_home && getNode("/root/home/groups/".$name) <= 0)
	{
		$home = new mObject();
		$home->setClassName("folder");
		$home->loadVars();
	
		$home->name = $name;
		$home->language = $_SESSION['murrix']['language'];
		$home->rights = "$name=rc";
	
		$home->setVarValue("description", "This is the home of $name");
	
		if ($home->save())
		{
			$home->setMeta("initial_rights", "$name=rwc");
			$home_folder = new mObject(getNode("/root/home/groups"));
			$home->linkWithNode($home_folder->getNodeId());
		}
		else
		{
			$message = "Operation unsuccessfull.<br/>";
			$message .= "Error output:<br/>";
			$message .= $home->getLastError();
			return $message;
		}
		
		$group->home_id = $home->getNodeId();
		$group->save();
	}
	
	return $ret;
}
Пример #3
0
	function execute(&$system, $args)
	{
		if (isset($args['action']))
		{
			if ($args['action'] == "deletelink")
			{
				$object = new mObject($args['node_id']);
	
				/*$links = $object->getLinks();
				if ($object->getNumLinksSubBottom() <= 1 && ($link['type'] == "sub" && $link['direction'] == "bottom"))
					$response->addAlert(ucf(i18n("unable to delete last link")));
				else*/ 
				if ($object->hasRight("write"))
				{
					$object->unlinkWithNode($args['remote_id'], $args['type'], $args['direction']);
					clearNodeFileCache($object->getNodeId());
					clearNodeFileCache($args['remote_id']);

					$_SESSION['murrix']['path'] = $object->getPathInTree();
					$system->triggerEventIntern("newlocation", $args);
				}
				else
					$system->addAlert(ucf(i18n("you don't have enough rights to delete this link")));
					
				return;
			}
			else if ($args['action'] == "newlink")
			{
				$object = new mObject($args['node_id']);
	
				if ($object->hasRight("write"))
				{
					if (isset($args['remote_node_id']))
						$remote_node_id = $args['remote_node_id'];
					else
						$remote_node_id = getNode($args['path']);

					if ($remote_node_id > 0)
					{
						$remote = new mObject($remote_node_id);

						if ($remote->hasRight("write"))
						{
							if (!$object->linkWithNode($remote_node_id, $args['type']))
							{
								$system->addAlert(ucf(i18n($object->error)));
								return;
							}
							clearNodeFileCache($object->getNodeId());
							clearNodeFileCache($remote_node_id);
						}
						else
						{
							$system->addAlert(ucf(i18n("you don't have enough rights on the remote object to create this link")));
							return;
						}
					}
					else
					{
						$system->addAlert(ucf(i18n("the remote object you specified does not exist")));
						return;
					}
				}
				else
				{
					$system->addAlert(ucf(i18n("you don't have enough rights to create a link")));
					return;
				}
				
				$args['message'] = ucf(i18n("created new link successfully"));
				$_SESSION['murrix']['path'] = $object->getPathInTree();
				$system->triggerEventIntern("newlocation", $args);
				return;
			}
		}
		
		$this->draw($system, $args);
	}
Пример #4
0
	function execute(&$system, $args)
	{
		if (isset($args['action']))
		{
			$object = new mObject($args['parent_id']);
	
			if ($object->hasRight("write"))
			{
				if (count($args['node_ids']) == 0)
				{
					$system->addAlert(ucf(i18n("you must select at least one object")));
					return;
				}
				
				if ($args['action'] == "delete")
				{
					foreach ($args['node_ids'] as $node_id)
					{
						$child = new mObject($node_id);
						
						$not_allowed_str = "";
						if ($child->hasRight("write"))
							$child->deleteNode();
						else
							$not_allowed_str .= $child->getPathInTree()."\n";
							
						if (!empty($not_allowed_str))
							$system->addAlert(ucf(i18n("you did not have enough rights to delete these nodes:"))."\n$not_allowed_str");
					}
					
					clearNodeFileCache($object->getNodeId());
				}
				else
				{
					if (isset($args['remote_node_id']))
						$remote_node_id = $args['remote_node_id'];
					else
						$remote_node_id = getNode($args['path']);
		
					if ($remote_node_id > 0)
					{
						$remote = new mObject($remote_node_id);
		
						if ($remote->hasRight("write"))
						{
							switch ($args['action'])
							{
								case "move":
								foreach ($args['node_ids'] as $node_id)
								{
									$child = new mObject($node_id);
				
									$child->linkWithNode($remote_node_id, "sub");
									$child->unlinkWithNode($object->getNodeId(), "sub", "bottom");
									clearNodeFileCache($object->getNodeId());
									clearNodeFileCache($child->getNodeId());
									clearNodeFileCache($remote_node_id);
								}
								break;
								
								case "link":
								foreach ($args['node_ids'] as $node_id)
								{
									$child = new mObject($node_id);
				
									$child->linkWithNode($remote_node_id, "sub");
									clearNodeFileCache($remote_node_id);
									clearNodeFileCache($child->getNodeId());
								}
								break;
							}
						}
						else
						{
							$system->addAlert(ucf(i18n("you don't have enough rights on the target")));
							return;
						}
					}
					else
					{
						$system->addAlert(ucf(i18n("the remote object you specified does not exist")));
						return;
					}
				}
			}
			else
			{
				$system->addAlert(ucf(i18n("you don't have enough rights")));
				return;
			}
		}

		$this->draw($system, $args);
	}
Пример #5
0
	function exec($args, $stdin, &$stdout, &$stderr, &$system)
	{
		if (!empty($args))
		{
			$args_split = splitArgs($args);
			
			if (count($args_split) >= 2)
			{
				$source = $args_split[0];
				$target = $args_split[1];
			
				if ($source{0} != "/")
					$source = $_SESSION['murrix']['path']."/$source";
					
				$source_node_id = getNode($source);
				
				if ($source_node_id <= 0)
				{
					$stderr = ucf(i18n("no such path")).": $source";
					return true;
				}
				else
					$source = new mObject($source_node_id);
				
				if (!(isAdmin() || $source->hasRight("write")))
				{
					$stderr = ucf(i18n("not enough rights on source"));
					return true;
				}
				
				if ($target{0} != "/")
					$target = $_SESSION['murrix']['path']."/$target";
					
				$target_node_id = getNode($target);
				
				if ($target_node_id <= 0)
				{
					$stderr = ucf(i18n("no such path")).": $target";
					return true;
				}
				else
					$target = new mObject($target_node_id);
				
				if (!(isAdmin() || $target->hasRight("write")))
				{
					$stderr = ucf(i18n("not enough rights on target"));
					return true;
				}
				
				$parent_node_id = getNode($_SESSION['murrix']['path']);
				
				$source->linkWithNode($target->getNodeId(), "sub");
				$source->unlinkWithNode($parent_node_id, "sub", "bottom");
				clearNodeFileCache($source->getNodeId());
				clearNodeFileCache($target->getNodeId());
				clearNodeFileCache(getNode($_SESSION['murrix']['path']));
				
				$stdout = ucf(i18n("moved node successfully"));
			}
		}
		else
		{
			$stdout = "Usage: omove [sourcepath] [targetpath]\n";
			$stdout .= "Example: omove \"/root/home\" \"/root/public\"";
		}
		
		return true;
	}
Пример #6
0
	function execute(&$system, $args)
	{
		if (isset($args['node_id']))
		{
			if (isAnonymous())
			{
				$system->addAlert(ucf(i18n("anonymous user can not vote")));
				return;
			}
			
			if (!isset($args['answer']))
			{
				$system->addAlert(ucf(i18n("you must choose an alternative")));
				return;
			}
		
			$poll = new mObject($args['node_id']);
			
			if ($poll->getNodeId() > 0)
			{
				$now = time();
				
				if (strtotime($poll->getVarValue("closedate")) < $now)
				{
					$system->addAlert(ucf(i18n("this poll is closed")));
					return;
				}
				
				if (strtotime($poll->getVarValue("opendate")) > $now)
				{
					$system->addAlert(ucf(i18n("this poll is not open yet")));
					return;
				}
				
				$answers = fetch("FETCH node WHERE link:node_top='".$poll->getNodeId()."' AND link:type='sub' AND property:class_name='poll_answer' AND property:name='".$_SESSION['murrix']['user']->id."' NODESORTBY property:version");
				
				if (count($answers) > 0)
				{
					$system->addAlert(ucf(i18n("you have already voted in this poll")));
					return;
				}
			
				$answer = new mObject();
				$answer->setClassName("poll_answer");
				$answer->loadVars();
				
				$answer->name = $_SESSION['murrix']['user']->id;
				$answer->language = $_SESSION['murrix']['language'];
				$answer->rights = $poll->rights;;
				
				$answer->setVarValue("answer", $args['answer']);

				$answer->save();
		
				clearNodeFileCache($poll->getNodeId());
				$answer->linkWithNode($poll->getNodeId());
			}
		}
	
		$this->draw($system, $args);
	}
Пример #7
0
	function sendMessage($subject, $text, $attachment)
	{
		if ($this->id <= 0)
			return false;
			
		$user_id = $_SESSION['murrix']['user']->id;
		$_SESSION['murrix']['user']->id = $this->id;
		
		$home = new mObject($this->home_id);
		
		$inbox_id = getNode($home->getPath()."/inbox", "eng");
		
		if ($inbox_id < 0)
		{
			$inbox = new mObject();
			$inbox->setClassName("folder");
			$inbox->loadVars();

			$inbox->name = "inbox";
			$inbox->language = $_SESSION['murrix']['language'];

			$inbox_id = $inbox->save();
			
			$inbox->rights = $home->getMeta("initial_rights", $home->getRights());
			
			clearNodeFileCache($home->getNodeId());
			$inbox->linkWithNode($home->getNodeId());
		}
		else
			$inbox = new mObject($inbox_id);
		
		$message = new mObject();
		$message->setClassName("message");
		$message->loadVars();
		
		$message->name = $subject;
		$message->language = $_SESSION['murrix']['language'];
		
		$message->setVarValue("text", $text);
		$message->setVarValue("attachment", $attachment);
		$message->setVarValue("sender", $_SESSION['murrix']['user']->name);

		$message->save();
		
		$message->rights = $inbox->getMeta("initial_rights", $inbox->getRights());
		
		clearNodeFileCache($inbox->getNodeId());
		$message->linkWithNode($inbox->getNodeId());
		
		$_SESSION['murrix']['user']->id = $user_id;
		
		return true;
	}
Пример #8
0
{
	$region = new mObject();
	$region->setClassName("image_region");
	$region->loadVars();
	
	$object->language = $_SESSION['murrix']['language'];
	$region->name = "ImageRegion";
	$region->setVarValue("image_width", $_POST['image_width']);
	$region->setVarValue("image_height", $_POST['image_height']);
	$region->setVarValue("text", trim($_POST['Textbox']));
	$region->setVarValue("params", $_POST['PMouseX'].",".$_POST['PMouseY'].",".$_POST['UMouseX'].",".$_POST['UMouseY']);
	
	if ($region->save())
	{
		clearNodeFileCache($object->getNodeId());
		$region->linkWithNode($object->getNodeId());
		
		$remote_node_ids = explode(",", $_POST['remote_node_ids']);
		
		foreach ($remote_node_ids as $rnode_id)
			$region->linkWithNode(trim($rnode_id), "data");
			
		echo "Region created successfully";
	}
	else
	{
		$message = "Operation unsuccessfull.<br/>";
		$message .= "Error output:<br/>";
		$message .= $object->getLastError();
		echo $message;
	}