Fork me on GitHub
Current release is 2.1.6 (21 Nov 2014).

Users who have not yet upgraded to 2.1 should get security release 2.0.18.14 (1 Nov 2014). We will stop providing these security releases to 2.0 at the end of this year.

Additional functionality for Vanilla API?

edited October 2011 in Vanilla 2.0 Help
Hello,

I'm very new to Vanilla but was attracted to it due to the possibility of a baked-in web services API (http://vanillaforums.org/docs/api). However, this API seems to be for read-only access to the data. Are there any plans to extend the API to allow modification of discussions, user data, etc.? Even if the API will not go all the way to being fully RESTful, just a basic CRUD interface for the main elements (users, categories, discussions, posts) would be great.

EDIT: If there are no current plans for this, can you point me in the right direction to put that functionality in myself?

Thanks,

z.

Best Answer

  • x00x00 MVP
    edited October 2011 Answer ✓
    This a basic idea just messing around as a plugin:
    $PluginInfo['ExtendAPI'] = array(
    'Name' => 'ExtendAPI',
    'Description' => "ExtendAPI",
    'Version' => '0.1',
    'Author' => 'me'
    );

    if (!function_exists('unserialize_xml')) {
    function unserialize_xml($input, $callback = null, $recurse = false){
    // Get input, loading an xml string with simplexml if its the top level of recursion
    $data = ((!$recurse) && is_string($input))? simplexml_load_string($input): $input;
    // Convert SimpleXMLElements to array
    if ($data instanceof SimpleXMLElement) $data = (array) $data;
    // Recurse into arrays
    if (is_array($data)) foreach ($data as &$item) $item = unserialize_xml($item, $callback, true);
    // Run callback and return
    return (!is_array($data) && is_callable($callback))? call_user_func($callback, $data): $data;
    }
    }

    class ExtendAPI extends Gdn_Plugin {

    public function PostController_Render_Before(&$Sender){
    if(in_array($Sender->DeliveryMethod(),array(DELIVERY_METHOD_JSON,DELIVERY_METHOD_XML))){
    if ($Sender->Request->RequestMethod()== 'POST') {
    $RawContent = file_get_contents("php://input");
    if($Sender->DeliveryMethod()==DELIVERY_METHOD_JSON){
    $Data = json_decode($RawContent);
    }elseif($Sender->DeliveryMethod()==DELIVERY_METHOD_XML){
    //dependent on some basic xml parser in this case using SimpleXML.
    $Data = unserialize_xml($RawContent);

    }

    foreach($Data As $NodeName => $NodeValue ){
    SetValue( $Sender->Form->InputPrefix.'/'.($NodeName=='TransKey'?'TransientKey':$NodeName),$_POST,$NodeValue);
    }

    if ($Sender->Form->AuthenticatedPostBack() === TRUE) {
    var_dump($Sender->Form);
    //TO DO validation, save, draft, etc.
    //TO DO output succes/fail, etc
    }
    }else if ($Sender->Request->RequestMethod() == 'GET') {
    $Sender->SetData(array('DiscussionID'=>'','Name'=>'','Body'=>'','CategoryID'=>'','Close'=>'','Save_Draft'=>''));
    $Sender->SetData('TransKey',Gdn::Session()->TransientKey());//'TransientKey' is strippped out so use 'TransKey'
    $Sender->SetData('RequiredFields',array('Name','Body','CategoryID'));

    }
    }

    }

    }

    grep is your friend.

Answers

Sign In or Register to comment.