Example #1
0
/**
 * Summary of cycleBody
 * @return void
 */
function cycleBody()
{
    // check main system states
    $objects = getObjectsByClass('systemStates');
    $total = count($objects);
    for ($i = 0; $i < $total; $i++) {
        $oldState = getGlobal($objects[$i]['TITLE'] . '.stateColor');
        callMethod($objects[$i]['TITLE'] . '.checkState');
        $newState = getGlobal($objects[$i]['TITLE'] . '.stateColor');
        if ($newState != $oldState) {
            echo $objects[$i]['TITLE'] . " state changed to " . $newState . PHP_EOL;
            $params = array('STATE' => $newState);
            callMethod($objects[$i]['TITLE'] . '.stateChanged', $params);
        }
    }
}
 function processIncomingMessage($data)
 {
     //DebMes("IRCBot: ".serialize($data));
     return callMethod('IRCBot1.onNewMessage', array('message' => $data['message'], 'channel' => $data['channel'], 'from' => $data['from']));
 }
Example #3
0
 /**
  * Title
  *
  * Description
  *
  * @access public
  */
 function pollDevice($device_id, $data = 0)
 {
     $rec = SQLSelectOne("SELECT * FROM zwave_devices WHERE ID='" . $device_id . "'");
     $rec_updated = 0;
     $comments = array();
     $updatedList = array();
     $properties = array();
     $command_classes = array();
     if (!$data) {
         $data = $this->apiCall('/ZWaveAPI/Run/devices[' . $rec['NODE_ID'] . '].instances[' . $rec['INSTANCE_ID'] . ']');
     }
     if (!$data) {
         return 0;
     }
     if ($_GET['debug']) {
         //echo $data->updateTime;exit;
         var_dump($data);
     }
     $updateTime = 0;
     if (!$rec['RAW_DATA']) {
         $rec_updated = 1;
     }
     $rec['RAW_DATA'] = json_encode($data);
     $rec['SENSOR_VALUE'] = '';
     if ($data->data->updateTime) {
         $updateTime = $data->data->updateTime;
     }
     if ($rec['CLASS_BASIC']) {
         $value = $data->commandClasses->{"32"}->data->value;
         if ($value !== $rec['BASIC']) {
             $rec['BASIC'] = $value;
             $rec_updated = 1;
         }
         $command_classes['Basic'] = 32;
         $properties['Basic'] = $rec['BASIC'];
         $updatedList['Basic'] = $data->commandClasses->{"32"}->data->{"updateTime"};
         if ($data->commandClasses->{"32"}->data->{"updateTime"} > $updateTime) {
             $updateTime = $data->commandClasses->{"32"}->data->{"updateTime"};
         }
     }
     if ($rec['CLASS_SENSOR_BINARY']) {
         $sensor_data = $data->commandClasses->{"48"}->data;
         if (isset($data->commandClasses->{"48"}->data->{"1"})) {
             $sensor_data = $data->commandClasses->{"48"}->data->{"1"};
         }
         $value = (int) $sensor_data->level->value;
         if ($value !== $rec['LEVEL']) {
             $rec['LEVEL'] = $value;
             $rec_updated = 1;
         }
         $properties['Level'] = $rec['LEVEL'];
         $command_classes['Level'] = 48;
         $updatedList['Level'] = $sensor_data->{"updateTime"};
         if ($sensor_data->{"updateTime"} > $updateTime) {
             $updateTime = $sensor_data->{"updateTime"};
         }
     }
     if ($rec['CLASS_SENSOR_MULTILEVEL']) {
         // multiple sensor support required!
         //SENSOR_VALUE
         $values = array();
         for ($i = 0; $i < 255; $i++) {
             if (isset($data->commandClasses->{"49"}->data->{"{$i}"})) {
                 $sensor = $data->commandClasses->{"49"}->data->{"{$i}"};
                 $values[] = trim($sensor->sensorTypeString->value) . ': ' . $sensor->val->value . $sensor->scaleString->value;
                 if (trim($sensor->sensorTypeString->value)) {
                     $prop_name = trim($sensor->sensorTypeString->value) . ', ' . $sensor->scaleString->value;
                 } else {
                     $prop_name = "Sensor {$i}";
                 }
                 if ($properties[$prop_name]) {
                     $prop_name .= ' (1)';
                 }
                 $properties[$prop_name] = $sensor->val->value;
                 $command_classes[$prop_name] = 49;
                 $updatedList[$prop_name] = $data->commandClasses->{"49"}->data->{"{$i}"}->{"updateTime"};
                 if ($data->commandClasses->{"49"}->data->{"{$i}"}->{"updateTime"} > $updateTime) {
                     $updateTime = $data->commandClasses->{"49"}->data->{"{$i}"}->{"updateTime"};
                 }
             }
         }
         $value = implode('; ', $values);
         if ($value != $rec['SENSOR_VALUE']) {
             $rec['SENSOR_VALUE'] .= $value . ';';
             $rec_updated = 1;
         }
     }
     if ($rec['CLASS_SWITCH_BINARY']) {
         $value = (int) $data->commandClasses->{"37"}->data->level->value;
         if ($value !== $rec['LEVEL']) {
             $rec['LEVEL'] = $value;
             $rec_updated = 1;
         }
         $properties['Level'] = $rec['LEVEL'];
         $command_classes['Level'] = 37;
         $updatedList['Level'] = $data->commandClasses->{"37"}->data->{"updateTime"};
         if ($data->commandClasses->{"37"}->data->{"updateTime"} > $updateTime) {
             $updateTime = $data->commandClasses->{"37"}->data->{"updateTime"};
         }
     }
     if ($rec['CLASS_SWITCH_MULTILEVEL']) {
         $value = (int) $data->commandClasses->{"38"}->data->level->value;
         if ($value !== $rec['LEVEL']) {
             $rec['LEVEL'] = $value;
             $rec_updated = 1;
         }
         $properties['Level'] = $rec['LEVEL'];
         $command_classes['Level'] = 38;
         $updatedList['Level'] = $data->commandClasses->{"38"}->data->{"updateTime"};
         if ($data->commandClasses->{"38"}->data->{"updateTime"} > $updateTime) {
             $updateTime = $data->commandClasses->{"38"}->data->{"updateTime"};
         }
         $properties['LevelDuration command (level, duration)'] = '';
     }
     if ($rec['CLASS_BATTERY']) {
         $value = (int) $data->commandClasses->{"128"}->data->last->value;
         if ($value != $rec['BATTERY_LEVEL']) {
             $rec['BATTERY_LEVEL'] = $value;
             $rec_updated = 1;
         }
         $command_classes['Battery'] = 128;
         $properties['Battery'] = $rec['BATTERY_LEVEL'];
         $updatedList['Battery'] = $data->commandClasses->{"128"}->data->{"updateTime"};
         if ($data->commandClasses->{"128"}->data->{"updateTime"} > $updateTime) {
             $updateTime = $data->commandClasses->{"128"}->data->{"updateTime"};
         }
     }
     if ($rec['CLASS_METER']) {
         // ... 50
         $values = array();
         for ($i = 0; $i < 255; $i++) {
             if (isset($data->commandClasses->{"50"}->data->{"{$i}"})) {
                 $sensor = $data->commandClasses->{"50"}->data->{"{$i}"};
                 $values[] = trim($sensor->sensorTypeString->value) . ': ' . $sensor->val->value . ' ' . $sensor->scaleString->value;
                 if (trim($sensor->sensorTypeString->value)) {
                     $prop_name = trim($sensor->sensorTypeString->value) . ', ' . $sensor->scaleString->value;
                 } else {
                     $prop_name = "Meter {$i}";
                 }
                 if ($properties[$prop_name]) {
                     $prop_name .= ' (1)';
                 }
                 $command_classes[$prop_name] = 50;
                 $properties[$prop_name] = $sensor->val->value;
                 $updatedList[$prop_name] = $data->commandClasses->{"50"}->data->{"{$i}"}->{"updateTime"};
                 if ($data->commandClasses->{"50"}->data->{"{$i}"}->{"updateTime"} > $updateTime) {
                     $updateTime = $data->commandClasses->{"50"}->data->{"{$i}"}->{"updateTime"};
                 }
             }
         }
         $value = implode('; ', $values);
         if ($value != '') {
             $rec['SENSOR_VALUE'] .= $value . '; ';
             $rec_updated = 1;
         }
     }
     if ($rec['CLASS_SENSOR_ALARM']) {
         // ... $data->commandClasses->{"156"}->data
         if (is_object($data->commandClasses->{"156"}->data->{"0"}->sensorState)) {
             $command_classes['AlarmGeneral'] = 156;
             $properties['AlarmGeneral'] = $data->commandClasses->{"156"}->data->{"0"}->sensorState->value;
             $updatedList['AlarmGeneral'] = $data->commandClasses->{"156"}->data->{"0"}->sensorState->updateTime;
             $value = $properties['AlarmGeneral'];
             if ($value != $rec['LEVEL']) {
                 $rec['LEVEL'] = $value;
                 $rec_updated = 1;
             }
         }
         if (is_object($data->commandClasses->{"156"}->data->{"1"}->sensorState)) {
             $command_classes['AlarmSmoke'] = 156;
             $properties['AlarmSmoke'] = $data->commandClasses->{"156"}->data->{"1"}->sensorState->value;
             $updatedList['AlarmSmoke'] = $data->commandClasses->{"156"}->data->{"1"}->sensorState->updateTime;
         }
         if (is_object($data->commandClasses->{"156"}->data->{"2"}->sensorState)) {
             $command_classes['AlarmCarbonMonoxide'] = 156;
             $properties['AlarmCarbonMonoxide'] = $data->commandClasses->{"156"}->data->{"2"}->sensorState->value;
             $updatedList['AlarmCarbonMonoxide'] = $data->commandClasses->{"156"}->data->{"2"}->sensorState->updateTime;
         }
         if (is_object($data->commandClasses->{"156"}->data->{"3"}->sensorState)) {
             $command_classes['AlarmCarbonDioxide'] = 156;
             $properties['AlarmCarbonDioxide'] = $data->commandClasses->{"156"}->data->{"3"}->sensorState->value;
             $updatedList['AlarmCarbonDioxide'] = $data->commandClasses->{"156"}->data->{"3"}->sensorState->updateTime;
         }
         if (is_object($data->commandClasses->{"156"}->data->{"4"}->sensorState)) {
             $command_classes['AlarmHeat'] = 156;
             $properties['AlarmHeat'] = $data->commandClasses->{"156"}->data->{"4"}->sensorState->value;
             $updatedList['AlarmHeat'] = $data->commandClasses->{"156"}->data->{"4"}->sensorState->updateTime;
         }
         if (is_object($data->commandClasses->{"156"}->data->{"5"}->sensorState)) {
             $command_classes['AlarmFlood'] = 156;
             $properties['AlarmFlood'] = $data->commandClasses->{"156"}->data->{"5"}->sensorState->value;
             $updatedList['AlarmFlood'] = $data->commandClasses->{"156"}->data->{"5"}->sensorState->updateTime;
         }
         if ($data->commandClasses->{"156"}->data->{"updateTime"} > $updateTime) {
             $updateTime = $data->commandClasses->{"156"}->data->{"updateTime"};
         }
     }
     if ($rec['CLASS_SCENE_CONTROLLER'] && is_object($data->commandClasses->{"43"}->data->{"currentScene"})) {
         // ... 43
         $properties['CurrentScene'] = $data->commandClasses->{"43"}->data->{"currentScene"}->value;
         if ($data->commandClasses->{"43"}->data->{"updateTime"} > $updateTime) {
             $updateTime = $data->commandClasses->{"43"}->data->{"updateTime"};
         }
     } elseif ($rec['CLASS_SCENE_CONTROLLER'] && is_object($data->commandClasses->{"45"}->data->{"currentScene"})) {
         // ... 45
         $properties['CurrentScene'] = $data->commandClasses->{"45"}->data->{"currentScene"}->value;
         if ($data->commandClasses->{"45"}->data->{"updateTime"} > $updateTime) {
             $updateTime = $data->commandClasses->{"43"}->data->{"updateTime"};
         }
     }
     if ($rec['CLASS_THERMOSTAT'] && isset($data->commandClasses->{"64"}->data->mode->value)) {
         //$value=$data->commandClasses->{"64"}->data->{$data->commandClasses->{"64"}->data->mode->value}->modeName->value;
         $rec['SENSOR_VALUE'] .= " Mode: " . $data->commandClasses->{"64"}->data->{$data->commandClasses->{"64"}->data->mode->value}->modeName->value . ';';
         $value = $data->commandClasses->{"64"}->data->mode->value;
         if ($value != $rec['MODE_VALUE']) {
             $rec['MODE_VALUE'] = $value;
             $rec_updated = 1;
         }
         $command_classes['Thermostat mode'] = 64;
         $properties['Thermostat mode'] = $rec['MODE_VALUE'];
         $updatedList['Thermostat mode'] = $data->commandClasses->{"64"}->data->{"updateTime"};
         if ($data->commandClasses->{"64"}->data->{"updateTime"} > $updateTime) {
             $updateTime = $data->commandClasses->{"64"}->data->{"updateTime"};
         }
         $comments_str = '';
         for ($i = 0; $i < 255; $i++) {
             if ($data->commandClasses->{"64"}->data->{$i}) {
                 $comments_str .= "{$i} = " . $data->commandClasses->{"64"}->data->{$i}->modeName->value . "; ";
             }
         }
         $comments['Thermostat mode'] = $comments_str;
         if (isset($data->commandClasses->{"67"}->data)) {
             //ThermostatSetPoint
             for ($i = 0; $i < 255; $i++) {
                 if ($data->commandClasses->{"67"}->data->{$i}->val) {
                     $key = 'ThermostatSetPoint ' . $data->commandClasses->{"67"}->data->{$i}->modeName->value;
                     $properties[$key] = $data->commandClasses->{"67"}->data->{$i}->val->value;
                     $command_classes[$key] = 67;
                     if ($data->commandClasses->{"67"}->data->{$i}->scaleString->value) {
                         $comments[$key] = $data->commandClasses->{"67"}->data->{$i}->scaleString->value;
                     }
                 }
             }
         }
         if (isset($data->commandClasses->{"68"}->data->mode->value)) {
             //ThermostatFanMode
             $properties['ThermostatFanOn'] = (int) $data->commandClasses->{"68"}->data->on->value;
             $command_classes['ThermostatFanMode'] = 68;
             $properties['ThermostatFanMode'] = $data->commandClasses->{"68"}->data->mode->value;
             if ($data->commandClasses->{"68"}->data->{"updateTime"} > $updateTime) {
                 $updateTime = $data->commandClasses->{"68"}->data->{"updateTime"};
             }
             $rec['SENSOR_VALUE'] .= " Fan Mode: " . $data->commandClasses->{"68"}->data->{$data->commandClasses->{"68"}->data->mode->value}->modeName->value . ';';
             $comments_str = '';
             for ($i = 0; $i < 255; $i++) {
                 if ($data->commandClasses->{"68"}->data->{$i}) {
                     $comments_str .= "{$i} = " . $data->commandClasses->{"68"}->data->{$i}->modeName->value . "; ";
                 }
             }
             $comments['ThermostatFanMode'] = $comments_str;
         }
     }
     if ($updateTime) {
         $properties['updateTime'] = $updateTime;
         $rec['LATEST_UPDATE'] = date('Y-m-d H:i:s', $properties['updateTime']);
         $rec_updated = 1;
     }
     if ($rec_updated) {
         SQLUpdate('zwave_devices', $rec);
     }
     foreach ($properties as $k => $v) {
         $prop = SQLSelectOne("SELECT * FROM zwave_properties WHERE DEVICE_ID='" . $rec['ID'] . "' AND UNIQ_ID LIKE '" . DBSafe($k) . "'");
         $prop['DEVICE_ID'] = $rec['ID'];
         $prop['UNIQ_ID'] = $k;
         $prop['TITLE'] = $k;
         $prop['COMMAND_CLASS'] = $command_classes[$k];
         if ($prop['VALUE'] != $v) {
             $prop['UPDATED'] = date('Y-m-d H:i:s');
         }
         if ($updatedList[$k]) {
             $prop['UPDATED'] = date('Y-m-d H:i:s', $updatedList[$k]);
         }
         $prop['VALUE'] = $v;
         if ($comments[$k]) {
             $prop['COMMENTS'] = $comments[$k];
         }
         if (is_numeric($prop['VALUE']) && $prop['VALUE'] !== '') {
             $prop['VALUE'] = round($prop['VALUE'], 3);
         }
         if ($prop['ID']) {
             SQLUpdate('zwave_properties', $prop);
             if ($prop['VALUE'] !== '') {
                 $validated = 1;
             } else {
                 $validated = 0;
                 continue;
             }
             if ($prop['LINKED_OBJECT']) {
                 if ($prop['CORRECT_VALUE']) {
                     $prop['VALUE'] += (double) $prop['CORRECT_VALUE'];
                 }
             }
             if ($prop['VALIDATE']) {
                 if ((double) $prop['VALUE'] < (double) $prop['VALID_FROM'] || (double) $prop['VALUE'] > (double) $prop['VALID_TO']) {
                     $validated = 0;
                 }
             }
             if ($prop['LINKED_OBJECT'] && $prop['LINKED_PROPERTY'] && $validated) {
                 $old_value = getGlobal($prop['LINKED_OBJECT'] . '.' . $prop['LINKED_PROPERTY']);
                 if ($prop['VALUE'] != $old_value) {
                     setGlobal($prop['LINKED_OBJECT'] . '.' . $prop['LINKED_PROPERTY'], $prop['VALUE'], array($this->name => '0'));
                 }
             }
             if ($prop['LINKED_OBJECT'] && $prop['LINKED_METHOD'] && $validated && ($prop['VALUE'] != $old_value || !$prop['LINKED_PROPERTY'])) {
                 $params = array();
                 $params['VALUE'] = $prop['VALUE'];
                 callMethod($prop['LINKED_OBJECT'] . '.' . $prop['LINKED_METHOD'], $params);
             }
         } else {
             $prop['ID'] = SQLInsert('zwave_properties', $prop);
         }
     }
     //print_r($data);exit;
 }
