public function switchAction($actionName, $httpVars, $fileVars) { $this->baseURL = rtrim($this->getFilteredOption("ETHERPAD_SERVER"), "/"); $this->apiKey = $this->getFilteredOption("ETHERPAD_APIKEY"); $userSelection = new UserSelection(ConfService::getRepository(), $httpVars); if ($userSelection->isEmpty()) { throw new Exception("Empty selection"); } $repository = ConfService::getRepository(); if (!$repository->detectStreamWrapper(false)) { return false; } $selectedNode = $userSelection->getUniqueNode(); $selectedNode->loadNodeInfo(); if (!$selectedNode->isLeaf()) { throw new Exception("Cannot handle folders, please select a file!"); } $nodeExtension = strtolower(pathinfo($selectedNode->getPath(), PATHINFO_EXTENSION)); // Determine pad ID if ($nodeExtension == "pad") { $padID = file_get_contents($selectedNode->getUrl()); } else { // TRY TO LOAD PAD ID FROM NODE SHARED METADATA $metadata = $selectedNode->retrieveMetadata("etherpad", AJXP_METADATA_ALLUSERS, AJXP_METADATA_SCOPE_GLOBAL, false); if (isset($metadata["pad_id"])) { $padID = $metadata["pad_id"]; } else { $padID = AJXP_Utils::generateRandomString(); $selectedNode->setMetadata("etherpad", array("pad_id" => $padID), AJXP_METADATA_ALLUSERS, AJXP_METADATA_SCOPE_GLOBAL, false); } } require_once "etherpad-client/etherpad-lite-client.php"; $client = new EtherpadLiteClient($this->apiKey, $this->baseURL . "/api"); $loggedUser = AuthService::getLoggedUser(); $userName = $loggedUser->getId(); $userLabel = $loggedUser->mergedRole->filterParameterValue("core.conf", "USER_DISPLAY_NAME", AJXP_REPO_SCOPE_ALL, $userName); $res = $client->createAuthorIfNotExistsFor($userName, $userLabel); $authorID = $res->authorID; $res2 = $client->createGroupIfNotExistsFor($loggedUser->getGroupPath()); $groupID = $res2->groupID; $fullId = $groupID . "\$" . $padID; if ($actionName == "etherpad_create") { $resP = $client->listPads($groupID); $currentContent = file_get_contents($selectedNode->getUrl()); if ($nodeExtension == "html" && strpos($currentContent, "<html>") === false) { $currentContent = "<html><head></head><body>{$currentContent}</body></html>"; } if (!in_array($fullId, $resP->padIDs)) { $client->createGroupPad($groupID, $padID, null); if ($nodeExtension == "html" && !empty($currentContent)) { $client->setHTML($fullId, $currentContent); } else { if ($nodeExtension != "pad") { $client->setText($fullId, $currentContent); } } } else { if ($nodeExtension != "pad") { // If someone is already connected, do not override. $existingAuthors = $client->listAuthorsOfPad($fullId); if (!count($existingAuthors->authorIDs)) { if ($nodeExtension == "html" && !empty($currentContent)) { $client->setHTML($fullId, $currentContent); } else { $client->setText($fullId, $currentContent); } } } } $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") { $padID = $httpVars["pad_id"]; if ($nodeExtension == "html" || $nodeExtension == "pad") { $res = $client->getHTML($padID); $content = $res->html; } else { $res = $client->getText($padID); $content = $res->text; } if ($nodeExtension == "pad") { // Create a new file and save the content in it. $origUrl = $selectedNode->getUrl(); $mess = ConfService::getMessages(); $dateStamp = date(" Y-m-d H:i", time()); $startUrl = preg_replace('"\\.pad$"', $dateStamp . '.html', $origUrl); $newNode = new AJXP_Node($startUrl); AJXP_Controller::applyHook("node.before_create", array($newNode, strlen($content))); file_put_contents($newNode->getUrl(), $content); AJXP_Controller::applyHook("node.change", array(null, $newNode)); } else { AJXP_Controller::applyHook("node.before_change", array($selectedNode, strlen($content))); file_put_contents($selectedNode->getUrl(), $content); clearstatcache(true, $selectedNode->getUrl()); $selectedNode->loadNodeInfo(true); AJXP_Controller::applyHook("node.change", array($selectedNode, $selectedNode)); } } else { if ($actionName == "etherpad_close") { // WE SHOULD DETECT IF THERE IS NOBODY CONNECTED ANYMORE, AND DELETE THE PAD. // BUT SEEMS LIKE THERE'S NO WAY TO PROPERLY REMOVE AN AUTHOR VIA API $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); } else { if ($actionName == "etherpad_get_content") { HTMLWriter::charsetHeader("text/plain"); echo $client->getText($httpVars["pad_id"])->text; } } } } } return null; }
<pre> <?php // Include the Class include 'etherpad-lite-client.php'; // Create an instance $instance = new EtherpadLiteClient('EtherpadFTW', 'http://beta.etherpad.org:9001/api'); // Example URL: http://your.hostname.tld:8080/api // All API calls return a JSON value as documented in the API here: https://github.com/Pita/etherpad-lite/wiki/HTTP-API echo "<h1>Pads</h1>"; /* Example: Create Author */ try { $author = $instance->createAuthor('John McLear'); // This really needs explaining.. $authorID = $author->authorID; echo "The AuthorID is now {$authorID}\n\n"; } catch (Exception $e) { // the pad already exists or something else went wrong echo "\n\ncreateAuthor Failed with message " . $e->getMessage(); } /* Example: get Mapped Author ID based on a value from your web application such as the userID */ try { $authormap = $instance->createAuthorIfNotExistsFor('John McLear', 'Cake'); // This would show my local UserID mapping John McLear as Cake on Etherpad } catch (Exception $e) { echo "\n\ncreateAuthorIfNotExistsFor Failed with message " . $e->getMessage(); } //cake /* Example: Create a new Pad */ try { $instance->createPad('testPad', 'Hello world'); } catch (Exception $e) {
} else { header("HTTP/1.1 404 Not Found"); load_view("group_not_found", array("group" => $group)); exit; } } function setPassword($padID, $passwd) { global $instance, $db; $ok = $instance->setPassword($padID, $passwd); $padid = explode('$', $padID); $db->prepare("UPDATE padman_pad_cache SET password =? WHERE group_id=? AND pad_name=?")->execute(array($passwd, $padid[0], $padid[1])); return $ok; } $padurl = PAD_URL; $instance = new EtherpadLiteClient(API_KEY, API_URL); $allow_pad_create = false; if (isset($_SERVER['PHP_AUTH_USER']) || ALLOW_ANON_PAD_CREATE) { $allow_pad_create = true; } $author_cn = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '******' . preg_replace('/[^0-9a-f]+/', '_', $_SERVER["REMOTE_ADDR"]); if (file_exists("/home/" . $author_cn . "/.padname")) { $author_name = file_get_contents("/home/" . $author_cn . "/.padname"); } else { $author_name = $author_cn; } //$author_cn = $_SERVER['HTTP_AUTH_CN']; //$groups = "sitzung; fachschaft; inforz; ophase"; //base64_decode($_SERVER['HTTP_AUTH_GROUPS']); //$author_groups = preg_split("/[\s;]+/", $groups); $author_groups = $group_keys; $author_groups = array_intersect($author_groups, $group_keys);
<?php include "config.inc.php"; include "jsondb.inc.php"; include "private/etherpad-lite-client.php"; $shown_groups = array_map("strtolower", $GROUP_TITLES); $instance = new EtherpadLiteClient(API_KEY, API_URL); $groupmap = array(); $sessions = array(); foreach ($shown_groups as $group_name) { $mapGroup = $instance->createGroupIfNotExistsFor($group_name); $groupmap[$group_name] = $mapGroup->groupID; } foreach ($groupmap as $group => $groupID) { echo "Retrieving pads in group \"{$group}\" ... "; $pads = $instance->listPads($groupID); echo "OK \n"; echo "Indexing pads in group \"{$group}\" "; foreach ($pads->padIDs as $padID) { $parts = explode('$', $padID); $padname = $parts[1]; //cache content $result = $instance->getText($padID); $fn = JsonDB::$DATA_DIR . "index/" . urlencode($group) . "/" . urlencode($padname) . ".txt"; @mkdir(JsonDB::$DATA_DIR . "index"); @mkdir(dirname($fn)); file_put_contents($fn, $result->text); echo "."; } echo " OK \n"; }
.pad{background-color:#F7F7F7;padding:20px;border-style:solid;border-width:1px;margin-bottom:10px;} .contents{display:none;word-wrap: break-word;} #pads{width:700px;} </style> </head> <body> <pre> <?php //error_reporting(E_ALL); //ini_set('display_errors', '1'); // Include the Class include 'etherpad-lite-client.php'; $host = "http://beta.etherpad.org"; // By this point the user has authenticated // Create an instance $instance = new EtherpadLiteClient('EtherpadFTW', 'http://beta.etherpad.org/api'); // Example URL: http://your.hostname.tld:8080/api -- All API calls return a JSON value as documented in the API here: https://github.com/Pita/etherpad-lite/wiki/HTTP-API // Get the Params from the URL $action = $_GET['action']; // Step 1, get GroupID of the userID where userID is OUR userID and NOT the userID used by Etherpad try { $mappedGroup = $instance->createGroupIfNotExistsFor("*****@*****.**"); $groupID = $mappedGroup->groupID; } catch (Exception $e) { } // Create a session /* get Mapped Author ID based on a value from your web application such as the userID */ try { $author = $instance->createAuthorIfNotExistsFor('John McLear', 'Cake'); $authorID = $author->authorID; } catch (Exception $e) {
$passwords = json_decode(file_get_contents('data/passwords.json'), true); $shortlinks = json_decode(file_get_contents('data/shortlnk.json'), true); } catch (Exception $ex) { $passwords = array(); $shortlinks = array(); } $shown_groups = array(); foreach ($GROUP_TITLES as $d) { if (is_array($d)) { $group_keys = array_merge($group_keys, $d); } else { $group_keys[] = $d; } } $shown_groups = array_unique(array_map("strtolower", $group_keys)); $instance = new EtherpadLiteClient(API_KEY, API_URL); $groupmap = array(); $sessions = array(); $insertGroupQ = $db->prepare("INSERT IGNORE INTO padman_group_cache (group_mapper, group_id, tags) VALUES (?, ?, ?)"); $insertQ = $db->prepare("INSERT ignore INTO padman_pad_cache (group_mapper, group_id, pad_name, password, shortlink)\n VALUES (?, ?, ?, ?, ?)"); $updateQ = $db->prepare("UPDATE padman_pad_cache SET group_id=?, last_edited=FROM_UNIXTIME(?), access_level=?\n WHERE group_mapper=? AND pad_name=? LIMIT 1"); $getTagsQ = $db->prepare("SELECT tags FROM padman_pad_cache WHERE group_mapper=? AND pad_name=? LIMIT 1"); $db->exec("TRUNCATE TABLE padman_group_cache"); foreach ($shown_groups as $group_name) { $mapGroup = $instance->createGroupIfNotExistsFor($group_name); $groupmap[$group_name] = $mapGroup->groupID; } foreach ($groupmap as $group => $groupID) { if ($verbose) { echo "Retrieving pads in group \"{$group}\" ... "; }
function pad($control, $ID = false, $txt = '') { if ($control != 'print') { include '../img/lib/etherpad-lite/etherpad-lite-client.php'; $e = new EtherpadLiteClient(CLAVE_API_ETHERPAD, 'http://www.' . DOMAIN . ':9001/api'); } switch ($control) { case 'print': global $pol; return '<iframe src="http://www.virtualpol.com:9001/p/' . $ID . '?userName='******'nick'] . '" width="100%" height="500" frameborder="0" style="background:#FFF;margin:0 0 -9px -20px;"></iframe>'; break; case 'create': try { $e->createPad($ID, html_entity_decode(strip_tags(str_replace("<br />", "\n", $txt)), null, 'UTF-8')); return true; } catch (Exception $error) { return false; } break; case 'get': try { return $e->getHTML($ID)->html; } catch (Exception $error) { return false; } break; case 'delete': try { $e->deletePad($ID); return true; } catch (Exception $error) { return false; } break; } }
<?php if (!defined('BASEPATH')) { exit('No direct script access allowed'); } include dirname(__FILE__) . '/write_missionpost_js/base.php'; require_once MODPATH . 'core/views/_base/admin/js/write_missionpost_js.php'; try { require_once dirname(__FILE__) . '/etherpad/etherpad_lite_client.php'; $etherpad_url = $this->config->item('collaborative_writing_etherpad_url') ?: 'http://0.0.0.0:9001'; $etherpad_api_url = $etherpad_url . '/api'; $etherpad_api_key = $this->config->item('collaborative_writing_etherpad_api_key') ?: ''; $etherpad_client = new EtherpadLiteClient($etherpad_api_key, $etherpad_api_url); if ($this->uri->segment(3)) { $post = $this->posts->get_post($this->uri->segment(3)); $pad_id = $this->posts->get_post_pad_id($this->uri->segment(3)); } if (!isset($pad_id)) { $pad_id = str_replace('.', '', uniqid('', true)); $etherpad_client->createPad($pad_id, ''); } else { $etherpad_client->checkToken(); } $user_main_character_name = str_replace('\'', '\\\'', $this->char->get_character_name($this->user->get_user($this->session->userdata('userid'))->main_char)); include dirname(__FILE__) . '/write_missionpost_js/disable_locking.php'; include dirname(__FILE__) . '/write_missionpost_js/etherpad.php'; } catch (Exception $e) { // If this fails, do nothing, which will fall back to the default behavior // of just using the textarea and the old style. }
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); } } } } }
$_GET["show"] = $res[2]; } else { header("HTTP/1.1 404 Not Found"); echo "<h3>File not found</h3>"; exit; } } function setPassword($padID, $passwd) { global $instance; $ok = $instance->setPassword($padID, $passwd); (new JsonDB('passwords'))->store($padID, $passwd); return $ok; } $padurl = PAD_URL; $instance = new EtherpadLiteClient(API_KEY, API_URL); $allow_pad_create = false; if (isset($_SERVER['PHP_AUTH_USER']) || ALLOW_ANON_PAD_CREATE) { $allow_pad_create = true; } $author_cn = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '******' . substr(md5($_SERVER["REMOTE_ADDR"]), 0, 10); if (file_exists("/home/" . $author_cn . "/.padname")) { $author_name = file_get_contents("/home/" . $author_cn . "/.padname"); } else { $author_name = $author_cn; } //$author_cn = $_SERVER['HTTP_AUTH_CN']; //$groups = "sitzung; fachschaft; inforz; ophase"; //base64_decode($_SERVER['HTTP_AUTH_GROUPS']); //$author_groups = preg_split("/[\s;]+/", $groups); $author_groups = $group_keys; $author_groups = array_intersect($author_groups, $group_keys);