Skip to content
This repository was archived by the owner on Nov 15, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 13 additions & 5 deletions Readme
Original file line number Diff line number Diff line change
Expand Up @@ -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
3 changes: 2 additions & 1 deletion controllers/class.apicontroller.php
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
Original file line number Diff line number Diff line change
@@ -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');

Expand Down
87 changes: 87 additions & 0 deletions controllers/class.commentapicontroller.php
Original file line number Diff line number Diff line change
@@ -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();
}

}

?>
45 changes: 0 additions & 45 deletions controllers/class.commentcontroller.php

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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);
Expand All @@ -24,6 +34,7 @@ public function Index()
}

$this->Render();
Gdn::Session()->End();
}

/**
Expand All @@ -33,15 +44,14 @@ public function Index()
public function Add()
{
$Session = Gdn::Session();
$Errors = array();
$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';
Expand All @@ -57,6 +67,41 @@ public function Add()
$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();
}

}
Expand Down
61 changes: 61 additions & 0 deletions controllers/class.sessionapicontroller.php
Original file line number Diff line number Diff line change
@@ -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';
}


}

?>
21 changes: 0 additions & 21 deletions controllers/class.sessioncontroller.php

This file was deleted.

Loading