Fork me on GitHub
Current releases are 2.1.3 (9 Sept 2014) and 2.0.18.13 (5 Aug 2014)

Ready for 2.1? Find out if your plugins are compatible. 2.0 will no longer be updated after Dec 2014.

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.