Example #4
0
 public function testGetActionRoutes()
 {
     $controller = new Fixtures\ProductController();
     $routes = callMethod($controller, 'getActionRoutes', []);
     assertThat($routes, is(equalTo([['', 'indexAction'], ['/show', 'showAction'], ['/delete', 'deleteAction']])));
 }
Example #5
0
function runMethod($method_name, $params = 0)
{
    return callMethod($method_name, $params);
}
Example #6
0
 /**
 * FrontEnd
 *
 * Module frontend
 *
 * @access public
 */
 function usual(&$out)
 {
     global $ajax;
     if ($ajax) {
         global $op;
         header("HTTP/1.0: 200 OK\n");
         header('Content-Type: text/html; charset=utf-8');
         if ($op == 'checkAllStates') {
             global $scene_id;
             $qry = "1";
             if (preg_match('/(\\d+)\\.html/', $_SERVER["REQUEST_URI"], $m)) {
                 $qry .= " AND scenes.ID='" . (int) $m[1] . "'";
             } elseif ($scene_id) {
                 $qry .= " AND scenes.ID='" . (int) $scene_id . "'";
             } else {
                 $qry .= " AND scenes.HIDDEN!=1";
             }
             foreach ($_GET as $k => $v) {
                 $this->data[$k] = $v;
             }
             $states = SQLSelect("SELECT elm_states.ID, elm_states.TITLE, elm_states.HTML, elements.SCENE_ID, elm_states.SWITCH_SCENE, elements.TYPE FROM elm_states, elements, scenes WHERE elements.SCENE_ID=scenes.ID AND elm_states.ELEMENT_ID=elements.ID AND {$qry} ORDER BY elements.PRIORITY DESC, elm_states.PRIORITY DESC");
             $total = count($states);
             for ($i = 0; $i < $total; $i++) {
                 $states[$i]['STATE'] = $this->checkState($states[$i]['ID']);
                 if ($states[$i]['HTML'] != '') {
                     if (preg_match('/\\[#modul/is', $states[$i]['HTML'])) {
                         //$states[$i]['HTML']=str_replace('#', '', $states[$i]['HTML']);
                         unset($states[$i]['HTML']);
                     } else {
                         $states[$i]['HTML'] = processTitle($states[$i]['HTML'], $this);
                     }
                 }
                 if ($states[$i]['TYPE'] == 'img') {
                     unset($states[$i]['HTML']);
                 }
             }
             echo json_encode($states);
         }
         if ($op == 'click') {
             global $id;
             $state = SQLSelectOne("SELECT * FROM elm_states WHERE ID='" . $id . "'");
             $params = array('STATE' => $state['TITLE']);
             if ($state['ACTION_OBJECT'] && $state['ACTION_METHOD']) {
                 callMethod($state['ACTION_OBJECT'] . '.' . $state['ACTION_METHOD'], $params);
             }
             if ($state['SCRIPT_ID']) {
                 runScript($state['SCRIPT_ID'], $params);
             }
             if ($state['CODE']) {
                 try {
                     $code = $state['CODE'];
                     $success = eval($code);
                     if ($success === false) {
                         DebMes("Error scene item code: " . $code);
                         registerError('scenes', "Error scene item code: " . $code);
                     }
                 } catch (Exception $e) {
                     DebMes('Error: exception ' . get_class($e) . ', ' . $e->getMessage() . '.');
                     registerError('scenes', get_class($e) . ', ' . $e->getMessage());
                 }
             }
             $qry = "1";
             $qry .= " AND elements.ID=" . $state['ELEMENT_ID'];
             $states = SQLSelect("SELECT elm_states.ID, elm_states.TITLE, elm_states.HTML, elements.SCENE_ID, elm_states.SWITCH_SCENE, elements.TYPE FROM elm_states, elements, scenes WHERE elements.SCENE_ID=scenes.ID AND elm_states.ELEMENT_ID=elements.ID AND {$qry} ORDER BY elements.PRIORITY DESC, elm_states.PRIORITY DESC");
             $total = count($states);
             for ($i = 0; $i < $total; $i++) {
                 $states[$i]['STATE'] = $this->checkState($states[$i]['ID']);
                 if ($states[$i]['HTML'] != '') {
                     $states[$i]['HTML'] = processTitle($states[$i]['HTML'], $this);
                 }
                 if ($states[$i]['TYPE'] == 'img') {
                     unset($states[$i]['HTML']);
                 }
             }
             echo json_encode($states);
         }
         if ($op == 'position') {
             global $id;
             global $posx;
             global $posy;
             global $width;
             global $height;
             if ($id && $posx && $posy && $width && $height) {
                 $state = SQLSelectOne("SELECT * FROM elm_states WHERE ID='" . $id . "'");
                 $state['WINDOW_POSX'] = $posx;
                 $state['WINDOW_POSY'] = $posy;
                 $state['WINDOW_WIDTH'] = $width;
                 $state['WINDOW_HEIGHT'] = $height;
                 SQLUpdate('elm_states', $state);
             }
             //
             echo "OK";
         }
         exit;
     }
     $this->admin($out);
     $out['ALL_TYPES'] = $this->getAllTypes();
 }
