public function editMeta($actionName, $httpVars, $fileVars) { if (!isset($this->actions[$actionName])) { return; } if (is_a($this->accessDriver, "demoAccessDriver")) { throw new Exception("Write actions are disabled in demo mode!"); } $repo = $this->accessDriver->repository; $user = AuthService::getLoggedUser(); if (!AuthService::usersEnabled() && $user != null && !$user->canWrite($repo->getId())) { throw new Exception("You have no right on this action."); } $selection = new UserSelection(); $selection->initFromHttpVars($httpVars); $currentFile = $selection->getUniqueFile(); $urlBase = $this->accessDriver->getResourceUrl($currentFile); $ajxpNode = new AJXP_Node($urlBase); $newValues = array(); $def = $this->getMetaDefinition(); $ajxpNode->setDriver($this->accessDriver); AJXP_Controller::applyHook("node.before_change", array(&$ajxpNode)); foreach ($def as $key => $data) { if (isset($httpVars[$key])) { $newValues[$key] = AJXP_Utils::decodeSecureMagic($httpVars[$key]); } else { if (!isset($original)) { $original = $ajxpNode->retrieveMetadata("users_meta", false, AJXP_METADATA_SCOPE_GLOBAL); } if (isset($original) && isset($original[$key])) { $newValues[$key] = $original[$key]; } } } $ajxpNode->setMetadata("users_meta", $newValues, false, AJXP_METADATA_SCOPE_GLOBAL); AJXP_Controller::applyHook("node.meta_change", array($ajxpNode)); AJXP_XMLWriter::header(); AJXP_XMLWriter::writeNodesDiff(array("UPDATE" => array($ajxpNode->getPath() => $ajxpNode)), true); AJXP_XMLWriter::close(); }