├── .env.example ├── .gitattributes ├── .gitignore ├── .styleci.yml ├── LICENSE ├── app ├── Calls.php ├── Console │ ├── Commands │ │ ├── BouncerPermissions │ │ │ ├── BouncerPermissions.php │ │ │ └── ReviewGroupPermissions.php │ │ ├── CallManager │ │ │ ├── ADNumberUpdatesByMailboxNumber.php │ │ │ ├── AddPhones.php │ │ │ ├── BuildCUCMSiteDefaults.php │ │ │ ├── CiscoWirelessPhoneCert.php │ │ │ ├── CleanupOldCucmCDRSInDB.php │ │ │ ├── CucmGatewayCallCounts.php │ │ │ ├── CucmNumberCleanup.php │ │ │ ├── CucmPhoneIPAddresses.php │ │ │ ├── CucmPhoneNamesCache.php │ │ │ ├── CucmPhoneScan.php │ │ │ ├── CucmPhoneScanOnDemand.php │ │ │ ├── CucmPhoneSiteMove.php │ │ │ ├── CucmPhoneandNumberCleanup.php │ │ │ ├── CucmSIPPhoneReport.php │ │ │ ├── CucmSiteScan.php │ │ │ ├── DidScanCucm.php │ │ │ ├── FeedELKOldData.php │ │ │ ├── GetCucmCDRs.php │ │ │ ├── GetCucmPhoneStats.php │ │ │ ├── LdapUserUpdate.php │ │ │ ├── Ldapsync.php │ │ │ ├── OwnerUpdate.php │ │ │ └── SiteLocal911.php │ │ ├── Gizmo │ │ │ └── GizmoApiTest.php │ │ ├── IDM │ │ │ └── IdmUpdateUserPhone.php │ │ ├── Inspire.php │ │ ├── Ldap │ │ │ ├── GetLdapUser.php │ │ │ └── TestLdapPhoneUpdate.php │ │ ├── MACD │ │ │ └── GetMacdReports.php │ │ ├── Microsoft │ │ │ ├── MicrosoftTeamsUserReport.php │ │ │ └── MicrosoftTeamsUserStatsReport.php │ │ ├── Monitoring │ │ │ ├── CucmSonusLoopMitigator.php │ │ │ ├── MACDJobMonitor.php │ │ │ ├── PingScanInfrastructure.php │ │ │ ├── SonusAlarmMonitor.php │ │ │ └── SonusAttemptMonitor.php │ │ ├── Network │ │ │ └── GetAnyConnectStats.php │ │ ├── Numbers │ │ │ ├── DidScanCucmAndTeams.php │ │ │ └── NumberSearch.php │ │ ├── OnCall │ │ │ └── OnCallPermissions.php │ │ ├── Sonus │ │ │ ├── CleanSonusLogs.php │ │ │ ├── CleanupLoopCDRS.php │ │ │ ├── CleanupOldSonusCDRSInDB.php │ │ │ ├── GetSonusCDRs.php │ │ │ ├── GetSonusCallReports.php │ │ │ ├── GetSonusConfig.php │ │ │ ├── SonusActiveCallsCache.php │ │ │ └── SonusCalls.php │ │ ├── UCCX │ │ │ ├── UccxAgentLoginMonitor.php │ │ │ └── UccxTest.php │ │ ├── UnityConnection │ │ │ ├── DidNumberUpdatesByMailboxNumber.php │ │ │ ├── UnityConnMB.php │ │ │ └── UnityMBNumberPopulateIDM.php │ │ └── West911Enable │ │ │ ├── PhoneEGWScanUpdate.php │ │ │ └── TeamsEgwSync.php │ └── Kernel.php ├── CucmCDR.php ├── CucmCMR.php ├── CucmPhoneStats.php ├── CucmRealTime.php ├── Cucmclass.php ├── Cucmphoneconfigs.php ├── Cucmsiteconfigs.php ├── Cupi.php ├── DeletedItems.php ├── Did.php ├── Didblock.php ├── Elastic │ └── ElasticApiClient.php ├── Events │ ├── Create_AD_IPPhone_Event.php │ ├── Create_Cucm_Local_EndUser_Event.php │ ├── Create_Line_Event.php │ ├── Create_Phone_Event.php │ ├── Create_UnityConnection_LDAP_Import_Mailbox_Event.php │ ├── Create_UnityConnection_Mailbox_Event.php │ ├── Update_Cucm_CallForward_To_Teams_Event.php │ ├── Update_IDM_PhoneNumber_Event.php │ └── Update_Teams_User_For_Voice_Event.php ├── Exceptions │ └── Handler.php ├── GatewayCalls.php ├── Gizmo │ └── RestApiClient.php ├── Http │ ├── Controllers │ │ ├── Auth │ │ │ ├── AuthController.php │ │ │ ├── ForgotPasswordController.php │ │ │ ├── LoginController.php │ │ │ ├── RegisterController.php │ │ │ └── ResetPasswordController.php │ │ ├── BouncerPermissionsController.php │ │ ├── Callcontroller.php │ │ ├── Controller.php │ │ ├── Cucm.php │ │ ├── CucmCdrCmrController.php │ │ ├── CucmCtiRoutePoint.php │ │ ├── CucmLine.php │ │ ├── CucmPhoneStatsController.php │ │ ├── CucmRealTimeController.php │ │ ├── CucmReportsController.php │ │ ├── CucmSiteMigration.php │ │ ├── CucmUser.php │ │ ├── Cucmphone.php │ │ ├── Cucmsite.php │ │ ├── Cupicontroller.php │ │ ├── Didcontroller.php │ │ ├── GatewayCallsController.php │ │ ├── GizmoController.php │ │ ├── Ldap.php │ │ ├── LogController.php │ │ ├── PhoneMACDController.php │ │ ├── PingController.php │ │ ├── ReportsController.php │ │ ├── SiteMigrationController.php │ │ ├── SitePlanController.php │ │ ├── Sonus5kCDRcontroller.php │ │ ├── Sonus5kcontroller.php │ │ ├── TeamsReportsController.php │ │ ├── TelecomInfrastructureController.php │ │ ├── West911EnableEGWController.php │ │ └── tmp │ │ │ └── test │ ├── Kernel.php │ └── Middleware │ │ ├── EncryptCookies.php │ │ ├── RedirectIfAuthenticated.php │ │ └── VerifyCsrfToken.php ├── Listeners │ ├── Create_AD_IPPhone_Listener.php │ ├── Create_Cucm_Local_EndUser_Listener.php │ ├── Create_Line_Listener.php │ ├── Create_Phone_Listener.php │ ├── Create_UnityConnection_LDAP_Import_Mailbox_Listener.php │ ├── Create_UnityConnection_Mailbox_Listener.php │ ├── Update_Cucm_CallForward_To_Teams_Listener.php │ ├── Update_IDM_PhoneNumber_Listener.php │ └── Update_Teams_User_For_Voice_Listener.php ├── Phone.php ├── PhoneMACD.php ├── Phoneplan.php ├── Ping.php ├── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── BroadcastServiceProvider.php │ ├── EventServiceProvider.php │ └── RouteServiceProvider.php ├── Reports.php ├── SAP │ └── IDM │ │ └── RestApiClient.php ├── Site.php ├── SiteMigration.php ├── Sonus5k.php ├── Sonus5kCDR.php ├── TelecomInfrastructure.php ├── Uccx.php ├── UccxFinesseAgent.php ├── User.php └── West911EnableEGW.php ├── artisan ├── bootstrap ├── app.php ├── autoload.php └── cache │ └── .gitignore ├── composer.json ├── config ├── api.php ├── app.php ├── auditing.php ├── auth.php ├── broadcasting.php ├── cache.php ├── compile.php ├── database.php ├── filesystems.php ├── jwt.php ├── l5-swagger.php ├── laravel-backup.php ├── mail.php ├── queue.php ├── services.php ├── session.php └── view.php ├── crontab_setup.sh ├── database ├── .gitignore ├── factories │ └── ModelFactory.php ├── migrations │ ├── .gitkeep │ ├── 2014_10_12_000000_create_users_table.php │ ├── 2016_08_11_204855_create_phone_numbers_table.php │ ├── 2016_10_24_191759_create_audits_table.php │ ├── 2016_12_09_213102_create_site_planning.php │ ├── 2017_01_29_021517_create_sbc_call_history_table.php │ ├── 2017_03_19_135249_create_cucm_configs.php │ ├── 2017_03_24_005009_create_activity_log_table.php │ ├── 2017_05_09_201655_Sonus5kCDRs.php │ ├── 2017_05_23_153612_create_telecom_infrastructure_table.php │ ├── 2017_06_13_135455_site_migration.php │ ├── 2017_07_31_212422_create_jobs_table.php │ ├── 2017_08_02_215812_create_failed_jobs_table.php │ ├── 2017_08_04_135256_create_phone_mac_table.php │ ├── 2017_10_18_133042_create_gateway_calls_table.php │ ├── 2017_10_20_143728_AddIndexes.php │ ├── 2018_01_10_214424_create_CucmCDRs_table.php │ ├── 2018_01_15_145358_create_CucmCMRs_table.php │ ├── 2019_04_17_151141_add_phoneplan_to_phone_mac_table.php │ ├── 2019_09_13_200110_create_bouncer_tables.php │ ├── 2019_09_13_200111_abilities_extend_entityid.php │ ├── 2019_12_21_150746_add_last_registered_field_to_cucmphone_table.php │ ├── 2020_03_15_221404_create_cucm_phone_stats_table.php │ └── 2020_03_16_020525_create_reports_table.php └── seeds │ ├── .gitkeep │ ├── DatabaseSeeder.php │ └── DidblockSeeder.php ├── etc ├── haproxy │ └── haproxy.cfg.example └── supervisor │ └── conf.d │ ├── .gitignore │ └── telecom-laravel-macd-worker.conf.example ├── grab-cucm-phoneconfigs.sh.example ├── grab-cucm-siteconfigs.sh.example ├── grab-sonus-configs.sh.example ├── gulpfile.js ├── package.json ├── phpunit.xml ├── public ├── .htaccess ├── admin │ ├── .gitignore │ ├── admin │ │ ├── admin.controller.js │ │ └── admin.html │ ├── app-content │ │ ├── app.css │ │ ├── google.analytics.js │ │ └── navbar.html │ ├── app-services │ │ ├── authentication.service.js │ │ ├── companycontent.service.js │ │ ├── log.service.js │ │ ├── page.service.js │ │ ├── permissions.service.js │ │ └── user.service.js │ ├── app.js │ ├── bower.json │ ├── home │ │ ├── accessdenied.controller.js │ │ ├── accessdenied.html │ │ ├── home.controller.js │ │ └── home.html │ ├── index.html │ ├── login │ │ ├── login.controller.js │ │ └── login.html │ ├── logout │ │ ├── logout.controller.js │ │ └── logout.html │ ├── permissions │ │ ├── users.permissions.controller.js │ │ └── users.permissions.html │ └── reports │ │ ├── 24hr.pagelogs.controller.js │ │ ├── 24hr.pagelogs.html │ │ ├── attemptsummary.graph.controller.js │ │ ├── attemptsummary.graph.html │ │ └── reports.home.html ├── css │ └── app.css ├── favicon.ico ├── index.php ├── js │ └── app.js ├── oncall │ ├── .gitignore │ ├── app-content │ │ ├── app.css │ │ ├── google.analytics.js │ │ └── navbar.html │ ├── app-services │ │ ├── authentication.service.js │ │ ├── companycontent.service.js │ │ ├── cucmoncall.service.js │ │ ├── ldap.service.js │ │ ├── page.service.js │ │ ├── teams.service.js │ │ └── user.service.js │ ├── app.js │ ├── bower.json │ ├── home │ │ ├── accessdenied.controller.js │ │ ├── accessdenied.html │ │ ├── home.controller.js │ │ └── home.html │ ├── index.html │ ├── login │ │ ├── login.controller.js │ │ └── login.html │ ├── logout │ │ ├── logout.controller.js │ │ └── logout.html │ ├── ng-bootstrap-submenu-master │ │ ├── .gitignore │ │ ├── .jshintignore │ │ ├── Code │ │ ├── LICENSE │ │ ├── README.md │ │ ├── dist │ │ │ ├── ng-bootstrap-submenu.css │ │ │ ├── ng-bootstrap-submenu.css.map │ │ │ ├── ng-bootstrap-submenu.js │ │ │ ├── ng-bootstrap-submenu.min.css │ │ │ ├── ng-bootstrap-submenu.min.css.map │ │ │ └── ng-bootstrap-submenu.min.js │ │ ├── example.html │ │ ├── gulpfile.js │ │ ├── lib │ │ │ └── bootstrap-submenu-2.0.1-dist │ │ │ │ ├── css │ │ │ │ ├── bootstrap-submenu.css │ │ │ │ ├── bootstrap-submenu.css.map │ │ │ │ ├── bootstrap-submenu.min.css │ │ │ │ └── bootstrap-submenu.min.css.map │ │ │ │ └── js │ │ │ │ ├── bootstrap-submenu.js │ │ │ │ └── bootstrap-submenu.min.js │ │ ├── package.json │ │ └── src │ │ │ ├── bootstrapSubmenu.html │ │ │ ├── bootstrapSubmenu.js │ │ │ ├── bootstrapSubmenuController.js │ │ │ ├── bootstrapSubmenuDirective.js │ │ │ └── submenuTrigger.js │ ├── oncall-report │ │ ├── oncall-report.controller.js │ │ └── oncall-report.html │ └── oncall │ │ ├── oncall.controller.js │ │ └── oncall.html ├── phptools │ ├── index.php │ ├── phpinfo.php │ ├── random.php │ ├── trandom.php │ └── xmlparse.php ├── robots.txt ├── ui │ ├── .gitignore │ ├── admin │ │ ├── admin.controller.js │ │ └── admin.html │ ├── app-content │ │ ├── app.css │ │ ├── google.analytics.js │ │ └── navbar.html │ ├── app-directives │ │ ├── addonmodule_form.html │ │ ├── blf_form.html │ │ ├── customDirectives.js │ │ ├── line_form.html │ │ ├── sitepopover.html │ │ └── speeddial_form.html │ ├── app-services │ │ ├── authentication.service.js │ │ ├── calls.service.js │ │ ├── companycontent.service.js │ │ ├── cucm.cdr.service.js │ │ ├── cucm.service.js │ │ ├── cucmreport.service.js │ │ ├── cupi.service.js │ │ ├── gizmo.service.js │ │ ├── ldap.service.js │ │ ├── macd.service.js │ │ ├── page.service.js │ │ ├── ping.monitoring.service.js │ │ ├── site.migration.service.js │ │ ├── site.phoneplan.service.js │ │ ├── site.service.js │ │ ├── sonus.cdr.service.js │ │ ├── sonus.service.js │ │ ├── teamsreport.service.js │ │ ├── telecom.infrastructure.service.js │ │ ├── telephony.service.js │ │ ├── user.service.js │ │ └── west911enable.service.js │ ├── app.js │ ├── bower.json │ ├── calls │ │ ├── 1day_calls.graph.html │ │ ├── 1day_gatewaycalls.graph.html │ │ ├── 7day_calls.graph.html │ │ ├── 7day_gatewaycalls.graph.html │ │ ├── calls.graph.controller.js │ │ └── calls.graph.html │ ├── config-repo │ │ ├── configrepo.controller.js │ │ └── configrepo.html │ ├── cucm-cdrs │ │ ├── cucm.cdr.todays-pkt-loss-report.html │ │ └── cucm.cdr.todays-pkt-loss-report.js │ ├── cucm-phone-manager │ │ ├── create_phone.html │ │ ├── create_phone_plan.html │ │ ├── includes │ │ │ ├── include-create_phone-form-summary.html │ │ │ ├── include-extension-mailbox-found.html │ │ │ ├── include-line-teams-view.html │ │ │ ├── include-line-view.html │ │ │ ├── include-linefound-table.html │ │ │ ├── include-macd-result-modal.html │ │ │ ├── include-phone-table.html │ │ │ ├── include-phone-view.html │ │ │ ├── include-phonefound.html │ │ │ ├── include-user-mailbox-found.html │ │ │ └── include_macd_summary.html │ │ ├── linemanager.controller.js │ │ ├── linemanager.html │ │ ├── macd-job-summary.controller.js │ │ ├── macd-job-summary.html │ │ ├── macd-reports │ │ │ ├── macd-report.controller.js │ │ │ ├── macd-report.html │ │ │ ├── my-macd-weekly-report.controller.js │ │ │ └── my-macd-weekly-report.html │ │ ├── phonemanager-create.controller.js │ │ ├── phonemanager-phone-search.html │ │ ├── phonemanager-phone-search.js │ │ ├── phonemanager-plan.controller.js │ │ ├── phonemanager.controller.js │ │ └── phonemanager.html │ ├── didblock │ │ ├── bulkdidblock.controller.js │ │ ├── bulkdidblock.html │ │ ├── createdidblock.html │ │ ├── didblock.controller.js │ │ ├── didblock.html │ │ ├── getdidblock.controller.js │ │ ├── getdidblock.html │ │ └── usage │ │ │ ├── checkdidblockusage.controller.js │ │ │ ├── checkdidblockusage.html │ │ │ ├── checkdidusage.controller.js │ │ │ └── checkdidusage.html │ ├── erl-status-reports │ │ ├── get-erl-report.controller.js │ │ └── get-erl-report.html │ ├── home │ │ ├── accessdenied.controller.js │ │ ├── accessdenied.html │ │ ├── home.controller.js │ │ ├── home.html │ │ ├── maintenance.controller.js │ │ └── maintenance.html │ ├── index.html │ ├── login │ │ ├── login.controller.js │ │ └── login.html │ ├── logout │ │ ├── logout.controller.js │ │ └── logout.html │ ├── reports │ │ ├── erl-report.controller.js │ │ ├── erl-report.html │ │ ├── linecleanup-report.controller.js │ │ ├── linecleanup-report.html │ │ ├── reports.home.html │ │ ├── site-trunking-911-report.controller.js │ │ ├── site-trunking-911-report.html │ │ └── teams │ │ │ ├── teams-user-report.controller.js │ │ │ └── teams-user-report.html │ ├── site-migrations │ │ └── migrations │ │ │ ├── create_site_migration.html │ │ │ ├── edit_site.migration.controller.js │ │ │ ├── edit_site_migration.html │ │ │ ├── section-includes │ │ │ ├── include-migration-changes-accordian.html │ │ │ ├── include-migration-currentSummary-panel.html │ │ │ ├── include-migration-modal.html │ │ │ ├── include-phone-line-update-modal.html │ │ │ ├── include-sitemigrations.html │ │ │ └── include_site_migration_summary.html │ │ │ ├── site_migration_summary.controller.js │ │ │ ├── site_migration_summary.html │ │ │ ├── site_migrations.controller.js │ │ │ └── site_migrations.html │ ├── site-status-reports │ │ ├── getsite.objects.controller.js │ │ ├── getsite.objects.html │ │ └── section-includes │ │ │ ├── include-site-phones.html │ │ │ ├── include-site-summary.html │ │ │ └── include-systemprovisioning.html │ ├── siteplanning │ │ ├── createsite.html │ │ ├── editsite.html │ │ ├── getsite.controller.js │ │ ├── getsite.html │ │ ├── phoneplans │ │ │ ├── createphone.html │ │ │ ├── createphoneplan.html │ │ │ ├── getphoneplan.controller.js │ │ │ ├── getphoneplan.html │ │ │ ├── importphones.controller.js │ │ │ ├── importphones.html │ │ │ └── phoneplan-includes │ │ │ │ ├── mailbox-deploy-modal.html │ │ │ │ ├── phone-deploy-modal.html │ │ │ │ ├── phoneplan-details-table.html │ │ │ │ ├── phoneplan-phonetable-panel.html │ │ │ │ ├── phoneplan-system-provisioning-aduserlookuptable.html │ │ │ │ ├── phoneplan-system-provisioning-cucmphonesfoundtable.html │ │ │ │ ├── phoneplan-system-provisioning-cupiuserssfoundtable.html │ │ │ │ ├── phoneplan-system-provisioning-macd-jobs.html │ │ │ │ ├── phoneplan-system-provisioning-panel.html │ │ │ │ └── phoneplan-system-provisioning-useradupdatestable.html │ │ ├── section-includes │ │ │ ├── include-phoneplanning.html │ │ │ ├── include-sitedetails.html │ │ │ └── include-systemprovisioning.html │ │ ├── site.controller.js │ │ ├── site.html │ │ └── sitepopover.html.old │ ├── sonus-cdrs │ │ ├── attemptsummary.graph.controller.js │ │ ├── attemptsummary.graph.html │ │ ├── pktloss.summary.graph.controller.js │ │ ├── pktloss.summary.graph.html │ │ ├── sonus.today.pktloss.cdr.controller.js │ │ ├── sonus.today.pktloss.cdr.html │ │ ├── sonus.todays.attempts.cdr.controller.js │ │ └── sonus.todays.attempts.cdr.html │ ├── sonus │ │ ├── sonus.activealarms.controller.js │ │ ├── sonus.activealarms.html │ │ ├── sonus.activecalldetails.controller.js │ │ ├── sonus.activecalldetails.html │ │ ├── sonus.activecalls.controller.js │ │ ├── sonus.activecalls.html │ │ └── sonus.splashpage.html │ ├── telecom-infrastructure │ │ ├── createdevice.html │ │ ├── editdevice.html │ │ ├── infrastructure.controller.js │ │ └── infrastructure.html │ └── templates │ │ └── table.controller.js └── web.config ├── readme.md ├── resources ├── assets │ ├── js │ │ ├── app.js │ │ ├── bootstrap.js │ │ └── components │ │ │ └── Example.vue │ └── sass │ │ ├── _variables.scss │ │ └── app.scss ├── lang │ └── en │ │ ├── auth.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ └── validation.php └── views │ ├── cucmloopalarm.blade.php │ ├── email.blade.php │ ├── errors │ └── 503.blade.php │ ├── sonusalarm.blade.php │ ├── sonuscdralarm.blade.php │ ├── uccxfinessemonitoralarm.blade.php │ ├── uccxmonioralarm.blade.php │ ├── vendor │ ├── .gitkeep │ └── l5-swagger │ │ ├── .gitkeep │ │ └── index.blade.php │ └── welcome.blade.php ├── routes ├── Kernel.php ├── api.auth.php ├── api.bouncer.permissions.php ├── api.calls.php ├── api.cucm.cdrs.php ├── api.cucm.ctiroutepoint.php ├── api.cucm.gatewaycalls.php ├── api.cucm.line.php ├── api.cucm.phone.php ├── api.cucm.php ├── api.cucm.ris.php ├── api.cucm.site.migration.php ├── api.cucm.site.php ├── api.cucm.user.php ├── api.cucmreports.php ├── api.cupi.php ├── api.did.php ├── api.egw.php ├── api.gizmo.teams.php ├── api.ldap.php ├── api.migration.site.php ├── api.page.php ├── api.phonemacd.php ├── api.php ├── api.ping.php ├── api.planning.site.phoneplan.php ├── api.planning.site.phones.php ├── api.planning.site.php ├── api.reports.php ├── api.sonus5k.cdrs.php ├── api.sonus5k.php ├── api.teams.reports.php ├── api.telecom.infrastructure.php ├── console.php └── web.php ├── server.php ├── storage ├── api-docs │ └── api-docs.json ├── app │ ├── .gitignore │ └── public │ │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore ├── store-sonus-active-calls-to-cache.sh.example ├── supervisor_setup.sh ├── testSsh.php └── tests ├── DidblockTest.data ├── DidblockTest.php ├── ExampleTest.php ├── TestCase.php ├── UserTest.php ├── updateDidblockTest.data └── updateDidblockTest.php /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.css linguist-vendored 3 | *.scss linguist-vendored 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | /node_modules 3 | /public/storage 4 | /public/vendor 5 | /public/coverage 6 | /archive 7 | #/public/ui 8 | /public/angular_jwt_base 9 | /public/telephony-ui 10 | /public/old 11 | /public/test 12 | 13 | public/ui/app-content/images/ 14 | public/ui/company-content/ 15 | public/ui/bower_components 16 | 17 | public/oncall/app-content/images/ 18 | public/oncall/company-content/ 19 | public/oncall/bower_components 20 | 21 | public/admin/app-content/images/ 22 | public/admin/company-content/ 23 | public/admin/bower_components 24 | 25 | Homestead.yaml 26 | Homestead.json 27 | .env 28 | composer.lock 29 | tinker_group_ablity_assignments.txt 30 | 31 | 32 | tests/ImportBlockData.csv 33 | tests/ImportBlockTest.php 34 | tests/ImportBlockData.csv.old 35 | 36 | 37 | database/seeds/ImportDIDListSeeder.php 38 | 39 | app/Console/Commands/CallManager/Imports/ 40 | 41 | storage/axl/ 42 | storage/sonus/ 43 | storage/cucm/ 44 | storage/numbers/ 45 | grab-sonus-configs.sh 46 | grab-cucm-siteconfigs.sh 47 | grab-cucm-phoneconfigs.sh 48 | store-sonus-active-calls-to-cache.sh 49 | 50 | etc/*.pem 51 | etc/haproxy/haproxy.cfg 52 | etc/nginx.conf 53 | etc/dnssuffix_search 54 | -------------------------------------------------------------------------------- /.styleci.yml: -------------------------------------------------------------------------------- 1 | preset: laravel 2 | 3 | #linting: true 4 | 5 | enabled: 6 | - align_double_arrow 7 | - new_with_braces 8 | 9 | disabled: 10 | - no_unused_imports 11 | -------------------------------------------------------------------------------- /app/Calls.php: -------------------------------------------------------------------------------- 1 | 'array', 18 | ]; 19 | 20 | //protected $dateFormat = 'U'; 21 | } 22 | -------------------------------------------------------------------------------- /app/Console/Commands/CallManager/AddPhones.php: -------------------------------------------------------------------------------- 1 | cucmphone = new Cucmphone(); 33 | parent::__construct(); 34 | } 35 | 36 | /** 37 | * Execute the console command. 38 | * 39 | * @return mixed 40 | */ 41 | public $site = 'CENCONER'; 42 | public $extlength = 4; 43 | 44 | public function handle() 45 | { 46 | // Include the phones.php $phones variable to import phones. 47 | require __DIR__.'/Imports/Phones.txt'; 48 | //print $phones; 49 | 50 | $phones = $this->cucmphone->phones_string_to_array($phones); 51 | 52 | $PHONE = []; 53 | foreach ($phones as $phone) { 54 | //$phone['sitecode'] = $this->site; 55 | $phone['sitecode'] = $site; 56 | 57 | //$phone['extlength'] = $this->extlength; 58 | $phone['extlength'] = $extlength; 59 | $PHONES[] = $phone; 60 | } 61 | //print_r($PHONES); 62 | 63 | $ARRAY = []; 64 | foreach ($PHONES as $PHONE) { 65 | echo 'Adding Phone...'.PHP_EOL; 66 | print_r($PHONE); 67 | $REQUEST = $this->cucmphone->createPhone(new \Illuminate\Http\Request($PHONE)); 68 | $RESULT = $REQUEST; 69 | print_r($RESULT); 70 | $ARRAY[] = $REQUEST; 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /app/Console/Commands/CallManager/CucmPhoneNamesCache.php: -------------------------------------------------------------------------------- 1 | cucm = new \Iahunter\CallmanagerAXL\Callmanager(env('CALLMANAGER_URL'), 34 | storage_path(env('CALLMANAGER_WSDL')), 35 | env('CALLMANAGER_USER'), 36 | env('CALLMANAGER_PASS') 37 | ); 38 | 39 | parent::__construct(); 40 | } 41 | 42 | /** 43 | * Execute the console command. 44 | * 45 | * @return mixed 46 | */ 47 | public function handle() 48 | { 49 | try { 50 | $CUCM_PHONES = $this->cucm->get_phone_names(); 51 | } catch (\Exception $E) { 52 | return $E->getMessage(); 53 | } 54 | 55 | foreach ($CUCM_PHONES as $UUID => $PHONE) { 56 | $CUCM_PHONES[$UUID] = strtoupper($PHONE); 57 | } 58 | 59 | // Name of Cache key. 60 | $key = 'callmanager:phone_names_cache'; 61 | 62 | // Cache Names for 5 seconds - Put the $CALLS as value of cache. 63 | print_r($CUCM_PHONES); 64 | $time = Carbon::now()->addSeconds(300); 65 | Cache::put($key, $CUCM_PHONES, $time); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /app/Console/Commands/CallManager/CucmPhoneSiteMove.php: -------------------------------------------------------------------------------- 1 | argument('site'); 44 | 45 | echo 'Moving Phones to: '.$site.PHP_EOL; 46 | 47 | /* 48 | Examples: 49 | SEP0004ABCDEEEE 50 | SEP0004ABCDEEEF 51 | */ 52 | 53 | $data = file_get_contents(storage_path('cucm/working/working_file')); 54 | $phones = explode(PHP_EOL, $data); 55 | 56 | $phones = array_filter($phones); 57 | 58 | foreach ($phones as $phone) { 59 | $phone = trim($phone); 60 | 61 | try { 62 | $result = Cucmclass::updatePhoneSite($phone, $site); 63 | print_r($result); 64 | } catch (\Exception $E) { 65 | echo "{$E->getMessage()}".PHP_EOL; 66 | } 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /app/Console/Commands/CallManager/CucmSIPPhoneReport.php: -------------------------------------------------------------------------------- 1 | cucm = new \Iahunter\CallmanagerAXL\Callmanager(env('CALLMANAGER_URL'), 35 | storage_path(env('CALLMANAGER_WSDL')), 36 | env('CALLMANAGER_USER'), 37 | env('CALLMANAGER_PASS') 38 | ); 39 | 40 | parent::__construct(); 41 | } 42 | 43 | /** 44 | * Execute the console command. 45 | * 46 | * @return mixed 47 | */ 48 | public function handle() 49 | { 50 | $search = '%sip%'; 51 | 52 | $count = Cucmphoneconfigs::where('model', 'LIKE', $search)->count(); 53 | //print $count; 54 | if ($count) { 55 | $phones = Cucmphoneconfigs::where('model', 'LIKE', $search)->get(); 56 | 57 | //print_r($phones); 58 | 59 | foreach ($phones as $phone) { 60 | echo $phone['name'].','.$phone['ownerid'].','.$phone['config']['digestUser'].','.$phone['description'].','.$phone['devicepool'].','.$phone['model'].PHP_EOL; 61 | } 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /app/Console/Commands/CallManager/Ldapsync.php: -------------------------------------------------------------------------------- 1 | cucm = new \Iahunter\CallmanagerAXL\Callmanager(env('CALLMANAGER_URL'), 32 | storage_path(env('CALLMANAGER_WSDL')), 33 | env('CALLMANAGER_USER'), 34 | env('CALLMANAGER_PASS') 35 | ); 36 | 37 | parent::__construct(); 38 | } 39 | 40 | /** 41 | * Execute the console command. 42 | * 43 | * @return mixed 44 | */ 45 | public function handle() 46 | { 47 | try { 48 | $ldapsync = $this->cucm->do_ldap_sync(env('CALLMANAGER_LDAP_NAME'), 'true'); 49 | 50 | echo $ldapsync->return.PHP_EOL; 51 | } catch (\Exception $e) { 52 | echo 'Callmanager blew uP: '.$e->getMessage().PHP_EOL; 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /app/Console/Commands/Inspire.php: -------------------------------------------------------------------------------- 1 | comment(PHP_EOL.Inspiring::quote().PHP_EOL); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Console/Commands/Ldap/GetLdapUser.php: -------------------------------------------------------------------------------- 1 | Auth = new AuthController(); 43 | 44 | $USERNAME = $this->argument('username'); 45 | $LOG = $this->Auth->getLdapUserByName($USERNAME); 46 | 47 | print_r($LOG); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/Console/Commands/Ldap/TestLdapPhoneUpdate.php: -------------------------------------------------------------------------------- 1 | Auth = new AuthController(); 43 | 44 | $USERNAME = $this->argument('username'); 45 | $DN = $this->argument('number'); 46 | $LOG = $this->Auth->changeLdapPhone($USERNAME, $DN); 47 | 48 | print_r($LOG); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /app/Console/Commands/MACD/GetMacdReports.php: -------------------------------------------------------------------------------- 1 | $group) { 47 | echo 'starting'.PHP_EOL; 48 | $a = new \App\Http\Controllers\CucmLine(); 49 | 50 | echo $number.PHP_EOL; 51 | $line = $a->cucm->get_object_type_by_pattern_and_partition($number, 'Global-All-Lines', 'Line'); 52 | $line_instance = new Cucmclass(); 53 | $line_instance->uuid = strtolower($line['uuid']); 54 | echo $line_instance->uuid; 55 | echo PHP_EOL; 56 | $line_instance->exists = true; 57 | $line_instance->getKey(); 58 | echo $group.PHP_EOL; 59 | \Bouncer::allow($group)->to('read', $line_instance); 60 | \Bouncer::allow($group)->to('update', $line_instance); 61 | echo 'done'.PHP_EOL; 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /app/CucmPhoneStats.php: -------------------------------------------------------------------------------- 1 | 'array', 14 | 'json' => 'array', 15 | ]; 16 | 17 | protected $attributes = [ 18 | 'json' => '{}', 19 | ]; 20 | } 21 | -------------------------------------------------------------------------------- /app/Cucmsiteconfigs.php: -------------------------------------------------------------------------------- 1 | 'array', 19 | 'sitedetails' => 'array', 20 | ]; 21 | 22 | protected static function boot() 23 | { 24 | parent::boot(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/DeletedItems.php: -------------------------------------------------------------------------------- 1 | phone = $data['phone']; 27 | $this->taskid = $data['taskid']; 28 | } 29 | 30 | /** 31 | * Get the channels the event should broadcast on. 32 | * 33 | * @return Channel|array 34 | */ 35 | public function broadcastOn() 36 | { 37 | return new PrivateChannel('channel-name'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Events/Create_Cucm_Local_EndUser_Event.php: -------------------------------------------------------------------------------- 1 | phone = $data['phone']; 27 | $this->taskid = $data['taskid']; 28 | } 29 | 30 | /** 31 | * Get the channels the event should broadcast on. 32 | * 33 | * @return Channel|array 34 | */ 35 | public function broadcastOn() 36 | { 37 | return new PrivateChannel('channel-name'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Events/Create_Line_Event.php: -------------------------------------------------------------------------------- 1 | phone = $data['phone']; 27 | $this->taskid = $data['taskid']; 28 | } 29 | 30 | /** 31 | * Get the channels the event should broadcast on. 32 | * 33 | * @return Channel|array 34 | */ 35 | public function broadcastOn() 36 | { 37 | return new PrivateChannel('channel-name'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Events/Create_Phone_Event.php: -------------------------------------------------------------------------------- 1 | phone = $data['phone']; 27 | $this->taskid = $data['taskid']; 28 | } 29 | 30 | /** 31 | * Get the channels the event should broadcast on. 32 | * 33 | * @return Channel|array 34 | */ 35 | public function broadcastOn() 36 | { 37 | return new PrivateChannel('channel-name'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Events/Create_UnityConnection_LDAP_Import_Mailbox_Event.php: -------------------------------------------------------------------------------- 1 | phone = $data['phone']; 27 | $this->taskid = $data['taskid']; 28 | } 29 | 30 | /** 31 | * Get the channels the event should broadcast on. 32 | * 33 | * @return Channel|array 34 | */ 35 | public function broadcastOn() 36 | { 37 | return new PrivateChannel('channel-name'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Events/Create_UnityConnection_Mailbox_Event.php: -------------------------------------------------------------------------------- 1 | phone = $data['phone']; 27 | $this->taskid = $data['taskid']; 28 | } 29 | 30 | /** 31 | * Get the channels the event should broadcast on. 32 | * 33 | * @return Channel|array 34 | */ 35 | public function broadcastOn() 36 | { 37 | return new PrivateChannel('channel-name'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Events/Update_Cucm_CallForward_To_Teams_Event.php: -------------------------------------------------------------------------------- 1 | phone = $data['phone']; 27 | $this->taskid = $data['taskid']; 28 | } 29 | 30 | /** 31 | * Get the channels the event should broadcast on. 32 | * 33 | * @return Channel|array 34 | */ 35 | public function broadcastOn() 36 | { 37 | return new PrivateChannel('channel-name'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Events/Update_IDM_PhoneNumber_Event.php: -------------------------------------------------------------------------------- 1 | phone = $data['phone']; 27 | $this->taskid = $data['taskid']; 28 | } 29 | 30 | /** 31 | * Get the channels the event should broadcast on. 32 | * 33 | * @return Channel|array 34 | */ 35 | public function broadcastOn() 36 | { 37 | return new PrivateChannel('channel-name'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Events/Update_Teams_User_For_Voice_Event.php: -------------------------------------------------------------------------------- 1 | phone = $data['phone']; 27 | $this->taskid = $data['taskid']; 28 | } 29 | 30 | /** 31 | * Get the channels the event should broadcast on. 32 | * 33 | * @return Channel|array 34 | */ 35 | public function broadcastOn() 36 | { 37 | return new PrivateChannel('channel-name'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/GatewayCalls.php: -------------------------------------------------------------------------------- 1 | 'array', 14 | ]; 15 | } 16 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/ForgotPasswordController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/LoginController.php: -------------------------------------------------------------------------------- 1 | middleware('guest', ['except' => 'logout']); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/ResetPasswordController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Http/Controllers/Controller.php: -------------------------------------------------------------------------------- 1 | middleware('jwt.auth'); 18 | 19 | // Construct new cucm object 20 | $this->CucmRealTime = new CucmRealTime(); 21 | } 22 | 23 | public function get_phone_ip(Request $request) 24 | { 25 | // First test for RIS API. Used to get IP for the Phone. 26 | 27 | $user = JWTAuth::parseToken()->authenticate(); 28 | // Check user permissions 29 | if (! $user->can('read', Cucmclass::class)) { 30 | abort(401, 'You are not authorized'); 31 | } 32 | 33 | // Get name from $request; 34 | $name = $request->name; 35 | 36 | $count = 0; 37 | 38 | // Search for name. 39 | $searchCriteria["SelectItem[$count]"]['Item'] = $name; 40 | 41 | $result = $this->CucmRealTime->getIPAddresses($searchCriteria); 42 | 43 | $response = [ 44 | 'status_code' => 200, 45 | 'success' => true, 46 | 'message' => '', 47 | 'response' => $result, 48 | ]; 49 | 50 | return response()->json($response); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/Http/Controllers/PingController.php: -------------------------------------------------------------------------------- 1 | authenticate(); 15 | // Check user permissions 16 | 17 | if (! $user->can('read', Ping::class)) { 18 | abort(401, 'You are not authorized'); 19 | } 20 | 21 | return Ping::pinghost($request->host); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Http/Controllers/TeamsReportsController.php: -------------------------------------------------------------------------------- 1 | middleware('jwt.auth'); 15 | } 16 | 17 | public function getAllTeamsVoiceUsers() 18 | { 19 | $teamsusers = DID::where('system_id', 'like', '%MicrosoftTeams%') 20 | ->get(); 21 | 22 | $response = [ 23 | 'status_code' => 200, 24 | 'success' => true, 25 | 'message' => '', 26 | 'response' => $teamsusers, 27 | ]; 28 | 29 | return response()->json($response); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Http/Controllers/tmp/test: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iahunter/PHP7-Telecom-Management/cfbe2e6fc669b7b4fb95ff2bb650b9a5c484a50a/app/Http/Controllers/tmp/test -------------------------------------------------------------------------------- /app/Http/Kernel.php: -------------------------------------------------------------------------------- 1 | [ 27 | \App\Http\Middleware\EncryptCookies::class, 28 | \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 29 | \Illuminate\Session\Middleware\StartSession::class, 30 | \Illuminate\View\Middleware\ShareErrorsFromSession::class, 31 | \App\Http\Middleware\VerifyCsrfToken::class, 32 | \Illuminate\Routing\Middleware\SubstituteBindings::class, 33 | ], 34 | 35 | 'api' => [ 36 | 'throttle:60,1', 37 | 'bindings', 38 | ], 39 | ]; 40 | 41 | /** 42 | * The application's route middleware. 43 | * 44 | * These middleware may be assigned to groups or used individually. 45 | * 46 | * @var array 47 | */ 48 | protected $routeMiddleware = [ 49 | 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 50 | 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 51 | 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 52 | 'can' => \Illuminate\Auth\Middleware\Authorize::class, 53 | 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 54 | 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 55 | ]; 56 | } 57 | -------------------------------------------------------------------------------- /app/Http/Middleware/EncryptCookies.php: -------------------------------------------------------------------------------- 1 | check()) { 22 | return redirect('/home'); 23 | } 24 | 25 | return $next($request); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Middleware/VerifyCsrfToken.php: -------------------------------------------------------------------------------- 1 | 'array', 20 | ]; 21 | 22 | protected static function boot() 23 | { 24 | parent::boot(); 25 | static::saving(function ($phone) { 26 | return $phone->validate(); 27 | }); 28 | } 29 | 30 | protected function validate() 31 | { 32 | // Check if exceeds max of 255 33 | if (strlen($this->name) > 255) { 34 | throw new \Exception('name exceeded 255 characters'); 35 | } 36 | // Check if exceeds max of 255 37 | if (strlen($this->comment) > 255) { 38 | throw new \Exception('status exceeded 255 characters'); 39 | } 40 | // Check if exceeds max of 255 41 | if (strlen($this->system_id) > 255) { 42 | throw new \Exception('system_id exceeded 255 characters'); 43 | } 44 | // Check if exceeds max of 255 45 | if (strlen($this->language) > 255) { 46 | throw new \Exception('status exceeded 255 characters'); 47 | } 48 | // Check if exceeds max of 255 49 | if ($this->language) { 50 | $this->language = strtolower($this->language); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/Phoneplan.php: -------------------------------------------------------------------------------- 1 | 'array', 20 | ]; 21 | 22 | protected static function boot() 23 | { 24 | parent::boot(); 25 | static::saving(function ($phoneplan) { 26 | return $phoneplan->validate(); 27 | }); 28 | 29 | // Cascade Soft Deletes Child Dids 30 | static::deleting(function ($phoneplan) { 31 | Phone::where('phoneplan', $phoneplan->id)->delete(); // query phone children of the and delete them. Much faster than foreach!!! 32 | }); 33 | } 34 | 35 | protected function validate() 36 | { 37 | // Check if exceeds max of 255 38 | if (strlen($this->name) > 255) { 39 | throw new \Exception('name exceeded 255 characters'); 40 | } 41 | // Check if exceeds max of 255 42 | if (strlen($this->description) > 255) { 43 | throw new \Exception('status exceeded 255 characters'); 44 | } 45 | // Check if exceeds max of 255 46 | if (strlen($this->system_id) > 255) { 47 | throw new \Exception('system_id exceeded 255 characters'); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /app/Ping.php: -------------------------------------------------------------------------------- 1 | ping(); 17 | 18 | if ($latency !== false) { 19 | $return = 'echo reply'; 20 | } else { 21 | $return = 'Request timed out.'; 22 | } 23 | 24 | return [ 25 | 'result' => $return, 26 | 'latency' => $latency, 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | connectionName 22 | // $event->job 23 | // $event->exception 24 | 25 | \Log::info('failedjob', ['log' => $event]); 26 | 27 | /* 28 | // Get the Task ID 29 | if ($event->taskid) { 30 | $task = PhoneMACD::find($event->taskid); 31 | $task->fill(['updated_by' => 'Telecom Management Server', 'status' => 'failed', 'json' => $event->exception]); 32 | $task->save(); 33 | } 34 | */ 35 | }); 36 | } 37 | 38 | /** 39 | * Register any application services. 40 | * 41 | * @return void 42 | */ 43 | public function register() 44 | { 45 | // 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/Providers/AuthServiceProvider.php: -------------------------------------------------------------------------------- 1 | 'App\Policies\ModelPolicy', 16 | ]; 17 | 18 | /** 19 | * Register any authentication / authorization services. 20 | * 21 | * @return void 22 | */ 23 | public function boot() 24 | { 25 | $this->registerPolicies(); 26 | 27 | // 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/Providers/BroadcastServiceProvider.php: -------------------------------------------------------------------------------- 1 | id === (int) $userId; 24 | }); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Providers/EventServiceProvider.php: -------------------------------------------------------------------------------- 1 | [ 17 | 'App\Listeners\Create_AD_IPPhone_Listener', 18 | ], 19 | 'App\Events\Update_IDM_PhoneNumber_Event' => [ 20 | 'App\Listeners\Update_IDM_PhoneNumber_Listener', 21 | ], 22 | 'App\Events\Create_Cucm_Local_EndUser_Event' => [ 23 | 'App\Listeners\Create_Cucm_Local_EndUser_Listener', 24 | ], 25 | 'App\Events\Create_Line_Event' => [ 26 | 'App\Listeners\Create_Line_Listener', 27 | ], 28 | 'App\Events\Create_Phone_Event' => [ 29 | 'App\Listeners\Create_Phone_Listener', 30 | ], 31 | 'App\Events\Create_UnityConnection_Mailbox_Event' => [ 32 | 'App\Listeners\Create_UnityConnection_Mailbox_Listener', 33 | ], 34 | 'App\Events\Create_UnityConnection_LDAP_Import_Mailbox_Event' => [ 35 | 'App\Listeners\Create_UnityConnection_LDAP_Import_Mailbox_Listener', 36 | ], 37 | 'App\Events\Update_Teams_User_For_Voice_Event' => [ 38 | 'App\Listeners\Update_Teams_User_For_Voice_Listener', 39 | ], 40 | 'App\Events\Update_Cucm_CallForward_To_Teams_Event' => [ 41 | 'App\Listeners\Update_Cucm_CallForward_To_Teams_Listener', 42 | ], 43 | 44 | ]; 45 | 46 | /** 47 | * Register any events for your application. 48 | * 49 | * @return void 50 | */ 51 | public function boot() 52 | { 53 | parent::boot(); 54 | 55 | // 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /app/Providers/RouteServiceProvider.php: -------------------------------------------------------------------------------- 1 | mapApiRoutes(); 39 | 40 | $this->mapWebRoutes(); 41 | 42 | // 43 | } 44 | 45 | /** 46 | * Define the "web" routes for the application. 47 | * 48 | * These routes all receive session state, CSRF protection, etc. 49 | * 50 | * @return void 51 | */ 52 | protected function mapWebRoutes() 53 | { 54 | Route::group([ 55 | 'middleware' => 'web', 56 | 'namespace' => $this->namespace, 57 | ], function ($router) { 58 | require base_path('routes/web.php'); 59 | }); 60 | } 61 | 62 | /** 63 | * Define the "api" routes for the application. 64 | * 65 | * These routes are typically stateless. 66 | * 67 | * @return void 68 | */ 69 | protected function mapApiRoutes() 70 | { 71 | Route::group([ 72 | 'middleware' => 'api', 73 | 'namespace' => $this->namespace, 74 | 'prefix' => 'api', 75 | ], function ($router) { 76 | require base_path('routes/api.php'); 77 | }); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /app/Reports.php: -------------------------------------------------------------------------------- 1 | 'array', 16 | 'json' => 'array', 17 | ]; 18 | 19 | protected $attributes = [ 20 | 'json' => '{}', 21 | ]; 22 | } 23 | -------------------------------------------------------------------------------- /app/SiteMigration.php: -------------------------------------------------------------------------------- 1 | 'array', 19 | 'backups' => 'array', 20 | ]; 21 | } 22 | -------------------------------------------------------------------------------- /app/TelecomInfrastructure.php: -------------------------------------------------------------------------------- 1 | 'array', 37 | 38 | ]; 39 | 40 | protected $attributes = [ 41 | 'json' => '{}', 42 | ]; 43 | } 44 | -------------------------------------------------------------------------------- /artisan: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | make(Illuminate\Contracts\Console\Kernel::class); 32 | 33 | $status = $kernel->handle( 34 | $input = new Symfony\Component\Console\Input\ArgvInput, 35 | new Symfony\Component\Console\Output\ConsoleOutput 36 | ); 37 | 38 | /* 39 | |-------------------------------------------------------------------------- 40 | | Shutdown The Application 41 | |-------------------------------------------------------------------------- 42 | | 43 | | Once Artisan has finished running. We will fire off the shutdown events 44 | | so that any final work may be done by the application before we shut 45 | | down the process. This is the last thing to happen to the request. 46 | | 47 | */ 48 | 49 | $kernel->terminate($input, $status); 50 | 51 | exit($status); 52 | -------------------------------------------------------------------------------- /bootstrap/app.php: -------------------------------------------------------------------------------- 1 | singleton( 30 | Illuminate\Contracts\Http\Kernel::class, 31 | App\Http\Kernel::class 32 | ); 33 | 34 | $app->singleton( 35 | Illuminate\Contracts\Console\Kernel::class, 36 | App\Console\Kernel::class 37 | ); 38 | 39 | $app->singleton( 40 | Illuminate\Contracts\Debug\ExceptionHandler::class, 41 | App\Exceptions\Handler::class 42 | ); 43 | 44 | /* 45 | |-------------------------------------------------------------------------- 46 | | Return The Application 47 | |-------------------------------------------------------------------------- 48 | | 49 | | This script returns the application instance. The instance is given to 50 | | the calling script so we can separate the building of the instances 51 | | from the actual running of the application and sending responses. 52 | | 53 | */ 54 | 55 | return $app; 56 | -------------------------------------------------------------------------------- /bootstrap/autoload.php: -------------------------------------------------------------------------------- 1 | env('BROADCAST_DRIVER', 'null'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Broadcast Connections 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may define all of the broadcast connections that will be used 26 | | to broadcast events to other systems or over websockets. Samples of 27 | | each available type of connection are provided inside this array. 28 | | 29 | */ 30 | 31 | 'connections' => [ 32 | 33 | 'pusher' => [ 34 | 'driver' => 'pusher', 35 | 'key' => env('PUSHER_KEY'), 36 | 'secret' => env('PUSHER_SECRET'), 37 | 'app_id' => env('PUSHER_APP_ID'), 38 | 'options' => [ 39 | // 40 | ], 41 | ], 42 | 43 | 'redis' => [ 44 | 'driver' => 'redis', 45 | 'connection' => 'default', 46 | ], 47 | 48 | 'log' => [ 49 | 'driver' => 'log', 50 | ], 51 | 52 | 'null' => [ 53 | 'driver' => 'null', 54 | ], 55 | 56 | ], 57 | 58 | ]; 59 | -------------------------------------------------------------------------------- /config/compile.php: -------------------------------------------------------------------------------- 1 | [ 17 | // 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Compiled File Providers 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may list service providers which define a "compiles" function 26 | | that returns additional files that should be compiled, providing an 27 | | easy way to get common files from any packages you are utilizing. 28 | | 29 | */ 30 | 31 | 'providers' => [ 32 | // 33 | ], 34 | 35 | ]; 36 | -------------------------------------------------------------------------------- /config/services.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'domain' => env('MAILGUN_DOMAIN'), 19 | 'secret' => env('MAILGUN_SECRET'), 20 | ], 21 | 22 | 'ses' => [ 23 | 'key' => env('SES_KEY'), 24 | 'secret' => env('SES_SECRET'), 25 | 'region' => 'us-east-1', 26 | ], 27 | 28 | 'sparkpost' => [ 29 | 'secret' => env('SPARKPOST_SECRET'), 30 | ], 31 | 32 | 'stripe' => [ 33 | 'model' => App\User::class, 34 | 'key' => env('STRIPE_KEY'), 35 | 'secret' => env('STRIPE_SECRET'), 36 | ], 37 | 38 | ]; 39 | -------------------------------------------------------------------------------- /config/view.php: -------------------------------------------------------------------------------- 1 | [ 17 | realpath(base_path('resources/views')), 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Compiled View Path 23 | |-------------------------------------------------------------------------- 24 | | 25 | | This option determines where all the compiled Blade templates will be 26 | | stored for your application. Typically, this is within the storage 27 | | directory. However, as usual, you are free to change this value. 28 | | 29 | */ 30 | 31 | 'compiled' => realpath(storage_path('framework/views')), 32 | 33 | ]; 34 | -------------------------------------------------------------------------------- /database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite 2 | -------------------------------------------------------------------------------- /database/factories/ModelFactory.php: -------------------------------------------------------------------------------- 1 | define(App\User::class, function (Faker\Generator $faker) { 15 | static $password; 16 | 17 | return [ 18 | 'name' => $faker->name, 19 | 'email' => $faker->unique()->safeEmail, 20 | 'password' => $password ?: $password = bcrypt('secret'), 21 | 'remember_token' => str_random(10), 22 | ]; 23 | }); 24 | -------------------------------------------------------------------------------- /database/migrations/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /database/migrations/2014_10_12_000000_create_users_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->string('username')->index(); 18 | $table->string('dn')->unique(); 19 | $table->string('samaccountname')->nullable(); 20 | $table->string('userprincipalname')->nullable()->index(); 21 | $table->string('password'); 22 | $table->rememberToken(); 23 | $table->timestamps(); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::drop('users'); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /database/migrations/2016_10_24_191759_create_audits_table.php: -------------------------------------------------------------------------------- 1 | uuid('id')->primary(); 17 | $table->string('type'); 18 | $table->morphs('auditable'); 19 | $table->text('old')->nullable(); 20 | $table->text('new')->nullable(); 21 | $table->string('user_id')->nullable(); 22 | //$table->string('route')->nullable(); 23 | $table->text('route')->nullable(); 24 | $table->ipAddress('ip_address', 45)->nullable(); 25 | $table->timestamp('created_at'); 26 | }); 27 | } 28 | 29 | /** 30 | * Reverse the migrations. 31 | * 32 | * @return void 33 | */ 34 | public function down() 35 | { 36 | Schema::dropIfExists('audits'); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /database/migrations/2017_01_29_021517_create_sbc_call_history_table.php: -------------------------------------------------------------------------------- 1 | timestamps(); // Time Stamps 19 | $table->increments('id'); 20 | $table->string('name')->nullable(); // SBC Name 21 | $table->integer('totalCalls'); // Calls 22 | $table->json('stats')->nullable(); // JSON Details Custom Field Data 23 | 24 | $table->softDeletes(); // Soft Deletes 25 | }); 26 | } 27 | 28 | /** 29 | * Reverse the migrations. 30 | * 31 | * @return void 32 | */ 33 | public function down() 34 | { 35 | Schema::drop('sbc_calls'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /database/migrations/2017_03_24_005009_create_activity_log_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 15 | $table->string('log_name')->nullable(); 16 | $table->string('description'); 17 | $table->integer('subject_id')->nullable(); 18 | $table->string('subject_type')->nullable(); 19 | $table->integer('causer_id')->nullable(); 20 | $table->string('causer_type')->nullable(); 21 | $table->text('properties')->nullable(); 22 | $table->timestamps(); 23 | 24 | $table->index('log_name'); 25 | }); 26 | } 27 | 28 | /** 29 | * Reverse the migrations. 30 | */ 31 | public function down() 32 | { 33 | Schema::drop('activity_log'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /database/migrations/2017_06_13_135455_site_migration.php: -------------------------------------------------------------------------------- 1 | increments('id'); 19 | $table->string('sitecode')->index(); 20 | $table->text('comment')->nullable(); // Comment 21 | $table->text('trunking')->nullable(); // Comment 22 | $table->text('e911')->nullable(); // Comment 23 | $table->text('srstip')->nullable(); // Comment 24 | $table->json('h323ip')->nullable(); 25 | $table->text('npa')->nullable(); // Comment 26 | $table->json('backups')->nullable(); // JSON Details Custom Field Data 27 | $table->string('created_by')->nullable(); // simple name to reference the account by 28 | $table->string('updated_by')->nullable(); // simple name to reference the account by 29 | $table->string('deleted_by')->nullable(); // simple name to reference the account by 30 | $table->timestamps(); // Time Stamps 31 | $table->softDeletes(); // Soft Deletes 32 | }); 33 | } 34 | 35 | /** 36 | * Reverse the migrations. 37 | * 38 | * @return void 39 | */ 40 | public function down() 41 | { 42 | Schema::drop('site_migration'); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /database/migrations/2017_07_31_212422_create_jobs_table.php: -------------------------------------------------------------------------------- 1 | bigIncrements('id'); 18 | $table->string('queue'); 19 | $table->longText('payload'); 20 | $table->tinyInteger('attempts')->unsigned(); 21 | $table->unsignedInteger('reserved_at')->nullable(); 22 | $table->unsignedInteger('available_at'); 23 | $table->unsignedInteger('created_at'); 24 | $table->index(['queue', 'reserved_at']); 25 | }); 26 | } 27 | 28 | /** 29 | * Reverse the migrations. 30 | * 31 | * @return void 32 | */ 33 | public function down() 34 | { 35 | Schema::dropIfExists('jobs'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /database/migrations/2017_08_02_215812_create_failed_jobs_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->text('connection'); 19 | $table->text('queue'); 20 | $table->longText('payload'); 21 | $table->longText('exception'); 22 | $table->timestamp('failed_at')->useCurrent(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | Schema::dropIfExists('failed_jobs'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /database/migrations/2017_08_04_135256_create_phone_mac_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->integer('parent')->unsigned()->index()->nullable(); // Parent Block ID 19 | $table->foreign('parent')->references('id')->on('phone_mac')->onDelete('cascade'); // Create foreign key and try cascade deletes 20 | 21 | $table->string('type')->index()->nullable(); // simple name to reference the account by 22 | $table->string('status')->nullable(); // simple name to reference the account by 23 | 24 | $table->string('created_by')->nullable(); // simple name to reference the account by 25 | $table->string('updated_by')->nullable(); // simple name to reference the account by 26 | $table->string('deleted_by')->nullable(); // simple name to reference the account by 27 | 28 | $table->json('form_data')->nullable(); // JSON Custom Field Data 29 | $table->json('json')->nullable(); // JSON Custom Field Data 30 | 31 | $table->timestamps(); // Time Stamps 32 | $table->softDeletes(); // Soft Deletes 33 | }); 34 | } 35 | 36 | /** 37 | * Reverse the migrations. 38 | * 39 | * @return void 40 | */ 41 | public function down() 42 | { 43 | Schema::dropIfExists('phone_mac'); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /database/migrations/2017_10_18_133042_create_gateway_calls_table.php: -------------------------------------------------------------------------------- 1 | timestamps(); // Time Stamps 19 | $table->increments('id'); 20 | $table->integer('totalCalls')->index(); // Calls 21 | $table->json('stats')->nullable(); // JSON Details Custom Field Data 22 | $table->softDeletes(); // Soft Deletes 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | Schema::drop('gateway_calls'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /database/migrations/2017_10_20_143728_AddIndexes.php: -------------------------------------------------------------------------------- 1 | index('created_at'); // Time Stamps 19 | }); 20 | 21 | // Site Code Table 22 | Schema::table('sbc_calls', function (Blueprint $table) { 23 | $table->index('created_at'); // Time Stamps 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | // 35 | Schema::table('gateway_calls', function (Blueprint $table) { 36 | //$table->dropIndex('created_at'); // Time Stamps 37 | }); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /database/migrations/2018_01_10_214424_create_CucmCDRs_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->integer('globalCallID_callId')->index(); 19 | $table->integer('origLegCallIdentifier'); 20 | 21 | $table->timestamp('dateTimeConnect')->index()->nullable(); 22 | $table->timestamp('dateTimeDisconnect')->index()->nullable(); 23 | $table->integer('duration'); 24 | 25 | $table->string('callingPartyNumber')->index(); 26 | $table->string('originalCalledPartyNumber')->index(); 27 | $table->string('finalCalledPartyNumber'); 28 | $table->string('origDeviceName'); 29 | $table->string('destDeviceName'); 30 | 31 | $table->string('origIpv4v6Addr'); 32 | $table->string('destIpv4v6Addr'); 33 | 34 | $table->string('originalCalledPartyPattern'); 35 | $table->string('finalCalledPartyPattern'); 36 | $table->string('lastRedirectingPartyPattern'); 37 | 38 | $table->json('cdrraw')->nullable(); 39 | 40 | $table->json('json')->nullable(); // JSON Custom Field Data 41 | 42 | $table->timestamps(); // Time Stamps 43 | }); 44 | 45 | //DB::update('ALTER TABLE acme_accounts AUTO_INCREMENT = 10;'); 46 | } 47 | 48 | /** 49 | * Reverse the migrations. 50 | * 51 | * @return void 52 | */ 53 | public function down() 54 | { 55 | Schema::dropIfExists('cucm_cdrs'); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /database/migrations/2018_01_15_145358_create_CucmCMRs_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->integer('globalCallID_callId')->index(); 19 | $table->timestamp('dateTimeStamp')->index()->nullable(); 20 | $table->string('directoryNum'); 21 | $table->string('callIdentifier'); 22 | 23 | $table->string('directoryNumPartition'); 24 | $table->string('deviceName')->index(); 25 | 26 | $table->string('varVQMetrics'); 27 | $table->integer('numberPacketsSent')->nullable(); 28 | $table->integer('numberPacketsReceived')->index()->nullable(); 29 | $table->integer('jitter')->nullable(); 30 | $table->integer('numberPacketsLost')->nullable(); 31 | $table->float('packetLossPercent', 8, 2)->index()->nullable(); 32 | 33 | $table->json('cmrraw')->nullable(); 34 | 35 | $table->json('json')->nullable(); // JSON Custom Field Data 36 | 37 | $table->timestamps(); // Time Stamps 38 | }); 39 | } 40 | 41 | /** 42 | * Reverse the migrations. 43 | * 44 | * @return void 45 | */ 46 | public function down() 47 | { 48 | Schema::dropIfExists('cucm_cmrs'); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /database/migrations/2019_04_17_151141_add_phoneplan_to_phone_mac_table.php: -------------------------------------------------------------------------------- 1 | integer('phoneplan_id')->unsigned()->index()->nullable(); // Phone Plan that this MAC belongs to if in planning 18 | $table->foreign('phoneplan_id') 19 | ->references('id') 20 | ->on('phoneplan') 21 | ->onDelete('cascade'); // Create foreign key and try cascade deletes 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::table('phone_mac', function (Blueprint $table) { 33 | $table->dropForeign('phone_mac_phoneplan_id_foreign'); 34 | $table->dropColumn('phoneplan_id'); 35 | }); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /database/migrations/2019_09_13_200111_abilities_extend_entityid.php: -------------------------------------------------------------------------------- 1 | getDatabasePlatform()->registerDoctrineTypeMapping('json', 'string'); 23 | } 24 | 25 | /* This migration changes entity_id from integer to string for using CUCM UUID as entity_id. */ 26 | 27 | public function up() 28 | { 29 | // 30 | Schema::table('abilities', function ($table) { 31 | $table->string('entity_id', 255)->nullable()->change(); 32 | }); 33 | } 34 | 35 | /** 36 | * Reverse the migrations. 37 | * 38 | * @return void 39 | */ 40 | public function down() 41 | { 42 | Schema::table('abilities', function ($table) { 43 | //$table->integer('entity_id')->unsigned()->nullable()->change(); 44 | }); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /database/migrations/2019_12_21_150746_add_last_registered_field_to_cucmphone_table.php: -------------------------------------------------------------------------------- 1 | timestamp('last_registered')->nullable(); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | * 24 | * @return void 25 | */ 26 | public function down() 27 | { 28 | Schema::table('cucmphone', function (Blueprint $table) { 29 | $table->dropColumn('last_registered'); 30 | }); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /database/migrations/2020_03_15_221404_create_cucm_phone_stats_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->string('type')->nullable(); 19 | $table->integer('total')->nullable(); 20 | $table->integer('registered')->nullable(); 21 | $table->json('stats')->nullable(); // JSON Custom Field Data 22 | $table->json('json')->nullable(); // JSON Custom Field Data 23 | $table->timestamps(); // Time Stamps 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::drop('cucmphonestats'); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /database/migrations/2020_03_16_020525_create_reports_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->integer('parent')->nullable(); 19 | $table->string('category')->nullable(); 20 | $table->string('type')->nullable(); 21 | $table->integer('total')->nullable(); 22 | $table->integer('int0')->nullable(); 23 | $table->integer('int1')->nullable(); 24 | $table->integer('int2')->nullable(); 25 | $table->integer('int3')->nullable(); 26 | $table->integer('int4')->nullable(); 27 | $table->string('stringfield0')->nullable(); 28 | $table->string('stringfield1')->nullable(); 29 | $table->string('stringfield2')->nullable(); 30 | $table->string('stringfield3')->nullable(); 31 | $table->string('stringfield4')->nullable(); 32 | $table->text('custom')->nullable(); 33 | $table->json('stats')->nullable(); // JSON Custom Field Data 34 | $table->json('json')->nullable(); // JSON Custom Field Data 35 | $table->timestamps(); // Time Stamps 36 | }); 37 | } 38 | 39 | /** 40 | * Reverse the migrations. 41 | * 42 | * @return void 43 | */ 44 | public function down() 45 | { 46 | Schema::drop('reports'); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /database/seeds/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /database/seeds/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | call(UsersTableSeeder::class); 15 | // $this->call(DidblockSeeder::class); 16 | 17 | echo 'Assigning Bouncer Roles to Netowork Engineering...'.PHP_EOL; 18 | // $this->call(BouncerRoles::class); 19 | $this->call(AdminGroupBouncerRoles::class); 20 | 21 | echo 'Assigning Bouncer Roles to Service Desk...'.PHP_EOL; 22 | $this->call(ServiceDeskBouncerRoles::class); 23 | 24 | echo 'Assigning Bouncer Roles to Field Techs...'.PHP_EOL; 25 | $this->call(FieldTechsBouncerRoles::class); 26 | 27 | echo 'Assigning Bouncer Roles to Exec Rights...'.PHP_EOL; 28 | $this->call(ExecGroupBouncerRoles::class); 29 | 30 | echo 'Importing DID List from CSV...'.PHP_EOL; 31 | $this->call(ImportDIDListSeeder::class); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /etc/haproxy/haproxy.cfg.example: -------------------------------------------------------------------------------- 1 | frontend ldap_service_front 2 | mode tcp 3 | bind 127.0.0.1:3268 4 | default_backend ldap_service_back 5 | 6 | backend ldap_service_back 7 | server ldaps ldaps.domain.com:3269 ssl verify none 8 | mode tcp 9 | 10 | 11 | frontend ldaps_service_front 12 | mode tcp 13 | bind 127.0.0.1:636 14 | default_backend ldaps_service_back 15 | 16 | backend ldaps_service_back 17 | server ldaps ldaps.domain.com:636 18 | mode tcp -------------------------------------------------------------------------------- /etc/supervisor/conf.d/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | telecom-laravel-macd-worker.conf -------------------------------------------------------------------------------- /etc/supervisor/conf.d/telecom-laravel-macd-worker.conf.example: -------------------------------------------------------------------------------- 1 | 2 | 3 | [program:telecom-laravel-macd-worker] 4 | process_name=%(program_name)s_%(process_num)02d 5 | 6 | command=php /PATH_TO_APP/telephony/artisan queue:work --daemon --tries=3 7 | autostart=true 8 | autorestart=true 9 | 10 | numprocs=8 11 | redirect_stderr=true 12 | stdout_logfile=/PATH_TO_APP/telephony/storage/logs/worker.log 13 | -------------------------------------------------------------------------------- /grab-cucm-phoneconfigs.sh.example: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | printf "\n###########################################################\n" 4 | printf "Starting - grab-cucm-phoneconfigs.sh \n" 5 | 6 | _mydir="$PWD" 7 | echo $_mydir 8 | 9 | php artisan callmanager:phonescan 10 | 11 | # Checkout your SVN Repo in this directory 12 | cd $_mydir/storage/cucm/company-cucm/phones/ 13 | 14 | echo "Commiting Configs to Subversion..." 15 | 16 | svn add * 2>&1 | grep -v already | grep -v Illegal 17 | 18 | # Remove Locally deleted files from repo 19 | svn rm $( svn status | sed -e '/^!/!d' -e 's/^!//' ) 20 | 21 | svn status 22 | 23 | svn commit --username USERNAME --password PASSWORD -m "autoupdated" 24 | 25 | printf "Ending Task - grab-cucm-phoneconfigs.sh \n" 26 | -------------------------------------------------------------------------------- /grab-cucm-siteconfigs.sh.example: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | printf "\n###########################################################\n" 4 | printf "Starting - grab-cucm-siteconfigs.sh \n" 5 | #echo "grab-cucm-siteconfigs.sh Started...\n" 6 | 7 | _mydir="$PWD" 8 | echo $_mydir 9 | 10 | php artisan callmanager:sitescan 11 | 12 | # Checkout your SVN Repo in this directory 13 | cd $_mydir/storage/cucm/company-cucm/sites/ 14 | 15 | echo "Commiting Configs to Subversion..." 16 | 17 | svn add * 2>&1 | grep -v already | grep -v Illegal 18 | 19 | svn status 20 | 21 | # Remove Locally deleted files from repo 22 | svn rm $( svn status | sed -e '/^!/!d' -e 's/^!//' ) 23 | 24 | svn status 25 | 26 | svn commit --username USERNAME --password PASSWORD -m "autoupdated" 27 | 28 | printf "Ending Task - grab-cucm-siteconfigs.sh \n" 29 | #echo "grab-cucm-siteconfigs.sh Completed... Ending Task.\n" 30 | -------------------------------------------------------------------------------- /grab-sonus-configs.sh.example: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "grap-sonus-configs.sh Started..." 4 | 5 | _mydir="$PWD" 6 | echo $_mydir 7 | 8 | php artisan sonus:getconfig 9 | 10 | # Checkout your SVN Repo in this directory 11 | cd $_mydir/telephony/storage/sonus/company-sonus-svnrepo/ 12 | 13 | echo "Commiting Configs to Subversion..." 14 | 15 | svn add * 2>&1 | grep -v already | grep -v Illegal 16 | svn status 17 | svn commit --username admin --password pass -m "autoupdated" 18 | 19 | echo "grap-sonus-configs.sh Completed... Ending Task." -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | const elixir = require('laravel-elixir'); 2 | 3 | require('laravel-elixir-vue-2'); 4 | 5 | /* 6 | |-------------------------------------------------------------------------- 7 | | Elixir Asset Management 8 | |-------------------------------------------------------------------------- 9 | | 10 | | Elixir provides a clean, fluent API for defining some basic Gulp tasks 11 | | for your Laravel application. By default, we are compiling the Sass 12 | | file for our application, as well as publishing vendor resources. 13 | | 14 | */ 15 | 16 | elixir(mix => { 17 | mix.sass('app.scss') 18 | .webpack('app.js'); 19 | }); 20 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "prod": "gulp --production", 5 | "dev": "gulp watch" 6 | }, 7 | "devDependencies": { 8 | "bootstrap-sass": "^3.3.7", 9 | "gulp": "^3.9.1", 10 | "jquery": "^3.1.0", 11 | "laravel-elixir": "^6.0.0-9", 12 | "laravel-elixir-vue-2": "^0.2.0", 13 | "laravel-elixir-webpack-official": "^1.0.2", 14 | "lodash": "^4.16.2", 15 | "vue": "^2.0.1", 16 | "vue-resource": "^1.0.3" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | ./tests 14 | 15 | 16 | 17 | 18 | ./app/Http 19 | ./app 20 | 21 | ./app/Http/Middleware 22 | ./app/Http/Requests 23 | ./app/Http/Controllers/Auth 24 | ./app/Console 25 | ./app/Events 26 | ./app/Exceptions 27 | ./app/Jobs 28 | ./app/Listeners 29 | ./app/Policies 30 | ./app/Providers 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Redirect Trailing Slashes If Not A Folder... 9 | RewriteCond %{REQUEST_FILENAME} !-d 10 | RewriteRule ^(.*)/$ /$1 [L,R=301] 11 | 12 | # Handle Front Controller... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_FILENAME} !-f 15 | RewriteRule ^ index.php [L] 16 | 17 | # Handle Authorization Header 18 | RewriteCond %{HTTP:Authorization} . 19 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 20 | 21 | -------------------------------------------------------------------------------- /public/admin/.gitignore: -------------------------------------------------------------------------------- 1 | bower_components 2 | company-content/ 3 | app-content/images/ -------------------------------------------------------------------------------- /public/admin/admin/admin.controller.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular 5 | .module('app') 6 | .controller('Admin.IndexController', Controller); 7 | 8 | 9 | function Controller($location, UserService) { 10 | var vm = this; 11 | 12 | 13 | initController(); 14 | 15 | vm.messages = 'Loading Userinfo...'; 16 | vm.userinfo = {}; 17 | 18 | function initController() { 19 | UserService.Getuserinfo(function (result) { 20 | console.log('callback from UserService.userinfo responded ' + result); 21 | vm.userinfo = UserService.userinfo; 22 | //vm.username = vm.userinfo.cn[0]; 23 | vm.username = vm.userinfo.cn[0]; 24 | vm.title = vm.userinfo.title[0]; 25 | vm.photo = vm.userinfo.thumbnailphoto[0]; 26 | 27 | //console.log(vm.userinfo); 28 | vm.messages = JSON.stringify(vm.userinfo, null, " "); 29 | //$scope.accounts = vm.accounts; 30 | }); 31 | } 32 | 33 | } 34 | 35 | 36 | 37 | })(); -------------------------------------------------------------------------------- /public/admin/app-content/google.analytics.js: -------------------------------------------------------------------------------- 1 | (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 2 | (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 3 | m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 4 | })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 5 | -------------------------------------------------------------------------------- /public/admin/app-content/navbar.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 45 | 46 |
47 | 48 | -------------------------------------------------------------------------------- /public/admin/app-services/companycontent.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('CompanyService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | // Get Current Team name and oncall numbers from json file 8 | self.getcompanycontent = function() { 9 | var defer = $q.defer(); 10 | return $http.get('../admin/company-content/company.json') 11 | .then(function successCallback(response) { 12 | defer.resolve(response); 13 | 14 | //console.log(response); 15 | // Must return the promise to the controller. 16 | return defer.promise; 17 | 18 | /* Example: company.json 19 | { 20 | "sbcconfigs": "//servername/websvn/listing.php?repname=Sonus+Repository" 21 | } 22 | */ 23 | 24 | }, function errorCallback(response) { 25 | defer.resolve(response); 26 | return defer.promise; 27 | }); 28 | } 29 | 30 | // Get Current Team name and oncall numbers from json file 31 | self.getgoogleanalyticsid = function() { 32 | var defer = $q.defer(); 33 | return $http.get('../admin/company-content/analytics.json') 34 | .then(function successCallback(response) { 35 | defer.resolve(response); 36 | 37 | //console.log(response); 38 | // Must return the promise to the controller. 39 | return defer.promise; 40 | 41 | /* Example: analytics.json 42 | { 43 | "id": "UA-XXXXXXXX-X" 44 | } 45 | */ 46 | 47 | }, function errorCallback(response) { 48 | defer.resolve(response); 49 | return defer.promise; 50 | }); 51 | } 52 | 53 | return self 54 | 55 | }]); -------------------------------------------------------------------------------- /public/admin/app-services/log.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('LogService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | // Get SBC Call Summary 8 | self.getlast24hrlogs = function(state) { 9 | var defer = $q.defer(); 10 | return $http.get('../api/activitylogs/last24hrs') 11 | .then(function successCallback(response) { 12 | defer.resolve(response); 13 | 14 | //console.log(response); 15 | // Must return the promise to the controller. 16 | return defer.promise; 17 | 18 | }, function errorCallback(response) { 19 | defer.resolve(response); 20 | return defer.promise; 21 | }); 22 | } 23 | 24 | 25 | // Get SBC Call Summary 26 | self.getlast24hrpagelogs = function(state) { 27 | var defer = $q.defer(); 28 | return $http.get('../api/activitylogs/pagelogs/last24hrs') 29 | .then(function successCallback(response) { 30 | defer.resolve(response); 31 | 32 | //console.log(response); 33 | // Must return the promise to the controller. 34 | return defer.promise; 35 | 36 | }, function errorCallback(response) { 37 | defer.resolve(response); 38 | return defer.promise; 39 | }); 40 | } 41 | 42 | 43 | return self 44 | 45 | }]); 46 | -------------------------------------------------------------------------------- /public/admin/app-services/page.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('PageService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | // Get SBC Call Summary 8 | self.getpage = function(name) { 9 | var defer = $q.defer(); 10 | return $http.get('../api/page/request/' + name) 11 | .then(function successCallback(response) { 12 | defer.resolve(response); 13 | 14 | //console.log(response); 15 | // Must return the promise to the controller. 16 | return defer.promise; 17 | 18 | }, function errorCallback(response) { 19 | defer.resolve(response); 20 | return defer.promise; 21 | }); 22 | } 23 | 24 | // Get SBC Call Summary 25 | self.getpagestate = function(state) { 26 | var defer = $q.defer(); 27 | return $http.get('../api/page/request' + state) 28 | .then(function successCallback(response) { 29 | defer.resolve(response); 30 | 31 | //console.log(response); 32 | // Must return the promise to the controller. 33 | return defer.promise; 34 | 35 | }, function errorCallback(response) { 36 | defer.resolve(response); 37 | return defer.promise; 38 | }); 39 | } 40 | 41 | 42 | // Test 43 | self.gettest = function() { 44 | var defer = $q.defer(); 45 | return $http.get('../api/page/test') 46 | .then(function successCallback(response) { 47 | defer.resolve(response); 48 | 49 | //console.log(response); 50 | // Must return the promise to the controller. 51 | return defer.promise; 52 | 53 | }, function errorCallback(response) { 54 | defer.resolve(response); 55 | return defer.promise; 56 | }); 57 | } 58 | 59 | return self 60 | 61 | }]); 62 | -------------------------------------------------------------------------------- /public/admin/app-services/permissions.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('PermissionsService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | // Get SBC Call Summary 8 | self.getuserspermissions = function(state) { 9 | var defer = $q.defer(); 10 | return $http.get('../api/bouncer/permissions') 11 | .then(function successCallback(response) { 12 | defer.resolve(response); 13 | 14 | //console.log(response); 15 | // Must return the promise to the controller. 16 | return defer.promise; 17 | 18 | }, function errorCallback(response) { 19 | defer.resolve(response); 20 | return defer.promise; 21 | }); 22 | } 23 | 24 | 25 | return self 26 | 27 | }]); 28 | -------------------------------------------------------------------------------- /public/admin/app-services/user.service.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular 5 | .module('app') 6 | .factory('UserService', Service); 7 | 8 | function Service($http, $localStorage) { 9 | var service = {}; 10 | 11 | service.Getuserinfo = Getuserinfo; 12 | 13 | service.userinfo = {}; 14 | 15 | function Getuserinfo(callback) { 16 | service.userinfo = {}; 17 | GetType(callback, 'userinfo'); 18 | } 19 | 20 | function GetType(callback, type) { 21 | service.userinfo[type] = {}; 22 | $http.get('../api/' + type) 23 | .success(function (response) { 24 | //console.log(response); 25 | service.userinfo = response; 26 | //console.log(service.userinfo); 27 | callback(true); 28 | }) 29 | // execute callback with false to indicate failed call 30 | .error(function() { 31 | callback(false); 32 | }); 33 | } 34 | 35 | return service; 36 | } 37 | })(); -------------------------------------------------------------------------------- /public/admin/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "telephonyui", 3 | "homepage": "https://github.com/iahunter/PHP7-Telecom-Management", 4 | "authors": [ 5 | "iahunter" 6 | ], 7 | "description": "test angular ui", 8 | "main": "app.js", 9 | "keywords": [ 10 | "testing" 11 | ], 12 | "license": "MIT", 13 | "private": true, 14 | "ignore": [ 15 | "**/.*", 16 | "node_modules", 17 | "bower_components", 18 | "test", 19 | "tests" 20 | ], 21 | "dependencies": { 22 | "angular": "~1.5.8", 23 | "bootstrap": "^3.3.7", 24 | "angular-messages": "~1.5.8", 25 | "angular-ui-router": "^0.3.1", 26 | "ngstorage": "^0.3.10", 27 | "angular-jwt": "^0.0.9", 28 | "angular-chart.js": "^1.0.3" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /public/admin/home/accessdenied.controller.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .controller('AccessDenied.IndexController', ['UserService', 'PageService', '$location', '$state', '$timeout', '$http', '$localStorage', 'jwtHelper', 'AuthenticationService', function(UserService, PageService, $location, $state, $timeout, $http, $localStorage, jwtHelper, AuthenticationService) { 4 | var vm = this; 5 | 6 | vm.messages = 'Loading Userinfo...'; 7 | 8 | vm.getpage = PageService.getpage('accessdenied'); 9 | 10 | 11 | }]); 12 | 13 | -------------------------------------------------------------------------------- /public/admin/home/accessdenied.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 |
6 | 7 |
8 | 9 | 10 |

Brand Telecom Admin

11 | 12 |
13 |
14 |
15 | 16 |

Access Denied

17 | 18 |
19 | 20 | 21 |
22 | 23 | 24 |
25 | 26 | -------------------------------------------------------------------------------- /public/admin/home/home.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 |
5 |
6 |
7 | 8 | 9 |

Telecom Admin

10 | 11 |
12 |
13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 |
21 | 22 |
23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /public/admin/logout/logout.controller.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular 5 | .module('app') 6 | .controller('Logout.IndexController', Controller); 7 | 8 | function Controller($location, AuthenticationService) { 9 | var vm = this; 10 | 11 | initController(); 12 | 13 | function initController() { 14 | // reset login status 15 | window.telecom_mgmt_permissions = {}; 16 | AuthenticationService.Logout(); 17 | }; 18 | 19 | } 20 | 21 | })(); -------------------------------------------------------------------------------- /public/admin/logout/logout.html: -------------------------------------------------------------------------------- 1 | 
2 | 3 |
4 |
5 | 6 | 7 |

Brand Telecom Admin

8 |
9 |
10 |
11 |
12 |
13 | 14 |

You have been logged out.

15 |
16 | Login 17 |
18 |
19 |
20 | 21 | -------------------------------------------------------------------------------- /public/admin/reports/attemptsummary.graph.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |
6 | 7 | 8 |
9 | 14 | 15 |
16 |
17 |
18 | 19 |
-------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iahunter/PHP7-Telecom-Management/cfbe2e6fc669b7b4fb95ff2bb650b9a5c484a50a/public/favicon.ico -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | 7 | */ 8 | 9 | /* 10 | |-------------------------------------------------------------------------- 11 | | Register The Auto Loader 12 | |-------------------------------------------------------------------------- 13 | | 14 | | Composer provides a convenient, automatically generated class loader for 15 | | our application. We just need to utilize it! We'll simply require it 16 | | into the script here so that we don't have to worry about manual 17 | | loading any of our classes later on. It feels nice to relax. 18 | | 19 | */ 20 | 21 | require __DIR__.'/../bootstrap/autoload.php'; 22 | 23 | /* 24 | |-------------------------------------------------------------------------- 25 | | Turn On The Lights 26 | |-------------------------------------------------------------------------- 27 | | 28 | | We need to illuminate PHP development, so let us turn on the lights. 29 | | This bootstraps the framework and gets it ready for use, then it 30 | | will load up this application so that we can run it and send 31 | | the responses back to the browser and delight our users. 32 | | 33 | */ 34 | 35 | $app = require_once __DIR__.'/../bootstrap/app.php'; 36 | 37 | /* 38 | |-------------------------------------------------------------------------- 39 | | Run The Application 40 | |-------------------------------------------------------------------------- 41 | | 42 | | Once we have the application, we can handle the incoming request 43 | | through the kernel, and send the associated response back to 44 | | the client's browser allowing them to enjoy the creative 45 | | and wonderful application we have prepared for them. 46 | | 47 | */ 48 | 49 | $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); 50 | 51 | $response = $kernel->handle( 52 | $request = Illuminate\Http\Request::capture() 53 | ); 54 | 55 | $response->send(); 56 | 57 | $kernel->terminate($request, $response); 58 | -------------------------------------------------------------------------------- /public/oncall/.gitignore: -------------------------------------------------------------------------------- 1 | bower_components 2 | company-content/ 3 | app-content/images/ -------------------------------------------------------------------------------- /public/oncall/app-content/google.analytics.js: -------------------------------------------------------------------------------- 1 | (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 2 | (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 3 | m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 4 | })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 5 | -------------------------------------------------------------------------------- /public/oncall/app-content/navbar.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 43 | 44 |
-------------------------------------------------------------------------------- /public/oncall/app-services/companycontent.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('CompanyService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | // Get Current Team name and oncall numbers from json file 8 | self.getcompanycontent = function() { 9 | var defer = $q.defer(); 10 | return $http.get('../oncall/company-content/company.json') 11 | .then(function successCallback(response) { 12 | defer.resolve(response); 13 | 14 | //console.log(response); 15 | // Must return the promise to the controller. 16 | return defer.promise; 17 | 18 | /* Example: company.json 19 | { 20 | "sbcconfigs": "//servername/websvn/listing.php?repname=Sonus+Repository" 21 | } 22 | */ 23 | 24 | }, function errorCallback(response) { 25 | defer.resolve(response); 26 | return defer.promise; 27 | }); 28 | } 29 | 30 | // Get Current Team name and oncall numbers from json file 31 | self.getgoogleanalyticsid = function() { 32 | var defer = $q.defer(); 33 | return $http.get('../oncall/company-content/analytics.json') 34 | .then(function successCallback(response) { 35 | defer.resolve(response); 36 | 37 | //console.log(response); 38 | // Must return the promise to the controller. 39 | return defer.promise; 40 | 41 | /* Example: analytics.json 42 | { 43 | "id": "UA-XXXXXXXX-X" 44 | } 45 | */ 46 | 47 | }, function errorCallback(response) { 48 | defer.resolve(response); 49 | return defer.promise; 50 | }); 51 | } 52 | 53 | return self 54 | 55 | }]); -------------------------------------------------------------------------------- /public/oncall/app-services/cucmoncall.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('CUCMOncallService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | // Get Current CTI Route point name 8 | self.getctiroutepoint = function(name) { 9 | var defer = $q.defer(); 10 | return $http.get('../api/cucm/ctiroutepoint/' + name) 11 | .then(function successCallback(response) { 12 | defer.resolve(response); 13 | //console.log(response); 14 | // Must return the promise to the controller. 15 | return defer.promise; 16 | 17 | }, function errorCallback(response) { 18 | defer.resolve(response); 19 | return defer.promise; 20 | }); 21 | } 22 | 23 | // Modify CTI Route Point 24 | 25 | // Get Current CTI Route point name 26 | self.getline = function(partition,pattern) { 27 | var defer = $q.defer(); 28 | return $http.get('../api/cucm/line/' + partition + '/' + pattern) 29 | .then(function successCallback(response) { 30 | defer.resolve(response); 31 | //console.log(response); 32 | // Must return the promise to the controller. 33 | return defer.promise; 34 | }, function errorCallback(response) { 35 | defer.resolve(response); 36 | return defer.promise; 37 | }); 38 | } 39 | 40 | // Update by passing array of full object containing pattern and cfa_destination 41 | self.updateline = function(update) { 42 | return $http.put('../api/cucm/line/cfa', update).then(function(response) { 43 | return response; 44 | }, function(error) { 45 | return error; 46 | }); 47 | } 48 | return self 49 | 50 | }]); -------------------------------------------------------------------------------- /public/oncall/app-services/ldap.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('LDAPService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | 8 | // Get AD user IP Phone details for user 9 | self.getusername = function(username) { 10 | var defer = $q.defer(); 11 | return $http.get('../api/ldap/user/get/'+username) 12 | .then(function successCallback(response) { 13 | defer.resolve(response); 14 | 15 | //console.log(response); 16 | // Must return the promise to the controller. 17 | return defer.promise; 18 | 19 | }, function errorCallback(response) { 20 | defer.resolve(response); 21 | return defer.promise; 22 | }); 23 | } 24 | 25 | 26 | // Update AD IP Phone Field in AD for user 27 | self.updateadipphone = function(update) { 28 | var defer = $q.defer(); 29 | return $http.put('../api/ldap/user/update/ipphone', update) 30 | .then(function successCallback(response) { 31 | defer.resolve(response); 32 | 33 | //console.log(response); 34 | // Must return the promise to the controller. 35 | return defer.promise; 36 | 37 | }, function errorCallback(response) { 38 | defer.resolve(response); 39 | return defer.promise; 40 | }); 41 | } 42 | 43 | return self 44 | 45 | }]); -------------------------------------------------------------------------------- /public/oncall/app-services/page.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('PageService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | // Get SBC Call Summary 8 | self.getpage = function(name) { 9 | var defer = $q.defer(); 10 | return $http.get('../api/page/request/' + name) 11 | .then(function successCallback(response) { 12 | defer.resolve(response); 13 | 14 | //console.log(response); 15 | // Must return the promise to the controller. 16 | return defer.promise; 17 | 18 | }, function errorCallback(response) { 19 | defer.resolve(response); 20 | return defer.promise; 21 | }); 22 | } 23 | 24 | // Get SBC Call Summary 25 | self.getpagestate = function(state) { 26 | var defer = $q.defer(); 27 | return $http.get('../api/page/request' + state) 28 | .then(function successCallback(response) { 29 | defer.resolve(response); 30 | 31 | //console.log(response); 32 | // Must return the promise to the controller. 33 | return defer.promise; 34 | 35 | }, function errorCallback(response) { 36 | defer.resolve(response); 37 | return defer.promise; 38 | }); 39 | } 40 | 41 | 42 | // Test 43 | self.gettest = function() { 44 | var defer = $q.defer(); 45 | return $http.get('../api/page/test') 46 | .then(function successCallback(response) { 47 | defer.resolve(response); 48 | 49 | //console.log(response); 50 | // Must return the promise to the controller. 51 | return defer.promise; 52 | 53 | }, function errorCallback(response) { 54 | defer.resolve(response); 55 | return defer.promise; 56 | }); 57 | } 58 | 59 | return self 60 | 61 | }]); -------------------------------------------------------------------------------- /public/oncall/app-services/teams.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('TeamService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | // Get Current Team name and oncall numbers from json file 8 | self.getteamsnavbardata = function() { 9 | var defer = $q.defer(); 10 | return $http.get('../oncall/company-content/teams.json') 11 | .then(function successCallback(response) { 12 | defer.resolve(response); 13 | 14 | //console.log(response); 15 | // Must return the promise to the controller. 16 | return defer.promise; 17 | 18 | }, function errorCallback(response) { 19 | defer.resolve(response); 20 | return defer.promise; 21 | }); 22 | } 23 | 24 | // Get Current Team name and oncall numbers from json file 25 | self.getteamnumbers = function() { 26 | var defer = $q.defer(); 27 | return $http.get('../oncall/company-content/numbers.json') 28 | .then(function successCallback(response) { 29 | defer.resolve(response); 30 | 31 | //console.log(response); 32 | // Must return the promise to the controller. 33 | return defer.promise; 34 | 35 | }, function errorCallback(response) { 36 | defer.resolve(response); 37 | return defer.promise; 38 | }); 39 | } 40 | return self 41 | 42 | }]); -------------------------------------------------------------------------------- /public/oncall/app-services/user.service.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular 5 | .module('app') 6 | .factory('UserService', Service); 7 | 8 | function Service($http, $localStorage) { 9 | var service = {}; 10 | 11 | service.Getuserinfo = Getuserinfo; 12 | 13 | service.userinfo = {}; 14 | 15 | function Getuserinfo(callback) { 16 | service.userinfo = {}; 17 | GetType(callback, 'userinfo'); 18 | } 19 | 20 | function GetType(callback, type) { 21 | service.userinfo[type] = {}; 22 | $http.get('../api/' + type) 23 | .success(function (response) { 24 | //console.log(response); 25 | service.userinfo = response; 26 | //console.log(service.userinfo); 27 | callback(true); 28 | }) 29 | // execute callback with false to indicate failed call 30 | .error(function() { 31 | callback(false); 32 | }); 33 | } 34 | 35 | return service; 36 | } 37 | })(); -------------------------------------------------------------------------------- /public/oncall/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "telephonyangularui", 3 | "homepage": "https://github.com/iahunter/PHP7-Telephone-Numbers", 4 | "authors": [ 5 | "Metaclassing " 6 | ], 7 | "description": "test angular ui", 8 | "main": "app.js", 9 | "keywords": [ 10 | "testing" 11 | ], 12 | "license": "MIT", 13 | "private": true, 14 | "ignore": [ 15 | "**/.*", 16 | "node_modules", 17 | "bower_components", 18 | "test", 19 | "tests" 20 | ], 21 | "dependencies": { 22 | "angular": "~1.5.8", 23 | "bootstrap": "^3.3.7", 24 | "angular-messages": "~1.5.8", 25 | "angular-ui-router": "^0.3.1", 26 | "ngstorage": "^0.3.10", 27 | "angular-jwt": "^0.0.9", 28 | "angular-chart.js": "^1.0.3" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /public/oncall/home/accessdenied.controller.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .controller('AccessDenied.IndexController', ['UserService', 'PageService', '$location', '$state', '$timeout', '$http', '$localStorage', 'jwtHelper', 'AuthenticationService', function(UserService, PageService, $location, $state, $timeout, $http, $localStorage, jwtHelper, AuthenticationService) { 4 | var vm = this; 5 | 6 | vm.messages = 'Loading Userinfo...'; 7 | 8 | //vm.getpage = PageService.getpage('accessdenied'); 9 | 10 | 11 | }]); 12 | 13 | -------------------------------------------------------------------------------- /public/oncall/home/accessdenied.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 |
6 | 7 |
8 | 9 | 10 |

Brand OnCall

11 | 12 |
13 |
14 |
15 | 16 |

Access Denied

17 | 18 |
19 | 20 | 21 |
22 | 23 | 24 |
25 | 26 | -------------------------------------------------------------------------------- /public/oncall/home/home.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 |
5 | 19 |
20 | 21 |

OnCall

22 | 23 |
24 |
25 | 26 | 27 | 28 | 29 | 30 |
31 | 32 |
33 | 34 |
-------------------------------------------------------------------------------- /public/oncall/logout/logout.controller.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular 5 | .module('app') 6 | .controller('Logout.IndexController', Controller); 7 | 8 | function Controller($location, AuthenticationService) { 9 | var vm = this; 10 | 11 | initController(); 12 | 13 | function initController() { 14 | // reset login status 15 | window.telecom_mgmt_permissions = {}; 16 | 17 | // Custom token Claim variable set in App\User 18 | window.telecom_user = {}; 19 | AuthenticationService.Logout(); 20 | }; 21 | 22 | } 23 | 24 | })(); -------------------------------------------------------------------------------- /public/oncall/logout/logout.html: -------------------------------------------------------------------------------- 1 | 
2 | 3 |
4 |
5 | 6 | 7 |

Brand OnCall App

8 |
9 |
10 |
11 |
12 |
13 | 14 |

You have been logged out.

15 |
16 | Login 17 |
18 |
19 |
20 | 21 | -------------------------------------------------------------------------------- /public/oncall/ng-bootstrap-submenu-master/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | temp/ 3 | npm-debug.log 4 | -------------------------------------------------------------------------------- /public/oncall/ng-bootstrap-submenu-master/.jshintignore: -------------------------------------------------------------------------------- 1 | lib/ -------------------------------------------------------------------------------- /public/oncall/ng-bootstrap-submenu-master/Code: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iahunter/PHP7-Telecom-Management/cfbe2e6fc669b7b4fb95ff2bb650b9a5c484a50a/public/oncall/ng-bootstrap-submenu-master/Code -------------------------------------------------------------------------------- /public/oncall/ng-bootstrap-submenu-master/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Ryan Langton 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /public/oncall/ng-bootstrap-submenu-master/dist/ng-bootstrap-submenu.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["less/bootstrap-submenu.less","less/mixins.less"],"names":[],"mappings":"AAYqB,0BACnB,QAAA,GAGyC,yBACzC,kBACE,SAAA,SAEA,iCACE,IAAA,EACA,KAAA,KACA,WAAA,KACA,uBAAA,EAJF,yCAAA,sDASI,IAAA,KACA,OAAA,EACA,WAAA,EACA,cAAA,KACA,uBAAA,IACA,0BAAA,EAdJ,sDAkBI,KAAA,KACA,MAAA,KAEA,uBAAA,IACA,wBAAA,EAtBJ,8DAAA,2EA0BM,cAAA,IAAA,IAAA,EAKH,0BACD,MAAA,MACA,WAAA,IACA,aAAA,MCpDJ,YAAA,IAAA,OAEA,WAAA,IAAA,MAAA,YACA,cAAA,IAAA,MAAA,YD8CK,+CAQC,MAAA,KACA,YAAA,KACA,YAAA,MACA,aAAA,EC5DN,aAAA,IAAA,OAEA,WAAA,IAAA,MAAA,YACA,cAAA,IAAA,MAAA,aDiE6C,yBAE3C,iCACE,SAAA,OACA,WAAA,EACA,OAAA,EACA,WAAA,KAGC,0BACD,YAAA,IACA,QAAA,aACA,eAAA,OChFJ,WAAA,IAAA,OAEA,YAAA,IAAA,MAAA,YACA,aAAA,IAAA,MAAA,YAKG,8EACD,gEADC,6EACD,+DADC,2EACD,6DACE,aAAA,KAFD,gGACD,kFADC,+FACD,iFADC,6FACD,+EACE,aAAA,KAFD,kHACD,oGADC,iHACD,mGADC,+GACD,iGACE,aAAA,KAFD,oIACD,sHADC,mIACD,qHADC,iIACD,mHACE,aAAA,KAFD,yFACD,2EACE,aAAA,KAFD,2GACD,6FACE,aAAA,KAFD,6HACD,+GACE,aAAA,KAFD,+IACD,iIACE,aAAA"} -------------------------------------------------------------------------------- /public/oncall/ng-bootstrap-submenu-master/lib/bootstrap-submenu-2.0.1-dist/css/bootstrap-submenu.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["less/bootstrap-submenu.less","less/mixins.less"],"names":[],"mappings":"AAYqB,0BACnB,QAAA,GAGyC,yBACzC,kBACE,SAAA,SAEA,iCACE,IAAA,EACA,KAAA,KACA,WAAA,KACA,uBAAA,EAJF,yCAAA,sDASI,IAAA,KACA,OAAA,EACA,WAAA,EACA,cAAA,KACA,uBAAA,IACA,0BAAA,EAdJ,sDAkBI,KAAA,KACA,MAAA,KAEA,uBAAA,IACA,wBAAA,EAtBJ,8DAAA,2EA0BM,cAAA,IAAA,IAAA,EAKH,0BACD,MAAA,MACA,WAAA,IACA,aAAA,MCpDJ,YAAA,IAAA,OAEA,WAAA,IAAA,MAAA,YACA,cAAA,IAAA,MAAA,YD8CK,+CAQC,MAAA,KACA,YAAA,KACA,YAAA,MACA,aAAA,EC5DN,aAAA,IAAA,OAEA,WAAA,IAAA,MAAA,YACA,cAAA,IAAA,MAAA,aDiE6C,yBAE3C,iCACE,SAAA,OACA,WAAA,EACA,OAAA,EACA,WAAA,KAGC,0BACD,YAAA,IACA,QAAA,aACA,eAAA,OChFJ,WAAA,IAAA,OAEA,YAAA,IAAA,MAAA,YACA,aAAA,IAAA,MAAA,YAKG,8EACD,gEADC,6EACD,+DADC,2EACD,6DACE,aAAA,KAFD,gGACD,kFADC,+FACD,iFADC,6FACD,+EACE,aAAA,KAFD,kHACD,oGADC,iHACD,mGADC,+GACD,iGACE,aAAA,KAFD,oIACD,sHADC,mIACD,qHADC,iIACD,mHACE,aAAA,KAFD,yFACD,2EACE,aAAA,KAFD,2GACD,6FACE,aAAA,KAFD,6HACD,+GACE,aAAA,KAFD,+IACD,iIACE,aAAA"} -------------------------------------------------------------------------------- /public/oncall/ng-bootstrap-submenu-master/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ng-bootstrap-submenu", 3 | "version": "1.0.10", 4 | "description": "", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1" 7 | }, 8 | "author": "Ryan Langton", 9 | "license": "MIT", 10 | "dependencies": { 11 | "angular": "^1.3.0", 12 | "bootstrap": "^3.3.6" 13 | }, 14 | "devDependencies": { 15 | "gulp": "^3.9.0", 16 | "gulp-angular-templatecache": "^1.8.0", 17 | "gulp-concat": "^2.6.0", 18 | "gulp-jshint": "^2.0.0", 19 | "gulp-ng-annotate": "^1.1.0", 20 | "gulp-rename": "^1.2.2", 21 | "gulp-rimraf": "^0.2.0", 22 | "gulp-uglify": "^1.5.1", 23 | "gulp-util": "^3.0.7", 24 | "jshint": "^2.9.2" 25 | }, 26 | "files": [ 27 | "dist" 28 | ], 29 | "main" :"./dist/ng-bootstrap-submenu.js" 30 | } 31 | -------------------------------------------------------------------------------- /public/oncall/ng-bootstrap-submenu-master/src/bootstrapSubmenu.html: -------------------------------------------------------------------------------- 1 |
  • 2 | 3 | 4 | 5 | 6 | 7 | 11 |
  • 12 | -------------------------------------------------------------------------------- /public/oncall/ng-bootstrap-submenu-master/src/bootstrapSubmenu.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | angular.module('bootstrapSubmenu', []); 3 | })(); -------------------------------------------------------------------------------- /public/oncall/ng-bootstrap-submenu-master/src/bootstrapSubmenuController.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | angular 3 | .module('bootstrapSubmenu') 4 | .controller('bootstrapSubmenuController', bootstrapSubmenuController); 5 | 6 | function bootstrapSubmenuController($scope, submenuTrigger){ 7 | submenuTrigger.trigger(); 8 | 9 | $scope.getDropdownClass = function(){ 10 | if (!$scope.hasChildren()) return ''; 11 | return $scope.isSubMenu ? 'dropdown-submenu': 'dropdown'; 12 | }; 13 | 14 | $scope.showCaret = function(){ 15 | return (!$scope.isSubMenu && $scope.hasChildren()); 16 | }; 17 | 18 | $scope.hasChildren = function(){ 19 | return ($scope.menuItem.children !== undefined && $scope.menuItem.children.length > 0); 20 | }; 21 | } 22 | })(); -------------------------------------------------------------------------------- /public/oncall/ng-bootstrap-submenu-master/src/bootstrapSubmenuDirective.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | angular 3 | .module('bootstrapSubmenu') 4 | .directive('bootstrapSubmenu', bootstrapSubmenu); 5 | 6 | function bootstrapSubmenu($compile) { 7 | return { 8 | restrict: 'E', 9 | scope: { 10 | menuItem: '=menuItem', 11 | isSubMenu: '@isSubMenu' 12 | }, 13 | replace: true, 14 | templateUrl: 'bootstrapSubmenu.html', 15 | controller: 'bootstrapSubmenuController', 16 | compile: function (el) { 17 | var contents = el.contents().remove(); 18 | var compiled; 19 | return function(scope,el){ 20 | if(!compiled) 21 | compiled = $compile(contents); 22 | 23 | compiled(scope,function(clone){ 24 | el.append(clone); 25 | }); 26 | }; 27 | } 28 | }; 29 | } 30 | })(); -------------------------------------------------------------------------------- /public/oncall/ng-bootstrap-submenu-master/src/submenuTrigger.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | angular 3 | .module('bootstrapSubmenu') 4 | .factory('submenuTrigger', submenuTrigger); 5 | 6 | function submenuTrigger($timeout){ 7 | var triggered = false; 8 | 9 | return { 10 | trigger: function(){ 11 | if (triggered) return; 12 | 13 | // after angularjs digest, trigger submenupicker 14 | $timeout(function(){ 15 | $('[data-submenu]').submenupicker(); 16 | }, 100); 17 | } 18 | }; 19 | } 20 | })(); -------------------------------------------------------------------------------- /public/phptools/index.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |

    Oncall

    14 | 15 |

    When the target of a link matches the name of an iframe, the link will open in the iframe.

    16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /public/phptools/phpinfo.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | Forty What? 7 | Joe 8 | Jane 9 | 10 | I know that's the answer -- but what's the question? 11 | 12 | 13 | 14 | Array 1 15 | 16 | 17 | Array 2 18 | 19 | 20 | 21 | XML; 22 | 23 | $xml = simplexml_load_string($string); 24 | 25 | echo '

    XML

    '; 26 | echo '

    '; 27 | print_r($xml); 28 | echo '

    '; 29 | 30 | $json = json_encode($xml, JSON_PRETTY_PRINT); 31 | 32 | $HTML = <<JSON 34 |
    {$json}
    35 | JSON; 36 | 37 | echo $HTML; 38 | 39 | echo '

    '; 40 | echo '

    Array

    '; 41 | print_r(json_decode($json, true)); 42 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /public/ui/.gitignore: -------------------------------------------------------------------------------- 1 | bower_components 2 | company-content/ 3 | app-content/images/ -------------------------------------------------------------------------------- /public/ui/admin/admin.controller.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular 5 | .module('app') 6 | .controller('Admin.IndexController', Controller); 7 | 8 | 9 | function Controller($location, UserService) { 10 | var vm = this; 11 | 12 | 13 | initController(); 14 | 15 | vm.messages = 'Loading Userinfo...'; 16 | vm.userinfo = {}; 17 | 18 | function initController() { 19 | UserService.Getuserinfo(function (result) { 20 | console.log('callback from UserService.userinfo responded ' + result); 21 | vm.userinfo = UserService.userinfo; 22 | //vm.username = vm.userinfo.cn[0]; 23 | vm.username = vm.userinfo.cn[0]; 24 | vm.title = vm.userinfo.title[0]; 25 | vm.photo = vm.userinfo.thumbnailphoto[0]; 26 | 27 | //console.log(vm.userinfo); 28 | vm.messages = JSON.stringify(vm.userinfo, null, " "); 29 | //$scope.accounts = vm.accounts; 30 | }); 31 | } 32 | 33 | } 34 | 35 | 36 | 37 | })(); -------------------------------------------------------------------------------- /public/ui/app-content/google.analytics.js: -------------------------------------------------------------------------------- 1 | (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 2 | (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 3 | m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 4 | })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 5 | -------------------------------------------------------------------------------- /public/ui/app-directives/addonmodule_form.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 | 5 |
    6 |
    7 | 8 | 9 |
    10 | 11 |
    12 |
    13 |
    14 | 15 |
    -------------------------------------------------------------------------------- /public/ui/app-directives/sitepopover.html: -------------------------------------------------------------------------------- 1 |
    2 | 3 | 4 | 5 | 6 | 7 | 8 | {{value}} 9 | 10 |
    -------------------------------------------------------------------------------- /public/ui/app-directives/speeddial_form.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 | 5 |
    6 | {{speeddial.dirn}} 7 |
    8 | 9 |
    10 |
    11 |
    12 |
    13 | 14 |
    15 |
    16 | 17 | 18 |
    19 | 20 |
    21 |
    22 |
    23 |
    24 |
    25 |
    26 |
    27 | 28 |
    29 |
    30 | 31 | 32 |
    33 | 34 |
    35 |
    36 |
    37 |
    38 |
    39 |
    40 |
    41 | 42 |
    43 |
    44 | 45 | 46 |
    47 | 48 |
    49 |
    50 |
    51 |
    52 | 53 |
    54 |
    55 |
    -------------------------------------------------------------------------------- /public/ui/app-services/companycontent.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('CompanyService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | // Get Current Team name and oncall numbers from json file 8 | self.getcompanycontent = function() { 9 | var defer = $q.defer(); 10 | return $http.get('../ui/company-content/company.json') 11 | .then(function successCallback(response) { 12 | defer.resolve(response); 13 | 14 | //console.log(response); 15 | // Must return the promise to the controller. 16 | return defer.promise; 17 | 18 | /* Example: company.json 19 | { 20 | "sbcconfigs": "//servername/websvn/listing.php?repname=Sonus+Repository" 21 | } 22 | */ 23 | 24 | }, function errorCallback(response) { 25 | defer.resolve(response); 26 | return defer.promise; 27 | }); 28 | } 29 | 30 | // Get Current Team name and oncall numbers from json file 31 | self.getgoogleanalyticsid = function() { 32 | var defer = $q.defer(); 33 | return $http.get('../ui/company-content/analytics.json') 34 | .then(function successCallback(response) { 35 | defer.resolve(response); 36 | 37 | //console.log(response); 38 | // Must return the promise to the controller. 39 | return defer.promise; 40 | 41 | /* Example: analytics.json 42 | { 43 | "id": "UA-XXXXXXXX-X" 44 | } 45 | */ 46 | 47 | }, function errorCallback(response) { 48 | defer.resolve(response); 49 | return defer.promise; 50 | }); 51 | } 52 | 53 | return self 54 | 55 | }]); -------------------------------------------------------------------------------- /public/ui/app-services/cucm.cdr.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('cucmCdrService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | 8 | 9 | // Get Site Summary 10 | self.list_last_24hr_calls_with_loss = function() { 11 | var defer = $q.defer(); 12 | return $http.get('../api/cucmcdrs/list_last_24hr_calls_with_loss') 13 | .then(function successCallback(response) { 14 | defer.resolve(response); 15 | 16 | // Must return the promise to the controller. 17 | return defer.promise; 18 | 19 | }, function errorCallback(response) { 20 | defer.resolve(response); 21 | return defer.promise; 22 | }); 23 | } 24 | 25 | 26 | return self 27 | 28 | }]); 29 | -------------------------------------------------------------------------------- /public/ui/app-services/gizmo.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('gizmoService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | 8 | // Get Site Summary 9 | self.getTeamsUserbyNumber = function(countrycode, number) { 10 | var defer = $q.defer(); 11 | return $http.get('../api/gizmo/teams/number/'+countrycode+'/'+number) 12 | .then(function successCallback(response) { 13 | defer.resolve(response); 14 | 15 | // Must return the promise to the controller. 16 | return defer.promise; 17 | 18 | }, function errorCallback(response) { 19 | defer.resolve(response); 20 | return defer.promise; 21 | }); 22 | } 23 | 24 | return self 25 | 26 | }]); 27 | -------------------------------------------------------------------------------- /public/ui/app-services/ldap.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('LDAPService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | 8 | // Get AD user IP Phone details for user 9 | self.getusername = function(username) { 10 | var defer = $q.defer(); 11 | return $http.get('../api/ldap/user/get/'+username) 12 | .then(function successCallback(response) { 13 | defer.resolve(response); 14 | 15 | //console.log(response); 16 | // Must return the promise to the controller. 17 | return defer.promise; 18 | 19 | }, function errorCallback(response) { 20 | defer.resolve(response); 21 | return defer.promise; 22 | }); 23 | } 24 | 25 | 26 | // Update AD IP Phone Field in AD for user 27 | self.updateadipphone = function(update) { 28 | var defer = $q.defer(); 29 | return $http.put('../api/ldap/user/update/ipphone', update) 30 | .then(function successCallback(response) { 31 | defer.resolve(response); 32 | 33 | //console.log(response); 34 | // Must return the promise to the controller. 35 | return defer.promise; 36 | 37 | }, function errorCallback(response) { 38 | defer.resolve(response); 39 | return defer.promise; 40 | }); 41 | } 42 | 43 | return self 44 | 45 | }]); -------------------------------------------------------------------------------- /public/ui/app-services/page.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('PageService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | // Get SBC Call Summary 8 | self.getpage = function(name) { 9 | var defer = $q.defer(); 10 | return $http.get('../api/page/request/' + name) 11 | .then(function successCallback(response) { 12 | defer.resolve(response); 13 | 14 | //console.log(response); 15 | // Must return the promise to the controller. 16 | return defer.promise; 17 | 18 | }, function errorCallback(response) { 19 | defer.resolve(response); 20 | return defer.promise; 21 | }); 22 | } 23 | 24 | // Get SBC Call Summary 25 | self.getpagestate = function(state) { 26 | var defer = $q.defer(); 27 | return $http.get('../api/page/request' + state) 28 | .then(function successCallback(response) { 29 | defer.resolve(response); 30 | 31 | //console.log(response); 32 | // Must return the promise to the controller. 33 | return defer.promise; 34 | 35 | }, function errorCallback(response) { 36 | defer.resolve(response); 37 | return defer.promise; 38 | }); 39 | } 40 | 41 | 42 | // Test 43 | self.gettest = function() { 44 | var defer = $q.defer(); 45 | return $http.get('../api/page/test') 46 | .then(function successCallback(response) { 47 | defer.resolve(response); 48 | 49 | //console.log(response); 50 | // Must return the promise to the controller. 51 | return defer.promise; 52 | 53 | }, function errorCallback(response) { 54 | defer.resolve(response); 55 | return defer.promise; 56 | }); 57 | } 58 | 59 | return self 60 | 61 | }]); 62 | -------------------------------------------------------------------------------- /public/ui/app-services/ping.monitoring.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('pingMonitoringService', ['$http', '$localStorage', '$stateParams', '$q', '$state', function($http, $localStorage, $stateParams, $q, $state){ 4 | 5 | var self = {}; 6 | 7 | 8 | // Get Device by ID 9 | self.getDevice = function(host) { 10 | var defer = $q.defer(); 11 | return $http.get('../api/pinghost/'+host) 12 | .then(function successCallback(response) { 13 | defer.resolve(response); 14 | 15 | // Must return the promise to the controller. 16 | return defer.promise; 17 | 18 | }, function errorCallback(response) { 19 | defer.resolve(response); 20 | return defer.promise; 21 | }); 22 | } 23 | 24 | 25 | return self 26 | 27 | }]); 28 | -------------------------------------------------------------------------------- /public/ui/app-services/teamsreport.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('teamsReportService', ['$http', '$localStorage', '$stateParams', '$q', function($http, $localStorage, $stateParams, $q){ 4 | 5 | var self = {}; 6 | 7 | 8 | // Get Call Stats from the DB 9 | self.getAllTeamsVoiceUsersbyNumber = function() { 10 | var defer = $q.defer(); 11 | return $http.get('../api/reports/teams/allvoiceusers') 12 | .then(function successCallback(response) { 13 | defer.resolve(response); 14 | 15 | //console.log(response); 16 | // Must return the promise to the controller. 17 | return defer.promise; 18 | 19 | }, function errorCallback(response) { 20 | defer.resolve(response); 21 | return defer.promise; 22 | }); 23 | } 24 | 25 | return self 26 | 27 | }]); 28 | -------------------------------------------------------------------------------- /public/ui/app-services/user.service.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular 5 | .module('app') 6 | .factory('UserService', Service); 7 | 8 | function Service($http, $localStorage) { 9 | var service = {}; 10 | 11 | service.Getuserinfo = Getuserinfo; 12 | 13 | service.userinfo = {}; 14 | 15 | function Getuserinfo(callback) { 16 | service.userinfo = {}; 17 | GetType(callback, 'userinfo'); 18 | } 19 | 20 | function GetType(callback, type) { 21 | service.userinfo[type] = {}; 22 | $http.get('../api/' + type) 23 | .success(function (response) { 24 | //console.log(response); 25 | service.userinfo = response; 26 | //console.log(service.userinfo); 27 | callback(true); 28 | }) 29 | // execute callback with false to indicate failed call 30 | .error(function() { 31 | callback(false); 32 | }); 33 | } 34 | 35 | return service; 36 | } 37 | })(); -------------------------------------------------------------------------------- /public/ui/app-services/west911enable.service.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .factory('west911EnableService', ['$http', '$localStorage', '$stateParams', '$q', '$state', function($http, $localStorage, $stateParams, $q, $state){ 4 | 5 | var self = {}; 6 | 7 | // Get Call Stats from the DB 8 | self.list_erls = function() { 9 | var defer = $q.defer(); 10 | return $http.get('../api/egw/erls/all') 11 | .then(function successCallback(response) { 12 | defer.resolve(response); 13 | 14 | //console.log(response); 15 | // Must return the promise to the controller. 16 | return defer.promise; 17 | 18 | }, function errorCallback(response) { 19 | defer.resolve(response); 20 | return defer.promise; 21 | }); 22 | } 23 | 24 | 25 | // Get Call Stats from the DB 26 | self.list_erls_and_phone_counts = function() { 27 | var defer = $q.defer(); 28 | return $http.get('../api/egw/list_erls_and_phone_count_by_erl') 29 | .then(function successCallback(response) { 30 | defer.resolve(response); 31 | 32 | //console.log(response); 33 | // Must return the promise to the controller. 34 | return defer.promise; 35 | 36 | }, function errorCallback(response) { 37 | defer.resolve(response); 38 | return defer.promise; 39 | }); 40 | } 41 | 42 | return self 43 | 44 | }]); -------------------------------------------------------------------------------- /public/ui/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ui", 3 | "homepage": "https://github.com/iahunter/PHP7-Telecom-Management", 4 | "authors": [ 5 | "iahunter" 6 | ], 7 | "description": "Telecom Management System User Interface", 8 | "main": "app.js", 9 | "keywords": [ 10 | "testing" 11 | ], 12 | "license": "MIT", 13 | "private": true, 14 | "ignore": [ 15 | "**/.*", 16 | "node_modules", 17 | "bower_components", 18 | "test", 19 | "tests" 20 | ], 21 | "dependencies": { 22 | "angular": "~1.5.11", 23 | "bootstrap": "^3.3.7", 24 | "angular-messages": "~1.5.11", 25 | "angular-ui-router": "^0.3.1", 26 | "ngstorage": "^0.3.10", 27 | "angular-jwt": "^0.0.9", 28 | "angular-chart.js": "~1.0.3", 29 | "angular-motion": "^0.4.4" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /public/ui/calls/1day_calls.graph.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
    4 |
    5 |

    24hr - SBC Call Summary

    6 | 7 |
    8 | 13 | 14 |
    15 |
    16 |
    17 | 18 |
    19 | -------------------------------------------------------------------------------- /public/ui/calls/1day_gatewaycalls.graph.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
    4 |
    5 |

    24hr - Cisco Gateway - Enterprise Aggregated Call Summary

    6 | 7 |
    8 | 13 | 14 |
    15 |
    16 |
    17 | 18 |
    19 | -------------------------------------------------------------------------------- /public/ui/calls/7day_calls.graph.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 |
    6 |

    7 Day - SBC Call Summary

    7 | 8 |
    9 | 14 | 15 |
    16 |
    17 |
    18 | 19 |
    -------------------------------------------------------------------------------- /public/ui/calls/7day_gatewaycalls.graph.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 |
    6 |

    7 Day - Cisco Gateway - Enterprise Aggregated Call Summary

    7 | 8 |
    9 | 14 | 15 |
    16 |
    17 |
    18 | 19 |
    -------------------------------------------------------------------------------- /public/ui/calls/calls.graph.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
    4 |
    5 |

    3 Month - SBC Daily Peak Call Summary

    6 | 7 |
    8 | 13 | 14 |
    15 |
    16 |
    17 | 18 |
    -------------------------------------------------------------------------------- /public/ui/config-repo/configrepo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 | 6 |
    7 | -------------------------------------------------------------------------------- /public/ui/cucm-phone-manager/linemanager.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
    6 | 7 |
    8 | 9 |
    10 | 11 |
    12 |
    13 | 14 | 15 | -------------------------------------------------------------------------------- /public/ui/cucm-phone-manager/phonemanager.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 | 6 |
    7 | -------------------------------------------------------------------------------- /public/ui/erl-status-reports/get-erl-report.controller.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .controller('getEgwErl.Report', ['west911EnableService', 'cucmReportService', 'cucmService', '$location', '$state', '$scope', '$stateParams', '$filter', function(west911EnableService, cucmReportService, cucmService, $location, $state, $scope,$stateParams, $filter) { 4 | 5 | var vm = this; 6 | 7 | 8 | vm.refresh = function (){ 9 | // jQuery Hack to fix body from the Model. 10 | $(".modal-backdrop").hide(); 11 | $('body').removeClass("modal-open"); 12 | $('body').removeClass("modal-open"); 13 | $('body').removeAttr( 'style' ); 14 | // End of Hack */ 15 | $state.reload(); 16 | }; 17 | 18 | vm.messages = 'Loading...'; 19 | vm.loading = true; 20 | 21 | 22 | var id = $stateParams.id; 23 | 24 | vm.erl_id = $stateParams.id; 25 | 26 | // Match the window permission set in login.js and app.js - may want to user a service or just do an api call to get these. will decide later. 27 | vm.permissions = window.telecom_mgmt_permissions; 28 | 29 | if(!vm.permissions.read.Cucmclass){ 30 | $location.path('/accessdenied'); 31 | } 32 | 33 | vm.get_erl_phone_report = cucmReportService.get_phones_by_erl(id) 34 | .then(function(res){ 35 | // Check for errors and if token has expired. 36 | if(res.data.message){ 37 | //console.log(res); 38 | vm.message = res.data.message; 39 | //console.log(vm.message); 40 | }else{ 41 | 42 | vm.report = res.data.response 43 | 44 | console.log(vm.report) 45 | vm.loading = false; 46 | } 47 | 48 | 49 | }, function(err){ 50 | alert(err); 51 | }); 52 | 53 | 54 | }]) 55 | 56 | -------------------------------------------------------------------------------- /public/ui/home/accessdenied.controller.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .controller('AccessDenied.IndexController', ['UserService', 'PageService', '$location', '$state', '$timeout', '$http', '$localStorage', 'jwtHelper', 'AuthenticationService', function(UserService, PageService, $location, $state, $timeout, $http, $localStorage, jwtHelper, AuthenticationService) { 4 | var vm = this; 5 | 6 | vm.messages = 'Loading Userinfo...'; 7 | 8 | vm.getpage = PageService.getpage('accessdenied'); 9 | 10 | 11 | }]); 12 | 13 | -------------------------------------------------------------------------------- /public/ui/home/accessdenied.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 |
    6 | 7 |
    8 | 9 | 10 |

    Brand Telecom Management

    11 | 12 |
    13 |
    14 |
    15 | 16 |

    Access Denied

    17 | 18 |
    19 | 20 | 21 |
    22 | 23 | 24 |
    25 | 26 | -------------------------------------------------------------------------------- /public/ui/home/maintenance.controller.js: -------------------------------------------------------------------------------- 1 | angular 2 | .module('app') 3 | .controller('Maintenance.IndexController', ['UserService', 'PageService', '$location', '$state', '$timeout', '$http', '$localStorage', 'jwtHelper', 'AuthenticationService', function(UserService, PageService, $location, $state, $timeout, $http, $localStorage, jwtHelper, AuthenticationService) { 4 | var vm = this; 5 | 6 | vm.messages = 'Loading Userinfo...'; 7 | 8 | 9 | 10 | }]); 11 | 12 | -------------------------------------------------------------------------------- /public/ui/home/maintenance.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 |
    6 | 7 |
    8 | 9 | 10 |

    Brand Telecom Management

    11 | 12 |
    13 |
    14 |
    15 | 16 |

    Under Maintenance - Access Denied

    17 | 18 |
    19 | 20 | 21 |
    22 | 23 | 24 |
    25 | 26 | -------------------------------------------------------------------------------- /public/ui/logout/logout.controller.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular 5 | .module('app') 6 | .controller('Logout.IndexController', Controller); 7 | 8 | function Controller($location, AuthenticationService) { 9 | var vm = this; 10 | 11 | initController(); 12 | 13 | function initController() { 14 | // reset login status 15 | window.telecom_mgmt_permissions = {}; 16 | AuthenticationService.Logout(); 17 | }; 18 | 19 | } 20 | 21 | })(); -------------------------------------------------------------------------------- /public/ui/logout/logout.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 |
    5 | 6 | 7 |

    Brand Telecom Management System

    8 |
    9 |
    10 |
    11 |
    12 |
    13 | 14 |

    You have been logged out.

    15 |
    16 | Login 17 |
    18 |
    19 |
    20 | 21 | -------------------------------------------------------------------------------- /public/ui/site-migrations/migrations/site_migration_summary.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
    6 | 7 |
    8 |
    9 | 10 | 11 |
    12 |
    13 | 14 | Configuration Migration Summary 15 | 16 | 17 |
    18 | 19 |
    20 | 21 | 22 | 23 | 24 | 25 |
    26 | 27 |
    28 | 29 | 30 | 33 | 36 |
    37 |
    38 |
    39 |
    -------------------------------------------------------------------------------- /public/ui/site-migrations/migrations/site_migrations.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
    6 | 7 |
    8 |
    9 | 10 | 11 |
    12 |
    13 | 14 | Sitecode: {{vm.sitecode}} - Configuration Migrations 15 | 16 | 17 | 18 |
    19 | 20 |
    21 | 22 |
    23 | 24 | 25 | 26 |
    27 | 28 | 31 | 34 |
    35 |
    36 |
    -------------------------------------------------------------------------------- /public/ui/siteplanning/getsite.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
    6 | 7 |
    8 |
    9 | 10 | 11 |
    12 |
    13 | 14 | Site Details 15 | 16 | 17 | 18 |
    19 | 20 |
    21 | 22 |
    23 | 24 | 25 | 26 |
    27 | 28 | 29 | 30 |
    31 | 32 | 33 |
    34 |
    35 |
    -------------------------------------------------------------------------------- /public/ui/siteplanning/sitepopover.html.old: -------------------------------------------------------------------------------- 1 |
    2 | 3 | 4 | 5 | 6 | 7 | 8 | {{value}} 9 | 10 |
    -------------------------------------------------------------------------------- /public/ui/sonus-cdrs/attemptsummary.graph.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 |
    6 | 7 | 8 |
    9 | 14 | 15 |
    16 |
    17 |
    18 | 19 |
    -------------------------------------------------------------------------------- /public/ui/sonus-cdrs/pktloss.summary.graph.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 |
    6 | 7 | 8 |
    9 | 14 | 15 |
    16 |
    17 |
    18 | 19 |
    -------------------------------------------------------------------------------- /public/ui/sonus/sonus.splashpage.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 4 | SBC Real-time Stats
    {{vm.datetime}}
    5 | 6 |
    7 | 16 | 17 |
    18 | 19 | 20 |
    21 |
    22 |
    23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
    SBCCall Count
    {{key}} {{value}}
    Total Active Calls{{vm.totalcallcount}}
    41 |
    42 |
    43 |
    44 | 45 |
    46 | 47 | 56 |
    57 | 58 | 59 |
    60 | 61 |
    62 |
    63 | 64 |
    65 | -------------------------------------------------------------------------------- /public/ui/templates/table.controller.js: -------------------------------------------------------------------------------- 1 | .directive('trRow', function ($compile) { 2 | 3 | return { 4 | template: '' 5 | }; 6 | }); -------------------------------------------------------------------------------- /public/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /resources/assets/js/app.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * First we will load all of this project's JavaScript dependencies which 4 | * include Vue and Vue Resource. This gives a great starting point for 5 | * building robust, powerful web applications using Vue and Laravel. 6 | */ 7 | 8 | require('./bootstrap'); 9 | 10 | /** 11 | * Next, we will create a fresh Vue application instance and attach it to 12 | * the body of the page. From here, you may begin adding components to 13 | * the application, or feel free to tweak this setup for your needs. 14 | */ 15 | 16 | Vue.component('example', require('./components/Example.vue')); 17 | 18 | const app = new Vue({ 19 | el: '#app' 20 | }); 21 | -------------------------------------------------------------------------------- /resources/assets/js/bootstrap.js: -------------------------------------------------------------------------------- 1 | 2 | window._ = require('lodash'); 3 | 4 | /** 5 | * We'll load jQuery and the Bootstrap jQuery plugin which provides support 6 | * for JavaScript based Bootstrap features such as modals and tabs. This 7 | * code may be modified to fit the specific needs of your application. 8 | */ 9 | 10 | window.$ = window.jQuery = require('jquery'); 11 | require('bootstrap-sass'); 12 | 13 | /** 14 | * Vue is a modern JavaScript library for building interactive web interfaces 15 | * using reactive data binding and reusable components. Vue's API is clean 16 | * and simple, leaving you to focus on building your next great project. 17 | */ 18 | 19 | window.Vue = require('vue'); 20 | require('vue-resource'); 21 | 22 | /** 23 | * We'll register a HTTP interceptor to attach the "CSRF" header to each of 24 | * the outgoing requests issued by this application. The CSRF middleware 25 | * included with Laravel will automatically verify the header's value. 26 | */ 27 | 28 | Vue.http.interceptors.push((request, next) => { 29 | request.headers.set('X-CSRF-TOKEN', Laravel.csrfToken); 30 | 31 | next(); 32 | }); 33 | 34 | /** 35 | * Echo exposes an expressive API for subscribing to channels and listening 36 | * for events that are broadcast by Laravel. Echo and event broadcasting 37 | * allows your team to easily build robust real-time web applications. 38 | */ 39 | 40 | // import Echo from "laravel-echo" 41 | 42 | // window.Echo = new Echo({ 43 | // broadcaster: 'pusher', 44 | // key: 'your-pusher-key' 45 | // }); 46 | -------------------------------------------------------------------------------- /resources/assets/js/components/Example.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 24 | -------------------------------------------------------------------------------- /resources/assets/sass/_variables.scss: -------------------------------------------------------------------------------- 1 | 2 | // Body 3 | $body-bg: #f5f8fa; 4 | 5 | // Borders 6 | $laravel-border-color: darken($body-bg, 10%); 7 | $list-group-border: $laravel-border-color; 8 | $navbar-default-border: $laravel-border-color; 9 | $panel-default-border: $laravel-border-color; 10 | $panel-inner-border: $laravel-border-color; 11 | 12 | // Brands 13 | $brand-primary: #3097D1; 14 | $brand-info: #8eb4cb; 15 | $brand-success: #2ab27b; 16 | $brand-warning: #cbb956; 17 | $brand-danger: #bf5329; 18 | 19 | // Typography 20 | $font-family-sans-serif: "Raleway", sans-serif; 21 | $font-size-base: 14px; 22 | $line-height-base: 1.6; 23 | $text-color: #636b6f; 24 | 25 | // Navbar 26 | $navbar-default-bg: #fff; 27 | 28 | // Buttons 29 | $btn-default-color: $text-color; 30 | 31 | // Inputs 32 | $input-border: lighten($text-color, 40%); 33 | $input-border-focus: lighten($brand-primary, 25%); 34 | $input-color-placeholder: lighten($text-color, 30%); 35 | 36 | // Panels 37 | $panel-default-heading-bg: #fff; 38 | -------------------------------------------------------------------------------- /resources/assets/sass/app.scss: -------------------------------------------------------------------------------- 1 | 2 | // Fonts 3 | @import url(https://fonts.googleapis.com/css?family=Raleway:300,400,600); 4 | 5 | // Variables 6 | @import "variables"; 7 | 8 | // Bootstrap 9 | @import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap"; 10 | -------------------------------------------------------------------------------- /resources/lang/en/auth.php: -------------------------------------------------------------------------------- 1 | 'These credentials do not match our records.', 17 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /resources/lang/en/pagination.php: -------------------------------------------------------------------------------- 1 | '« Previous', 17 | 'next' => 'Next »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /resources/lang/en/passwords.php: -------------------------------------------------------------------------------- 1 | 'Passwords must be at least six characters and match the confirmation.', 17 | 'reset' => 'Your password has been reset!', 18 | 'sent' => 'We have e-mailed your password reset link!', 19 | 'token' => 'This password reset token is invalid.', 20 | 'user' => "We can't find a user with that e-mail address.", 21 | 22 | ]; 23 | -------------------------------------------------------------------------------- /resources/views/errors/503.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Be right back. 5 | 6 | 7 | 8 | 39 | 40 | 41 |
    42 |
    43 |
    Be right back.
    44 |
    45 |
    46 | 47 | 48 | -------------------------------------------------------------------------------- /resources/views/uccxfinessemonitoralarm.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | UCCX Alert 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
    18 | 19 |
    20 | 21 | 22 |

    UCCX Alert

    23 |
    24 | 25 | 26 |

    UCCX Finesse Agent Monitor

    27 | 28 | 29 |

    Agent State is {{$state}}. Expected NOT_READY after login attempt.

    30 | 31 |
    This could indicate a login failure. 32 | 33 |
    34 | 35 |
    36 |

    Login Log.

    37 |
    {{$login_response}}
    38 |
    39 | 40 |
    41 |

    Get Agent Status

    42 |
    {{$response}}
    43 |
    44 |
    45 | 46 | 47 | -------------------------------------------------------------------------------- /resources/views/uccxmonioralarm.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | UCCX Alert 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
    18 | 19 |
    20 | 21 | 22 |

    UCCX Alert

    23 |
    24 | 25 | View Status 26 | 27 |

    Device Status

    28 | 29 | 30 |

    {{$status}}

    31 | 32 | 33 |
    34 | 35 |
    {{$response}}
    36 |
    37 | 38 | 39 | -------------------------------------------------------------------------------- /resources/views/vendor/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/views/vendor/l5-swagger/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iahunter/PHP7-Telecom-Management/cfbe2e6fc669b7b4fb95ff2bb650b9a5c484a50a/resources/views/vendor/l5-swagger/.gitkeep -------------------------------------------------------------------------------- /routes/Kernel.php: -------------------------------------------------------------------------------- 1 | [ 27 | \App\Http\Middleware\EncryptCookies::class, 28 | \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 29 | \Illuminate\Session\Middleware\StartSession::class, 30 | \Illuminate\View\Middleware\ShareErrorsFromSession::class, 31 | \App\Http\Middleware\VerifyCsrfToken::class, 32 | ], 33 | 34 | 'api' => [ 35 | 'throttle:60,1', 36 | ], 37 | ]; 38 | 39 | /** 40 | * The application's route middleware. 41 | * 42 | * These middleware may be assigned to groups or used individually. 43 | * 44 | * @var array 45 | */ 46 | protected $routeMiddleware = [ 47 | 'auth' => \App\Http\Middleware\Authenticate::class, 48 | 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 49 | 'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class, 50 | 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 51 | 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 52 | 'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class, 53 | 'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class, 54 | ]; 55 | } 56 | -------------------------------------------------------------------------------- /routes/api.bouncer.permissions.php: -------------------------------------------------------------------------------- 1 | get('bouncer/permissions', 'App\Http\Controllers\BouncerPermissionsController@getUsersPermissions'); 23 | -------------------------------------------------------------------------------- /routes/api.cucm.ris.php: -------------------------------------------------------------------------------- 1 | get('cucmris/getphone/ip/{name}', 'App\Http\Controllers\CucmRealTimeController@get_phone_ip'); 26 | -------------------------------------------------------------------------------- /routes/api.ping.php: -------------------------------------------------------------------------------- 1 | get('/pinghost/{host}', 'App\Http\Controllers\PingController@pinghost'); 30 | -------------------------------------------------------------------------------- /routes/api.reports.php: -------------------------------------------------------------------------------- 1 | get('reports', 'App\Http\Controllers\ReportsController@listReportTypes'); 23 | 24 | /** 25 | * @SWG\Get( 26 | * path="/api/reports/type/{type}", 27 | * tags={"Reports - Custom"}, 28 | * summary="Get List of Reports", 29 | * description="", 30 | * operationId="listSites", 31 | * consumes={"application/json"}, 32 | * produces={"application/json"}, 33 | * @SWG\Parameter( 34 | * name="type", 35 | * in="path", 36 | * description="Report Type", 37 | * required=true, 38 | * type="integer" 39 | * ), 40 | * @SWG\Response( 41 | * response=200, 42 | * description="successful operation", 43 | * 44 | * ), 45 | * ) 46 | **/ 47 | $api->get('/reports/type/{type}', 'App\Http\Controllers\ReportsController@getReport'); 48 | -------------------------------------------------------------------------------- /routes/api.teams.reports.php: -------------------------------------------------------------------------------- 1 | get('reports/teams/allvoiceusers', 'App\Http\Controllers\TeamsReportsController@getAllTeamsVoiceUsers'); 23 | -------------------------------------------------------------------------------- /routes/console.php: -------------------------------------------------------------------------------- 1 | comment(Inspiring::quote()); 18 | })->describe('Display an inspiring quote'); 19 | -------------------------------------------------------------------------------- /routes/web.php: -------------------------------------------------------------------------------- 1 | env('LDAP_BASEDN'), 23 | 'admin_username' => env('LDAP_USER'), 24 | 'admin_password' => env('LDAP_PASS'), 25 | // 'domain_controllers' => [env('LDAP_HOST')], 26 | 'domain_controllers' => ['127.0.0.1'], 27 | 'ad_port' => env('LDAP_PORT'), 28 | 'account_suffix' => '@'.env('LDAP_DOMAIN'), 29 | ]); 30 | 31 | if ($request->get('user')) { 32 | $user = $request->get('user'); 33 | $stuff = $ldap->user()->info($user, ['*']); 34 | dd($stuff); 35 | } elseif ($request->get('group')) { 36 | $group = $request->get('group'); 37 | $stuff = $ldap->group()->info($group, ['*']); 38 | dd($stuff); 39 | } else { 40 | return 'Your query must have a user= or group='; 41 | } 42 | /**/ 43 | }); 44 | -------------------------------------------------------------------------------- /server.php: -------------------------------------------------------------------------------- 1 | 7 | */ 8 | $uri = urldecode( 9 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) 10 | ); 11 | 12 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the 13 | // built-in PHP web server. This provides a convenient way to test a Laravel 14 | // application without having installed a "real" web server software here. 15 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { 16 | return false; 17 | } 18 | 19 | require_once __DIR__.'/public/index.php'; 20 | -------------------------------------------------------------------------------- /storage/app/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !public/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /storage/app/public/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/.gitignore: -------------------------------------------------------------------------------- 1 | config.php 2 | routes.php 3 | schedule-* 4 | compiled.php 5 | services.json 6 | events.scanned.php 7 | routes.scanned.php 8 | down 9 | -------------------------------------------------------------------------------- /storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /store-sonus-active-calls-to-cache.sh.example: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #printf "\n###########################################################\n" 4 | #printf "Starting - store-sonus-active-calls-to-cache.sh \n" 5 | 6 | (sleep 1 && /PATH_TO_APP/artisan sonus:listactivecalls-to-cache) & 7 | (sleep 5 && /PATH_TO_APP/artisan sonus:listactivecalls-to-cache) & 8 | (sleep 10 && /PATH_TO_APP/artisan sonus:listactivecalls-to-cache) & 9 | (sleep 15 && /PATH_TO_APP/artisan sonus:listactivecalls-to-cache) & 10 | (sleep 20 && /PATH_TO_APP/artisan sonus:listactivecalls-to-cache) & 11 | (sleep 25 && /PATH_TO_APP/artisan sonus:listactivecalls-to-cache) & 12 | (sleep 30 && /PATH_TO_APP/artisan sonus:listactivecalls-to-cache) & 13 | (sleep 35 && /PATH_TO_APP/artisan sonus:listactivecalls-to-cache) & 14 | (sleep 40 && /PATH_TO_APP/artisan sonus:listactivecalls-to-cache) & 15 | (sleep 45 && /PATH_TO_APP/artisan sonus:listactivecalls-to-cache) & 16 | (sleep 50 && /PATH_TO_APP/artisan sonus:listactivecalls-to-cache) & 17 | (sleep 55 && /PATH_TO_APP/artisan sonus:listactivecalls-to-cache) & 18 | (sleep 60 && /PATH_TO_APP/artisan sonus:listactivecalls-to-cache) & 19 | 20 | #printf "Ending - store-sonus-active-calls-to-cache.sh \n" 21 | #printf "\n###########################################################\n" -------------------------------------------------------------------------------- /supervisor_setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # This adds Supervisor to monitor the Queue workers. 4 | 5 | printf "\n###########################################################\n" 6 | printf "Install Supervisor Script \n" 7 | 8 | 9 | printf "Insalling Supervisor...\n" 10 | sudo apt-get install supervisor 11 | 12 | printf "Waiting 15 secs for install...\n" 13 | sleep 15 14 | 15 | 16 | echo "The current working directory: $PWD" 17 | _mydir="$PWD" 18 | echo $_mydir 19 | 20 | # Create new file with the working directory. 21 | 22 | printf "Generating Configuration File...\n" 23 | echo " 24 | 25 | [program:telecom-laravel-macd-worker] 26 | process_name=%(program_name)s_%(process_num)02d 27 | 28 | command=php "$_mydir/"artisan queue:work --daemon --tries=3 29 | autostart=true 30 | autorestart=true 31 | 32 | numprocs=3 33 | redirect_stderr=true 34 | stdout_logfile="$_mydir"/storage/logs/worker.log" > $_mydir/etc/supervisor/conf.d/telecom-laravel-macd-worker.conf 35 | 36 | sleep 2 37 | # Creater Symlink to the Supervisor directory in /etc. 38 | printf "Creating Symlink to config file...\n" 39 | ln -s $_mydir/etc/supervisor/conf.d/telecom-laravel-macd-worker.conf /etc/supervisor/conf.d/telecom-laravel-macd-worker.conf 40 | 41 | sleep 2 42 | printf "Readin Supervisor Worker Config...\n" 43 | sudo supervisorctl reread 44 | 45 | 46 | sleep 2 47 | printf "Update Supervisor Worker Config...\n" 48 | sudo supervisorctl update 49 | 50 | sleep 2 51 | printf "Starting Supervisor Task...\n" 52 | sudo service supervisor start 53 | 54 | sleep 2 55 | printf "Ending Task\n" 56 | printf "\n###########################################################\n" 57 | -------------------------------------------------------------------------------- /testSsh.php: -------------------------------------------------------------------------------- 1 | login($user, $pass)) { 15 | exit('Login Failed'); 16 | } 17 | 18 | echo $ssh->exec('pwd'); 19 | -------------------------------------------------------------------------------- /tests/ExampleTest.php: -------------------------------------------------------------------------------- 1 | visit('/') 14 | ->see('Laravel'); 15 | */ 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); 22 | 23 | return $app; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tests/UserTest.php: -------------------------------------------------------------------------------- 1 | assertTrue(true); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /tests/updateDidblockTest.data: -------------------------------------------------------------------------------- 1 | 6 | [ 7 | 'input' => ['start' => 1004560010,], 8 | 'success' => false, 9 | ], 10 | 11 | 'Update DID block End' => 12 | [ 13 | 'input' => ['end' => 1004560009], 14 | 'success' => false, 15 | ], 16 | 17 | 'Update DID Block Start and End' => 18 | [ 19 | 'input' => ['start' => 100456000, 'end' => 1004560009,], 20 | 'success' => false, 21 | ], 22 | 23 | 'Update DID block Country Code' => 24 | [ 25 | 'input' => ['country_code' => 2], 26 | 'success' => false, 27 | ], 28 | 29 | 'Update DID block Name' => 30 | [ 31 | 'input' => ['name' => 'TEST DID BLOCK 123'], 32 | 'success' => true, 33 | ], 34 | 35 | 'Update Start' => 36 | [ 37 | 'input' => ['carrier' => 'TEST GOOD CARRIER', 'type' => 'private', 'comment' => 'TESTING123465'], 38 | 'success' => true, 39 | ], 40 | 41 | ]; 42 | --------------------------------------------------------------------------------