Skip to content
Snippets Groups Projects
Select Git revision
  • cd11ccbedba67536a09b64f41e91b8ae7536862c
  • 3.9 default
  • develop
  • 6.0
  • 5.0
  • 4.0
  • scrutinizer-patch-4
  • scrutinizer-patch-3
  • scrutinizer-patch-2
  • scrutinizer-patch-1
  • 3.7
  • 3.8
  • 3.6
  • 3.9_backported
  • 3.8_backported
  • 3.7_backported
  • 3.5
  • 3.6_backported
  • 3.5_backported
  • 3.4
  • 3.3_backported
  • 6.0.4
  • 6.0.3
  • 5.0.7
  • 6.0.2
  • 6.0.1
  • 5.0.6
  • 6.0.0
  • 5.0.5
  • 6.0.0-rc
  • 5.0.4
  • 6.0.0-beta
  • 5.0.3
  • 4.0.6
  • 5.0.2
  • 5.0.1
  • 4.0.5
  • 5.0.0
  • 4.0.4
  • 5.0.0-rc2
  • 5.0.0-rc1
41 results

index.php

Blame
  • index.php 6.11 KiB
    <?php
    /* Copyright (C) 2015   Jean-François Ferry     <jfefe@aternatik.fr>
     *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
     * (at your option) any later version.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program. If not, see <http://www.gnu.org/licenses/>.
     */
    
    /**
     * 	\defgroup   api     Module DolibarrApi
     *  \brief      API loader
     *				Search files htdocs/<module>/class/api_<module>.class.php
     *  \file       htdocs/api/indexphp
     *
     *	@todo	User authentication with api_key
     */
    
    if (! defined("NOLOGIN"))        define("NOLOGIN",'1');
    if (! defined("NOCSRFCHECK"))    define("NOCSRFCHECK",'1');
    
    $res=0;
    if (! $res && file_exists("../main.inc.php")) $res=include '../main.inc.php';
    if (! $res) die("Include of main fails");
    
    require_once DOL_DOCUMENT_ROOT.'/includes/restler/framework/Luracast/Restler/AutoLoader.php';
    
    call_user_func(function () {
        $loader = Luracast\Restler\AutoLoader::instance();
        spl_autoload_register($loader);
        return $loader;
    });
    
    require_once DOL_DOCUMENT_ROOT.'/api/class/api.class.php';
    require_once DOL_DOCUMENT_ROOT.'/api/class/api_access.class.php';
    require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    
    
    
    // Enable and test if module Api is enabled
    if (empty($conf->global->MAIN_MODULE_API))
    {
        $langs->load("admin");
        dol_syslog("Call Dolibarr API interfaces with module REST disabled");
        print $langs->trans("WarningModuleNotActive",'Api').'.<br><br>';
        print $langs->trans("ToActivateModule");
        exit;
    }
    
    
    $api = new DolibarrApi($db);
    
    // Enable the Restler API Explorer.
    // See https://github.com/Luracast/Restler-API-Explorer for more info.
    $api->r->addAPIClass('Luracast\\Restler\\Explorer');
    
    $api->r->setSupportedFormats('JsonFormat', 'XmlFormat');
    $api->r->addAuthenticationClass('DolibarrApiAccess','');
    
    $listofapis = array();
    
    $modulesdir = dolGetModulesDirs();
    foreach ($modulesdir as $dir)
    {
        /*
         * Search available module
         */
        //dol_syslog("Scan directory ".$dir." for API modules");
    
        $handle=@opendir(dol_osencode($dir));
        if (is_resource($handle))
        {
            while (($file = readdir($handle))!==false)
            {
                if (is_readable($dir.$file) && preg_match("/^mod(.*)\.class\.php$/i",$file,$reg))
                {
                    $module = strtolower($reg[1]);
                    $moduledirforclass = $module;
                    $moduleforperm = $module;
                    
                    if ($module == 'propale') {
                        $moduledirforclass = 'comm/propal';
                        $moduleforperm='propal';
                    }
                    elseif ($module == 'agenda') {
                        $moduledirforclass = 'comm/action';
                    }
                    elseif ($module == 'adherent') {
                        $moduledirforclass = 'adherents';
                    }
                    elseif ($module == 'categorie') {
                        $moduledirforclass = 'categories';
                    }
                    elseif ($module == 'facture') {
                        $moduledirforclass = 'compta/facture';
                    }
    
                    // Defined if module is enabled
                    $enabled=true;
                    if (empty($conf->$moduleforperm->enabled)) $enabled=false;
    
                    if ($enabled)
                    {
                        /*
                         * If exists, load the API class for enable module
                         *
                         * Search files named api_<object>.class.php into /htdocs/<module>/class directory
                         *
                         * @todo : take care of externals module!
                         * @todo : use getElementProperties() function ?
                         */
                        $dir_part = DOL_DOCUMENT_ROOT.'/'.$moduledirforclass.'/class/';
    
                        $handle_part=@opendir(dol_osencode($dir_part));
                        if (is_resource($handle_part))
                        {
                            while (($file_searched = readdir($handle_part))!==false)
                            {
                                // Support of the deprecated API.
                                if (is_readable($dir_part.$file_searched) && preg_match("/^api_deprecated_(.*)\.class\.php$/i",$file_searched,$reg))
                                {
                                    $classname = ucwords($reg[1]).'Api';
                                    require_once $dir_part.$file_searched;
                                    if (class_exists($classname))
                                    {
                                        dol_syslog("Found deprecated API classname=".$classname." into ".$dir);
                                        $api->r->addAPIClass($classname, '/');
                                    }
                                }
                                elseif (is_readable($dir_part.$file_searched) && preg_match("/^api_(.*)\.class\.php$/i",$file_searched,$reg))
                                {
                                    $classname = ucwords($reg[1]);
                                    require_once $dir_part.$file_searched;
                                    if (class_exists($classname))
                                    {
                                        dol_syslog("Found API classname=".$classname." into ".$dir);
                                        $listofapis[] = $classname;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
    // Sort the classes before adding them to Restler. The Restler API Explorer
    // shows the classes in the order they are added and it's a mess if they are
    // not sorted.
    sort($listofapis);
    foreach ($listofapis as $classname)
    {
        $api->r->addAPIClass($classname);
    }
    
    // TODO If not found, redirect to explorer
    
    
    // Call API (we suppose we found it)
    $api->r->handle();