Merge fdc79f2796
into f2d5b05777
This commit is contained in:
commit
b75d42fd41
18
Readme
18
Readme
|
@ -2,8 +2,16 @@ adds json APIs to the forum
|
|||
|
||||
add this application to your forum, enable it. the following URLs/methods will now be accessible to you:
|
||||
|
||||
/api/category
|
||||
/api/discussion (GET: id, limit, offset)
|
||||
/api/discussion/add (POST:Discussion/CategoryID, Discussion/Body, Discussion/Name, Discussion/TransientKey)
|
||||
/api/comment/add (POST: Comment/DiscussionID, Comment/CategoryID, Comment/Body, Comment/Name, Comment/TransientKey)
|
||||
/api/session
|
||||
/api/loginapi (GET: user, pass)
|
||||
|
||||
/api/categoryapi
|
||||
|
||||
/api/discussionapi (GET: id, limit, offset)
|
||||
|
||||
/api/discussionapi/add (POST: CategoryID, Body, Name, TransientKey, UserID)
|
||||
/api/discussionapi/remove (POST: DiscussionID, CategoryID, TransientKey, UserID)
|
||||
|
||||
/api/commentapi/add (POST: DiscussionID, CategoryID, Body, TransientKey, UserID)
|
||||
/api/commentapi/remove (POST: CommentID, CategoryID, TransientKey, UserID)
|
||||
|
||||
/api/sessionapi
|
||||
|
|
|
@ -13,12 +13,13 @@ class APIController extends Gdn_Controller {
|
|||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
}
|
||||
|
||||
public function Initialize()
|
||||
{
|
||||
parent::Initialize();
|
||||
|
||||
|
||||
$this->_DeliveryMethod = DELIVERY_METHOD_JSON;
|
||||
//$this->SetHeader("Content-Type", "application/json; charset=utf-8");
|
||||
$this->SetHeader("Content-Type", "text/plain; charset=utf-8");
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?php if (!defined('APPLICATION')) exit();
|
||||
|
||||
class CategoryController extends APIController
|
||||
class CategoryAPIController extends APIController
|
||||
{
|
||||
public $Uses = array('Gdn_Format', 'Database', 'CategoryModel', 'DiscussionModel');
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
<?php if (!defined('APPLICATION')) exit();
|
||||
|
||||
class CommentAPIController extends APIController
|
||||
{
|
||||
public $Uses = array('Form', 'Database', 'CategoryModel', 'DiscussionModel', 'CommentModel');
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
if (isset($_POST['UserID'])){
|
||||
Gdn::Session()->Start($_POST['UserID'], TRUE, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
public function Index()
|
||||
{
|
||||
$this->Render();
|
||||
}
|
||||
|
||||
public function Add()
|
||||
{
|
||||
$Session = Gdn::Session();
|
||||
$Errors = array();
|
||||
|
||||
// Set the model on the form.
|
||||
$this->Form->SetModel($this->CommentModel);
|
||||
|
||||
if($this->Form->AuthenticatedPostBack() === TRUE)
|
||||
{
|
||||
$FormValues = $this->Form->FormValues();
|
||||
|
||||
// Check category permissions
|
||||
if($Session->CheckPermission('Vanilla.Comments.Add', $FormValues['CategoryID']))
|
||||
{
|
||||
$CommentID = $this->CommentModel->Save($FormValues);
|
||||
$this->SetJSON("CommentID", $CommentID);
|
||||
}
|
||||
else
|
||||
$Errors[] = 'You do not have permission to add comments to this discussion';
|
||||
}
|
||||
else
|
||||
$Errors[] = 'You do not have credentials to post as this user';
|
||||
|
||||
// Return the form errors
|
||||
if(count($Errors) > 0)
|
||||
$this->SetJSON("Errors", $Errors);
|
||||
|
||||
$this->Render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a comment.
|
||||
* @param int The category id to remove the comment to.
|
||||
*/
|
||||
public function Remove()
|
||||
{
|
||||
$Session = Gdn::Session();
|
||||
$Errors = array();
|
||||
|
||||
// Set the model on the form.
|
||||
$this->Form->SetModel($this->CommentModel);
|
||||
|
||||
if($this->Form->AuthenticatedPostBack() === TRUE)
|
||||
{
|
||||
$FormValues = $this->Form->FormValues();
|
||||
|
||||
// Check category permissions
|
||||
if(!$Session->CheckPermission('Vanilla.Discussions.Add', $FormValues['CategoryID']))
|
||||
$Errors[] = 'You do not have permission to start discussions in this category';
|
||||
else
|
||||
$CommentID = $this->CommentModel->Delete($FormValues['CommentID']);
|
||||
$this->SetJSON("removed", $CommentID);
|
||||
}
|
||||
else
|
||||
$Errors[] = 'You do not have credentials to post as this user';
|
||||
|
||||
// Return the form errors
|
||||
if(count($Errors) > 0)
|
||||
$this->SetJSON("Errors", $Errors);
|
||||
|
||||
$this->Render();
|
||||
Gdn::Session()->End();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
|
@ -1,45 +0,0 @@
|
|||
<?php if (!defined('APPLICATION')) exit();
|
||||
|
||||
class CommentController extends APIController
|
||||
{
|
||||
public $Uses = array('Form', 'Database', 'CategoryModel', 'DiscussionModel', 'CommentModel');
|
||||
|
||||
public function Index()
|
||||
{
|
||||
$this->Render();
|
||||
}
|
||||
|
||||
public function Add()
|
||||
{
|
||||
$Session = Gdn::Session();
|
||||
$Errors = array();
|
||||
|
||||
// Set the model on the form.
|
||||
$this->Form->SetModel($this->CommentModel);
|
||||
|
||||
if($this->Form->AuthenticatedPostBack() === TRUE)
|
||||
{
|
||||
$FormValues = $this->Form->FormValues();
|
||||
|
||||
// Check category permissions
|
||||
if($Session->CheckPermission('Vanilla.Comments.Add', $FormValues['CategoryID']))
|
||||
{
|
||||
$CommentID = $this->CommentModel->Save($FormValues);
|
||||
$this->SetJSON("CommentID", $CommentID);
|
||||
}
|
||||
else
|
||||
$Errors[] = 'You do not have permission to add comments to this discussion';
|
||||
}
|
||||
else
|
||||
$Errors[] = 'You do not have credentials to post as this user';
|
||||
|
||||
// Return the form errors
|
||||
if(count($Errors) > 0)
|
||||
$this->SetJSON("Errors", $Errors);
|
||||
|
||||
$this->Render();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
|
@ -1,11 +1,21 @@
|
|||
<?php if (!defined('APPLICATION')) exit();
|
||||
|
||||
class DiscussionController extends APIController
|
||||
class DiscussionAPIController extends APIController
|
||||
{
|
||||
public $Uses = array('Form', 'Database', 'CategoryModel', 'DiscussionModel', 'CommentModel');
|
||||
public $Uses = array('Form', 'Database', 'CategoryModel', 'DiscussionModel', 'CommentModel');
|
||||
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
if (isset($_POST['UserID'])){
|
||||
Gdn::Session()->Start($_POST['UserID'], TRUE, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
public function Index()
|
||||
{
|
||||
|
||||
$Limit = GetIncomingValue('limit', 5);
|
||||
$Offset = GetIncomingValue('offset', 0);
|
||||
$DiscussionID = GetIncomingValue('id', 0);
|
||||
|
@ -24,6 +34,7 @@ class DiscussionController extends APIController
|
|||
}
|
||||
|
||||
$this->Render();
|
||||
Gdn::Session()->End();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -33,7 +44,7 @@ class DiscussionController extends APIController
|
|||
public function Add()
|
||||
{
|
||||
$Session = Gdn::Session();
|
||||
$Errors = array();
|
||||
$Errors = array();
|
||||
|
||||
// Set the model on the form.
|
||||
$this->Form->SetModel($this->DiscussionModel);
|
||||
|
@ -41,7 +52,6 @@ class DiscussionController extends APIController
|
|||
if($this->Form->AuthenticatedPostBack() === TRUE)
|
||||
{
|
||||
$FormValues = $this->Form->FormValues();
|
||||
|
||||
// Check category permissions
|
||||
if(!$Session->CheckPermission('Vanilla.Discussions.Add', $FormValues['CategoryID']))
|
||||
$Errors[] = 'You do not have permission to start discussions in this category';
|
||||
|
@ -57,6 +67,41 @@ class DiscussionController extends APIController
|
|||
$this->SetJSON("Errors", $Errors);
|
||||
|
||||
$this->Render();
|
||||
Gdn::Session()->End();
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a discussion.
|
||||
* @param int The category id to add the discussion to.
|
||||
*/
|
||||
public function Remove()
|
||||
{
|
||||
$Session = Gdn::Session();
|
||||
$Errors = array();
|
||||
|
||||
// Set the model on the form.
|
||||
$this->Form->SetModel($this->DiscussionModel);
|
||||
|
||||
if($this->Form->AuthenticatedPostBack() === TRUE)
|
||||
{
|
||||
$FormValues = $this->Form->FormValues();
|
||||
|
||||
// Check category permissions
|
||||
if(!$Session->CheckPermission('Vanilla.Discussions.Add', $FormValues['CategoryID']))
|
||||
$Errors[] = 'You do not have permission to start discussions in this category';
|
||||
else
|
||||
$DiscussionID = $this->DiscussionModel->Delete($FormValues['DiscussionID']);
|
||||
$this->SetJSON("removed", $DiscussionID);
|
||||
}
|
||||
else
|
||||
$Errors[] = 'You do not have credentials to post as this user';
|
||||
|
||||
// Return the form errors
|
||||
if(count($Errors) > 0)
|
||||
$this->SetJSON("Errors", $Errors);
|
||||
|
||||
$this->Render();
|
||||
Gdn::Session()->End();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
<?php if (!defined('APPLICATION')) exit();
|
||||
|
||||
class SessionAPIController extends APIController
|
||||
{
|
||||
|
||||
|
||||
public $Uses = array('Form', 'Database', 'CategoryModel', 'DiscussionModel', 'CommentModel','UserModel');
|
||||
//TODO should allow for only one catgories to be looked at
|
||||
public function Index()
|
||||
{
|
||||
|
||||
$Session = Gdn::Session();
|
||||
|
||||
if($Session->User != False)
|
||||
$this->SetJSON("user", array("TransientKey"=>$Session->TransientKey(), "UserID"=>$Session->UserID, "Name"=>$Session->User->Name, "User"=>True));
|
||||
else
|
||||
$this->SetJSON("user", array("TransientKey"=>$Session->TransientKey(), "UserID"=>0, "User"=>False));
|
||||
|
||||
$this->Render();
|
||||
}
|
||||
|
||||
|
||||
public function Login(){
|
||||
|
||||
$Username = GetIncomingValue('user', 'admin');
|
||||
$Password = GetIncomingValue('pass', 'pass');
|
||||
|
||||
$UserModel = new UserModel();
|
||||
$User = $UserModel->GetByEmail($Username);
|
||||
|
||||
if (!$User) {
|
||||
$User = $UserModel->GetByUsername($Username);
|
||||
}
|
||||
|
||||
$Result = FALSE;
|
||||
if ($User) {
|
||||
// Check the password.
|
||||
$PasswordHash = new Gdn_PasswordHash();
|
||||
$Result = $PasswordHash->CheckPassword($Password, val('Password', $User), val('HashMethod', $User));
|
||||
//print_r($User);exit;
|
||||
|
||||
if ($Result) {
|
||||
$Session = Gdn::Session();
|
||||
Gdn::Session()->Start($User->UserID, TRUE, TRUE);
|
||||
$this->SetJSON("user", array("TransientKey"=>$User->Attributes['TransientKey'], "UserID"=>$User->UserID, "Name"=>$User->Name, "User"=>$Result));
|
||||
} else {
|
||||
$this->SetJSON("user", array("TransientKey"=>false, "UserID"=>0, "User"=>False));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$this->Render();
|
||||
Gdn::Session()->End();
|
||||
|
||||
//echo ($Result) ? 'Success' : 'Failure';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
|
@ -1,21 +0,0 @@
|
|||
<?php if (!defined('APPLICATION')) exit();
|
||||
|
||||
class SessionController extends APIController
|
||||
{
|
||||
//TODO should allow for only one catgories to be looked at
|
||||
public function Index()
|
||||
{
|
||||
|
||||
$Session = Gdn::Session();
|
||||
|
||||
if($Session->User != False)
|
||||
$this->SetJSON("user", array("TransientKey"=>$Session->TransientKey(), "UserID"=>$Session->UserID, "Name"=>$Session->User->Name, "User"=>True));
|
||||
else
|
||||
$this->SetJSON("user", array("TransientKey"=>$Session->TransientKey(), "UserID"=>0, "User"=>False));
|
||||
|
||||
$this->Render();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
|
@ -0,0 +1,160 @@
|
|||
<?php
|
||||
|
||||
class MyClass
|
||||
{
|
||||
|
||||
public $Key = false;
|
||||
|
||||
public $TransientKEY = false;
|
||||
public $UserID = false;
|
||||
public $URL = "example.com/api";
|
||||
|
||||
public function __construct($user=false,$pass=false)
|
||||
{
|
||||
|
||||
if ($user && $pass){
|
||||
return $this->login($user,$pass);
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
public function getTransientKey() {
|
||||
return $this->TransientKey;
|
||||
}
|
||||
|
||||
public function getUserID(){
|
||||
return $this->UserID;
|
||||
}
|
||||
|
||||
public function curl_post($fields = array(), $url =''){
|
||||
$fields_string = '';
|
||||
|
||||
//url-ify the data for the POST
|
||||
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
|
||||
rtrim($fields_string, '&');
|
||||
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch,CURLOPT_URL, $url);
|
||||
curl_setopt($ch,CURLOPT_POST, count($fields));
|
||||
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
$result = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function curl_get($url=''){
|
||||
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
$output = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Login function that retrieves TransientKey
|
||||
*
|
||||
* @param (string) (user) username
|
||||
* @param (string) (pass) password
|
||||
* @return (TransientKey)
|
||||
*/
|
||||
public function login($user='',$pass='') {
|
||||
|
||||
|
||||
$url = $this->URL."/sessionapi/login?user=".$user."&pass=".$pass;
|
||||
|
||||
$json = json_decode($this->curl_get($url));
|
||||
|
||||
$this->TransientKey = $json->user->TransientKey;
|
||||
$this->UserID = $json->user->UserID;
|
||||
|
||||
$this->Key = $this->UserID."-".$this->TransientKey;
|
||||
|
||||
return $json->user;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
DISCUSSIONS
|
||||
*/
|
||||
|
||||
public function addDiscussion($CategoryID = false,$Name = false,$Body = false){
|
||||
|
||||
|
||||
//set POST variables
|
||||
$url = $this->URL."/discussionapi/add";
|
||||
|
||||
$fields = array(
|
||||
'TransientKey' => $this->TransientKey,
|
||||
'UserID' => $this->UserID,
|
||||
'CategoryID' => urlencode($CategoryID),
|
||||
'Body' => urlencode($Body),
|
||||
'Name' => urlencode($Name),
|
||||
'Type' => 'Question'
|
||||
);
|
||||
|
||||
return $this->curl_post($fields,$url);
|
||||
|
||||
}
|
||||
|
||||
public function removeDiscussion($CategoryID = false,$DiscussionID = false){
|
||||
|
||||
//set POST variables
|
||||
$url = $this->URL."/discussionapi/remove";
|
||||
|
||||
$fields = array(
|
||||
'TransientKey' => $this->TransientKey,
|
||||
'UserID' => $this->UserID,
|
||||
'CategoryID' => urlencode($CategoryID),
|
||||
'DiscussionID' => urlencode($DiscussionID)
|
||||
);
|
||||
|
||||
return $this->curl_post($fields,$url);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
COMMENTS
|
||||
*/
|
||||
|
||||
public function addComment($DiscussionID = false,$CategoryID = false,$Body = false){
|
||||
|
||||
//set POST variables
|
||||
$url = $this->URL."/commentapi/add";
|
||||
|
||||
$fields = array(
|
||||
'TransientKey' => $this->TransientKey,
|
||||
'UserID' => $this->UserID,
|
||||
'CategoryID' => urlencode($CategoryID),
|
||||
'DiscussionID' => urlencode($DiscussionID),
|
||||
'Body' => urlencode($Body)
|
||||
);
|
||||
|
||||
return $this->curl_post($fields,$url);
|
||||
|
||||
}
|
||||
|
||||
public function removeComment($CategoryID = false,$CommentID = false){
|
||||
|
||||
//set POST variables
|
||||
$url = $this->URL."/commentapi/remove";
|
||||
|
||||
$fields = array(
|
||||
'TransientKey' => $this->TransientKey,
|
||||
'UserID' => $this->UserID,
|
||||
'CategoryID' => urlencode($CategoryID),
|
||||
'CommentID' => urlencode($CommentID)
|
||||
);
|
||||
|
||||
return $this->curl_post($fields,$url);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
|
||||
include('qalib.php');
|
||||
|
||||
echo "Testing qalib<br>";
|
||||
|
||||
|
||||
|
||||
|
||||
$api = new MyClass('admin','pass');
|
||||
|
||||
echo "<pre><br>";
|
||||
|
||||
/*
|
||||
|
||||
//example login
|
||||
|
||||
//print_r($api->login('admin','pass'));
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
//example add and remove discussion
|
||||
|
||||
$json = $api->addDiscussion(1,'esto es una prueba','aquí viene el texto de la pregunta');
|
||||
echo $json;
|
||||
$array = json_decode($json);
|
||||
|
||||
echo "<br>";
|
||||
$json = $api->removeDiscussion(1,$array->DiscussionID);
|
||||
echo $json;
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
//example add and remove discussion
|
||||
|
||||
$json = $api->addComment(54,1,'comentario de pruebas');
|
||||
echo $json;
|
||||
$array = json_decode($json);
|
||||
|
||||
echo "<br>";
|
||||
$json = $api->removeComment(1,$array->CommentID);
|
||||
echo $json;
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
?>
|
Reference in New Issue