Example #7
0
        return;
    }
    if ($_POST["timestamp"] == "" || $_POST["timestamp"] == " " || $_POST["timestamp"] == "undefined") {
        return;
    }
    $timestamp = strtotime($_POST["timestamp"]) * 1000;
    $interval = floatval($_POST["interval"]) * 1000;
    $key = $_POST["key"];
    /*$tmp = $client->zrangebyscore($key, $nexttime, $nexttime);
    	$tmp = $tmp[0];
    	$index = $client->zrank($key, $tmp);
    	$tmp = $client->zrange($key, $index + 1, $index + 1);
    	$tmp = $client->zscore($key, $tmp[0]);
    	if ($tmp >= $timestamp && $tmp < $next)
    	{
    		$next = $tmp;
    	}
    	echo ($next / 1000.0)." ".($next - $nexttime);*/
}
// call corresponding method according to $method
function callMethod($func)
{
    if (is_null($func) || "" == $func || !function_exists($func)) {
        echo "invalid func: " . $func;
        return;
    }
    $func();
}
//call method specified by javascript
callMethod($_POST["func"]);
Example #8
0
function dump_events($ecode, $data, $server, $port)
{
    // Search exist event
    $parent_class_rec = SQLSelectOne("SELECT ID FROM classes WHERE TITLE LIKE 'Telephony'");
    if ($parent_class_rec['ID']) {
        $class_rec = SQLSelectOne("SELECT * FROM classes WHERE TITLE LIKE 'AsteriskAMI' AND PARENT_ID = '" . $parent_class_rec['ID'] . "'");
        if ($class_rec['ID']) {
            $object_rec = SQLSelectOne("SELECT * FROM objects WHERE CLASS_ID='" . $class_rec['ID'] . "' AND TITLE = 'Asterisk'");
            if ($object_rec['ID']) {
                $method_rec = SQLSelectOne("SELECT * FROM methods WHERE OBJECT_ID='" . $object_rec['ID'] . "' AND TITLE = 'Event" . $data['Event'] . "'");
                if (!$method_rec['ID']) {
                    // New event. Add method to class AsteriskAMI and object
                    // Add class method
                    echo date('Y-m-d H:i:s') . " : Receive new event. Add method Event" . $data['Event'] . "\n";
                    $class_method_rec['CLASS_ID'] = $class_rec['ID'];
                    $class_method_rec['TITLE'] = 'Event' . $data['Event'];
                    $class_method_rec['CODE'] = "echo date('Y-m-d H:i:s')" . ".\" : Event \"." . '$params[\'Event\']' . ".\" received. Process... \\n\"" . ";\n";
                    SQLInsert('methods', $class_method_rec);
                    // Add object method
                    $method_rec['OBJECT_ID'] = $object_rec['ID'];
                    $method_rec['TITLE'] = 'Event' . $data['Event'];
                    $method_rec['CALL_PARENT'] .= "1";
                    $method_rec['CODE'] .= "/**\n";
                    $method_rec['CODE'] .= "Array received form Asterisk:\n";
                    foreach ($data as $key => $value) {
                        $method_rec['CODE'] .= "\t[" . $key . "] => " . $value . " \n";
                    }
                    $method_rec['CODE'] .= "*/\n";
                    SQLInsert('methods', $method_rec);
                } else {
                    // Event already exist. Process event
                    $method = $object_rec['TITLE'] . ".Event" . $data['Event'];
                    callMethod($method, $data);
                }
            }
        }
    }
}
Example #9
0
<?php

