<?php

/**
 * Набор методов для вызова сервисных функций. Например список городов.
 * 
 * @todo Регистрация серфисных функций
 */


class ServiceCallHandler
    implements iRequestHandlerFinder, iRequestHandler
    
{

    //protected static $sc_baseUrl = '/';
    //protected static $sc_reqKey = 'sc';
    //protected static $sc_services = array(
    //    'kladr_city' => array(
    //        'file' => '',
    //        'func' => array('utls', 'service_kladrCity'),
    //    )
    //);

    /**
     * Функция проверяет является ли текущий запрос обращением к сервисной функции
     *
     * @return 
     */    

    public static function getHandler()
    {
        if (array_key_exists(utls::$sc_reqKey, $_REQUEST)
            && array_key_exists($_REQUEST[utls::$sc_reqKey], utls::$sc_services))
        {
            $classname = __CLASS__;
            return new $classname();
        } else {
            return;
        }
    }
    
    public function __construct()
    {
        
    }

    /**
     * Функция передаёт управление сервису. Сервис сам дальше отвечает за
     * взаимодействие с пользователем.
     *
     * @todo Возможно, что для аяксовых запросов сделать стандартную обёртку
     * для ответов
     *
     */
    public function run()
    {
        try {	
            if (!is_callable(utls::$sc_services[$_REQUEST[utls::$sc_reqKey]]['func'])) {
                if ( utls::$sc_services[$_REQUEST[utls::$sc_reqKey]]['file']
                    && is_file(utls::$sc_services[$_REQUEST[utls::$sc_reqKey]]['file'])
                ) {
                    require_once utls::$sc_services[$_REQUEST[utls::$sc_reqKey]]['file'];
                    if (!is_callable(utls::$sc_services[$_REQUEST[utls::$sc_reqKey]]['func'])) {
                        return false;
                    }
                } else {
                    return false;
                }
            }
            call_user_func(utls::$sc_services[$_REQUEST[utls::$sc_reqKey]]['func']);   
        } catch (Exception $e) {
            return false;
        }
        return true;
    }

}



?>