Commit 825d8bf1 authored by WIN-25UHVMTM5SV\Administrator's avatar WIN-25UHVMTM5SV\Administrator
Browse files

Init

parents
No related merge requests found
Pipeline #680 failed with stages
in 0 seconds
APP_ENV=local
APP_DEBUG=true
APP_KEY=SomeRandomString
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
* text=auto
*.css linguist-vendored
*.less linguist-vendored
/vendor
/node_modules
Homestead.yaml
Homestead.json
.env
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Foundation\Inspiring;
class Inspire extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'inspire';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Display an inspiring quote';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->comment(PHP_EOL.Inspiring::quote().PHP_EOL);
}
}
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
Commands\Inspire::class,
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('inspire')
->hourly();
}
}
<?php
namespace App\Events;
abstract class Event
{
//
}
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that should not be reported.
*
* @var array
*/
protected $dontReport = [
HttpException::class,
ModelNotFoundException::class,
];
/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $e
* @return void
*/
public function report(Exception $e)
{
return parent::report($e);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $e
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $e)
{
if ($e instanceof ModelNotFoundException) {
$e = new NotFoundHttpException($e->getMessage(), $e);
}
return parent::render($request, $e);
}
}
<?php
namespace App\Http\Controllers;
//use App\Http\Controllers\Controller;
use Illuminate\Support\Collection;
use App\agent;
use App\device;
use App\cdr;
use App\ets_extension;
use App\ets_extension_status;
// teble
use DB;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Artisan;
class ApiEtsServer extends Controller
{
public function ami_getdevice(Request $request)
{
// return 's';
// Artisan::output(),
// return 'getdevice';
// $output = shell_exec('dir');
// Artisan::call('inspire');
// echo "<h1>start</h1>";
// Artisan::call('ami:cli', [
// 'command' => 'sip show peers',
// '--autoclose' => true,
// ]);
// echo "<h1>Stop</h1>";
// $output Artisan::output();
$output = null;
$retval = null;
$device = null;
exec('php ../artisan ami:cli "sip show peers" --autoclose', $output, $retval);
foreach ($output as $key => $value) {
if ($key > 0) {
if ($key == 1) {
// echo " head $key => $value <br><br>";
$device = preg_split('/\s+/', $value);
// print_r($device);
// echo "<br><br>";
} else {
// echo " body $key => $value <br><br>";
$chk_pos = strpos($value, "sip peers");
if ($chk_pos === false) {
$device = preg_split('/\s+/', $value);
$ets_ext = ets_extension::find($device[0]);
if (empty($ets_ext)) { // you can do this condition to check if is empty
$ets_ext = new ets_extension; //then create new object
}
$ets_ext->id = $device[0];
$ets_ext->host = $device[1];
$ets_ext->dyn = $device[2];
$ets_ext->forcerport = $device[3];
$ets_ext->comedia = $device[4];
$ets_ext->acl = $device[5];
$ets_ext->port = $device[6];
$ets_ext->status = $device[7];
$ets_ext->save();
$etc_num_array = explode("/", $device[0]);
$etc_num = $etc_num_array[0];
$device_tb = device::where('Device_ID', '=', $etc_num)->first();
if (isset($device_tb)) {
$device_tb->IPAddress = $device[1];
$device_tb->Status_ID = ($device[1] == '(Unspecified)') ? 1 : 2;
$device_tb->save();
}
// $device_tb = DB::select("SELECT
// *
// FROM
// `device`
// WHERE
// Device_ID = (SELECT SPLIT_STR ( '?', '/', 1 ))", [$device[0]]);
// if(isset($device_tb))
// {
// DB::update("UPDATE device
// SET device.IPAddress = '?',
// device.Status_ID = IF ( '?' = '(Unspecified)','1','2' )
// WHERE
// device.Device_ID = (SELECT SPLIT_STR ( '?', '/', 1 ))", [$device[1],$device[1],$device[0]]);
// }
// if(isset($device_tb))
// {
// DB::update("UPDATE device
// SET device.IPAddress = '?'
// WHERE
// device.Device_ID = (SELECT SPLIT_STR ( '?', '/', 1 ))", [$device[1],$device[0]]);
// }
// echo "false<br>";
} else {
// echo "true<br>";
break;
}
// print_r($device);
// echo "<br><br>";
}
}
}
return 'ok';
}
public function ami_getdevice_status(Request $request)
{
// return 's';
$output = null;
$retval = null;
$device = null;
exec('php ../artisan ami:cli "sip show inuse" --autoclose', $output, $retval);
foreach ($output as $key => $value) {
if ($key > 0) {
if ($key == 1) {
// echo " head $key => $value <br><br>";
$device = preg_split('/\s+/', $value);
// print_r($device);
// echo "<br><br>";
} else {
// echo " body $key => $value <br><br>";
$chk_pos = strpos($value, "END");
if ($chk_pos === false) {
// echo "false<br>";
$device = preg_split('/\s+/', $value);
$ets_ext = ets_extension_status::find($device[0]);
if (empty($ets_ext)) { // you can do this condition to check if is empty
$ets_ext = new ets_extension_status; //then create new object
}
$ets_ext->id = $device[0];
$ets_ext->status = $device[1];
$ets_ext->save();
} else {
// echo "true<br>";
break;
}
// print_r($device);
// echo "<br><br>";
}
}
}
return 'ok';
}
//
public function check_users(Request $request)
{
return agent::join('agent_rule', 'agent.Rule_ID', '=', 'agent_rule.Rule_ID')
->where('agent.Agent_ID', '=', $request->Agent_ID)
->get();
// return $request->Agent_ID;
}
public function login(Request $request)
{
// return $request;
$resolt = agent::join('agent_rule', 'agent.Rule_ID', '=', 'agent_rule.Rule_ID')
->where('agent.Agent_Name', '=', $request->username)
->where('agent.Agent_Password', '=', $request->password)
->get();
if ($resolt->isEmpty()) {
return response()->json(['Status' => 'Fail', 'data' => null], 422);
} else {
return response()->json(['Status' => 'OK', 'data' => $resolt]);
}
}
// log_out
public function logout(Request $request)
{
return response()->json(['Status' => 'OK', 'data' => 'loglou']);
}
public function getdevice(Request $request)
{
// $device_all = device::select('Device_Name','Device_ID','STA','Status_ID')->where('CCB','C+')->get();
$device_all = DB::select("SELECT
Device_Name,
Device_ID,
STA,
case
WHEN Status_ID = '1' THEN 'Offline'
WHEN Status_ID ='2' THEN 'Online'
ELSE 'Offline'
END as Status_name,
DST,
Status_ID,
latlong,
IPAddress,
CCB
FROM
device
WHERE
device.CCB = ?", ['C+']);
return response()->json(['Status' => 'OK', 'data' => $device_all]);
}
public function call_queues(Request $request)
{
$call_usage = DB::select("SELECT
Device_Name,
Device_ID,
STA,
case
WHEN Status_ID = '1' THEN 'Offline'
WHEN Status_ID ='2' THEN 'Online'
WHEN Status_ID ='5' THEN 'Call'
WHEN Status_ID ='6' THEN 'Talking'
ELSE 'Offline'
END as Status_name,
DST,
updated_at,
TIMEDIFF(CURTIME() ,TIME(updated_at)) as ddTime,
Status_ID
FROM
device
WHERE
Status_ID = '5'
AND
device.CCB = ?", ['C+']);
return response()->json(['Status' => 'OK', 'data' => $call_usage]);
}
public function call_usage(Request $request)
{
$call_usage = DB::select("SELECT
Device_Name,
Device_ID,
STA,
case
WHEN Status_ID = '1' THEN 'Offline'
WHEN Status_ID ='2' THEN 'Online'
WHEN Status_ID ='5' THEN 'Call'
WHEN Status_ID ='6' THEN 'Talking'
ELSE 'Offline'
END as Status_name,
DST,
updated_at,
TIMEDIFF(CURTIME() ,TIME(updated_at)) as ddTime,
Status_ID
FROM
device
WHERE
Status_ID = '6'
AND
device.CCB = ?", ['C+']);
return response()->json(['Status' => 'OK', 'data' => $call_usage]);
}
public function missedcall(Request $request)
{
$missedcall = DB::select("SELECT
device.Device_Name,
device.STA,
cdr.dst,
TIME(calldate) as dTime,
cdr.src,
cdr.disposition,
DeviceStatus,
Device_ID
FROM
`cdr`
LEFT JOIN device ON device.Device_ID = cdr.src
WHERE
DATE( calldate ) = CURDATE()
AND cdr.disposition <> 'ANSWERED'
AND
device.CCB = ?", ['C+']);
return response()->json(['Status' => 'OK', 'data' => $missedcall]);
}
public function call_history(Request $request)
{
$call_history = DB::select("SELECT
device.Device_Name,
device.STA,
cdr.dst,
TIME(calldate) as dTime,
cdr.src,
cdr.disposition,
DeviceStatus,
Device_ID
FROM
`cdr`
LEFT JOIN device ON device.Device_ID = cdr.src
WHERE
DATE( calldate ) = CURDATE()
AND cdr.disposition = 'ANSWERED'
AND
device.CCB = ?", ['C+']);
return response()->json(['Status' => 'OK', 'data' => $call_history]);
}
// Page Voice Record
// start date
// end date
// device list form data
public function voice_recode(Request $request)
{
// return $request;
// $voice_recode = DB::select("SELECT
// device.Device_Name,
// device.STA,
// cdr.calldate,
// device.IPAddress,
// cdr.src,
// cdr.dst,
// cdr.duration,
// cdr.uniqueid,
// cdr.recordingfile
// FROM
// cdr
// LEFT JOIN device ON device.Device_ID = cdr.src
// WHERE
// ( DATE( calldate ) BETWEEN '2023-09-01' AND '2023-10-01' )
// AND cdr.disposition = 'ANSWERED'
// AND device.CCB = 'C+'", [$request->startdate,$request->enddate,'C+']);
$ccb = explode(',',$request->ccb);
$voice_recode = cdr::select('device.Device_Name',
'device.STA',
'cdr.calldate',
'device.IPAddress',
'cdr.src',
'cdr.dst',
'cdr.duration',
'cdr.uniqueid',
'cdr.recordingfile',
'device.CCB')
->leftJoin('device','device.Device_ID','=','cdr.src')
->where('cdr.disposition', '=','ANSWERED' )
->where('device.CCB', '=','C+' )
// ->whereIn('device.CCB',$ccb)
->whereBetween(DB::raw('DATE(calldate)'), [$request->startdate, $request->enddate])
->get();
return response()->json(['Status' => 'OK', 'data' => $voice_recode]);
}
// Page User
// Page Add User
// Route::get('/list_user', 'ApiEtsServer@list_user');
public function list_user(Request $request)
{
$list_user = DB::select("SELECT
agent.agent_ID,
agent.Agent_Name,
agent.Agent_position,
agent.Agent_CCB,
agent.Rule_ID,
agent_rule.Rule_Name,
agent.FlagEnable
FROM
`agent`
left join `agent_rule` on agent_rule.Rule_ID = agent.Rule_ID");
return response()->json(['Status' => 'OK', 'data' => $list_user]);
}
// Route::post('/add_user', 'ApiEtsServer@add_user');
public function add_user(Request $request)
{
return 'add_user';
}
// Route::post('/edit_user', 'ApiEtsServer@edit_user');
public function edit_user(Request $request)
{
return 'edit_user';
}
// Route::post('/del_user', 'ApiEtsServer@del_user');
public function del_user(Request $request)
{
return 'del_user';
}
// page Group Permission
public function list_permission(Request $request)
{
return 'getdevice';
}
public function add_permission(Request $request)
{
return 'getdevice';
}
public function edit_permission(Request $request)
{
return 'getdevice';
}
public function del_permission(Request $request)
{
return 'getdevice';
}
// Tel Usage Report
// start date
// end date
// device list device form data
public function tel_usage_report(Request $request)
{
return 'getdevice';
}
// Tel failed Report
// start date
// end date
// device list device form data
public function tel_failed_report(Request $request)
{
return 'getdevice';
}
// equ failed Report
// start date
// end date
// device list device form data
public function equ_failed_report(Request $request)
{
return 'getdevice';
}
}
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
class AuthController extends Controller
{
/*
|--------------------------------------------------------------------------
| Registration & Login Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users, as well as the
| authentication of existing users. By default, this controller uses
| a simple trait to add these behaviors. Why don't you explore it?
|
*/
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
/**
* Create a new authentication controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest', ['except' => 'getLogout']);
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;
class PasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset requests
| and uses a simple trait to include this behavior. You're free to
| explore this trait and override any methods you wish to tweak.
|
*/
use ResetsPasswords;
/**
* Create a new password controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
}
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
abstract class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* @var array
*/
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
];
/**
* The application's route middleware.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];
}
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Contracts\Auth\Guard;
class Authenticate
{
/**
* The Guard implementation.
*
* @var Guard
*/
protected $auth;
/**
* Create a new middleware instance.
*
* @param Guard $auth
* @return void
*/
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($this->auth->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('auth/login');
}
}
return $next($request);
}
}
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as BaseEncrypter;
class EncryptCookies extends BaseEncrypter
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
//
'*'
];
}
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Contracts\Auth\Guard;
class RedirectIfAuthenticated
{
/**
* The Guard implementation.
*
* @var Guard
*/
protected $auth;
/**
* Create a new filter instance.
*
* @param Guard $auth
* @return void
*/
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($this->auth->check()) {
return redirect('/');
}
return $next($request);
}
}
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
'*'
];
}
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
abstract class Request extends FormRequest
{
//
}
<?php
//$api =
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::get('/ami_getdevice', 'ApiEtsServer@ami_getdevice');
Route::get('/ami_getdevice_status', 'ApiEtsServer@ami_getdevice_status');
Route::post('/login', 'ApiEtsServer@login');
Route::get('/logout', 'ApiEtsServer@logout');
// main page
// get /call_queues รายชื่อ โทรศัพท์ ที่โทรเข้ามา
// get /call_usage รายชื่อ โทรศััพท์ ที่ ใช้งาน
// get /missedcall ไม่ได้รับสาย
// get /call_history รายการทั้งหมด ในวันนั้น
// get /getdevice รายการ อุปกรน์​ พร้อม status ทั้งหมด
// HOME MAP
Route::get('/call_queues', 'ApiEtsServer@call_queues');
Route::get('/call_usage', 'ApiEtsServer@call_usage');
Route::get('/missedcall', 'ApiEtsServer@missedcall');
Route::get('/call_history', 'ApiEtsServer@call_history');
Route::get('/getdevice', 'ApiEtsServer@getdevice');
// Page Voice Record
// start date
// end date
// device list form data
Route::post('/voice_record', 'ApiEtsServer@voice_recode');
// Page ETS Setting
Route::post('/list_device', 'ApiEtsServer@list_device');
Route::post('/add_device', 'ApiEtsServer@add_device');
Route::post('/edit_device', 'ApiEtsServer@edit_device');
Route::post('/del_device', 'ApiEtsServer@del_device');
// Page Add User
Route::get('/list_user', 'ApiEtsServer@list_user');
Route::post('/add_user', 'ApiEtsServer@add_user');
Route::post('/edit_user', 'ApiEtsServer@edit_user');
Route::post('/del_user', 'ApiEtsServer@del_user');
// page Group Permission
Route::post('/list_permission', 'ApiEtsServer@list_permission');
Route::post('/add_permission', 'ApiEtsServer@add_permission');
Route::post('/edit_permission', 'ApiEtsServer@edit_permission');
Route::post('/del_permission', 'ApiEtsServer@del_permission');
// Tel Usage Report
// start date
// end date
// device list device form data
Route::post('/tel_usage_report', 'ApiEtsServer@tel_usage_report');
// Tel failed Report
// start date
// end date
// device list device form data
Route::post('/tel_failed_record', 'ApiEtsServer@tel_failed_report');
// equ failed Report
// start date
// end date
// device list device form data
Route::post('/equ_failed_record', 'ApiEtsServer@equ_failed_report');
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
abstract class Job
{
/*
|--------------------------------------------------------------------------
| Queueable Jobs
|--------------------------------------------------------------------------
|
| This job base class provides a central location to place any logic that
| is shared across all of your jobs. The trait included with the class
| provides access to the "onQueue" and "delay" queue helper methods.
|
*/
use Queueable;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment