public function userTeamsActions($actionName, $httpVars, $fileVars)
 {
     switch ($actionName) {
         case "user_team_create":
             $userIds = $httpVars["user_ids"];
             $teamLabel = $httpVars["team_label"];
             $teamId = AJXP_Utils::slugify($teamLabel) . "-" . intval(rand(0, 1000));
             foreach ($userIds as $userId) {
                 $this->addUserToTeam($teamId, $userId, $teamLabel);
             }
             echo 'Created Team $teamId';
             break;
         case "user_team_delete":
             $this->removeUserFromTeam($httpVars["team_id"], null);
             break;
         case "user_team_add_user":
             $this->addUserToTeam($httpVars["team_id"], $httpVars["user_id"], null);
             break;
         case "user_team_edit_users":
             $this->editTeamUsers($httpVars["team_id"], $httpVars["users"], $httpVars["team_label"]);
             break;
         case "user_team_delete_user":
             $this->removeUserFromTeam($httpVars["team_id"], $httpVars["user_id"]);
             break;
     }
 }
 /**
  * Use the slugify function to generate an alias from the label
  * @param string $slug
  * @return void
  */
 public function setSlug($slug = null)
 {
     if ($slug == null) {
         $this->slug = AJXP_Utils::slugify($this->display);
     } else {
         $this->slug = $slug;
     }
 }
 private function initCacheWithNamespace($namespace)
 {
     $cacheDriver = null;
     $driverOptions = $this->getFilteredOption("DRIVER");
     $cachePrefix = $this->getFilteredOption("CACHE_PREFIX");
     if (!is_array($driverOptions) || !isset($driverOptions['driver'])) {
         return null;
     }
     switch ($driverOptions['driver']) {
         case "apc":
             $cacheDriver = $this->_apc_init($driverOptions);
             break;
         case "memcache":
             $cacheDriver = $this->_memcache_init($driverOptions);
             break;
         case "memcached":
             $cacheDriver = $this->_memcached_init($driverOptions);
             break;
         case "redis":
             $cacheDriver = $this->_redis_init($driverOptions);
             break;
         case "xcache":
             $cacheDriver = $this->_xcache_init($driverOptions);
             break;
         default:
             break;
     }
     if (empty($cacheDriver)) {
         return null;
     }
     if (empty($cachePrefix)) {
         $cachePrefix = AJXP_Utils::slugify(AJXP_Utils::detectServerURL(true));
     }
     $cachePrefix .= "_" . $namespace . "_";
     $cacheDriver->setNamespace($cachePrefix);
     return $cacheDriver;
 }
 public function userTeamsActions($actionName, $httpVars, $fileVars)
 {
     switch ($actionName) {
         case "user_team_create":
             $userIds = $httpVars["user_ids"];
             $teamLabel = AJXP_Utils::sanitize($httpVars["team_label"], AJXP_SANITIZE_HTML_STRICT);
             if (empty($teamLabel)) {
                 throw new Exception("Empty Team Label!");
             }
             if (empty($userIds)) {
                 throw new Exception("Please select some users for this team.");
             }
             $teamId = AJXP_Utils::slugify($teamLabel) . "-" . intval(rand(0, 1000));
             foreach ($userIds as $userId) {
                 $id = AJXP_Utils::sanitize($userId, AJXP_SANITIZE_EMAILCHARS);
                 $this->addUserToTeam($teamId, $id, $teamLabel);
             }
             echo 'Created Team $teamId';
             break;
         case "user_team_delete":
             $this->removeUserFromTeam($httpVars["team_id"], null);
             break;
         case "user_team_add_user":
             $this->addUserToTeam($httpVars["team_id"], $httpVars["user_id"], null);
             break;
         case "user_team_edit_users":
             $this->editTeamUsers($httpVars["team_id"], $httpVars["users"], $httpVars["team_label"]);
             break;
         case "user_team_delete_user":
             $this->removeUserFromTeam($httpVars["team_id"], $httpVars["user_id"]);
             break;
     }
 }
 public function switchAction($actionName, $httpVars, $fileVars)
 {
     $this->baseURL = rtrim($this->getFilteredOption("ETHERPAD_SERVER"), "/");
     $this->apiKey = $this->getFilteredOption("ETHERPAD_APIKEY");
     if (isset($httpVars["file"])) {
         $repository = ConfService::getRepository();
         if (!$repository->detectStreamWrapper(false)) {
             return false;
         }
         $plugin = AJXP_PluginsService::findPlugin("access", $repository->getAccessType());
         $streamData = $plugin->detectStreamWrapper(true);
         $destStreamURL = $streamData["protocol"] . "://" . $repository->getId() . "/";
         $filename = $destStreamURL . AJXP_Utils::securePath($httpVars["file"]);
         if (!is_file($filename)) {
             throw new Exception("Cannot find file!");
         }
     }
     require_once "etherpad-client/etherpad-lite-client.php";
     $client = new EtherpadLiteClient($this->apiKey, $this->baseURL . "/api");
     $userName = AuthService::getLoggedUser()->getId();
     $res = $client->createAuthorIfNotExistsFor($userName, $userName);
     $authorID = $res->authorID;
     $res2 = $client->createGroupIfNotExistsFor("ajaxplorer");
     $groupID = $res2->groupID;
     if ($actionName == "etherpad_create") {
         if (isset($httpVars["pad_name"])) {
             $padID = $httpVars["pad_name"];
             $startContent = "";
             if ($httpVars["pad_type"] && $httpVars["pad_type"] == 'free') {
                 $padID = "FREEPAD__" . $padID;
             }
         } else {
             if (isset($httpVars["file"])) {
                 $startContent = file_get_contents($filename);
                 if (strtolower(pathinfo($filename, PATHINFO_EXTENSION)) == "html") {
                     $startContentHTML = $startContent;
                 }
                 $padID = AJXP_Utils::slugify($httpVars["file"]);
             }
         }
         $resP = $client->listPads($res2->groupID);
         $pads = $resP->padIDs;
         if (!in_array($groupID . '$' . $padID, $pads)) {
             $res3 = $client->createGroupPad($groupID, $padID, null);
             if (isset($startContentHTML)) {
                 $client->setHTML($groupID . '$' . $padID, $startContentHTML);
             } else {
                 if (!empty($startContent)) {
                     $client->setText($groupID . '$' . $padID, $startContent);
                 }
             }
         } else {
             // Check if content needs relaunch!
             $test = $client->getText($groupID . '$' . $padID);
             if (!empty($startContent) && $test->text != $startContent) {
                 if (isset($startContentHTML)) {
                     $client->setHTML($groupID . '$' . $padID, $startContentHTML);
                 } else {
                     $client->setText($groupID . '$' . $padID, $startContent);
                 }
             }
         }
         $res4 = $client->createSession($groupID, $authorID, time() + 14400);
         $sessionID = $res4->sessionID;
         setcookie('sessionID', $sessionID, null, "/");
         $padID = $groupID . '$' . $padID;
         $data = array("url" => $this->baseURL . "/p/" . $padID, "padID" => $padID, "sessionID" => $sessionID);
         HTMLWriter::charsetHeader('application/json');
         echo json_encode($data);
     } else {
         if ($actionName == "etherpad_save") {
             $node = new AJXP_Node($filename);
             $padID = $httpVars["pad_id"];
             if (isset($startContentHTML)) {
                 $res = $client->getHTML($padID);
             } else {
                 $res = $client->getText($padID);
             }
             AJXP_Controller::applyHook("node.before_change", array($node, strlen($res->text)));
             file_put_contents($filename, $res->text);
             AJXP_Controller::applyHook("node.change", array($node, $node));
         } else {
             if ($actionName == "etherpad_close") {
                 // WE SHOULD DETECT IF THERE IS NOBODY CONNECTED ANYMORE, AND DELETE THE PAD.
                 $sessionID = $httpVars["session_id"];
                 $client->deleteSession($sessionID);
             } else {
                 if ($actionName == "etherpad_proxy_api") {
                     if ($httpVars["api_action"] == "list_pads") {
                         $res = $client->listPads($groupID);
                     } else {
                         if ($httpVars["api_action"] == "list_authors_for_pad") {
                             $res = $client->listAuthorsOfPad($httpVars["pad_id"]);
                         }
                     }
                     HTMLWriter::charsetHeader("application/json");
                     echo json_encode($res);
                 }
             }
         }
     }
 }