/** * Title * * Description * * @access public */ function poll_device($id) { $rec = SQLSelectOne("SELECT * FROM modbusdevices WHERE ID='" . (int) $id . "'"); if (!$rec['ID']) { return; } $rec['CHECK_LATEST'] = date('Y-m-d H:i:s'); $rec['CHECK_NEXT'] = date('Y-m-d H:i:s', time() + (int) $rec['POLLPERIOD']); SQLUpdate('modbusdevices', $rec); if ($rec['LINKED_OBJECT'] && $rec['LINKED_PROPERTY'] && ($rec['REQUEST_TYPE'] == 'FC5' || $rec['REQUEST_TYPE'] == 'FC6' || $rec['REQUEST_TYPE'] == 'FC15' || $rec['REQUEST_TYPE'] == 'FC16' || $rec['REQUEST_TYPE'] == 'FC23')) { $rec['DATA'] = getGlobal($rec['LINKED_OBJECT'] . '.' . $rec['LINKED_PROPERTY']); } require_once dirname(__FILE__) . '/ModbusMaster.php'; $modbus = new ModbusMaster($rec['HOST'], $rec['PROTOCOL']); if ($rec['PORT']) { $modbus->port = $rec['PORT']; } if ($rec['REQUEST_TYPE'] == 'FC1') { //FC1 Read coils try { $recData = $modbus->readCoils($rec['DEVICE_ID'], $rec['REQUEST_START'], $rec['REQUEST_TOTAL']); if (is_array($recData)) { foreach ($recData as $k => $v) { $recData[$k] = (int) $v; } } } catch (Exception $e) { // Print error information if any $rec['LOG'] = date('Y-m-d H:i:s') . " FC1 Error: {$modbus} {$e}\n" . $rec['LOG']; } } elseif ($rec['REQUEST_TYPE'] == 'FC2') { //FC2 Read input discretes try { $recData = $modbus->readInputDiscretes($rec['DEVICE_ID'], $rec['REQUEST_START'], $rec['REQUEST_TOTAL']); if (is_array($recData)) { foreach ($recData as $k => $v) { $recData[$k] = (int) $v; } } } catch (Exception $e) { // Print error information if any $rec['LOG'] = date('Y-m-d H:i:s') . " FC2 Error: {$modbus} {$e}\n" . $rec['LOG']; } } elseif ($rec['REQUEST_TYPE'] == 'FC3') { //FC3 Read holding registers try { $recData = $modbus->readMultipleRegisters($rec['DEVICE_ID'], $rec['REQUEST_START'], $rec['REQUEST_TOTAL']); } catch (Exception $e) { // Print error information if any $rec['LOG'] = date('Y-m-d H:i:s') . " FC3 Error: {$modbus} {$e}\n" . $rec['LOG']; } } elseif ($rec['REQUEST_TYPE'] == 'FC4') { //FC4 Read holding input registers try { $recData = $modbus->readMultipleInputRegisters($rec['DEVICE_ID'], $rec['REQUEST_START'], $rec['REQUEST_TOTAL']); } catch (Exception $e) { // Print error information if any $rec['LOG'] = date('Y-m-d H:i:s') . " FC4 Error: {$modbus} {$e}\n" . $rec['LOG']; } } elseif ($rec['REQUEST_TYPE'] == 'FC5') { //FC5 Write single coil if ((int) $rec['DATA']) { $data_set = array(TRUE); } else { $data_set = array(FALSE); } try { $modbus->writeSingleCoil($rec['DEVICE_ID'], $rec['REQUEST_START'], $data_set); } catch (Exception $e) { $rec['LOG'] = date('Y-m-d H:i:s') . " FC5 Error: {$modbus} {$e}\n" . $rec['LOG']; } } elseif ($rec['REQUEST_TYPE'] == 'FC6') { //FC6 Write single register try { $data_set = array((int) $rec['DATA']); if ($rec['RESPONSE_CONVERT'] == 'r2f') { $dataTypes = array("REAL"); $swapregs = false; } elseif ($rec['RESPONSE_CONVERT'] == 'r2fs') { $dataTypes = array("REAL"); $swapregs = true; } elseif ($rec['RESPONSE_CONVERT'] == 'd2i' || $rec['RESPONSE_CONVERT'] == 'dw2i') { $dataTypes = array("DINT"); $swapregs = false; } elseif ($rec['RESPONSE_CONVERT'] == 'd2is' || $rec['RESPONSE_CONVERT'] == 'dw2is') { $dataTypes = array("DINT"); $swapregs = true; } else { $dataTypes = array("INT"); $swapregs = false; } $recData = $modbus->writeSingleRegister($rec['DEVICE_ID'], $rec['REQUEST_START'], $data_set, $dataTypes, $swapregs); } catch (Exception $e) { // Print error information if any $rec['LOG'] = date('Y-m-d H:i:s') . " FC6 Error: {$modbus} {$e}\n" . $rec['LOG']; } } elseif ($rec['REQUEST_TYPE'] == 'FC15') { //FC15 Write multiple coils $data_set = explode(',', $rec['DATA']); foreach ($data_set as $k => $v) { $data_set[$k] = (bool) $v; } try { $modbus->writeMultipleCoils($rec['DEVICE_ID'], $rec['REQUEST_START'], $data_set); } catch (Exception $e) { $rec['LOG'] = date('Y-m-d H:i:s') . " FC15 Error: {$modbus} {$e}\n" . $rec['LOG']; } } elseif ($rec['REQUEST_TYPE'] == 'FC16') { //FC16 Write multiple registers try { $data_set = explode(',', $rec['DATA']); $dataTypes = array(); foreach ($data_set as $k => $v) { if ($rec['RESPONSE_CONVERT'] == 'r2f') { $dataTypes[] = "REAL"; $data_set[$k] = (double) $v; $swapregs = false; } elseif ($rec['RESPONSE_CONVERT'] == 'r2fs') { $dataTypes[] = "REAL"; $data_set[$k] = (double) $v; $swapregs = true; } elseif ($rec['RESPONSE_CONVERT'] == 'd2i' || $rec['RESPONSE_CONVERT'] == 'dw2i') { $dataTypes[] = "DINT"; $data_set[$k] = (int) $v; $swapregs = false; } elseif ($rec['RESPONSE_CONVERT'] == 'd2is' || $rec['RESPONSE_CONVERT'] == 'dw2is') { $dataTypes[] = "DINT"; $data_set[$k] = (int) $v; $swapregs = true; } else { $data_set[$k] = (int) $v; $dataTypes[] = "INT"; $swapregs = false; } } $recData = $modbus->writeMultipleRegister($rec['DEVICE_ID'], $rec['REQUEST_START'], $data_set, $dataTypes, $swapregs); } catch (Exception $e) { // Print error information if any $rec['LOG'] = date('Y-m-d H:i:s') . " FC16 Error: {$modbus} {$e}\n" . $rec['LOG']; } } elseif ($rec['REQUEST_TYPE'] == 'FC23') { //FC23 Read/Write multiple registers //TO-DO } //echo $rec['LOG'];exit; if ($rec['REQUEST_TYPE'] == 'FC1' || $rec['REQUEST_TYPE'] == 'FC2' || $rec['REQUEST_TYPE'] == 'FC3' || $rec['REQUEST_TYPE'] == 'FC4' && is_array($recData)) { // PROCESS RESPONSE if ($rec['RESPONSE_CONVERT'] == 'r2f') { //REAL to Float $values = array_chunk($recData, 4); $recData = array(); foreach ($values as $bytes) { echo $recData[] = PhpType::bytes2float($bytes, false); } } elseif ($rec['RESPONSE_CONVERT'] == 'r2fs') { //REAL to Float (swap regs) $values = array_chunk($recData, 4); $recData = array(); foreach ($values as $bytes) { echo $recData[] = PhpType::bytes2float($bytes, true); } } elseif ($rec['RESPONSE_CONVERT'] == 'd2i') { //DINT to integer $values = array_chunk($recData, 4); $recData = array(); foreach ($values as $bytes) { echo $recData[] = PhpType::bytes2signedInt($bytes, false); } } elseif ($rec['RESPONSE_CONVERT'] == 'd2is') { //DINT to integer (swap regs) $values = array_chunk($recData, 4); $recData = array(); foreach ($values as $bytes) { echo $recData[] = PhpType::bytes2signedInt($bytes, true); } } elseif ($rec['RESPONSE_CONVERT'] == 'dw2i') { //DWORD to integer $values = array_chunk($recData, 4); $recData = array(); foreach ($values as $bytes) { $recData[] = PhpType::bytes2unsignedInt($bytes, false); } } elseif ($rec['RESPONSE_CONVERT'] == 'dw2is') { //DWORD to integer (swap regs) $values = array_chunk($recData, 4); $recData = array(); foreach ($values as $bytes) { $recData[] = PhpType::bytes2unsignedInt($bytes, true); } } elseif ($rec['RESPONSE_CONVERT'] == 'i2i') { //INT to integer $values = array_chunk($recData, 2); $recData = array(); foreach ($values as $bytes) { $recData[] = PhpType::bytes2signedInt($bytes, false); } } elseif ($rec['RESPONSE_CONVERT'] == 'w2i') { //WORD to integer $values = array_chunk($recData, 2); $recData = array(); foreach ($values as $bytes) { $recData[] = PhpType::bytes2unsignedInt($bytes, false); } } elseif ($rec['RESPONSE_CONVERT'] == 's') { //String $recData = array(PhpType::bytes2string($recData)); } else { // } $result = implode(',', $recData); if ($result && $result != $rec['DATA']) { $rec['LOG'] = date('Y-m-d H:i:s') . " " . $result . "\n" . $rec['LOG']; } $rec['DATA'] = $result; SQLUpdate('modbusdevices', $rec); if ($rec['LINKED_OBJECT'] && $rec['LINKED_PROPERTY']) { setGlobal($rec['LINKED_OBJECT'] . '.' . $rec['LINKED_PROPERTY'], $rec['DATA'], array($this->name => '0')); } } else { SQLUpdate('modbusdevices', $rec); } }
/** * Title * * Description * * @access public */ function say($ph, $level=0) { global $commandLine; global $voicemode; /* if ($commandLine) { echo utf2win($ph); } else { echo $ph; } */ $rec=array(); $rec['MESSAGE']=$ph; $rec['ADDED']=date('Y-m-d H:i:s'); $rec['ROOM_ID']=0; $rec['MEMBER_ID']=0; if ($level>0) { $rec['IMPORTANCE']=$level; } SQLInsert('shouts', $rec); if ($level>=(int)getGlobal('minMsgLevel')) { //$voicemode!='off' && $lang='en'; if (defined('SETTINGS_SITE_LANGUAGE')) { $lang=SETTINGS_SITE_LANGUAGE; } if (defined('SETTINGS_VOICE_LANGUAGE')) { $lang=SETTINGS_VOICE_LANGUAGE; } $google_file=GoogleTTS($ph, $lang); if ($google_file) { @touch($google_file); playSound($google_file, 1, $level); } else { //getObject("alice")->raiseEvent("say", array("say"=>$ph)); safe_exec('cscript '.DOC_ROOT.'/rc/sapi.js '.$ph, 1, $level); } } postToTwitter($ph); global $noPatternMode; if (!$noPatternMode) { include_once(DIR_MODULES.'patterns/patterns.class.php'); $pt=new patterns(); $pt->checkAllPatterns(); } }
/** * 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); } } }
public function tick() { global $config; if (time() - $this->last_check > 3) { $queue_data = getGlobal('IRCBot1.pushMessage'); $this->last_check = time(); if ($queue_data != '') { setGlobal('IRCBot1.pushMessage', ''); $messages = explode("\n", $queue_data); $total = count($messages); for ($i = 0; $i < $total; $i++) { if ($messages[$i]) { sendMessage($this->socket, $this->config['channel'], iconv('UTF-8', $config['encoding'], $messages[$i])); } } } setGlobal('cycle_app_ircbotRun', time(), 1); if (file_exists('./reboot')) { global $db; $db->Disconnect(); exit; } } }
/** * returns a page global * currently an alias for getGlobal * @since 3.4.0 */ function getPageGlobal($var) { return getGlobal($var); }
} if (preg_match_all('/%(\\w{2,}?)\\.(\\w{2,}?)\\|(\\d+)%/isu', $result, $m)) { if (!defined('DISABLE_WEBSOCKETS') || DISABLE_WEBSOCKETS == 0) { $tracked_properties = array(); $total = count($m[0]); $seen = array(); $sub_js = ''; for ($i = 0; $i < $total; $i++) { $var = mb_strtolower($m[1][$i] . '.' . $m[2][$i], 'UTF-8'); if (!$seen[$var]) { $tracked_properties[] = $var; } $seen[$var] = 1; $id = 'var_' . preg_replace('/\\W/', '_', $var); $sub_js .= "if (obj[i]['PROPERTY']=='{$var}') {\$('.{$id}').html(obj[i]['VALUE']);\$.publish('{$var}.updated', obj[i]['VALUE']);}\n"; $result = str_replace($m[0][$i], '<span class="' . $id . '">' . getGlobal($var) . '</span>', $result); } $js = "<script language='javascript'>\$.subscribe('wsConnected', function (_) {\n var payload;\n payload = new Object();\n payload.action = 'Subscribe';\n payload.data = new Object();\n payload.data.TYPE='properties';\n payload.data.PROPERTIES='" . implode(',', $tracked_properties) . "';\n wsSocket.send(JSON.stringify(payload));\n });\n"; $js .= "function processPropertiesUpdate(data) {\n var obj=jQuery.parseJSON(data);\n var objCnt = obj.length;\n if (objCnt) {\n for(var i=0;i<objCnt;i++) {\n {$sub_js}\n }\n }\n }"; $js .= "\$.subscribe('wsData', function (_, response) {\n if (response.action=='properties') {\n processPropertiesUpdate(response.data);\n }\n });"; $js .= '</script>'; $result = str_replace('</body>', $js . '</body>', $result); } else { $total = count($m[0]); $seen = array(); for ($i = 0; $i < $total; $i++) { $var = $m[1][$i] . '.' . $m[2][$i]; $interval = (int) $m[2][$i] * 1000; if (!$interval) { $interval = 10000; }
$object_rec['CLASS_ID'] = $class_rec['ID']; SQLUpdate('objects', $object_rec); } foreach ($known_fields as $k => $v) { $prop_rec = SQLSelectOne("SELECT * FROM properties WHERE TITLE LIKE '" . DBSafe($k) . "' AND CLASS_ID = '" . $object_rec['CLASS_ID'] . "'"); if (!$prop_rec['ID']) { $prop_rec['CLASS_ID'] = $object_rec['CLASS_ID']; $prop_rec['TITLE'] = $k; $prop_rec['KEEP_HISTORY'] = 7; $prop_rec['ID'] = SQLInsert('properties', $prop_rec); } } $res = ''; $updated = array(); foreach ($known_fields as $k => $v) { if ($v < 0) { continue; } $res .= $k . ' = ' . $data[(int) $v] . "\n"; $old_value = getGlobal('ws.' . $k); if ($old_value != $data[(int) $v]) { $updated[$k] = 1; setGlobal('ws.' . $k, $data[(int) $v]); } } if ($updated['pressure']) { setGlobal('ws.pressureRt', round((double) getGlobal('ws.pressure') / 1.33), 1); } echo "OK"; $db->Disconnect(); // closing database connection
$old_hour = date('h'); if ($_GET['onetime']) { $old_minute = -1; if (date('i') == '00') { $old_hour = -1; } } $old_date = date('Y-m-d'); $checked_time = 0; $started_time = time(); echo date("H:i:s") . " running " . basename(__FILE__) . "\n"; while (1) { if (time() - $checked_time > 5) { $checked_time = time(); setGlobal(str_replace('.php', '', basename(__FILE__)) . 'Run', time(), 1); setGlobal('ThisComputer.uptime', time() - getGlobal('ThisComputer.started_time')); } $m = date('i'); $h = date('h'); $dt = date('Y-m-d'); if ($m != $old_minute) { //echo "new minute\n"; $sqlQuery = "SELECT ID, TITLE\n FROM objects\n WHERE {$o_qry}"; $objects = SQLSelect($sqlQuery); $total = count($objects); for ($i = 0; $i < $total; $i++) { echo date('H:i:s') . ' ' . $objects[$i]['TITLE'] . "->onNewMinute\n"; getObject($objects[$i]['TITLE'])->setProperty("time", date('Y-m-d H:i:s')); getObject($objects[$i]['TITLE'])->raiseEvent("onNewMinute"); } $old_minute = $m;
/** * Title * * Description * * @access public */ function say($ph, $level = 0, $member_id = 0) { global $commandLine; global $voicemode; global $noPatternMode; global $ignorePushover; global $ignorePushbullet; global $ignoreGrowl; global $ignoreTwitter; /* if ($commandLine) { echo utf2win($ph); } else { echo $ph; } */ $rec = array(); $rec['MESSAGE'] = $ph; $rec['ADDED'] = date('Y-m-d H:i:s'); $rec['ROOM_ID'] = 0; $rec['MEMBER_ID'] = $member_id; if ($level > 0) { $rec['IMPORTANCE'] = $level; } $rec['ID'] = SQLInsert('shouts', $rec); if ($member_id) { //if (!$noPatternMode) { include_once DIR_MODULES . 'patterns/patterns.class.php'; $pt = new patterns(); $pt->checkAllPatterns($member_id); //} return; } if (defined('SETTINGS_HOOK_BEFORE_SAY') && SETTINGS_HOOK_BEFORE_SAY != '') { eval(SETTINGS_HOOK_BEFORE_SAY); } global $ignoreVoice; if ($level >= (int) getGlobal('minMsgLevel') && !$ignoreVoice && !$member_id) { //$voicemode!='off' && $lang = 'en'; if (defined('SETTINGS_SITE_LANGUAGE')) { $lang = SETTINGS_SITE_LANGUAGE; } if (defined('SETTINGS_VOICE_LANGUAGE')) { $lang = SETTINGS_VOICE_LANGUAGE; } if (!defined('SETTINGS_TTS_GOOGLE') || SETTINGS_TTS_GOOGLE) { $google_file = GoogleTTS($ph, $lang); } else { $google_file = false; } if (!defined('SETTINGS_SPEAK_SIGNAL') || SETTINGS_SPEAK_SIGNAL == '1') { $passed = time() - (int) getGlobal('lastSayTime'); if ($passed > 20) { // play intro-sound only if more than 20 seconds passed from the last one setGlobal('lastSayTime', time()); playSound('dingdong', 1, $level); } } if ($google_file) { @touch($google_file); playSound($google_file, 1, $level); } else { safe_exec('cscript ' . DOC_ROOT . '/rc/sapi.js ' . $ph, 1, $level); } } if (!$noPatternMode) { include_once DIR_MODULES . 'patterns/patterns.class.php'; $pt = new patterns(); $pt->checkAllPatterns($member_id); } if (defined('SETTINGS_PUSHOVER_USER_KEY') && SETTINGS_PUSHOVER_USER_KEY && !$ignorePushover) { include_once ROOT . 'lib/pushover/pushover.inc.php'; if (defined('SETTINGS_PUSHOVER_LEVEL')) { if ($level >= SETTINGS_PUSHOVER_LEVEL) { postToPushover($ph); } } elseif ($level > 0) { postToPushover($ph); } } if (defined('SETTINGS_PUSHBULLET_KEY') && SETTINGS_PUSHBULLET_KEY && !$ignorePushbullet) { include_once ROOT . 'lib/pushbullet/pushbullet.inc.php'; if (defined('SETTINGS_PUSHBULLET_PREFIX') && SETTINGS_PUSHBULLET_PREFIX) { $prefix = SETTINGS_PUSHBULLET_PREFIX . ' '; } else { $prefix = ''; } if (defined('SETTINGS_PUSHBULLET_LEVEL')) { if ($level >= SETTINGS_PUSHBULLET_LEVEL) { postToPushbullet($prefix . $ph); } } elseif ($level > 0) { postToPushbullet($prefix . $ph); } } if (defined('SETTINGS_GROWL_ENABLE') && SETTINGS_GROWL_ENABLE && $level >= SETTINGS_GROWL_LEVEL && !$ignoreGrowl) { include_once ROOT . 'lib/growl/growl.gntp.php'; $growl = new Growl(SETTINGS_GROWL_HOST, SETTINGS_GROWL_PASSWORD); $growl->setApplication('MajorDoMo', 'Notifications'); //$growl->registerApplication('http://localhost/img/logo.png'); $growl->notify($ph); } if (defined('SETTINGS_TWITTER_CKEY') && SETTINGS_TWITTER_CKEY && !$ignoreTwitter) { postToTwitter($ph); } if (defined('SETTINGS_HOOK_AFTER_SAY') && SETTINGS_HOOK_AFTER_SAY != '') { eval(SETTINGS_HOOK_AFTER_SAY); } }
// CHECK/REPAIR/OPTIMIZE TABLES $tables = SQLSelect("SHOW TABLES FROM `" . DB_NAME . "`"); $total = count($tables); for ($i = 0; $i < $total; $i++) { $table = $tables[$i]['Tables_in_' . DB_NAME]; echo 'Checking table [' . $table . '] ...'; if ($result = SQLExec("CHECK TABLE " . $table . ";")) { echo "OK\n"; } else { echo " broken ... repair ..."; SQLExec("REPAIR TABLE " . $table . ";"); echo "OK\n"; } } setGlobal('ThisComputer.started_time', time()); if (time() >= getGlobal('ThisComputer.started_time')) { SQLExec("DELETE FROM events WHERE ADDED > NOW()"); SQLExec("DELETE FROM phistory WHERE ADDED > NOW()"); SQLExec("DELETE FROM history WHERE ADDED > NOW()"); SQLExec("DELETE FROM shouts WHERE ADDED > NOW()"); SQLExec("DELETE FROM jobs WHERE PROCESSED = 1"); SQLExec("DELETE FROM history WHERE (TO_DAYS(NOW()) - TO_DAYS(ADDED)) >= 5"); } // CHECKING DATA /* $tables = array('commands' => 'commands', 'owproperties' => 'onewire', 'snmpproperties' => 'snmpdevices', 'zwave_properties' => 'zwave', 'mqtt' => 'mqtt', 'modbusdevices' => 'modbus');
$res = SQLSelect("SELECT * FROM commands WHERE {$qry} ORDER BY {$sortby}"); if ($res[0]['ID']) { if ($this->action != 'admin') { $dynamic_res = array(); $total = count($res); for ($i = 0; $i < $total; $i++) { if ($res[$i]['SMART_REPEAT'] && $res[$i]['LINKED_OBJECT']) { $obj = getObject($res[$i]['LINKED_OBJECT']); $objects = getObjectsByClass($obj->class_id); $total_o = count($objects); for ($io = 0; $io < $total_o; $io++) { $rec = $res[$i]; $rec['ID'] = $res[$i]['ID'] . '_' . $objects[$io]['ID']; $rec['LINKED_OBJECT'] = $objects[$io]['TITLE']; $rec['DATA'] = str_replace('%' . $res[$i]['LINKED_OBJECT'] . '.', '%' . $rec['LINKED_OBJECT'] . '.', $rec['DATA']); $rec['CUR_VALUE'] = getGlobal($rec['LINKED_OBJECT'] . '.' . $rec['LINKED_PROPERTY']); $rec['TITLE'] = $objects[$io]['TITLE']; $dynamic_res[] = $rec; } } else { $dynamic_res[] = $res[$i]; } } $res = $dynamic_res; } $this->processMenuElements($res); if ($this->action == 'admin') { $res = $this->buildTree_commands($res); } $out['RESULT'] = $res; //$out['RESULT_HTML']=$this->buildHTML($out['RESULT']);
/** * 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; }
function processSubscription($event, $details = '') { //to-do if ($event == 'SAY') { $level = $details['level']; $message = $details['message']; $current_queue = getGlobal('IRCBot1.pushMessage'); $queue = explode("\n", $current_queue); $queue[] = $message; if (count($queue) >= 25) { $queue = array_slice($queue, -25); } setGlobal('IRCBot1.pushMessage', implode("\n", $queue)); } }
function run() { global $session; Define('ALTERNATIVE_TEMPLATES', 'templates_alt'); if ($this->action == 'ajaxgetglobal') { header("HTTP/1.0: 200 OK\n"); header('Content-Type: text/html; charset=utf-8'); $res['DATA'] = getGlobal($_GET['var']); echo json_encode($res); global $db; $db->Disconnect(); exit; } if ($this->action == 'ajaxsetglobal') { header("HTTP/1.0: 200 OK\n"); header('Content-Type: text/html; charset=utf-8'); setGlobal($_GET['var'], $_GET['value']); $res['DATA'] = 'OK'; echo json_encode($res); global $db; $db->Disconnect(); exit; } if ($this->action == 'getlatestnote') { header("HTTP/1.0: 200 OK\n"); header('Content-Type: text/html; charset=utf-8'); $msg = SQLSelectOne("SELECT * FROM shouts WHERE MEMBER_ID=0 ORDER BY ID DESC LIMIT 1"); $res = array(); $res['DATA'] = $msg['MESSAGE']; echo json_encode($res); global $db; $db->Disconnect(); exit; } if ($this->action == 'getlatestmp3') { header("HTTP/1.0: 200 OK\n"); header('Content-Type: text/html; charset=utf-8'); if ($dir = @opendir(ROOT . "cached/voice")) { while (($file = readdir($dir)) !== false) { if (preg_match('/\\.mp3$/', $file)) { $mtime = filemtime(ROOT . "cached/voice" . $file); if (time() - $mtime > 60 * 60 * 24 && $mtime > 0) { //old file, delete? unlink(ROOT . "cached/voice" . $file); } else { $files[] = array('FILENAME' => $file, 'MTIME' => filemtime(ROOT . "cached/voice" . $file)); } } if (preg_match('/\\.wav$/', $file)) { $mtime = filemtime(ROOT . "cached/voice" . $file); if (time() - $mtime > 60 * 60 * 24 && $mtime > 0) { //old file, delete? unlink(ROOT . "cached/voice" . $file); } } } closedir($dir); } if (is_array($files)) { function sortFiles($a, $b) { if ($a['MTIME'] == $b['MTIME']) { return 0; } return $a['MTIME'] > $b['MTIME'] ? -1 : 1; } usort($files, 'sortFiles'); echo '/cached/voice/' . $files[0]['FILENAME']; } global $db; $db->Disconnect(); exit; } if (!defined('SETTINGS_SITE_LANGUAGE') || !defined('SETTINGS_SITE_TIMEZONE') || !defined('SETTINGS_TTS_GOOGLE') || !defined('SETTINGS_GROWL_ENABLE') || !defined('SETTINGS_HOOK_BEFORE_SAY')) { $this->action = 'first_start'; } if ($this->action == 'first_start') { include DIR_MODULES . 'first_start.php'; } $out["ACTION"] = $this->action; $out["TODAY"] = date('l, F d, Y'); $out["DOC_NAME"] = $this->doc_name; global $username; if ($username) { $user = SQLSelectOne("SELECT * FROM users WHERE USERNAME LIKE '" . DBSafe($username) . "'"); if (!$user['PASSWORD']) { $session->data['SITE_USERNAME'] = $user['USERNAME']; $session->data['SITE_USER_ID'] = $user['ID']; } else { if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="MajorDoMo"'); header('HTTP/1.0 401 Unauthorized'); echo 'Password required!'; exit; } else { if ($_SERVER['PHP_AUTH_USER'] == $user['USERNAME'] && $_SERVER['PHP_AUTH_PW'] == $user['PASSWORD']) { $session->data['SITE_USERNAME'] = $user['USERNAME']; $session->data['SITE_USER_ID'] = $user['ID']; } else { header('WWW-Authenticate: Basic realm="MajorDoMo"'); header('HTTP/1.0 401 Unauthorized'); echo 'Incorrect username/password!'; exit; } } } } global $terminal; if ($terminal) { $session->data['TERMINAL'] = $terminal; } if (preg_match('/^app_\\w+$/is', $this->action) || $this->action == 'xray') { $out['APP_ACTION'] = 1; } if ($this->app_action) { $out['APP_ACTION'] = 1; } $terminals = SQLSelect("SELECT * FROM terminals ORDER BY TITLE"); $total = count($terminals); for ($i = 0; $i < $total; $i++) { //!$session->data['TERMINAL'] && if ($terminals[$i]['HOST'] != '' && $_SERVER['REMOTE_ADDR'] == $terminals[$i]['HOST']) { $session->data['TERMINAL'] = $terminals[$i]['NAME']; } if ($terminals[$i]['NAME'] == $session->data['TERMINAL']) { $terminals[$i]['SELECTED'] = 1; $out['TERMINAL_TITLE'] = $terminals[$i]['TITLE']; } } $out['TERMINALS'] = $terminals; if ($total == 1) { $out['HIDE_TERMINALS'] = 1; $session->data['TERMINAL'] = $terminals[0]['NAME']; } $users = SQLSelect("SELECT * FROM users ORDER BY NAME"); $total = count($users); for ($i = 0; $i < $total; $i++) { if ($users[$i]['USERNAME'] == $session->data['SITE_USERNAME']) { $users[$i]['SELECTED'] = 1; $out['USER_TITLE'] = $users[$i]['NAME']; $out['USER_AVATAR'] = $users[$i]['AVATAR']; } elseif (!$session->data['SITE_USERNAME'] && $users[$i]['HOST'] && $users[$i]['HOST'] == $_SERVER['REMOTE_ADDR']) { $session->data['SITE_USERNAME'] = $users[$i]['USERNAME']; $session->data['SITE_USER_ID'] = $users[$i]['ID']; $out['USER_TITLE'] = $users[$i]['NAME']; $out['USER_AVATAR'] = $users[$i]['AVATAR']; } if ($users[$i]['IS_DEFAULT'] == 1) { $out['DEFAULT_USERNAME'] = $users[$i]['USERNAME']; $out['DEFAULT_USER_ID'] = $users[$i]['ID']; } } $out['USERS'] = $users; if ($total == 1) { $out['HIDE_USERS'] = 1; $session->data['SITE_USERNAME'] = $users[0]['USERNAME']; $session->data['SITE_USER_ID'] = $users[0]['ID']; } if (!$session->data['SITE_USERNAME'] && $out['DEFAULT_USERNAME']) { $session->data['SITE_USERNAME'] = $out['DEFAULT_USERNAME']; $session->data['SITE_USER_ID'] = $out['DEFAULT_USER_ID']; for ($i = 0; $i < $total; $i++) { if ($users[$i]['USERNAME'] == $session->data['USERNAME']) { $users[$i]['SELECTED'] = 1; $out['USER_TITLE'] = $users[$i]['NAME']; $out['USER_AVATAR'] = $users[$i]['AVATAR']; } } } if ($out['USER_TITLE']) { Define('USER_TITLE', $out['USER_TITLE']); Define('USER_AVATAR', $out['USER_AVATAR']); } else { Define('USER_TITLE', ''); Define('USER_AVATAR', ''); } if ($out["DOC_NAME"]) { $doc = SQLSelectOne("SELECT ID FROM cms_docs WHERE NAME LIKE '" . DBSafe($out['DOC_NAME']) . "'"); if ($doc['ID']) { $this->doc = $doc['ID']; } } if ($session->data["AUTHORIZED"]) { $out['AUTHORIZED_ADMIN'] = 1; } if ($this->action == '') { $res = SQLSelect("SELECT * FROM layouts ORDER BY PRIORITY DESC, TITLE"); if ($this->action != 'admin') { $total = count($res); $res2 = array(); for ($i = 0; $i < $total; $i++) { if (checkAccess('layout', $res[$i]['ID'])) { $res2[] = $res[$i]; } } $res = $res2; unset($res2); } $out['LAYOUTS'] = $res; $total = count($out['LAYOUTS']); for ($i = 0; $i < $total; $i++) { $out['LAYOUTS'][$i]['NUM'] = $i; } $out['TOTAL_LAYOUTS'] = count($out['LAYOUTS']); } if ($this->doc) { $this->doc_id = $this->doc; } $out["DOC_ID"] = $this->doc_id; if ($session->data['MY_MEMBER']) { $out['MY_MEMBER'] = $session->data['MY_MEMBER']; $tmp = SQLSelectOne("SELECT ID FROM users WHERE ID='" . (int) $out['MY_MEMBER'] . "' AND ACTIVE_CONTEXT_ID!=0 AND TIMESTAMPDIFF(SECOND, ACTIVE_CONTEXT_UPDATED, NOW())>600"); if ($tmp['ID']) { SQLExec("UPDAE users SET ACTIVE_CONTEXT_ID=0, ACTIVE_CONTEXT_EXTERNAL=0 WHERE ID='" . $tmp['ID'] . "'"); } } $out['AJAX'] = $this->ajax; $out['POPUP'] = $this->popup; $days = array('Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'); $out['TODAY'] = $days[date('w')] . ', ' . date('d.m.Y'); Define(TODAY, $out['TODAY']); global $ajt; if ($ajt == '') { $template_file = DIR_TEMPLATES . $this->name . ".html"; } else { $template_file = ROOT . 'templates_ajax/' . $this->name . "_" . $ajt . ".html"; } if ($this->action == 'menu') { $template_file = DIR_TEMPLATES . "menu.html"; } $this->data = $out; $p = new parser($template_file, $this->data, $this); return $p->result; }
include_once "./load_settings.php"; include_once DIR_MODULES . "control_modules/control_modules.class.php"; $ctl = new control_modules(); include_once DIR_MODULES . 'app_asterisk/app_asterisk.class.php'; $asterisk = new app_asterisk(); $asterisk->getConfig(); $parent_class_rec = SQLSelectOne("SELECT * 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']) { $obj_rec = SQLSelectOne("SELECT * FROM objects WHERE CLASS_ID='" . $class_rec['ID'] . "'"); if ($obj_rec['ID']) { $amihost = getGlobal($obj_rec['TITLE'] . '.amihost'); $amiport = getGlobal($obj_rec['TITLE'] . '.amiport'); $amiusername = getGlobal($obj_rec['TITLE'] . '.amiusername'); $amipassword = getGlobal($obj_rec['TITLE'] . '.amipassword'); } } } if (!$amihost) { echo date('Y-m-d H:i:s') . " : AMI is not configured. No need to run cycle\n"; exit; } echo date("Y-m-d H:i:s") . " running " . basename(__FILE__) . PHP_EOL; include './lib/phpagi/phpagi-asmanager.php'; $manager = new AGI_AsteriskManager(); echo date('Y-m-d H:i:s') . " : Connecting to AMI... "; if (!$manager->connect($amihost . ":" . $amiport, $amiusername, $amipassword)) { echo " ...Connection failed.\n"; exit; } else {
} else { $target = "../../logos/" . $logo; @unlink($target); } if (!move_uploaded_file($_FILES['logo']['tmp_name'], $target)) { $logo = null; } } else { $logo = $local->logo; } //Cargando Photo if (!empty($_FILES["photo"]["name"])) { $photo_ext = pathinfo($_FILES["photo"]["name"], PATHINFO_EXTENSION); $photo = $local->photo; if ($photo == null) { $cantidad_photos = getGlobal("cantidad_photos"); $cantidad_photos = intval($cantidad_photos[0]->valor); $photo = "photo_" . ($cantidad_photos + 1) . "." . $photo_ext; $target = "../../photos/" . $photo; updateGlobal("cantidad_photos", $cantidad_photos + 1); } else { $target = "../../photos/" . $photo; @unlink($target); } if (!move_uploaded_file($_FILES['photo']['tmp_name'], $target)) { $photo = null; } } else { $photo = $local->photo; } $usuario = $_SESSION["userid"];
/** * Receive req * * @access public */ function req($arr) { // Node $NId = $arr[0]; $SId = $arr[1]; $mType = 1; // $arr[2]; $SubType = $arr[4]; if ($NId == "") { return; } $node = SQLSelectOne("SELECT * FROM msnodes WHERE NID LIKE '" . DBSafe($NId) . "';"); if (!$node['ID']) { $node['NID'] = $NId; $node['TITLE'] = $NId; $node['ID'] = SQLInsert('msnodes', $node); } // Sensor $sens = SQLSelectOne("SELECT * FROM msnodeval WHERE NID LIKE '" . DBSafe($NId) . "' AND SID LIKE '" . DBSafe($SId) . "' AND SUBTYPE LIKE '" . DBSafe($SubType) . "';"); if (!$sens['ID']) { $sens['NID'] = $NId; $sens['SID'] = $SId; $sens['SUBTYPE'] = $SubType; $sens['ID'] = SQLInsert('msnodeval', $sens); } // Req $val = $sens['VAL']; if ($sens['LINKED_OBJECT'] && $sens['LINKED_PROPERTY']) { $val = getGlobal($sens['LINKED_OBJECT'] . '.' . $sens['LINKED_PROPERTY']); //echo "Get from: ".$sens['LINKED_OBJECT'].".".$sens['LINKED_PROPERTY']." = ".$val."\n"; } //echo "Set: ".$val."\n"; $this->cmd("{$NId};{$SId};{$mType};" . $sens['ACK'] . ";{$SubType};" . $val); return false; }
/** * Title * * Description * * @access public */ function say($ph, $level = 0) { global $commandLine; global $voicemode; /* if ($commandLine) { echo utf2win($ph); } else { echo $ph; } */ $rec = array(); $rec['MESSAGE'] = $ph; $rec['ADDED'] = date('Y-m-d H:i:s'); $rec['ROOM_ID'] = 0; $rec['MEMBER_ID'] = 0; if ($level > 0) { $rec['IMPORTANCE'] = $level; } $rec['ID'] = SQLInsert('shouts', $rec); if (defined('SETTINGS_HOOK_BEFORE_SAY') && SETTINGS_HOOK_BEFORE_SAY != '') { eval(SETTINGS_HOOK_BEFORE_SAY); } if ($level >= (int) getGlobal('minMsgLevel')) { //$voicemode!='off' && $lang = 'en'; if (defined('SETTINGS_SITE_LANGUAGE')) { $lang = SETTINGS_SITE_LANGUAGE; } if (defined('SETTINGS_VOICE_LANGUAGE')) { $lang = SETTINGS_VOICE_LANGUAGE; } if (!defined('SETTINGS_TTS_GOOGLE') || SETTINGS_TTS_GOOGLE) { $google_file = GoogleTTS($ph, $lang); } else { $google_file = false; } if (!defined('SETTINGS_SPEAK_SIGNAL') || SETTINGS_SPEAK_SIGNAL == '1') { $passed = SQLSelectOne("SELECT (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(ADDED)) as PASSED FROM shouts WHERE ID!='" . $rec['ID'] . "' ORDER BY ID DESC LIMIT 1"); if ($passed['PASSED'] > 20) { // play intro-sound only if more than 30 seconds passed from the last one playSound('dingdong', 1, $level); } } if ($google_file) { @touch($google_file); playSound($google_file, 1, $level); } else { safe_exec('cscript ' . DOC_ROOT . '/rc/sapi.js ' . $ph, 1, $level); } } global $noPatternMode; if (!$noPatternMode) { include_once DIR_MODULES . 'patterns/patterns.class.php'; $pt = new patterns(); $pt->checkAllPatterns(); } if (defined('SETTINGS_HOOK_AFTER_SAY') && SETTINGS_HOOK_AFTER_SAY != '') { eval(SETTINGS_HOOK_AFTER_SAY); } if (defined('SETTINGS_PUSHOVER_USER_KEY') && SETTINGS_PUSHOVER_USER_KEY) { include_once ROOT . 'lib/pushover/pushover.inc.php'; if (defined('SETTINGS_PUSHOVER_LEVEL')) { if ($level >= SETTINGS_PUSHOVER_LEVEL) { postToPushover($ph); } } elseif ($level > 0) { postToPushover($ph); } } if (defined('SETTINGS_GROWL_ENABLE') && SETTINGS_GROWL_ENABLE && $level >= SETTINGS_GROWL_LEVEL) { include_once ROOT . 'lib/growl/growl.gntp.php'; $growl = new Growl(SETTINGS_GROWL_HOST, SETTINGS_GROWL_PASSWORD); $growl->setApplication('MajorDoMo', 'Notifications'); //$growl->registerApplication('http://localhost/img/logo.png'); $growl->notify($ph); } postToTwitter($ph); }
function gg($varname) { return getGlobal($varname, $value); }
} ?> height : '<?php echo getGlobal('EDHEIGHT'); ?> ', baseHref : '<?php echo getGlobal('SITEURL'); ?> ' <?php if (getGlobal('EDTOOL')) { echo ",toolbar: " . returnJsArray(getGlobal('EDTOOL')); } if (getGlobal('EDOPTIONS')) { echo ',' . trim(getGlobal('EDOPTIONS')); } ?> }; // wipe the ckeditor shim, so it does not interfere with the real one if(typeof CKEDITOR !== 'undefined'){ if(CKEDITOR.SHIM == true) CKEDITOR = null; } <?php if (get_filename_id() == 'snippets') { echo "htmlEditorConfig.height = '130px';"; } ?>
/** * Title * * Description * * @access public */ function checkPattern($id, $from_user_id = 0) { global $session; global $pattern_matched; $this_pattern_matched = 0; $condition_matched = 0; $rec = SQLSelectOne("SELECT * FROM patterns WHERE ID='" . (int) $id . "'"); if ($rec['PATTERN_TYPE'] == 1) { //conditional pattern $value = getGlobal($rec['LINKED_OBJECT'] . '.' . $rec['LINKED_PROPERTY']); $condition_value = $rec['CONDITION_VALUE']; if (($rec['CONDITION'] == 2 || $rec['CONDITION'] == 3) && $condition_value != '' && !is_numeric($condition_value) && !preg_match('/^%/', $condition_value)) { $condition_value = '%' . $condition_value . '%'; } if (is_integer(strpos($condition_value, "%"))) { $condition_value = processTitle($condition_value); } if ($rec['CONDITION'] == 1 && $value == $condition_value) { $status = 1; } elseif ($rec['CONDITION'] == 2 && (double) $value >= (double) $condition_value) { $status = 1; } elseif ($rec['CONDITION'] == 3 && (double) $value < (double) $condition_value) { $status = 1; } elseif ($rec['CONDITION'] == 4 && $value != $condition_value) { $status = 1; } else { $status = 0; } if ($status == 1 && !$rec['ACTIVE_STATE']) { $rec['ACTIVE_STATE'] = 1; SQLUpdate('patterns', $rec); $condition_matched = 1; } elseif ($status == 0 && $rec['ACTIVE_STATE']) { $rec['ACTIVE_STATE'] = 0; SQLUpdate('patterns', $rec); if ($rec['SCRIPT_EXIT']) { $this->runPatternExitAction($rec['ID'], $rec['SCRIPT_EXIT']); } //to-do: state exit script } } else { if ($rec['SKIPSYSTEM'] && !$from_user_id) { return 0; } if (!$rec['PATTERN']) { $pattern = $rec['TITLE']; } else { $pattern = $rec['PATTERN']; } $pattern = str_replace("\r", '', $pattern); if ($pattern == '') { return 0; } if ($rec['EXECUTED'] > 0 && $rec['TIME_LIMIT'] && time() - $rec['EXECUTED'] <= $rec['TIME_LIMIT']) { return 0; } $lines_pattern = explode("\n", $pattern); $total_lines = count($lines_pattern); if (!$rec['TIME_LIMIT']) { $messages = SQLSelect("SELECT MESSAGE FROM shouts ORDER BY ID DESC LIMIT " . (int) $total_lines); $messages = array_reverse($messages); } else { $start_from = time() - $rec['TIME_LIMIT']; $messages = SQLSelect("SELECT MESSAGE FROM shouts WHERE ADDED>=('" . date('Y-m-d H:i:s', $start_from) . "') ORDER BY ADDED"); } $total = count($messages); if (!$total) { return 0; } $lines = array(); for ($i = 0; $i < $total; $i++) { $lines[] = $messages[$i]['MESSAGE']; } $history = implode('@@@@', $lines); $check = implode('@@@@', $lines_pattern); if (preg_match('/' . $check . '/isu', $history, $matches)) { $condition_matched = 1; } } if ($condition_matched) { if (checkAccess('pattern', $rec['ID'])) { $is_common = 0; if ($rec['PARENT_ID']) { $parent_rec = SQLSelectOne("SELECT IS_COMMON_CONTEXT FROM patterns WHERE ID='" . $rec['PARENT_ID'] . "'"); $is_common = (int) $parent_rec['IS_COMMON_CONTEXT']; } if (context_getcurrent()) { $history = context_get_history() . ' ' . $history; } if ($rec['IS_CONTEXT']) { context_activate($rec['ID'], 1, $history); } elseif ($rec['MATCHED_CONTEXT_ID']) { context_activate($rec['MATCHED_CONTEXT_ID'], 0, $history); } elseif (!$is_common) { context_activate(0); } $rec['LOG'] = date('Y-m-d H:i:s') . ' Pattern matched' . "\n" . $rec['LOG']; $rec['EXECUTED'] = time(); SQLUpdate('patterns', $rec); $pattern_matched = 1; $this_pattern_matched = 1; $sub_patterns_matched = 0; if ($rec['IS_CONTEXT']) { $sub_patterns = SQLSelect("SELECT ID, IS_LAST FROM patterns WHERE PARENT_ID='" . $rec['ID'] . "' ORDER BY PRIORITY DESC, TITLE"); $total = count($sub_patterns); for ($i = 0; $i < $total; $i++) { if ($this->checkPattern($sub_patterns[$i]['ID'], $from_user_id)) { $sub_patterns_matched = 1; if ($sub_patterns[$i]['IS_LAST']) { break; } } } } if (!$sub_patterns_matched) { $this->runPatternAction($rec['ID'], $matches, $history, $from_user_id); } if ($rec['ONETIME']) { SQLExec("DELETE FROM patterns WHERE ID='" . $rec['ID'] . "'"); } } } else { $this_pattern_matched = 0; } return $this_pattern_matched; }
/** * 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¶m=" . $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; }
/** * FrontEnd * * Module frontend * * @access public */ function usual(&$out) { if ($this->class) { $objects = getObjectsByClass($this->class); if (!$this->code) { $template = '#title# <i>#description#</i><br/>'; } else { $template = $this->code; } $result = ''; if ($objects[0]['ID']) { $total = count($objects); for ($i = 0; $i < $total; $i++) { $objects[$i] = SQLSelectOne("SELECT * FROM objects WHERE ID='" . $objects[$i]['ID'] . "'"); $line = $template; $line = preg_replace('/\\#title\\#/is', $objects[$i]['TITLE'], $line); $line = preg_replace('/\\#description\\#/is', $objects[$i]['DESCRIPTION'], $line); if (preg_match_all('/\\#([\\w\\d_-]+?)\\#/is', $line, $m)) { $totalm = count($m[0]); for ($im = 0; $im < $totalm; $im++) { $property = trim($objects[$i]['TITLE'] . '.' . $m[1][$im]); $line = str_replace($m[0][$im], getGlobal($property), $line); } } $result .= $line; } } $out['RESULT'] = $result; } }
private function _actionPostProperty($data) { $this->cycleAlive(); if (isset($data['NAME'])) { $property_name = mb_strtolower($data['NAME'], 'UTF-8'); if (defined('DEBUG_WEBSOCKETS') && DEBUG_WEBSOCKETS == 1) { echo date('Y-m-d H:i:s') . " Update property " . $property_name . "\n"; } //$this->_cachedProperties[$property_name]=$data['VALUE']; //process property update global $scenes; global $commands; foreach ($this->_clients as $client) { if (isset($client->watchedProperties[$property_name])) { //scenes if (isset($client->watchedProperties[$property_name]['states'])) { $send_states = array(); $seen_state = array(); foreach ($client->watchedProperties[$property_name]['states'] as $k => $v) { if (isset($seen_state[$k])) { continue; } $seen_state[$k] = 1; $state = $this->_scenesDynamicElements[$k]; $scenes->processState($state); $send_states[] = $state; } if (isset($send_states[0])) { if (defined('DEBUG_WEBSOCKETS') && DEBUG_WEBSOCKETS == 1) { echo date('Y-m-d H:i:s') . (" Sending updated state " . serialize($send_states) . "\n"); } $encodedData = $this->_encodeData('states', json_encode($send_states)); $client->send($encodedData); } } //commands (menu) if (isset($client->watchedProperties[$property_name]['commands'])) { $send_values = array(); $send_labels = array(); $seen_commands = array(); foreach ($client->watchedProperties[$property_name]['commands'] as $k => $v) { if (isset($seen_commands[$k])) { continue; } $seen_commands[$k] = 1; $item = $commands->processMenuItem($k, true, $data['VALUE']); if (isset($item['VALUE'])) { $send_values[] = array('ID' => $item['ID'], 'DATA' => $item['VALUE']); } if (isset($item['LABEL'])) { $send_labels[] = array('ID' => $item['ID'], 'DATA' => $item['LABEL']); } } if (isset($send_labels[0])) { $send_data = array('LABELS' => $send_labels, 'VALUES' => $send_values); if (defined('DEBUG_WEBSOCKETS') && DEBUG_WEBSOCKETS == 1) { echo date('Y-m-d H:i:s') . (" Sending updated menu items " . serialize($send_data) . "\n"); } $encodedData = $this->_encodeData('commands', json_encode($send_data)); $client->send($encodedData); } } //properties if (isset($client->watchedProperties[$property_name]['properties'])) { $send_data = array(); $send_data[] = array('PROPERTY' => $property_name, 'VALUE' => getGlobal($property_name)); if (isset($send_data[0])) { if (defined('DEBUG_WEBSOCKETS') && DEBUG_WEBSOCKETS == 1) { echo date('Y-m-d H:i:s') . (" Sending updated properties " . serialize($send_data) . "\n"); } $encodedData = $this->_encodeData('properties', json_encode($send_data)); $client->send($encodedData); } } } } } if (file_exists('./reboot')) { $db->Disconnect(); exit; } }
} } } // END: begincut endcut placecut // BEGIN: filter output if ($filterblock != '') { preg_match('/<!-- begin_data \\[' . $filterblock . '\\] -->(.*?)<!-- end_data \\[' . $filterblock . '\\] -->/is', $result, $match); $result = $match[1]; } // END: filter output // GLOBALS $result = preg_replace('/%rand%/is', rand(), $result); if (preg_match_all('/%(\\w{2,}?)\\.(\\w{2,}?)%/is', $result, $m)) { $total = count($m[0]); for ($i = 0; $i < $total; $i++) { $result = str_replace($m[0][$i], getGlobal($m[1][$i] . '.' . $m[2][$i]), $result); } } if (preg_match_all('/%(\\w{2,}?)\\.(\\w{2,}?)\\|(\\d+)%/is', $result, $m)) { $total = count($m[0]); $seen = array(); for ($i = 0; $i < $total; $i++) { $var = $m[1][$i] . '.' . $m[2][$i]; $interval = (int) $m[2][$i] * 1000; if (!$interval) { $interval = 10000; } $id = 'var_' . preg_replace('/\\W/', '_', $var) . $seen[$var]; $seen[$var]++; $result = str_replace($m[0][$i], '<span id="' . $id . '">...</span><script language="javascript">ajaxGetGlobal("' . $var . '", "' . $id . '", ' . $interval . ');</script>', $result); }
<?php $root = $GLOBALS['root']; $footLines = getGlobal('footLines'); $posts = Blog::findAll("ORDER BY datetime DESC LIMIT 5"); ?> </section> </div> <footer> <div class='container'> <div class='row'> <div class='col-sm-4 col-xs-12'> <h2>Recent Articles</h2> <ul> <?php if (count($posts)) { foreach ($posts as $post) { $title = $post->title; $year = getDateElements("%Y", $post->datetime); $link = $root . DS . 'blog' . DS . $year . DS . snakeString($title); ?> <li><a href='<?php echo $link . DS; ?> '><?php echo $title; ?> </a></li> <?php }
/** * get the global siteurl * @since 3.4 * @param $absolute force absolute url * @return str */ function getSiteURL($absolute = false) { return $absolute ? getGlobal('SITEURL_ABS') : getGlobal('SITEURL'); }
/** * Returns the track's complete file path (with $media_dir) * * The paramater is one of: user|host|general * * @author Ben Dodson * @version 6/7/04 * @since 6/7/04 */ function getFileName($target = "user") { global $media_dirs, $web_dirs, $web_root, $root_dir, $protocols, $jzUSER, $allow_resample, $force_resample, $no_resample_subnets, $always_resample; if (checkPermission($jzUSER, 'play', $this->getPath("String")) === false) { return false; } if ($this->playpath === false || $this->playpath == "") { $cache = $this->readCache(); if ($cache[0] == "-") { // return error? $this->playpath = $this->getPath("String"); } else { $this->playpath = $cache[0]; } } if (isset($protocols) && isset($this->playpath)) { $parr = explode("|", $protocols); foreach ($parr as $p) { if (stristr($this->playpath, $p) !== false) { return $this->playpath; } } } /**********************/ if ($target == "user" || $target == "general") { if ($target == "user" && ($local_root = $jzUSER->getSetting("localpath")) !== false) { if (stristr($media_dirs, "|") === false) { $tmp = $this->getFileName("host"); if (stristr($tmp, $media_dirs) !== false) { return str_replace("//", "/", str_replace($media_dirs, $local_root, $tmp)); } } } $meta = $this->getMeta(); $arr = array(); //$arr['Artist'] = $meta['artist']; // decoy //$arr['Track'] = $meta['title']; // decoy // Resample? if (($allow_resample == "true" || $force_resample == "true") && !preg_match("/^{$no_resample_subnets}\$/", $_SERVER['REMOTE_ADDR'])) { if ($jzUSER->getSetting('resample_lock')) { $arr["resample"] = $jzUSER->getSetting('resample_rate'); } else { if (isset($_SESSION['jz_resample_rate'])) { if ($_SESSION['jz_resample_rate'] != "") { // Ok already, we are resampling!!! $arr["resample"] = $_SESSION['jz_resample_rate']; } } else { if ($jzUSER->getSetting('stream') === false && $jzUSER->getSetting('lofi') === true || $force_resample == "true") { $arr["resample"] = $jzUSER->getSetting('resample_rate'); } } } } $arr['jz_user'] = $jzUSER->getID(); // user id $arr['sid'] = $_SESSION['sid']; // unique session id if (getGlobal("CLIP_MODE")) { $arr['cl'] = 't'; } // Now, if they are resampling we MUST end with an MP3 $arr['ext'] = $meta['type']; if (isset($_SESSION['jz_resample_rate'])) { if ($_SESSION['jz_resample_rate'] != "") { $arr['ext'] = "mp3"; } } // Now we need to see if this track is a type that always gets resampled if ($allow_resample == "true") { // Now do we have a type that is going to get resampled if (stristr($always_resample, $meta['type'])) { // Ok, let's set it to MP3 $arr['ext'] = "mp3"; } } // Now should we send a path or ID? if ($web_dirs != "") { return jzCreateLink($this->getFileName("host"), "track", $arr); } else { return jzCreateLink($this->getID(), "track", $arr); } } else { return $this->playpath; } }
function processMenuElements(&$res) { startMeasure('processMenuElements'); startMeasure('processMenuElements ' . $_SERVER['REQUEST_URI']); if ($this->action != 'admin') { $total = count($res); $res2 = array(); for ($i = 0; $i < $total; $i++) { if (checkAccess('menu', $res[$i]['ID'])) { $res2[] = $res[$i]; } } $res = $res2; unset($res2); } $total = count($res); for ($i = 0; $i < $total; $i++) { // some action for every record if required if ($res[$i + 1]['INLINE']) { $res[$i]['INLINE'] = 1; } $item = $res[$i]; if ($item['VISIBLE_DELAY']) { $out['VISIBLE_DELAYS']++; } if ($item['EXT_ID'] && $this->action != 'admin') { $visible_delay = $item['VISIBLE_DELAY']; $tmp = SQLSelectOne("SELECT * FROM commands WHERE ID='" . (int) $item['EXT_ID'] . "'"); if ($tmp['ID']) { $item = $tmp; $item['VISIBLE_DELAY'] = $visible_delay; $res[$i] = $item; } } elseif ($item['EXT_ID'] && $this->action == 'admin') { $tmp = SQLSelectOne("SELECT * FROM commands WHERE ID='" . (int) $item['EXT_ID'] . "'"); if ($tmp['ID']) { $item['TITLE'] = $item['TITLE'] . ' (' . $tmp['TITLE'] . ')'; $res[$i] = $item; } } if ($item['LINKED_PROPERTY'] != '') { $lprop = getGlobal($item['LINKED_OBJECT'] . '.' . $item['LINKED_PROPERTY']); if ($item['TYPE'] == 'custom') { $field = 'DATA'; } else { $field = 'CUR_VALUE'; } if ($lprop != $item[$field]) { $item[$field] = $lprop; SQLUpdate('commands', $item); $res[$i] = $item; } } if ($item['TYPE'] == 'timebox') { $tmp = explode(':', $item['CUR_VALUE']); $value1 = (int) $tmp[0]; $value2 = (int) $tmp[1]; for ($h = 0; $h <= 23; $h++) { $v = $h; if ($v < 10) { $v = '0' . $v; } $selected = 0; if ($h == $value1) { $selected = 1; } $item['OPTIONS1'][] = array('VALUE' => $v, 'SELECTED' => $selected); } for ($h = 0; $h <= 59; $h++) { $v = $h; if ($v < 10) { $v = '0' . $v; } $selected = 0; if ($h == $value2) { $selected = 1; } $item['OPTIONS2'][] = array('VALUE' => $v, 'SELECTED' => $selected); } $res[$i] = $item; } if ($item['TYPE'] == 'switch') { if (trim($item['DATA'])) { $data = explode("\n", str_replace("\r", "", $item['DATA'])); $item['OFF_VALUE'] = trim($data[0]); $item['ON_VALUE'] = trim($data[1]); } else { $item['OFF_VALUE'] = 0; $item['ON_VALUE'] = 1; } $res[$i] = $item; } if ($item['TYPE'] == 'selectbox' || $item['TYPE'] == 'radiobox') { $data = explode("\n", str_replace("\r", "", $item['DATA'])); $item['OPTIONS'] = array(); $num = 1; foreach ($data as $line) { $line = trim($line); if ($line != '') { $option = array(); if (preg_match('/=/', $line)) { $tmp = explode('=', $line); } else { $tmp = explode('|', $line); } $option['VALUE'] = $tmp[0]; if ($tmp[1] != '') { $option['TITLE'] = $tmp[1]; } else { $option['TITLE'] = $option['VALUE']; } if ($option['VALUE'] == $item['CUR_VALUE']) { $option['SELECTED'] = 1; } $option['NUM'] = $num; $num++; $item['OPTIONS'][] = $option; } } $res[$i] = $item; } if ($this->owner->name != 'panel') { $res[$i]['TITLE'] = processTitle($res[$i]['TITLE'], $this); if ($res[$i]['TYPE'] == 'custom') { $res[$i]['DATA'] = processTitle($res[$i]['DATA'], $this); } if (preg_match('/#[\\w\\d]{6}/is', $res[$i]['TITLE'], $m)) { $color = $m[0]; $res[$i]['TITLE'] = trim(str_replace($m[0], '<style>#item' . $res[$i]['ID'] . ' .ui-btn-active {background-color:' . $color . ';border-color:' . $color . '}</style>', $res[$i]['TITLE'])); } if ($res[$i]['RENDER_TITLE'] != $res[$i]['TITLE'] || $res[$i]['RENDER_DATA'] != $res[$i]['DATA']) { $tmp = SQLSelectOne("SELECT * FROM commands WHERE ID='" . $res[$i]['ID'] . "'"); $tmp['RENDER_TITLE'] = $res[$i]['TITLE']; $tmp['RENDER_DATA'] = $res[$i]['DATA']; $tmp['RENDER_UPDATED'] = date('Y-m-d H:i:s'); SQLUpdate('commands', $tmp); } } if (preg_match('/<script/is', $res[$i]['DATA']) && $res[$i]['AUTO_UPDATE']) { $res[$i]['AUTO_UPDATE'] = 0; } $res[$i]['TITLE_SAFE'] = htmlspecialchars($res[$i]['TITLE']); /* foreach($res[$i] as $k=>$v) { if (!is_array($res[$i][$k]) && $k!='DATA') { $res[$i][$k]=addslashes($v); } } */ $tmp = SQLSelectOne("SELECT COUNT(*) as TOTAL FROM commands WHERE PARENT_ID='" . $res[$i]['ID'] . "'"); if ($tmp['TOTAL']) { $res[$i]['RESULT_TOTAL'] = $tmp['TOTAL']; } if ($res[$i]['SUB_PRELOAD'] && $this->action != 'admin') { $children = SQLSelect("SELECT * FROM commands WHERE PARENT_ID='" . $res[$i]['ID'] . "' ORDER BY PRIORITY DESC, TITLE"); if ($children[0]['ID']) { $this->processMenuElements($children); if ($children[0]['ID']) { $res[$i]['RESULT'] = $children; } } } } endMeasure('processMenuElements ' . $_SERVER['REQUEST_URI'], 1); endMeasure('processMenuElements', 1); }
/** * Title * * Description * * @access public */ function processMenuItem($item_id, $set_value = false, $new_value = 0) { if (preg_match('/(\\d+)\\_(\\d+)/', $item_id, $m)) { $dynamic_item = 1; $real_part = $m[1]; $object_part = $m[2]; } else { $dynamic_item = 0; $real_part = $item_id; $object_part = 0; } $item = SQLSelectOne("SELECT * FROM commands WHERE ID='" . (int) $real_part . "'"); if ($object_part) { $object_rec = SQLSelectOne("SELECT ID, TITLE FROM objects WHERE ID=" . (int) $object_part); $item['DATA'] = str_replace('%' . $item['LINKED_OBJECT'] . '.', '%' . $object_rec['TITLE'] . '.', $item['DATA']); $item['TITLE'] = $object_rec['TITLE']; $item['LINKED_OBJECT'] = $object_rec['TITLE']; } if ($item['ID']) { $item['ID'] = $item_id; if ($object_part) { $data = getGlobal($object_rec['TITLE'] . '.' . $item['LINKED_PROPERTY']); } else { if ($set_value) { $item['CUR_VALUE'] = $new_value; } $data = $item['CUR_VALUE']; } $item['VALUE'] = $data; if ($item['TYPE'] == 'custom') { if (preg_match('/\\[#modul/is', $item['DATA'])) { unset($item['LABEL']); return $item; } //$item['DATA']=processTitle($item['DATA'], $this); $data = $item['DATA']; } else { //$item['TITLE']=processTitle($item['TITLE'], $this); $data = $item['TITLE']; } $data = processTitle($data, $this); if (preg_match('/#[\\w\\d]{6}/is', $data, $m)) { $color = $m[0]; $data = trim(str_replace($m[0], '<style>#item' . $item['ID'] . ' .ui-btn-active {background-color:' . $color . ';border-color:' . $color . '}</style>', $data)); } $item['LABEL'] = $data; } return $item; }