1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 
<?php
/* --------------------------------------------------------------
   DefaultApiV2Controller.inc.php 2017-03-30
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2017 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

MainFactory::load_class('HttpApiV2Controller');

/**
 * Class DefaultApiV2Controller
 *
 * The default APIv2 controller will be triggered when client consumers hit the "api.php/v2"
 * URI and it will return information about the API.
 *
 * @category System
 * @package  ApiV2Controllers
 */
class DefaultApiV2Controller extends HttpApiV2Controller
{
    public function get()
    {
        $this->_returnHelpResponse();
    }


    public function post()
    {
        $this->_returnHelpResponse();
    }


    public function put()
    {
        $this->_returnHelpResponse();
    }


    public function patch()
    {
        $this->_returnHelpResponse();
    }


    public function delete()
    {
        $this->_returnHelpResponse();
    }


    public function head()
    {
        $this->_returnHelpResponse();
    }


    public function options()
    {
        $this->_returnHelpResponse();
    }


    protected function _returnHelpResponse()
    {
        $apiUrl = GM_HTTP_SERVER . $this->api->request->getRootUri() . '/v2/';
        
        $iterator = new IteratorIterator(new DirectoryIterator(DIR_FS_CATALOG . 'GXMainComponents/Controllers/Api/v2'));
        $resources = [];
        
        foreach($iterator as $item)
        {
            /** @var \DirectoryIterator $item */
            $controllerFile = $item->getFilename();
            if($controllerFile !== 'AbstractImagesApiV2Controller.inc.php'
               && $controllerFile !== 'DefaultApiV2Controller.inc.php'
               && $controllerFile !== 'ApiV2Authenticator.inc.php'
               && $controllerFile !== 'legacy'
               && $controllerFile !== '.'
               && $controllerFile !== '..')
            {
                $resources[] = $this->_camelCaseToUnderscore(str_replace('ApiV2Controller.inc.php', '',
                                                                         $item->getFilename()));
            }
        }
        sort($resources);
        
        $response = [];
        foreach($resources as $resource)
        {
            $response[$resource] = $apiUrl . $resource;
        }

        $this->_writeResponse($response);
    }
    
    
    /**
     * Converts a camel case string to underscored.
     *
     * @param string $input Camel case string that should get underscores.
     *
     * @return string $input with underscores instead of camel cases.
     */
    protected function _camelCaseToUnderscore($input)
    {
        $pattern = '!([A-Z][A-Z0-9]*(?=$|[A-Z][a-z0-9])|[A-Za-z][a-z0-9]+)!';
        
        preg_match_all($pattern, $input, $matches);
        $return = $matches[0];
        foreach($return as &$match)
        {
            $match = $match === strtoupper($match) ? strtolower($match) : lcfirst($match);
        }
        
        return implode('_', $return);
    }
}