diff --git a/Readme b/Readme index 34dd9c4..217fd64 100644 --- a/Readme +++ b/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 diff --git a/controllers/class.apicontroller.php b/controllers/class.apicontroller.php index 0ce8b44..f85adf6 100755 --- a/controllers/class.apicontroller.php +++ b/controllers/class.apicontroller.php @@ -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"); diff --git a/controllers/class.categorycontroller.php b/controllers/class.categoryapicontroller.php similarity index 98% rename from controllers/class.categorycontroller.php rename to controllers/class.categoryapicontroller.php index e9ddf45..986eb6d 100644 --- a/controllers/class.categorycontroller.php +++ b/controllers/class.categoryapicontroller.php @@ -1,6 +1,6 @@ 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(); + } + +} + +?> diff --git a/controllers/class.commentcontroller.php b/controllers/class.commentcontroller.php deleted file mode 100644 index feb6607..0000000 --- a/controllers/class.commentcontroller.php +++ /dev/null @@ -1,45 +0,0 @@ -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(); - } - -} - -?> diff --git a/controllers/class.discussioncontroller.php b/controllers/class.discussionapicontroller.php similarity index 54% rename from controllers/class.discussioncontroller.php rename to controllers/class.discussionapicontroller.php index 666083a..e7471a9 100644 --- a/controllers/class.discussioncontroller.php +++ b/controllers/class.discussionapicontroller.php @@ -1,11 +1,21 @@ 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(); } } diff --git a/controllers/class.sessionapicontroller.php b/controllers/class.sessionapicontroller.php new file mode 100644 index 0000000..92d63a4 --- /dev/null +++ b/controllers/class.sessionapicontroller.php @@ -0,0 +1,61 @@ +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'; + } + + +} + +?> diff --git a/controllers/class.sessioncontroller.php b/controllers/class.sessioncontroller.php deleted file mode 100644 index 71459d8..0000000 --- a/controllers/class.sessioncontroller.php +++ /dev/null @@ -1,21 +0,0 @@ -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(); - } - -} - -?> diff --git a/externalclass/qalib.php b/externalclass/qalib.php new file mode 100644 index 0000000..2934fcb --- /dev/null +++ b/externalclass/qalib.php @@ -0,0 +1,160 @@ +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); + + } + +} + + +?> \ No newline at end of file diff --git a/externalclass/test.php b/externalclass/test.php new file mode 100644 index 0000000..ff2772b --- /dev/null +++ b/externalclass/test.php @@ -0,0 +1,53 @@ +"; + + + + +$api = new MyClass('admin','pass'); + +echo "

"; + +/* + + //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 "
"; + $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 "
"; + $json = $api->removeComment(1,$array->CommentID); + echo $json; + +*/ + + + + +?> \ No newline at end of file diff --git a/views/categoryapi/index.php b/views/categoryapi/index.php new file mode 100644 index 0000000..e69de29 diff --git a/views/commentapi/add.php b/views/commentapi/add.php new file mode 100644 index 0000000..e69de29 diff --git a/views/commentapi/index.php b/views/commentapi/index.php new file mode 100644 index 0000000..e69de29 diff --git a/views/commentapi/remove.php b/views/commentapi/remove.php new file mode 100644 index 0000000..e69de29 diff --git a/views/discussionapi/add.php b/views/discussionapi/add.php new file mode 100644 index 0000000..e69de29 diff --git a/views/discussionapi/index.php b/views/discussionapi/index.php new file mode 100644 index 0000000..e69de29 diff --git a/views/discussionapi/remove.php b/views/discussionapi/remove.php new file mode 100644 index 0000000..e69de29 diff --git a/views/sessionapi/index.php b/views/sessionapi/index.php new file mode 100644 index 0000000..e69de29 diff --git a/views/sessionapi/login.php b/views/sessionapi/login.php new file mode 100644 index 0000000..e69de29