global $op;
if (!headers_sent()) {
    header("HTTP/1.0: 200 OK\n");
    header('Content-Type: text/html; charset=utf-8');
}
if ($op == 'console') {
    global $command;
    if (preg_match('/^\\w+\\.\\w+$/', $command)) {
        echo callMethod($command);
    } elseif (preg_match('/;/', $command)) {
        eval($command);
    } else {
        eval('echo ' . $command . ';');
    }
}
if ($op == 'filter') {
    global $title;
    $object_title = '';
    $property_title = '';
    if (preg_match('/^(.+)\\.$/', $title, $m)) {
        $object_title = $m[1];
        $object = SQLSelectOne("SELECT * FROM objects WHERE TITLE LIKE '" . DBSafe($object_title) . "'");
        if ($object['ID']) {
            $res .= LANG_OBJECT . " <b><a href='/panel/class/" . $object['CLASS_ID'] . "/object/" . $object['ID'] . ".html'>" . $object['TITLE'] . "</a></b><br>";
            $class = SQLSelectOne("SELECT * FROM classes WHERE ID='" . $object['CLASS_ID'] . "'");
            if ($class['ID']) {
                $res .= LANG_CLASS . ' <b><a href="#" onClick="return setFilter(\'' . $class['TITLE'] . '.\');">' . $class['TITLE'] . "</a></b><br>";
            }
            //properties and methods
Example #10
0
 /**
 * FrontEnd
 *
 * Module frontend
 *
 * @access public
 */
 function usual(&$out)
 {
     /*
     $this->getConfig();
     if ($this->config['ENABLED'] && $_SERVER['REQUEST_URI']=='/') {
      echo "<html><head><title>".SETTINGS_SITE_TITLE."</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><link href=\"/stl.css\" rel=\"stylesheet\" type=\"text/css\"/></head><body>".$this->config['CONTENT']."</body></html>";
      exit;
     }
     */
     global $play;
     global $rnd;
     global $rnd;
     global $session;
     global $play_terminal;
     global $terminal_id;
     if ($this->play) {
         $play = $this->play;
     }
     if ($this->terminal_id) {
         $terminal_id = $this->terminal_id;
     }
     if ($terminal_id) {
         $terminal = SQLSelectOne("SELECT * FROM terminals WHERE ID='" . (int) $terminal_id . "'");
         $session->data['PLAY_TERMINAL'] = $terminal['NAME'];
     }
     if ($session->data['PLAY_TERMINAL'] == '') {
         $session->data['PLAY_TERMINAL'] = $session->data['TERMINAL'];
     }
     if ($play_terminal != '') {
         $session->data['PLAY_TERMINAL'] = $play_terminal;
     }
     if ($session->data['PLAY_TERMINAL'] != '') {
         $terminal = SQLSelectOne("SELECT * FROM terminals WHERE NAME='" . DBSafe($session->data['PLAY_TERMINAL']) . "'");
     }
     if (!$terminal['HOST']) {
         $terminal['HOST'] = 'localhost';
     }
     if (!$play && $session->data['LAST_PLAY']) {
         $play = $session->data['LAST_PLAY'];
     } elseif ($play) {
         $session->data['LAST_PLAY'] = $play;
     }
     if ($play != '') {
         $out['PLAY'] = $play;
     }
     if ($rnd != '') {
         $out['RND'] = $rnd;
     }
     $current_level = getGlobal('ThisComputer.volumeLevel');
     for ($i = 0; $i <= 100; $i += 5) {
         $rec = array('VALUE' => $i);
         if ($i == $current_level) {
             $rec['SELECTED'] = 1;
         }
         $out['VOLUMES'][] = $rec;
     }
     global $ajax;
     if ($ajax != '') {
         global $command;
         if ($command != '') {
             if (!$this->intCall) {
                 echo $command . ' ';
             }
             $ch = curl_init();
             curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
             if ($terminal['PLAYER_USERNAME'] || $terminal['PLAYER_PASSWORD']) {
                 curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
                 curl_setopt($ch, CURLOPT_USERPWD, $terminal['PLAYER_USERNAME'] . ':' . $terminal['PLAYER_PASSWORD']);
             }
             if (!$terminal['PLAYER_PORT'] && $terminal['PLAYER_TYPE'] == 'foobar') {
                 $terminal['PLAYER_PORT'] = '8888';
             } elseif (!$terminal['PLAYER_PORT'] && $terminal['PLAYER_TYPE'] == 'xbmc') {
                 $terminal['PLAYER_PORT'] = '8080';
             } elseif (!$terminal['PLAYER_PORT']) {
                 $terminal['PLAYER_PORT'] = '80';
             }
             if ($terminal['PLAYER_TYPE'] == 'vlc' || $terminal['PLAYER_TYPE'] == '') {
                 $terminal['PLAYER_PORT'] = '80';
                 if ($command == 'refresh') {
                     $out['PLAY'] = preg_replace('/\\\\$/is', '', $out['PLAY']);
                     $out['PLAY'] = preg_replace('/\\/$/is', '', $out['PLAY']);
                     if (preg_match('/^http/', $out['PLAY'])) {
                         $path = urlencode($out['PLAY']);
                     } else {
                         $path = urlencode('' . str_replace('/', "\\", $out['PLAY']));
                     }
                     curl_setopt($ch, CURLOPT_URL, "http://" . $terminal['HOST'] . ":" . $terminal['PLAYER_PORT'] . "/rc/?command=vlc_play&param=" . $path);
                     //echo $path;exit;
                     $res = curl_exec($ch);
                 }
                 if ($command == 'fullscreen') {
                     curl_setopt($ch, CURLOPT_URL, "http://" . $terminal['HOST'] . ":" . $terminal['PLAYER_PORT'] . "/rc/?command=vlc_fullscreen");
                     $res = curl_exec($ch);
                 }
                 if ($command == 'pause') {
                     curl_setopt($ch, CURLOPT_URL, "http://" . $terminal['HOST'] . ":" . $terminal['PLAYER_PORT'] . "/rc/?command=vlc_pause");
                     $res = curl_exec($ch);
                 }
                 if ($command == 'next') {
                     curl_setopt($ch, CURLOPT_URL, "http://" . $terminal['HOST'] . ":" . $terminal['PLAYER_PORT'] . "/rc/?command=vlc_next");
                     $res = curl_exec($ch);
                 }
                 if ($command == 'prev') {
                     curl_setopt($ch, CURLOPT_URL, "http://" . $terminal['HOST'] . ":" . $terminal['PLAYER_PORT'] . "/rc/?command=vlc_prev");
                     $res = curl_exec($ch);
                 }
                 if ($command == 'close') {
                     curl_setopt($ch, CURLOPT_URL, "http://" . $terminal['HOST'] . ":" . $terminal['PLAYER_PORT'] . "/rc/?command=vlc_close");
                     $res = curl_exec($ch);
                 }
                 if ($command == 'volume') {
                     global $volume;
                     setGlobal('ThisComputer.volumeLevel', $volume);
                     callMethod('ThisComputer.VolumeLevelChanged', array('VALUE' => $volume, 'HOST' => $terminal['HOST']));
                 }
             } elseif ($terminal['PLAYER_TYPE'] == 'xbmc') {
                 include DIR_MODULES . 'app_player/xbmc.php';
             } elseif ($terminal['PLAYER_TYPE'] == 'foobar') {
                 include DIR_MODULES . 'app_player/foobar.php';
             } elseif ($terminal['PLAYER_TYPE'] == 'vlcweb') {
                 include DIR_MODULES . 'app_player/vlcweb.php';
             } elseif ($terminal['PLAYER_TYPE'] == 'mpd') {
                 include DIR_MODULES . 'app_player/mpd.php';
             }
             // close cURL resource, and free up system resources
             curl_close($ch);
         }
         if (!$this->intCall) {
             if ($session->data['PLAY_TERMINAL'] != '') {
                 echo " on " . $session->data['PLAY_TERMINAL'] . ' ';
             }
             echo "OK";
             if ($res) {
                 echo " (" . $res . ")";
             }
             $session->save();
             exit;
         }
     }
     $terminals = SQLSelect("SELECT * FROM terminals WHERE CANPLAY=1 ORDER BY TITLE");
     $total = count($terminals);
     for ($i = 0; $i < $total; $i++) {
         if ($terminals[$i]['NAME'] == $session->data['PLAY_TERMINAL']) {
             $terminals[$i]['SELECTED'] = 1;
             $out['TERMINAL_TITLE'] = $terminals[$i]['TITLE'];
         }
     }
     $out['TERMINALS_TOTAL'] = count($terminals);
     if ($out['TERMINALS_TOTAL'] == 1 || !$session->data['PLAY_TERMINAL']) {
         $terminals[0]['SELECTED'] = 1;
     }
     $out['TERMINALS'] = $terminals;
 }
Example #11
0
 /**
 * FrontEnd
 *
 * Module frontend
 *
 * @access public
 */
 function usual(&$out)
 {
     global $ajax;
     if ($ajax) {
         global $op;
         header("HTTP/1.0: 200 OK\n");
         header('Content-Type: text/html; charset=utf-8');
         if ($op == 'resized' || $op == 'dragged') {
             global $element;
             global $details;
             $element_id = 0;
             if (preg_match('/state_(\\d+)/', $element, $m)) {
                 $state = SQLSelectOne("SELECT ELEMENT_ID FROM elm_states WHERE ID='" . (int) $m[1] . "'");
                 $element_id = $state['ELEMENT_ID'];
             } elseif (preg_match('/canvas_(\\d+)/', $element, $m) || preg_match('/container_(\\d+)/', $element, $m)) {
                 $element_id = $m[1];
             }
             $element = SQLSelectOne("SELECT * FROM elements WHERE ID='" . (int) $element_id . "'");
         }
         if ($op == 'resized' && $element['ID']) {
             $details = json_decode($details, true);
             $element['WIDTH'] = $details['size']['width'];
             $element['HEIGHT'] = $details['size']['height'];
             if ($element['WIDTH'] > 0 && $element['HEIGHT'] > 0) {
                 SQLUpdate('elements', $element);
             }
         }
         if ($op == 'dragged' && $element['ID']) {
             $details = json_decode($details, true);
             //echo "Dragged $element ".serialize($details);
             $diff_top = $details['position']['top'] - $details['originalPosition']['top'];
             $diff_left = $details['position']['left'] - $details['originalPosition']['left'];
             if ($diff_top != 0 || $diff_left != 0) {
                 $element['TOP'] += $diff_top;
                 $element['LEFT'] += $diff_left;
                 SQLUpdate('elements', $element);
                 $linked_elements = SQLSelect("SELECT * FROM elements WHERE LINKED_ELEMENT_ID=" . (int) $element['ID']);
                 $total = count($linked_elements);
                 for ($i = 0; $i < $total; $i++) {
                     $linked_elements[$i]['TOP'] -= $diff_top;
                     $linked_elements[$i]['LEFT'] -= $diff_left;
                     SQLUpdate('elements', $linked_elements[$i]);
                 }
             }
         }
         if ($op == 'checkAllStates') {
             global $scene_id;
             $qry = "1";
             if (preg_match('/(\\d+)\\.html/', $_SERVER["REQUEST_URI"], $m)) {
                 $qry .= " AND scenes.ID='" . (int) $m[1] . "'";
             } elseif ($scene_id) {
                 $qry .= " AND scenes.ID='" . (int) $scene_id . "'";
             } else {
                 $qry .= " AND scenes.HIDDEN!=1";
             }
             foreach ($_GET as $k => $v) {
                 $this->data[$k] = $v;
             }
             $states = array();
             $elements = $this->getDynamicElements($qry);
             $total = count($elements);
             for ($i = 0; $i < $total; $i++) {
                 if (is_array($elements[$i]['STATES'])) {
                     foreach ($elements[$i]['STATES'] as $st) {
                         $states[] = $st;
                     }
                 }
             }
             $total = count($states);
             for ($i = 0; $i < $total; $i++) {
                 $this->processState($states[$i]);
             }
             echo json_encode($states);
         }
         if ($op == 'click') {
             global $id;
             if (preg_match('/(\\d+)\\_(\\d+)/', $id, $m)) {
                 $dynamic_item = 1;
                 $real_part = $m[1];
                 $object_part = $m[2];
                 if ($object_part) {
                     $object_rec = SQLSelectOne("SELECT ID, TITLE FROM objects WHERE ID=" . (int) $object_part);
                 }
             } else {
                 $dynamic_item = 0;
                 $real_part = $id;
                 $object_part = 0;
             }
             $state = SQLSelectOne("SELECT * FROM elm_states WHERE ID='" . (int) $real_part . "'");
             $params = array('STATE' => $state['TITLE']);
             if ($state['ACTION_OBJECT'] && $state['ACTION_METHOD']) {
                 if ($object_part) {
                     $state['ACTION_OBJECT'] = $object_rec['TITLE'];
                 }
                 callMethod($state['ACTION_OBJECT'] . '.' . $state['ACTION_METHOD'], $params);
             }
             if ($state['SCRIPT_ID']) {
                 runScript($state['SCRIPT_ID'], $params);
             }
             if ($state['CODE']) {
                 try {
                     $code = $state['CODE'];
                     $success = eval($code);
                     if ($success === false) {
                         DebMes("Error scene item code: " . $code);
                         registerError('scenes', "Error scene item code: " . $code);
                     }
                 } catch (Exception $e) {
                     DebMes('Error: exception ' . get_class($e) . ', ' . $e->getMessage() . '.');
                     registerError('scenes', get_class($e) . ', ' . $e->getMessage());
                 }
             }
             $qry = "1";
             $qry .= " AND elements.ID=" . $state['ELEMENT_ID'];
             $states = array();
             $elements = $this->getDynamicElements($qry);
             $total = count($elements);
             for ($i = 0; $i < $total; $i++) {
                 if (is_array($elements[$i]['STATES'])) {
                     foreach ($elements[$i]['STATES'] as $st) {
                         $states[] = $st;
                     }
                 }
             }
             $total = count($states);
             for ($i = 0; $i < $total; $i++) {
                 $this->processState($states[$i]);
                 /*
                 $states[$i]['STATE']=(string)$this->checkState($states[$i]['ID']);
                 if ($states[$i]['HTML']!='') {
                  $states[$i]['HTML']=processTitle($states[$i]['HTML'], $this);
                 }
                 if ($states[$i]['TYPE']=='img') {
                  unset($states[$i]['HTML']);
                 }
                 */
             }
             echo json_encode($states);
         }
         if ($op == 'position') {
             global $id;
             global $posx;
             global $posy;
             global $width;
             global $height;
             if ($id && $posx && $posy && $width && $height) {
                 $state = SQLSelectOne("SELECT * FROM elm_states WHERE ID='" . $id . "'");
                 $state['WINDOW_POSX'] = $posx;
                 $state['WINDOW_POSY'] = $posy;
                 $state['WINDOW_WIDTH'] = $width;
                 $state['WINDOW_HEIGHT'] = $height;
                 SQLUpdate('elm_states', $state);
             }
             //
             echo "OK";
         }
         exit;
     }
     $this->admin($out);
     $out['ALL_TYPES'] = $this->getAllTypes();
 }
 /**
 * Title
 *
 * Description
 *
 * @access public
 */
 function getProperty($id)
 {
     $prop = SQLSelectOne("SELECT * FROM knxproperties WHERE ID='" . $id . "' AND CAN_READ=1");
     if (!$prop['ID']) {
         return false;
     }
     if (!$this->connection) {
         $this->connect(0);
     }
     if ($this->connection) {
         $res = cacheread($this->connection, $prop['ADDRESS'], 0);
         //var_dump($res);
         // $res[0] - addr
         // $res[1] - from
         if (isset($res[2])) {
             $data = array();
             $total = count($res);
             for ($i = 2; $i < $total; $i++) {
                 $data[] = (int) $res[$i];
             }
             $old_value = $prop['DATA_VALUE'];
             if ($prop['DATA_TYPE'] == 'small') {
                 $prop['DATA_VALUE'] = $data[0];
             } elseif ($prop['DATA_TYPE'] == 'p1') {
                 $prop['DATA_VALUE'] = round($data[0] * 100 / 255, 2);
             } elseif ($prop['DATA_TYPE'] == 'f2') {
                 $prop['DATA_VALUE'] = f2_decode($data);
                 // TO-DO: OTHER TYPES!!!
             } elseif ($prop['DATA_TYPE'] == 'b1') {
             } elseif ($prop['DATA_TYPE'] == 'b2') {
             }
             $prop['DATA_RAW'] = implode(',', $data);
             $prop['UPDATED'] = date('Y-m-d H:i:s');
             print_r($prop);
             SQLUpdate('knxproperties', $prop);
             if ($prop['LINKED_OBJECT'] && $prop['LINKED_PROPERTY']) {
                 setGlobal($prop['LINKED_OBJECT'] . '.' . $prop['LINKED_PROPERTY'], $prop['DATA_VALUE'], array($this->name => '0'));
             }
             if ($prop['LINKED_OBJECT'] && $prop['LINKED_METHOD'] && $prop['DATA_VALUE'] != $old_value) {
                 $params = array();
                 $params['VALUE'] = $prop['DATA_VALUE'];
                 callMethod($prop['LINKED_OBJECT'] . '.' . $prop['LINKED_METHOD'], $params);
             }
         }
     }
 }
Example #13
0
 /**
 * FrontEnd
 *
 * Module frontend
 *
 * @access public
 */
 function usual(&$out)
 {
     global $ajax;
     if ($ajax) {
         global $op;
         header("HTTP/1.0: 200 OK\n");
         header('Content-Type: text/html; charset=utf-8');
         if ($op == 'checkAllStates') {
             $qry = "1";
             if (preg_match('/(\\d+)\\.html/', $_SERVER["REQUEST_URI"], $m)) {
                 $qry .= " AND scenes.ID='" . $m[1] . "'";
             }
             $states = SQLSelect("SELECT elm_states.ID, elm_states.TITLE, elm_states.HTML, elements.SCENE_ID, elm_states.SWITCH_SCENE, elements.TYPE FROM elm_states, elements WHERE elm_states.ELEMENT_ID=elements.ID AND {$qry}");
             $total = count($states);
             for ($i = 0; $i < $total; $i++) {
                 $states[$i]['STATE'] = $this->checkState($states[$i]['ID']);
                 if ($states[$i]['TYPE'] == 'html') {
                     $states[$i]['HTML'] = processTitle($states[$i]['HTML'], $this);
                 }
             }
             echo json_encode($states);
         }
         if ($op == 'click') {
             global $id;
             $state = SQLSelectOne("SELECT * FROM elm_states WHERE ID='" . $id . "'");
             $params = array('STATE' => $state['TITLE']);
             if ($state['ACTION_OBJECT'] && $state['ACTION_METHOD']) {
                 callMethod($state['ACTION_OBJECT'] . '.' . $state['ACTION_METHOD'], $params);
             }
             if ($state['SCRIPT_ID']) {
                 runScript($state['SCRIPT_ID'], $params);
             }
             echo "OK";
         }
         if ($op == 'position') {
             global $id;
             global $posx;
             global $posy;
             global $width;
             global $height;
             if ($id && $posx && $posy && $width && $height) {
                 $state = SQLSelectOne("SELECT * FROM elm_states WHERE ID='" . $id . "'");
                 $state['WINDOW_POSX'] = $posx;
                 $state['WINDOW_POSY'] = $posy;
                 $state['WINDOW_WIDTH'] = $width;
                 $state['WINDOW_HEIGHT'] = $height;
                 SQLUpdate('elm_states', $state);
             }
             //
             echo "OK";
         }
         exit;
     }
     $this->admin($out);
 }
 function pollDevice($id, $states_data = '')
 {
     $dev_rec = SQLSelectOne("SELECT * FROM veradevices WHERE ID='" . $id . "'");
     if (!is_array($states_data)) {
         $data = $this->api_request('status', 'DeviceNum=' . $dev_rec['DEVICE_NUM']);
         $json = json_decode($data, true);
         $states_data = $json['Device_Num_' . $dev_rec['DEVICE_NUM']]['states'];
         if (!is_array($states_data)) {
             return 0;
         }
     }
     /*
     $data=$this->api_request('invoke', 'DeviceNum='.$dev_rec['DEVICE_NUM']);
     echo $data;exit;
     $json=json_decode($data, true);
     print_r($json);exit;
     */
     $totals = count($states_data);
     for ($is = 0; $is < $totals; $is++) {
         $state_id = $states_data[$is]['id'];
         $property = SQLSelectOne("SELECT * FROM veraproperties WHERE DEVICE_ID='" . $dev_rec['ID'] . "' AND VARIABLE LIKE '" . DBSafe($states_data[$is]['variable']) . "'");
         $old_value = $property['VALUE'];
         if (!$property['ID']) {
             $property = array();
             $property['DEVICE_ID'] = $dev_rec['ID'];
             $property['STATE_ID'] = (int) $state_id;
             $property['VARIABLE'] = $states_data[$is]['variable'];
             $property['ID'] = SQLInsert('veraproperties', $property);
         }
         $property['SERVICE'] = $states_data[$is]['service'];
         $property['VALUE'] = $states_data[$is]['value'];
         $property['UPDATED'] = date('Y-m-d H:i:s');
         SQLUpdate('veraproperties', $property);
         $validated = true;
         if ($property['LINKED_OBJECT'] && $property['LINKED_PROPERTY'] && $validated) {
             $old_value = getGlobal($property['LINKED_OBJECT'] . '.' . $property['LINKED_PROPERTY']);
             if ($property['VALUE'] != $old_value) {
                 setGlobal($property['LINKED_OBJECT'] . '.' . $property['LINKED_PROPERTY'], $property['VALUE'], array($this->name => '0'));
             }
         }
         if ($property['LINKED_OBJECT'] && $property['LINKED_METHOD'] && $validated && ($property['VALUE'] != $old_value || !$property['LINKED_PROPERTY'])) {
             $params = array();
             $params['VALUE'] = $property['VALUE'];
             callMethod($property['LINKED_OBJECT'] . '.' . $property['LINKED_METHOD'], $params);
         }
     }
 }
 /**
 * FrontEnd
 *
 * Module frontend
 *
 * @access public
 */
 function usual(&$out)
 {
     if ($this->ajax) {
         global $clicked;
         if ($clicked) {
             $item = SQLSelectOne("SELECT * FROM watchesmenu WHERE ID='" . (int) $clicked . "'");
             if ($item['LINKED_OBJECT'] && $item['LINKED_METHOD']) {
                 callMethod($item['LINKED_OBJECT'] . '.' . $item['LINKED_METHOD']);
             }
             if ($item['SCRIPT_ID']) {
                 runScript($item['SCRIPT_ID']);
             }
             $result = array('RESULT' => 'OK');
             header("Content-type:application/json");
             echo json_encode($result);
             exit;
         } else {
             $items = SQLSelect("SELECT ID, TITLE, SUBTITLE FROM watchesmenu ORDER BY PRIORITY DESC, TITLE");
             $res_items = array();
             $total = count($items);
             for ($i = 0; $i < $total; $i++) {
                 if (!checkAccess('watchesmenu', $items[$i]['ID'])) {
                     continue;
                 }
                 $items[$i]['TITLE'] = processTitle($items[$i]['TITLE']);
                 if ($items[$i]['SUBTITLE']) {
                     $items[$i]['SUBTITLE'] = processTitle($items[$i]['SUBTITLE']);
                 }
                 $res_items[] = $items[$i];
             }
             header("Content-type:application/json");
             echo json_encode(array('items' => $res_items));
             exit;
         }
     }
 }