[ // 'sin' => 126, // 'min' => 11 // ], // 'CommonMessageFields' => [ // [ // 'Name' => 'SM0Metter', // 'IsArray' => 0, // 'Fields' => [], // 'Value' => 3600 // ], // [ // 'Name' => 'SM0Distance', // 'IsArray' => 0, // 'Fields' => [], // 'Value' => 10000 // ], // ] // ]; // //Estructura pra envío de comando con campos en arreglo: // $jsonArreglos = [ // 'CommonMessage' => [ // 'sin' => 126, // 'min' => 2 // ], // 'CommonMessageFields' => [ // [ // 'Name' => 'OutputList', // 'IsArray' => 1, // 'Fields' => [ // ['LineNum' => 14, // 'LineState' => 0] // ], // 'Value' => null] // ] // ]; // echo json_encode($jsonDirecto); // return; return $this->render('index'); } public function actionLogin() { date_default_timezone_set('UTC'); $date = date('Y-m-d H:i:s', time()); if (isset($_SERVER['HTTP_ORIGIN'])) { header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); // cache for 1 day } // Access-Control headers are received during OPTIONS requests if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); } $postdata = file_get_contents("php://input"); if ($_SERVER['REQUEST_METHOD'] === 'POST') { $request = json_decode($postdata); if (!is_null($request)) { $userModel = \common\models\UserApp::find()->where('Usuario =:user', [':user' => $request->username])->one(); if (!is_null($userModel)) { if ($this->decode($userModel->Password) == $request->password) { $counters = $this->CalculateCounters($userModel->id); $units = $this->GetAllUnits($userModel->id); $panicUnits = $this->GetPanicUnits($userModel->id); $user = array( 'Id' => $userModel->id, 'Nombre' => $userModel->Nombre, 'Username' => $userModel->Usuario, 'Password' => $this->decode($userModel->Password) ); return json_encode(array('value' => 1, 'mesage' => 'Inicio de sesion correcto', 'user' => $user, 'counters' => $counters, 'units' => $units, 'panicUnits' => $panicUnits)); } else { echo json_encode(array('value' => 2, 'mesage' => 'La contrase�a es incorrecta, favor de verificarla')); } } else { echo json_encode(array('value' => 3, 'mesage' => 'No se encontro el usuario verifique los datos')); } } else { echo json_encode(array('value' => 0, 'mesage' => 'No trae datos')); } } else { echo json_encode(array('value' => 0, 'mesage' => 'No es post')); } } public function actionAlloperationgroups() { if (isset($_SERVER['HTTP_ORIGIN'])) { header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); // cache for 1 day } // Access-Control headers are received during OPTIONS requests if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); } $postdata = file_get_contents("php://input"); if ($_SERVER['REQUEST_METHOD'] === 'POST') { $request = json_decode($postdata); if (!is_null($request)) { $operationGroups = \Yii::$app->db->createCommand( 'SELECT DISTINCT O.Id, O.`Name` FROM fleetsys.tbl_operation_group O JOIN fleetsys.tbl_user_monitors_operation_group UMO ON O.Id = UMO.OperationGroupId JOIN zapata.tbl_unit U ON O.Id = U.OperationGroupId WHERE UMO.UserId = ' . $request->userId . ' ORDER BY O.`Name` ASC' )->queryAll(); return json_encode(array('value' => 1, 'mesage' => 'consulta completada', 'operationGroups' => $operationGroups)); } else { echo json_encode(array('value' => 0, 'mesage' => 'No trae datos')); } } else { echo json_encode(array('value' => 0, 'mesage' => 'No es post')); } } public function actionOperationgroupunits() { if (isset($_SERVER['HTTP_ORIGIN'])) { header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); // cache for 1 day } // Access-Control headers are received during OPTIONS requests if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); } $postdata = file_get_contents("php://input"); if ($_SERVER['REQUEST_METHOD'] === 'POST') { $request = json_decode($postdata); if (!is_null($request)) { $units = \Yii::$app->db->createCommand( 'SELECT U.Id, CONCAT(C.Prefix, "-", U.`Name`) AS "Name" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId WHERE UMU.UserId = ' . $request->userId . ' AND O.Id = ' . $request->operationGroupId . ' ORDER BY U.`Name` ASC' )->queryAll(); return json_encode(array('value' => 1, 'mesage' => 'consulta completada', 'operationGroupUnits' => $units)); } else { echo json_encode(array('value' => 0, 'mesage' => 'No trae datos')); } } else { echo json_encode(array('value' => 0, 'mesage' => 'No es post')); } } public function actionUpdatetravel($unitId) { $model = \common\models\UnitTravelApp::find()->where(['UnitId' => $unitId])->orderBy(['Id' => SORT_DESC])->one(); $unidad = \common\models\Unit::find()->where(['id' => $unitId])->one(); //$cliente = \common\models\Cliente::find()->where(['PersonId' => $unidad->OwnerId])->one(); $entidad = \common\models\Entidades::find()->where(['AvatarClienteId' => $unidad->OwnerId])->one(); if (isset($_POST['UnitTravel'])) { $data_post = json_decode($_POST['UnitTravel']); $model->UnassignedBy = $data_post->UnassignedBy; $model->UnassignDate = $data_post->UnassignDate; $model->UnassignedReason = $data_post->UnassignedReason; $model->UnassignedComments = $data_post->UnassignedComments; if ($model->save()) { $email = new \common\models\Email(); $person = \common\models\Person::find()->where(['id' => $unidad->OwnerId])->one(); $email->Recipients = $model->SendEmailTo; $email->Subject = "Fin de viaje para el cliente: $model->CustomerName"; $email->Message = '
Estimado cliente, se le informa que el viaje con la unidad ' . $unidad->Name . ' y el remolque ' . $model->CargoNumber . ' ha concluido con el estatus: ' . $model->UnassignedReason . '
Este es el ultimo informe que le enviaremos sobre el viaje en cuestión.
Gracias por su preferencia, esperamos estar a su servicio de nuevo pronto
'; $email->IsHtml = 1; $email->ForCustomerId = $unidad->OwnerId; if ($email->save()) { if (\yii::$app->db2->createCommand("UPDATE fleetsys.tbl_unit_travel SET LastEmailSent = ADDTIME(NOW(),'7:00:00.0') WHERE Id = " . $model->Id)->execute() > 0) { return json_encode(array('value' => 1, 'mesage' => 'Viaje Terminado')); } else { return json_encode(array('value' => 0, 'mesage' => 'Error al actualizar la fecha')); } } else { return json_encode(array('value' => 0, 'mesage' => 'Error al guardar el correo')); } } else { return json_encode(array('value' => 0, 'mesage' => 'Error al terminar el viaje')); } } else { return json_encode(array('value' => 0, 'mesage' => 'No trae datos')); } } public function actionGetprivileges($userId){ try { $profileId = \common\models\UsuarioPuedeAccesarAplicacion::find()->where(['idUsuario' => $userId])->one()->idPerfil; $profile = \common\models\Profile::find()->where(['id' => $profileId])->one(); if($profile->canDo(31)){ return json_encode(array('value' => true, 'mesage' => 'Si puede enviar comandos', 'comands' => $this->getComands($userId))); }else{ return json_encode(array('value' => false, 'mesage' => 'No puede enviar comandos')); } } catch (Exception $ex) { return json_encode(array('value' => false, 'mesage' => $ex->getMessage())); } } public function getComands($userId){ $idCliente = \common\models\UserApp::find()->where(['id' => $userId])->one()->idCliente; $comands = \common\models\ClientComands::find()->where(['idCliente' => $idCliente])->all(); $response = []; foreach($comands as $row){ $response[] = [ 'idComando' => $row->idComando, 'Nombre' => \Yii::$app->db->createCommand("SELECT Nombre FROM tbl_comandos WHERE id = " . $row->idComando )->queryScalar() ]; } return count($comands) > 0 ? $response : false; } public function actionProcesscomand($unitId){ $unit = \common\models\Unit::find()->where(['id' => $unitId])->one(); $device = \common\models\Device::find()->where(['Id' => $unit->DeviceId])->one(); if (isset($_POST['dataRequest'])) { $request = json_decode($_POST['dataRequest']); $command = \common\models\Commands::find()->where(['Nombre' => $request->comandName])->one(); $User = \common\models\UserApp::find()->where(['id' => $request->userId])->one(); if($device){ if($device->Brand === "Navcel"){ return $this->sendComandNavcel($device, $command, $User, $request->comments); }else if($device->Brand === "Calamp"){ return $this->sendComandCalamp($device, $command, $User, $request->comments); }else if($device->Brand === "Skywave"){ return json_encode(array('value' => false, 'mesage' => 'Los dispositivos Skywave no soportan envio de comandos aun')); //return $this->sendComandSkywave($device, $command, $User, $request->comments); }else{ return json_encode(array('value' => false, 'mesage' => 'El dispositivo no soporta envio de comandos')); } }else{ return json_encode(array('value' => false, 'mesage' => 'No se encontro dispositivo para esta unidad')); } }else{ return json_encode(array('value' => false, 'mesage' => 'No se recivieron datos')); } } public function sendComandNavcel($device, $command, $User, $Coments){ $msj = new \common\models\MensajesNavcel(); $msj->eqId = $device->TerminalId; $msj->msTipo = $command->Comando; $msj->msBytes = 0; $msj->msEnviado = 0; $msj->msPL = 0x0; $msj->usuId = $User->id; $msj->usuNombre = $User->Nombre . " " . $User->Paterno; $msj->msComentarios = $Coments; $msj->msFecha = \Yii::$app->db6->createCommand("select now() as fecha")->queryScalar(); $msj->msFechaUtc = \Yii::$app->db6->createCommand("select ADDTIME(now(),'7:00:00.0') as fecha")->queryScalar(); return $msj->save() ? json_encode(array('value' => true, 'mesage' => "Comando enviado los cambios se aplicaran cuando las condiciones de seguridad se cumplan")) : json_encode(array('value' => false, 'mesage' => $msj->getErrors())); } public function sendComandCalamp($device, $command, $User, $Coments){ $msj = new \common\models\MensajesCalamp(); $msj->eqId = $device->TerminalId; $msj->msTipo = $command->Comando; $msj->msEnviado = 0; $msj->usuId = $User->id; $msj->usuNombre = $User->Nombre . " " . $User->Paterno; $msj->msComentarios = $Coments; return $msj->save() ? json_encode(array('value' => true, 'mesage' => "Comando enviado los cambios se aplicaran cuando las condiciones de seguridad se cumplan")) : json_encode(array('value' => false, 'mesage' => $msj->getErrors())); } public function sendComandSkywave($device, $command, $User, $Coments){ return json_encode(array('value' => true, 'mesage' => "sendComandSkywave")); } public function getJsonDirect(){ //Estructura para envío de comando con campos directos: $jsonDirecto = [ 'CommonMessage' => [ 'sin' => 126, 'min' => 11 ], 'CommonMessageFields' => [ [ 'Name' => 'SM0Metter', 'IsArray' => 0, 'Fields' => [], 'Value' => 3600 ], [ 'Name' => 'SM0Distance', 'IsArray' => 0, 'Fields' => [], 'Value' => 10000 ], ] ]; return json_encode($jsonDirecto); } public function getJsonArray(){ //Estructura pra envío de comando con campos en arreglo: $jsonArreglos = [ 'CommonMessage' => [ 'sin' => 126, 'min' => 2 ], 'CommonMessageFields' => [ [ 'Name' => 'OutputList', 'IsArray' => 1, 'Fields' => [ ['LineNum' => 14, 'LineState' => 0] ], 'Value' => null] ] ]; return json_encode($jsonArreglos); } public function actionCreatetravel($unitId) { $unidad = \common\models\Unit::find()->where(['id' => $unitId])->one(); $model = new \common\models\UnitTravelApp(); $model->UnitId = $unitId; $entidad = \common\models\Entidades::find()->where(['AvatarClienteId' => $unidad->OwnerId])->one(); if (isset($_POST['UnitTravel'])) { $data_post = json_decode($_POST['UnitTravel']); $model->SendEmailTo = $data_post->SendEmailTo; $model->CustomerName = $data_post->CustomerName; $model->AssignedBy = $data_post->AssignedBy; $model->AssignDate = $data_post->AssignDate; $model->Interval = $data_post->Interval; $model->CargoNumber = $data_post->CargoNumber; $emailAddresses = explode(',', $model->SendEmailTo); $emailValidator = new \yii\validators\EmailValidator(); foreach ($emailAddresses as $address) { if (!$emailValidator->validate(trim($address))) { $model->addError('SendEmailTo', "Address $address is not a valid email address"); } } if (!$model->hasErrors()) { if ($model->save()) { $email = new \common\models\Email(); $person = \common\models\Person::find()->where(['id' => $unidad->OwnerId])->one(); $email->Recipients = $model->SendEmailTo; $email->Subject = "Inicio de viaje para el cliente: $model->CustomerName"; $email->Message = 'Estimado cliente, se le informa que se ha asignado un viaje con la unidad ' . $unidad->Name . ' y el remolque ' . $model->CargoNumber . '
A partir de este momento y hasta concluir el viaje, estará recibiendo informes de la ubicación de su carga cada ' . $model->Interval . ' minutos.
Gracias por preferir nuestro servicio
'; $email->IsHtml = 1; $email->ForCustomerId = $unidad->OwnerId; if ($email->save()) { if (\yii::$app->db2->createCommand("UPDATE fleetsys.tbl_unit_travel SET LastEmailSent = ADDTIME(NOW(),'7:00:00.0') WHERE Id = " . $model->Id)->execute() > 0) { return json_encode(array('value' => 1, 'mesage' => 'Viaje Guardado')); } else { return json_encode(array('value' => 0, 'mesage' => 'Error al actualizar la fecha')); } } else { return json_encode(array('value' => 0, 'mesage' => 'Error al guardar el correo')); } } else { return json_encode(array('value' => 0, 'mesage' => 'Error al guardar el viaje')); } } else { return json_encode(array('value' => 0, 'mesage' => 'Error al guardar el viaje')); } } else { return json_encode(array('value' => 0, 'mesage' => 'No trae datos')); } } public function actionGetunitstatuses() { if (isset($_SERVER['HTTP_ORIGIN'])) { header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); // cache for 1 day } // Access-Control headers are received during OPTIONS requests if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); } $postdata = file_get_contents("php://input"); if ($_SERVER['REQUEST_METHOD'] === 'POST') { $request = json_decode($postdata); if (!is_null($request)) { $model = \common\models\UnitTravelApp::find()->where(['UnitId' => $request->unitId])->orderBy(['Id' => SORT_DESC])->one(); if ($model) { if (!is_null($model->UnassignedBy)) { $viaje = 1; } else { $viaje = 0; } } else { $viaje = 1; } $data_travel = []; if($viaje == 0){ $data_travel = [ 'init' => $model->AssignDate, 'cliente' => $model->CustomerName, 'remolque' => $model->CargoNumber, ]; } $query = \Yii::$app->db->createCommand( 'SELECT D.TerminalId, US.CommunicationStatus, TZ.Diff, D.ReportDate, US.TransmissionMedia, US.EngineStatus, US.BatteryAlimentation, US.Celerity, D.Latitude, D.Longitude, D.Speed, UK.Type FROM zapata.tbl_unit U JOIN zapata.tbl_unit_kind UK ON U.KindId=UK.Id JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_time_zone_enum TZ ON O.TimeZoneId=TZ.Id JOIN fleetsys.tbl_unit_statuses US ON U.Id=US.UnitId WHERE U.Id = ' . $request->unitId )->queryAll(); $modify = $query[0]['Diff'] . ' hours'; $mDate = date('Y-m-d H:i:s', strtotime("$modify", strtotime($query[0]['ReportDate']))); $alarms = $this->GetUnitAlarms($request->unitId); $vars = $this->GetUnitVariables($request->unitId, $modify); $comandInfo = $this->getLastComand($request->unitId); $StatusArray = [ "terminalId" => $query[0]['TerminalId'], "communicationStatus" => $query[0]['CommunicationStatus'], "reportDate" => $mDate, "transmissionMedia" => $query[0]['TransmissionMedia'], "engineStatus" => $query[0]['EngineStatus'], "batteryAlimentation" => $query[0]['BatteryAlimentation'], "celerity" => $query[0]['Celerity'], "latitude" => $query[0]['Latitude'], "longitude" => $query[0]['Longitude'], "speed" => $query[0]['Speed'], "alarms" => $alarms, "vars" => $vars, "Type" => $query[0]['Type'], "Viaje" => $viaje, "data_travel" => $data_travel, "comandInfo" => $comandInfo ]; return json_encode(array('value' => 1, 'mesage' => 'consulta completada', 'unitStatuses' => $StatusArray)); } else { echo json_encode(array('value' => 0, 'mesage' => 'No trae datos')); } } else { echo json_encode(array('value' => 0, 'mesage' => 'No es post')); } } public function getLastComand($unitId){ $unit = \common\models\Unit::find()->where(['id' => $unitId])->one(); $device = \common\models\Device::find()->where(['Id' => $unit->DeviceId])->one(); if($device){ if($device->Brand === "Navcel"){ $msj = \common\models\MensajesNavcel::find()->where(['eqId' => $device->TerminalId])->orderBy(['msFecha' => SORT_DESC])->one(); }else if($device->Brand === "Calamp"){ $msj = \common\models\MensajesCalamp::find()->where(['eqId' => $device->TerminalId])->orderBy(['msFecha' => SORT_DESC])->one(); }else if($device->Brand === "Skywave"){ $msj = \common\models\MensajesCalamp::find()->where(['eqId' => $device->TerminalId])->orderBy(['msFecha' => SORT_DESC])->one(); }else{ return['haveI' => false, 'comand' => false, 'status' => false ]; } $command = \common\models\Commands::find()->where(['Comando' => $msj->msTipo])->one(); if($msj && $command){ return['haveI' => true, 'comand' => $command->Nombre, 'status' => $msj->msEnviado ]; }else{ return['haveI' => false, 'comand' => false,'status' => false ]; } }else{ return['haveI' => false, 'comand' => false,'status' => false ]; } } public function actionGetunitalarms() { if (isset($_SERVER['HTTP_ORIGIN'])) { header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); // cache for 1 day } // Access-Control headers are received during OPTIONS requests if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); } $postdata = file_get_contents("php://input"); $MyAlarmArray = array(); if ($_SERVER['REQUEST_METHOD'] === 'POST') { $request = json_decode($postdata); if (!is_null($request)) { $model = \common\models\ActiveAlarm::find()->where(['UnitId' => $request->unitId])->all(); foreach ($model as $row) { $AlarmModel = \common\models\AlarmingState::find()->where(['Id' => $row->AlarmingStateId])->one(); array_push($MyAlarmArray, ["description" => $AlarmModel->Description, "priority" => $AlarmModel->Priority, "nature" => $AlarmModel->Nature]); } echo json_encode(array('value' => 1, 'mesage' => 'consulta completada', 'unitAlarms' => $MyAlarmArray)); } else { echo json_encode(array('value' => 0, 'mesage' => 'No trae datos')); } } else { echo json_encode(array('value' => 0, 'mesage' => 'No es post')); } } public function GetUnitAlarms($unitId) { $MyAlarmArray = array(); $model = \common\models\ActiveAlarm::find()->where(['UnitId' => $unitId])->all(); if (count($model) > 0) { foreach ($model as $row) { $AlarmModel = \common\models\AlarmingState::find()->where(['Id' => $row->AlarmingStateId])->one(); array_push($MyAlarmArray, ["description" => $AlarmModel->Description, "priority" => $AlarmModel->Priority, "nature" => $AlarmModel->Nature]); } } return $MyAlarmArray; } public function actionGetunitvariables() { if (isset($_SERVER['HTTP_ORIGIN'])) { header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); // cache for 1 day } // Access-Control headers are received during OPTIONS requests if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); } $postdata = file_get_contents("php://input"); $MyVarArray = array(); if ($_SERVER['REQUEST_METHOD'] === 'POST') { $request = json_decode($postdata); if (!is_null($request)) { $model = \common\models\UnitVariable::find()->where(['UnitId' => $request->unitId])->all(); foreach ($model as $row) { array_push($MyVarArray, ["name" => $row->sPN->Name, "value" => $row->Value, "measureUnit" => $row->sPN->MeasureUnit, "reportDate" => $row->ReportDate]); } echo json_encode(array('value' => 1, 'mesage' => 'consulta completada', 'unitVariables' => $MyVarArray)); } else { echo json_encode(array('value' => 0, 'mesage' => 'No trae datos')); } } else { echo json_encode(array('value' => 0, 'mesage' => 'No es post')); } } public function GetUnitVariables($unitId, $hours) { $MyVarArray = array(); $model = \common\models\UnitVariable::find()->where(['UnitId' => $unitId])->all(); if (count($model) > 0) { foreach ($model as $row) { array_push($MyVarArray, ["name" => $row->sPN->Name, "value" => $row->Value, "measureUnit" => $row->sPN->MeasureUnit, "reportDate" => date('Y-m-d H:i:s', strtotime("$hours", strtotime($row->ReportDate)))]); } } return $MyVarArray; } public function CalculateCounters($userId) { $offline = \Yii::$app->db->createCommand( 'SELECT COUNT(*) AS "Numero" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId WHERE UMU.UserId = ' . $userId . ' AND UST.CommunicationStatus = "FUERA_DE_COMUNICACION"' )->queryAll(); $stopped = \Yii::$app->db->createCommand( 'SELECT COUNT(*) AS "Numero" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId WHERE UMU.UserId = ' . $userId . ' AND UST.Celerity = "DETENIDO" AND UST.CommunicationStatus != "FUERA_DE_COMUNICACION"' )->queryAll(); $on = \Yii::$app->db->createCommand( 'SELECT COUNT(*) AS "Numero" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId WHERE UMU.UserId = ' . $userId . ' AND UST.EngineStatus = "ON" AND UST.CommunicationStatus != "FUERA_DE_COMUNICACION"' )->queryAll(); $off = \Yii::$app->db->createCommand( 'SELECT COUNT(*) AS "Numero" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId WHERE UMU.UserId = ' . $userId . ' AND UST.EngineStatus = "OFF" AND UST.CommunicationStatus != "FUERA_DE_COMUNICACION"' )->queryAll(); $alarms = \Yii::$app->db->createCommand( 'SELECT COUNT(*) AS "Numero" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId JOIN fleetsys.tbl_active_alarm AA ON AA.UnitId = UST.UnitId JOIN fleetsys.tbl_alarming_state AAS ON AAS.Id = AA.AlarmingStateId WHERE UMU.UserId = ' . $userId . ' AND UST.CommunicationStatus != "FUERA_DE_COMUNICACION"' )->queryAll(); $all = $this->GetAllUnits($userId); $travels = 0; foreach($all as $row){ $haveItrack = $this->getTravelInfo($row['Id']); if($haveItrack['status']){ $travels++; } } return ["offline" => $offline[0]['Numero'], "stopped" => $stopped[0]['Numero'], "on" => $on[0]['Numero'], "off" => $off[0]['Numero'], "alarms" => $alarms[0]['Numero'], "faults" => $travels]; } public function GetAllUnits($userId) { $units = \Yii::$app->db->createCommand( 'SELECT U.Id, CONCAT(C.Prefix, "-", U.`Name`) AS "Name" FROM zapata.tbl_unit U JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id = UMU.UnitId JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId WHERE UMU.UserId = ' . $userId )->queryAll(); return $units; } public function actionGetcounters() { if (isset($_SERVER['HTTP_ORIGIN'])) { header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); // cache for 1 day } // Access-Control headers are received during OPTIONS requests if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); } $postdata = file_get_contents("php://input"); if ($_SERVER['REQUEST_METHOD'] === 'POST') { $request = json_decode($postdata); if (!is_null($request)) { $offline = \Yii::$app->db->createCommand( 'SELECT COUNT(*) AS "Numero" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId WHERE UMU.UserId = ' . $request->userId . ' AND UST.CommunicationStatus = "FUERA_DE_COMUNICACION"' )->queryAll(); $stopped = \Yii::$app->db->createCommand( 'SELECT COUNT(*) AS "Numero" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId WHERE UMU.UserId = ' . $request->userId . ' AND UST.Celerity = "DETENIDO" AND UST.CommunicationStatus != "FUERA_DE_COMUNICACION"' )->queryAll(); $on = \Yii::$app->db->createCommand( 'SELECT COUNT(*) AS "Numero" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId WHERE UMU.UserId = ' . $request->userId . ' AND UST.EngineStatus = "ON" AND UST.CommunicationStatus != "FUERA_DE_COMUNICACION"' )->queryAll(); $off = \Yii::$app->db->createCommand( 'SELECT COUNT(*) AS "Numero" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId WHERE UMU.UserId = ' . $request->userId . ' AND UST.EngineStatus = "OFF" AND UST.CommunicationStatus != "FUERA_DE_COMUNICACION"' )->queryAll(); $alarms = \Yii::$app->db->createCommand( 'SELECT COUNT(*) AS "Numero" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId JOIN fleetsys.tbl_active_alarm AA ON AA.UnitId = UST.UnitId JOIN fleetsys.tbl_alarming_state AAS ON AAS.Id = AA.AlarmingStateId WHERE UMU.UserId = ' . $request->userId . ' AND UST.CommunicationStatus != "FUERA_DE_COMUNICACION"' )->queryAll(); $travels = 0; foreach($all as $row){ $haveItrack = $this->getTravelInfo($row['Id']); if($haveItrack['status']){ $travels++; } } $panicUnits = $this->GetPanicUnits($request->userId); return json_encode(array('value' => 1, 'counters' => ["offline" => $offline[0]['Numero'], "stopped" => $stopped[0]['Numero'], "on" => $on[0]['Numero'], "off" => $off[0]['Numero'], "alarms" => $alarms[0]['Numero'], "faults" => $travels], 'panicUnits' => $panicUnits)); } else { echo json_encode(array('value' => 0, 'mesage' => 'No trae datos')); } } else { echo json_encode(array('value' => 0, 'mesage' => 'No es post')); } } public function actionGetcounterunits() { if (isset($_SERVER['HTTP_ORIGIN'])) { header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); // cache for 1 day } // Access-Control headers are received during OPTIONS requests if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); } $postdata = file_get_contents("php://input"); if ($_SERVER['REQUEST_METHOD'] === 'POST') { $request = json_decode($postdata); if (!is_null($request)) { if ($request->counterName == "offline") { $units = \Yii::$app->db->createCommand( 'SELECT U.Id, CONCAT(C.Prefix, "-", U.`Name`) AS "Name", K.`Name` as "Kind", U.`LastModified` as "Report" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId WHERE UMU.UserId = ' . $request->userId . ' AND UST.CommunicationStatus = "FUERA_DE_COMUNICACION" ORDER BY Name ASC' )->queryAll(); } else if ($request->counterName == "stopped") { $units = \Yii::$app->db->createCommand( 'SELECT U.Id, CONCAT(C.Prefix, "-", U.`Name`) AS "Name", K.`Name` as "Kind", U.`LastModified` as "Report" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId WHERE UMU.UserId = ' . $request->userId . ' AND UST.Celerity = "DETENIDO" AND UST.CommunicationStatus != "FUERA_DE_COMUNICACION" ORDER BY Name ASC' )->queryAll(); } else if ($request->counterName == "on") { $units = \Yii::$app->db->createCommand( 'SELECT U.Id, CONCAT(C.Prefix, "-", U.`Name`) AS "Name", K.`Name` as "Kind", U.`LastModified` as "Report" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId WHERE UMU.UserId = ' . $request->userId . ' AND UST.EngineStatus = "ON" AND UST.CommunicationStatus != "FUERA_DE_COMUNICACION" ORDER BY Name ASC' )->queryAll(); } else if ($request->counterName == "off") { $units = \Yii::$app->db->createCommand( 'SELECT U.Id, CONCAT(C.Prefix, "-", U.`Name`) AS "Name", K.`Name` as "Kind", U.`LastModified` as "Report" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId WHERE UMU.UserId = ' . $request->userId . ' AND UST.EngineStatus = "OFF" AND UST.CommunicationStatus != "FUERA_DE_COMUNICACION" ORDER BY Name ASC' )->queryAll(); } else if ($request->counterName == "alarms") { $unitsQuery = \Yii::$app->db->createCommand( 'SELECT DISTINCT U.Id, CONCAT(C.Prefix, "-", U.`Name`) AS "Name", K.`Name` as "Kind", U.`LastModified` as "Report" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId JOIN fleetsys.tbl_active_alarm AA ON AA.UnitId = UST.UnitId JOIN fleetsys.tbl_alarming_state AAS ON AAS.Id = AA.AlarmingStateId WHERE UMU.UserId = ' . $request->userId . ' AND UST.CommunicationStatus != "FUERA_DE_COMUNICACION" ORDER BY Name ASC' )->queryAll(); $units = []; foreach($unitsQuery as $unit){ $units[] = [ 'Id' => $unit['Id'], 'Name' => $unit['Name'], 'Kind' => $unit['Kind'], 'Report' => $unit['Report'], 'Alarms' => $this->GetUnitAlarms($unit['Id']) ]; } } else if ($request->counterName == "travels") { $unitsQuery = \Yii::$app->db->createCommand( 'SELECT U.Id, CONCAT(C.Prefix, "-", U.`Name`) AS "Name", K.`Name` as "Kind", U.`LastModified` as "Report" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId WHERE UMU.UserId = ' . $request->userId . ' AND UST.CommunicationStatus != "FUERA_DE_COMUNICACION" ORDER BY Name ASC' )->queryAll(); $units = []; foreach($unitsQuery as $unit){ $travel = $this->getTravelInfo($unit['Id']); if($travel['status']){ $units[] = [ 'Id' => $unit['Id'], 'Name' => $unit['Name'], 'Kind' => $unit['Kind'], 'Report' => $unit['Report'], 'Travel' => $travel ]; } } } return json_encode(array('value' => 1, 'mesage' => 'Consulta completada', 'units' => $units)); } else { echo json_encode(array('value' => 0, 'mesage' => 'No trae datos')); } } else { echo json_encode(array('value' => 0, 'mesage' => 'No es post')); } } public function getTravelInfo($unitId){ $travel = \common\models\UnitTravelApp::find()->where(['UnitId' => $unitId, 'UnassignDate' => NULL])->one(); return[ 'status' => $travel ? true : false, 'AssignDate' => $travel ? $travel->AssignDate : '', 'CargoNumber' => $travel ? $travel->CargoNumber : '', 'CustomerName' => $travel ? $travel->CustomerName : '', ]; } public function GetPanicUnits($userId) { $units = \Yii::$app->db->createCommand( 'SELECT U.Id, CONCAT(C.Prefix, "-", U.`Name`) AS "Name" FROM zapata.tbl_unit U JOIN zapata.tbl_device D ON U.DeviceId=D.Id JOIN fleetsys.tbl_operation_group O ON U.OperationGroupId=O.Id JOIN fleetsys.tbl_user_monitors_unit UMU ON U.Id=UMU.UnitId JOIN zapata.tbl_unit_kind K ON U.KindId=K.id JOIN fleetsys.tbl_time_zone_enum T ON O.TimeZoneId=T.Id JOIN avatar.tbl_cliente C ON O.CustomerId=C.PersonId JOIN fleetsys.tbl_unit_statuses UST ON U.Id = UST.UnitId JOIN fleetsys.tbl_active_alarm AA ON AA.UnitId = UST.UnitId JOIN fleetsys.tbl_alarming_state AAS ON AAS.Id = AA.AlarmingStateId WHERE UMU.UserId = ' . $userId . ' AND AAS.Id = 1' )->queryAll(); return $units; } public function decode($codedString) { $xorFormedString = $this->extendString($codedString); $shuffledString = $this->xorDeform($this->xorDeform($xorFormedString)); $reversedString = $this->shuffle($shuffledString); unset($shuffledString); $extendedString = strrev($reversedString); unset($reversedString); $string = $this->contractString($extendedString); unset($extendedString); return $string; } protected function extendString($string) { $extendedString = ""; for ($i = 0; $i < strlen($string); $i++) { $char = $string[$i]; $extendedString .= $this->extendChar($char); } return $extendedString; } protected function extendChar($char) { $decodedCharString = decbin(ord($char)); $offset = 8 - strlen($decodedCharString); for ($i = 0; $i < $offset; $i++) { $decodedCharString = '0' . $decodedCharString; } return $decodedCharString; } protected function xorDeform($xorFormedString) { $extendedString = ""; for ($i = 0; $i < strlen($xorFormedString); $i = $i + 4) { $extendedString .= $this->denyChar($xorFormedString[$i + 1]); $extendedString .= $this->compareChars($xorFormedString[$i], $xorFormedString[$i + 1]); $extendedString .= $this->denyChar($xorFormedString[$i + 3]); $extendedString .= $this->compareChars($xorFormedString[$i + 2], $xorFormedString[$i + 3]); $extendedString = $this->swapChars($extendedString, $i + 1, $i + 2); } return $extendedString; } protected function compareChars($a, $b) { if ($a === $b) return "1"; else return "0"; } protected function swapChars($string, $positionA, $positionB) { $char = $string[$positionA]; $string[$positionA] = $string[$positionB]; $string[$positionB] = $char; return $string; } protected function denyChar($a) { if ($a === "1") return "0"; else return "1"; } protected function xorChar($a, $b) { if ($a == "0") { if ($b == "1") return "1"; else /* $b=="0" */ return "0"; } else { //$a=="1" if ($b == "1") return "0"; else /* $b=="0" */ return "1"; } } protected function shuffle($extendedString) { $splitString = $this->splitString($extendedString); $firstHalf = $splitString['firstHalf']; $secondHalf = strrev($splitString['secondHalf']); $length = strlen($secondHalf); for ($i = 0; $i < $length; $i = $i + 2) { if (isset($firstHalf[$i])) { $char = $firstHalf[$i]; $firstHalf[$i] = $secondHalf[$i]; $secondHalf[$i] = $char; } else { $char = $secondHalf[$i]; $secondHalf[$i] = $secondHalf[$i + 1]; $secondHalf[$i + 1] = $char; } } //var_dump($secondHalf); return $firstHalf . strrev($secondHalf); } protected function contractString($string) { $contractedString = ""; for ($i = 0; $i < strlen($string); $i = $i + 8) { $subString = substr($string, $i, 8); $contractedString .= $this->contractChar($subString); } return $contractedString; } protected function contractChar($substring) { $intByte = $this->_binaryToDecimal($substring); return sprintf("%c", $intByte); } protected function _binaryToDecimal($string) { /* Remember EXTENDED_BYTES means char * */ $value = 0; for ($i = strlen($string) - 1, $position = 0; $i >= 0; $i--, $position++) { $bit = $string[$i]; if ($bit !== "0") $value += pow(2, $position); } return $value; } protected function splitString($extendedString) { $length = strlen($extendedString); $totalBytes = $length / 8; $flooredHalfLength = floor($totalBytes / 2); $bytesToFirstHalf = $flooredHalfLength * 8; $firstHalf = ""; $secondHalf = ""; for ($i = 0; $i < $length; $i++) { if ($i < $bytesToFirstHalf) $firstHalf .= $extendedString[$i]; else $secondHalf .= $extendedString[$i]; } return array( 'firstHalf' => $firstHalf, 'secondHalf' => $secondHalf ); } }