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; }
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; }
function actionSave(&$system, $args) { $bError = false; if (empty($args['name'])) { $system->addAlert(ucf(i18n("please enter a name"))); $bError = true; } if (!(strpos($args['name'], "\\") === false) || !(strpos($args['name'], "/") === false) || !(strpos($args['name'], "+") === false)) { $system->addAlert(ucf(i18n("you can not use '\\', '/' or '+' in the name"))); $bError = true; } if (!$bError) { $object = new mObject($this->getNodeId($args)); if ($object->getNodeId() > 0) { if ($object->hasRight("write")) { $object->name = trim($args['name']); $object->icon = trim($args['icon']); $newlang = ($object->getLanguage() != trim($args['language'])); $object->language = trim($args['language']); $vars = $object->getVars(); foreach ($vars as $var) { $key = "v".$var->id; $value = (isset($args[$key]) ? $args[$key] : (isset($args[$var->id]) ? $args[$var->id] : "")); if (empty($value) && $var->getRequired() && $var->getType() != "boolean") { $system->addAlert(utf8e(ucf(str_replace("_", " ", i18n($var->getName(true))))." ".i18n("is a required field"))); return; } $object->setVarValue($var->name, $value); } if ($args['newversion'] == "on" || $newlang) $ret = $object->save(); else $ret = $object->saveCurrent(); if ($ret) { $system->addRedirect("exec=show&node_id=".$object->getNodeId()); clearNodeFileCache($object->getNodeId()); $links = $object->getLinks(); foreach ($links as $link) { if ($link['type'] == "sub") clearNodeFileCache($link['remote_id']); } } else { $message = "Operation unsuccessfull.<br/>"; $message .= "Error output:<br/>"; $message .= $object->getLastError(); $system->addAlert($message); } } } } }
{ 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; } exit; } $value_id = $object->resolveVarName("file"); $filename = $object->getVarValue("file"); $type = getfiletype(pathinfo($filename, PATHINFO_EXTENSION)); $angle = -1; $maxsize = getSetting("IMGSIZE", 640); if ($type != "image") {
function fetch($query, $debug = false) { if (isset($_SESSION['murrix']['querycache'][$query]) && !$debug) return $_SESSION['murrix']['querycache'][$query]; $query2 = $query; $commands = array("FETCH", "WHERE", "NODESORTBY", "SORTBY"); $cmdstr = implode("|", $commands); $links = false; $vars = 0; $return = "object"; $sort = array(); $vars_array = array(); $nodesortby = ""; foreach ($commands as $ord) { if (preg_match("/^[ ]*($ord) (.+?)( ($cmdstr|$)|$)/", $query, $matches)) { switch ($matches[1]) { case "FETCH": switch (trim($matches[2])) { case "count": $select = "SELECT count(objects.id) AS count "; $return = "count"; break; case "node": $select = "SELECT objects.id AS id, objects.node_id AS node_id, objects.language AS language, objects.version AS version "; $return = "node"; break; case "object": default: $select = "SELECT objects.id AS id "; $return = "object"; break; } break; case "WHERE": $org_where = trim($matches[2]); if (preg_match_all("/[ ]*(.+?)( AND| OR|$)/", $org_where, $wmatches)) { $wmatches = $wmatches[1]; //PrintPre($wmatches); foreach ($wmatches AS $match) { $match = trim($match); if ($match{0} == "(") $match = substr($match, 1, strlen($match)-1); $parts = explode(":", $match, 2); $invert = ""; if ($parts[0]{0} == "!") { $invert = "!"; $parts[0] = substr($parts[0], 1, strlen($parts[0])-1); } switch ($parts[0]) { case "property": $org_where = str_replace($match, "$invert(objects.".$parts[1].")", $org_where); break; case "var": $parts2 = explode("=", $parts[1]); if (!isset($vars_array[$parts2[0]])) { $vars++; $vars_array[$parts2[0]] = $vars; } $num = $vars_array[$parts2[0]]; $org_where = str_replace($match, "values$num.data$invert=".$parts2[1], $org_where); break; case "link": $parts2 = explode("=", $parts[1]); switch ($parts2[0]) { case "node_top": $org_where = str_replace($match, "$invert(links.node_top=".$parts2[1]." AND links.node_bottom=objects.node_id)", $org_where); break; case "node_bottom": $org_where = str_replace($match, "$invert(links.node_bottom=".$parts2[1]." AND links.node_top=objects.node_id)", $org_where); break; case "type": $org_where = str_replace($match, "$invert(links.type=".$parts2[1].")", $org_where); break; case "node_id": default: $org_where = str_replace($match, "$invert((links.node_bottom=".$parts2[1]." AND links.node_top=objects.node_id) OR (links.node_top=".$parts2[1]." AND links.node_bottom=objects.node_id))", $org_where); break; } $links = true; break; } } } $where_more = ""; foreach ($vars_array as $key => $value) { $where_more .= "(values$value.object_id=objects.id AND values$value.var_id=vars$value.id AND vars$value.name='$key') AND "; } $where = "WHERE $where_more ($org_where)"; break; case "NODESORTBY": $org_sort = trim($matches[2]); if (preg_match_all("/[ ]*(.+?)(,|$)/", $org_sort, $wmatches)) { $wmatches = $wmatches[1]; foreach ($wmatches AS $match) { $match = trim($match); $parts = explode(":", $match, 2); $invert = " DESC"; if ($parts[0]{0} == "!") { $invert = " ASC"; $parts[0] = substr($parts[0], 1, strlen($parts[0])-1); } switch ($parts[0]) { case "property": $org_sort = str_replace($match, "objects.".$parts[1].$invert, $org_sort); break; } } } $nodesortby = "ORDER BY $org_sort"; break; case "SORTBY": $org_sort = trim($matches[2]); if (preg_match_all("/[ ]*(.+?)(,|$)/", $org_sort, $wmatches)) { $wmatches = $wmatches[1]; foreach ($wmatches AS $match) { $match = trim($match); $parts = explode(":", $match, 2); $invert = false; if ($parts[0]{0} == "!") { $invert = true; $parts[0] = substr($parts[0], 1, strlen($parts[0])-1); } switch ($parts[0]) { case "property": $sort[] = array("property:".$parts[1], $invert); //$org_sort = str_replace($match, "objects.".$parts[1].($invert ? "" : " DESC"), $org_sort); break; case "var": $sort[] = array($parts[1], $invert); break; } } } //if (!empty($org_sort)) // $sortby = "ORDER BY $org_sort"; break; } $len = strlen($matches[0]) - strlen($matches[3]); $query = trim(substr($query, $len, strlen($query)-$len)); } else { if (!empty($query)) { echo "nåt galet hände..\n"; echo $query; } } } global $db_prefix; $from = "FROM `".$db_prefix."objects` AS `objects`"; for ($n = 1; $n <= $vars; $n++) $from .= ", `".$db_prefix."vars` AS `vars$n`, `".$db_prefix."values` AS `values$n`"; if ($links) $from .= ", `".$db_prefix."links` AS `links`"; $sql = "$select $from $where $nodesortby"; $result = mysql_query($sql) or die("fetch " . mysql_errno() . " " . mysql_error()); if ($return == "count") { $row = mysql_fetch_array($result, MYSQL_ASSOC); //$_SESSION['debug'] += microtime_float()-$time; $_SESSION['murrix']['querycache'][$query2] = $row['count']; return $row['count']; } if ($return == "object") { $objects = array(); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $object = new mObject(); if (!$object->loadByObjectId($row['id'])) echo $object->getLastError(); $objects[] = $object; } } else if ($return == "node") { $objects = array(); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $object = new mObject(); $object->node_id = $row['node_id']; $object->id = $row['id']; $object->version = $row['version']; $object->language = $row['language']; $objects[] = $object; } $nodes = array(); $node_list = array(); foreach ($objects as $object) { // We have a prior version already if (isset($node_list[$object->getNodeId()])) { if ($node_list[$object->getNodeId()] != $_SESSION['murrix']['language']) // Not a perfect match { if ($object->getLanguage() == $_SESSION['murrix']['language']) // We have a better match { $nodes[$object->getNodeId()] = $object; $node_list[$object->getNodeId()] = $object->getLanguage(); } } /*else // Perfect language match { if ($node_list[$object->getNodeId()]->version < $object->version)// Do we have a better version { $nodes[$object->getNodeId()] = $object; $node_list[$object->getNodeId()] = $object->getLanguage(); } }*/ } else // We have no prior match { $nodes[$object->getNodeId()] = $object; $node_list[$object->getNodeId()] = $object->getLanguage(); } } $objects2 = array_values($nodes); $objects = array(); foreach ($objects2 as $object2) { $object = new mObject(); if (!$object->loadByObjectId($object2->getId())) echo $object->getLastError(); $objects[] = $object; } } if (!empty($sort)) { $sort = array_reverse($sort); foreach ($sort as $sortby) { SortBy(&$objects, $sortby[0], $sortby[1]); } } $_SESSION['murrix']['querycache'][$query2] = $objects; return $objects; }