예제 #1
0
 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;
 }
예제 #2
0
<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) {
예제 #3
0
    } 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);
예제 #4
0
<?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) {
예제 #6
0
    $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}\" ... ";
    }
예제 #7
0
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.
}
예제 #9
0
 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);
                 }
             }
         }
     }
 }
예제 #10
0
        $_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);