v1.2 initial commit

This commit is contained in:
2026-05-10 21:40:25 +02:00
commit 1a5dfda288
995 changed files with 242075 additions and 0 deletions

303
pub/bin/locales/en.php Normal file
View File

@@ -0,0 +1,303 @@
<?php
return [
'active_language' => 'English',
'nl' => 'Dutch',
'en' => 'English',
'version' => 'Version',
'hi' => 'Hi',
'change_password' => 'Change password',
'feedback' => 'Feedback',
'changelog' => 'Changelog',
'logout' => 'Logout',
'dashboard' => 'Dashboard',
'platforms' => 'Platforms',
'vendors' => 'Vendors',
'devices' => 'Devices',
'device_settings' => 'Settings',
'organizations' => 'Organizations',
'tenants' => 'Tenants',
'users' => 'Users',
'user' => 'User',
'phones' => 'Phones',
'phonebook' => 'Phonebook',
'phonebooks' => 'Phonebooks',
'provisioning' => 'Provisioning',
'activity' => 'Activity',
'inventory' => 'Inventory',
'customers' => 'Customers',
'rps_panel' => 'RPS Panel',
'admin_settings' => 'Admin Settings',
'portal_settings' => 'Portal Settings',
'dashboard_text_platforms' => 'Manage VoIP platforms.',
'dashboard_text_vendors' => 'Manage VoIP vendors.',
'dashboard_text_devices' => 'Manage VoIP devices and modules.',
'dashboard_text_device_settings' => 'Manage settings for devices and modules.',
'dashboard_text_organizations' => 'Manage available customers.',
'dashboard_text_phones' => 'Edit phone configurations.',
'dashboard_text_phonebooks' => 'Edit phonebooks and contacts.',
'admin_management' => 'Admin Access',
'access_control' => 'Access Control',
'monitoring' => 'Monitoring',
'systemconfig' => 'Portal Management',
'dashboard_text_admin_management' => 'Manage access for administrators',
'dashboard_text_access_control' => 'Edit permission and groups',
'dashboard_text_monitoring' => 'Monitoring and logs from the portal',
'dashboard_text_systemconfig' => 'System configuration management',
'language' => 'Change language',
'changed_language' => 'Language changed',
'add_platform' => 'Add platform',
'edit_platform' => 'Edit platform',
'edited_platform' => 'Edited platform',
'uuid' => 'uuid',
'platform_name' => 'Name',
'platform_slugify' => 'Slugify',
'platform_enabled' => 'Enabled',
'platform_image' => 'Image',
'upload_image' => 'Upload a Image',
'platform_description' => 'Description',
'close' => 'Close',
'enabled' => 'Enabled',
'enable' => 'Enable',
'disabled' => 'Disabled',
'platform_added' => 'Platform successfully added',
'error_contact_support' => 'Something went wrong, please contact support.',
'error_no_valid_json' => 'Invalid JSON format',
'edit' => 'Edit',
'info' => 'Info',
'delete' => 'Delete',
'information' => 'Information',
'create_date' => 'Create date',
'date' => 'Date',
'time' => 'Time',
'last_modified_date' => 'Last modified date',
'last_update' => 'Last update',
'never' => 'Never',
'save' => 'Save',
'add_vendor' => 'Add vendor',
'edit_vendor' => 'Edit vendor',
'edited_vendor' => 'Edited vendor',
'vendor_name' => 'Name',
'vendor_enabled' => 'Enabled',
'vendor_slugify' => 'Slugify',
'vendor_description' => 'Description',
'vendor_image' => 'Image',
'vendor_uuid' => 'uuid',
'vendor_added' => 'Vendor added successfully',
'add_device' => 'Add device',
'device_vendor' => 'Vendor',
'device_name' => 'Name',
'device_slugify' => 'Slugify',
'device_notes' => 'Notes',
'device_image' => 'Image',
'device_uuid' => 'uuid',
'device_added' => 'Device added successfully',
'device_enabled' => 'Enabled',
'device_max_accounts' => 'Max. SIP accounts',
'device_allowed_codecs' => 'Allowed codecs',
'device_extensions' => 'Extensions',
'device_extra' => 'Extra data',
'json_enter' => 'Enter JSON data',
'json_valid' => 'JSON valid',
'json_invalid' => 'Invalid JSON. Please check your input.',
'add_phone_device' => 'Add phone',
'add_module_device' => 'Add module',
'add_handset_device' => 'Add handset',
'add_base_device' => 'Add base station',
'no_vendor_found' => 'No vendors found',
'image_no_equal_dimensions' => 'The uploaded image must have equal width and height.',
'image_size_exceeded_500' => 'The uploaded image must not exceed 500x500 pixels.',
'image_not_png' => 'The uploaded image is not a PNG.',
'edit_device' => 'Edit device',
'edited_device' => 'Device edited successfully',
'search_' => 'Search...',
'no_device_found' => 'No devices found',
'action_confirm' => 'Are you sure?',
'action_confirm_text' => 'Are you sure you want to perform this action?',
'action_confirm_button' => 'Yes!',
'action_cancel_button' => 'Nope!',
'action_success_text' => 'Action successfully performed!',
'action_success_title' => 'Done!',
'action_error_text' => 'An error occurred :(',
'action_error_title' => 'Error!',
'action_cancel_confirm_title' => 'Cancelled!',
'action_cancel_confirm_text' => 'Nothing done, you are safe!',
'yes' => 'Yes',
'no' => 'No',
'view' => 'View',
'drag_and_drop_files_here' => 'Drag and Drop files here',
'filename' => 'Filename',
'filesize' => 'File size',
'file_last_modified' => 'Last modified',
'document' => 'Document',
'extensions_available' => 'Extensions available',
'handsets_available' => 'Extensions available',
'no_extensions_available' => 'No extensions available',
'parent_device' => 'Associated Devices',
'templates' => 'Templates',
'default' => 'Default',
'template_added' => 'Template added successfully',
'eol' => 'End of Life',
'user_groups' => 'User groups',
'user_group' => 'User group',
'add_user_groups' => 'Add user group',
'user_group_name' => 'Group name',
'user_group_slugify' => 'Slugify name',
'no_user_groups_found' => 'No user groups found',
'actions' => 'Actions',
'weight' => 'weigth',
'edit_user_groups' => 'Edit Group',
'global_settings' => 'Global',
'permission' => 'Permissions',
'administrators' => 'Admins',
'admin' => 'Administrator',
'portal_name' => 'Portal name',
'portal_slugify' => 'Portal slugify',
'portal_provider_name' => 'Portal provider name',
'portal_provider_slugify' => 'Portal provider slugify',
'admin_auth_methods' => 'Admin authentication methods',
'cacert_url' => 'CA certificate URL',
'autop_url' => 'Autoprovisioning URL',
'copied' => 'Copied!',
'copy_text_success' => 'The text is copied!',
'ok' => 'Okay',
'user_group_type' => 'Group type',
'add_admin' => 'Add admin',
'user_added' => 'User successfully added',
'user_already_exsist' => 'There already is an user with this email address',
'user_email' => 'Email',
'first_name' => 'First name',
'last_name' => 'Last name',
'full_name' => 'Name',
'password' => 'Password',
'phone_number' => 'Phone number',
'user_status' => 'Status',
'preferred_language' => 'Language',
'portal_management' => 'Portal management',
'overview' => 'Overview',
'mfa' => 'MFA',
'ldap_settings' => 'LDAP',
'saml_settings' => 'SAML',
'health_check' => 'Health Check',
'cannot_add_superuser_group' => 'Superuser group cannot be modified',
'on' => 'On',
'off' => 'Off',
'edit_admin' => 'Edit admin',
'add_permission' => 'Add permission',
'edit_permission' => 'Edit permission',
'permission_name' => 'Permission name',
'permission_slugify' => 'Permission slugify',
'item_already_exists' => 'Item with this name already exists',
'item_added' => 'Item successfully added',
'group_added' => 'Group successfully added',
'permission_description' => 'Permission description',
'unable_to_find_item' => 'Item not found',
'NA' => 'Not Available',
'RO' => 'Read Only',
'RW' => 'Read Write',
'user_profile' => 'Profile',
'set_mfa' => 'Enable two factor authentication',
'reset_mfa' => 'Disable two factor authentication',
'avatar_changed' => 'Avatar changed',
'mail_settings' => 'Mail',
'mail_smtp_host' => 'SMTP host',
'mail_smtp_auth' => 'SMTP Authentication',
'mail_smtp_port' => 'SMTP Port',
'mail_smtp_user' => 'SMTP Username',
'mail_smtp_pass' => 'SMTP Password',
'mail_smtp_secure' => 'SMTP Secure',
'mail_from_address' => 'From Address',
'mail_from_name' => 'From Name',
'mail_settings_edited' => 'Mail settings saved',
'admin_creation_instruction' => 'After creating an admin user, an email will be sent to them to verify their email address and create a password.',
'edit_profile' => 'Edit profile',
'user_saved' => 'Profile updated',
'insecure_password' => 'Insecure Password',
'user_management' => 'User management',
'reset_password' => 'Reset password',
'mfa_disabled' => 'Two factor authentication is disabled.',
'send_password_reset' => 'Send password reset email',
'email_send' => 'Email sent',
'api_token_created' => 'API token created',
'permission_created' => 'Permission created',
'permission_updated' => 'Permission updated',
'modules' => 'Modules',
'module' => 'Module',
'autoproviosioning' => 'Autoprovisioning',
'dashboard_text_stompjes' => 'Can you kick it?',
'office' => 'Office',
'stompjeslist' => 'Stompjeslist',
'stompable' => 'Stompable',
'stompjes' => 'Stomps',
'stomped' => 'Stomped',
'stomped_success' => 'Ough and other oof sounds',
'deleted' => 'Deleted',
'from' => 'From',
'to' => 'To',
'sources' => 'Sources',
'api_token' => 'API token',
'api_tokens' => 'API tokens',
'api_token_copy_new' => 'This token is visible only once. Make sure to copy and save it now if you plan to use it later.',
'generate_new_api_token' => 'Generate new API token',
'inserve_url' => 'Inserve URL',
'inserve_source' => 'Inserve Configuration',
'test_connection' => 'Test Connection',
'connection_success_title' => 'Successful',
'connection_success_text' => 'Connection made successful',
'connection_error_title' => 'Error',
'connection_error_text' => 'Connection error',
'companies' => 'Companies',
'sync' => 'Sync',
'company_activated_title' => 'Activated',
'company_deactivated_title' => 'Deactivated',
'company_activated_text' => 'Company is now activated.',
'company_deactivated_text' => 'Company is now deactivated.',
'company_name' => 'Name',
'company' => 'Company',
'company_id' => 'ID',
'company_debtor' => 'Debtor',
'company_state' => 'State',
'server_count' => 'Server count',
'show_all' => 'Show all',
'show_active' => 'Show active',
'servers' => 'Servers',
'server_overview' => 'Server overview',
'dashboard_text_server_overview' => 'View the servers overview',
'server_hostname' => 'Hostname',
'server_power_state' => 'On/Off',
'server_state' => 'State',
'server_os' => 'OS',
'server_cpu' => 'CPU',
'server_memory' => 'Mem',
'server_memory_demand' => 'Mem dmnd.',
'server_disks' => 'Disks',
'server_ipv4' => 'IPv4',
'server_ipv6' => 'IPv6',
'server_vm_snapshot' => 'Snapshot',
'server_vm_generation' => 'Gen',
'server_licenses' => 'Licenses',
'server_backup' => 'Backups',
'disk_space' => 'Disk space',
'disk_reserved_space' => 'Provisioned size',
'disk_used' => 'Disk used',
'disk_file_used' => 'Used size',
'disk_location' => 'Disk location',
'type' => 'Type',
'all_technical_information' => 'All technical information',
'avatar' => 'Avatar',
'user_state' => 'Staat',
'last_login' => 'Last login',
'description' => 'Description',
'name' => 'Name',
'show_del' => 'del.',
'source_custom_data' => "Custom source data",
'settings' => 'settings',
'source_description' => 'Enter the necessary API details to set up and configure your connection to the Inserve API. This allows Sentri to communicate with Inserve and retrieve the data it needs. ',
'source_inserve_sync_cloud' => 'Sync cloud distributor companies',
'source_inserve_sync_cloud_desc' => 'This API call synchronizes active companies in Sentri with the corresponding cloud distributor companies in Inserve. These cloud distributor companies are required to associate Sentri server licenses with companies in Inserve.',
'source_inserve_sync_companies' => 'Sync companies from Inserve to Sentri',
'source_inserve_sync_companies_desc' => 'This API call retrieves all companies from Inserve and creates or updates them in Sentri.',
'source_inserve_sync_licenses' => 'Sync servers licenses',
'source_inserve_sync_licenses_desc' => 'This API call first executes the <b>Sync cloud distributor companies</b> action and then synchronizes all servers in an active, deleted, or trial state with Inserve licenses. It creates or updates server licenses in Inserve if they do not exist or if the license quantities differ from those in Sentri.',
'source_inserve_sync_subscriptions' => 'Sync server subscriptions',
'source_inserve_sync_subscriptions_desc' => 'This API call first executes the <b>Sync cloud distributor</b> companies action and then creates a subscription if it does not exist, or updates the subscription description if it does. It also creates subscription lines with the correct product_code entered in the <b>custom source data</b> JSON field.',
];

303
pub/bin/locales/nl.php Normal file
View File

@@ -0,0 +1,303 @@
<?php
return [
'active_language' => 'Nederlands',
'nl' => 'Nederlands',
'en' => 'Engels',
'version' => 'Versie',
'hi' => 'Hoi',
'change_password' => 'Wachtwoord wijzigen',
'feedback' => 'Feedback',
'changelog' => 'Changelog',
'logout' => 'Uitloggen',
'dashboard' => 'Dashboard',
'platforms' => 'Platformen',
'vendors' => 'Vendors',
'devices' => 'Apparaten',
'device_settings' => 'Instellingen',
'organizations' => 'Organisaties',
'tenants' => 'Organisaties',
'users' => 'Gebruikers',
'user' => 'Gebruiker',
'phones' => 'Telefoons',
'phonebook' => 'Telefoonboek',
'phonebooks' => 'Telefoonboeken',
'provisioning' => 'Provisioning',
'activity' => 'Activiteit',
'inventory' => 'Inventaris',
'customers' => 'Klanten',
'rps_panel' => 'RPS Paneel',
'admin_settings' => 'Beheer Instellingen',
'portal_settings' => 'Portaal Settings',
'dashboard_text_platforms' => 'Beheer VoIP-platformen.',
'dashboard_text_vendors' => 'Beheer VoIP-vendors.',
'dashboard_text_devices' => 'Beheer VoIP-apparaten en modules.',
'dashboard_text_device_settings' => 'Beheer instellingen voor apparaten en modules.',
'dashboard_text_organizations' => 'Beheer beschikbare klanten.',
'dashboard_text_phones' => 'Bewerk telefoonconfiguraties.',
'dashboard_text_phonebooks' => 'Bewerk telefoonboeken en contacten.',
'admin_management' => 'Admin Beheer',
'access_control' => 'Toegangs beheer',
'monitoring' => 'Monitoring',
'systemconfig' => 'Portaal beheer',
'dashboard_text_admin_management' => 'Toegang beheer voor administrators',
'dashboard_text_access_control' => 'Beheer permissies en groepen',
'dashboard_text_monitoring' => 'Monitoring van systeem en gebeurtenissen',
'dashboard_text_systemconfig' => 'Systeem configuratie',
'language' => 'Taal aanpassen',
'changed_language' => 'Taal aangepast',
'add_platform' => 'Platform toevoegen',
'edit_platform' => 'Platform bewerken',
'edited_platform' => 'Platform bewerkt',
'uuid' => 'Platform uuid',
'platform_name' => 'Naam',
'platform_slugify' => 'Slugify',
'platform_enabled' => 'Ingeschakeld',
'platform_image' => 'Afbeelding',
'upload_image' => 'Upload een afbeelding',
'platform_description' => 'Beschrijving',
'close' => 'Sluiten',
'enabled' => 'Ingeschakeld',
'enable' => 'Inschakelen',
'disabled' => 'Uitgeschakeld',
'platform_added' => 'Platform succesvol toegevoegd.',
'error_contact_support' => 'Er ging iets fout, neem contact op met support.',
'error_no_valid_json' => 'Geen geldige JSON ontvangen',
'edit' => 'Bewerken',
'info' => 'Info',
'delete' => 'Verwijder',
'information' => 'Informatie',
'create_date' => 'Creatie datum',
'date' => 'Datum',
'time' => 'Tijd',
'last_modified_date' => 'Laatst gewijzigd datum',
'last_update' => 'Laatste update',
'never' => 'Nooit',
'save' => 'Opslaan',
'add_vendor' => 'Vendor toevoegen',
'edit_vendor' => 'Vendor bewerken',
'edited_vendor' => 'Vendor bewerkt',
'vendor_name' => 'Naam',
'vendor_enabled' => 'Ingeschakeld',
'vendor_slugify' => 'Slugify',
'vendor_description' => 'Beschrijving',
'vendor_image' => 'Afbeelding',
'vendor_uuid' => 'uuid',
'vendor_added' => 'Vendor succesvol toegevoegd.',
'add_device' => 'Device toevoegen',
'device_vendor' => 'Vendor',
'device_name' => 'Naam',
'device_slugify' => 'Slugify',
'device_notes' => 'Notities',
'device_image' => 'Afbeelding',
'device_uuid' => 'uuid',
'device_added' => 'Device succesvol toegevoegd.',
'device_enabled' => 'Ingeschakeld',
'device_max_accounts' => 'Max. SIP accounts',
'device_allowed_codecs' => 'Toegestane codecs',
'device_extensions' => 'Extensies',
'device_extra' => 'Extra data',
'json_enter' => 'Voer JSON data in',
'json_valid' => 'JSON geldig',
'json_invalid' => 'JSON ongeldig. Kijk of de input klopt',
'add_phone_device' => 'Telefoon toevoegen',
'add_module_device' => 'Module toevoegen',
'add_handset_device' => 'Handset toevoegen',
'add_base_device' => 'Base station toevoegen',
'no_vendor_found' => 'Geen vendors gevonden',
'image_no_equal_dimensions' => 'De afbeelding moet dezelfde hoogte en breedte hebben',
'image_size_exceeded_500' => 'De afbeelding mag niet groter dan 500x500 pixels zijn',
'image_not_png' => 'De afbeelding is geen png bestand',
'edit_device' => 'Device bewerken',
'edited_device' => 'Device bewerkt.',
'search_' => 'Zoeken...',
'no_device_found' => 'Geen device gevonden',
'action_confirm' => 'Weet je het zeker?',
'action_confirm_text' => 'Weet je zeker dat je deze actie wilt uitvoeren?',
'action_confirm_button' => 'Ja!',
'action_cancel_button' => 'Nope!',
'action_success_text' => 'Actie succesvol uitgevoerd!',
'action_success_title' => 'Klaar!',
'action_error_text' => 'Er ging iets mis :(',
'action_error_title' => 'Error!',
'action_cancel_confirm_title' => 'Geannuleerd!',
'action_cancel_confirm_text' => 'Niks gedaan, je bent veilig!',
'yes' => 'Ja',
'no' => 'Nee',
'view' => 'Bekijken',
'drag_and_drop_files_here' => 'Sleep en zet bestanden hier neer',
'filename' => 'bestandsnaam',
'filesize' => 'bestandsgrootte',
'file_last_modified' => 'Gewijzigd',
'document' => 'Document',
'extensions_available' => 'Extensies beschikbaar',
'handsets_available' => 'Handsets beschikbaar',
'no_extensions_available' => 'Geen extensies beschikbaar',
'parent_device' => 'Verbonden Apparaten',
'templates' => 'Templates',
'default' => 'Standaard',
'template_added' => 'Template succesvol toegevoegd',
'eol' => 'End of Life',
'user_groups' => 'Gebruikers groepen',
'user_group' => 'Gebruikers groep',
'add_user_groups' => 'Groep toevoegen',
'user_group_name' => 'Groep naam',
'user_group_slugify' => 'Slugify naam',
'no_user_groups_found' => 'Geen groepen gevonden',
'actions' => 'Acties',
'weight' => 'weigth',
'edit_user_groups' => 'Groep bewerken',
'global_settings' => 'Globaal',
'permission' => 'Permissies',
'administrators' => 'Admins',
'admin' => 'Administrator',
'portal_name' => 'Portaal naam',
'portal_slugify' => 'Portaal slugify',
'portal_provider_name' => 'Portaal provider naam',
'portal_provider_slugify' => 'Portaal provider slugify',
'admin_auth_methods' => 'Admin authenticatie methodes',
'cacert_url' => 'CA certificate URL',
'autop_url' => 'Autoprovisioning URL',
'copied' => 'Gekopieerd!',
'copy_text_success' => 'De text is gekopieerd!',
'ok' => 'Leuk',
'user_group_type' => 'Groep type',
'add_admin' => 'Admin toevoegen',
'user_added' => 'Gebruiker succesvol toegevoegd',
'user_already_exsist' => 'Er bestaat al een gebruiker met dit email adres',
'user_email' => 'Email',
'first_name' => 'Voornaam',
'last_name' => 'Achternaam',
'full_name' => 'Naam',
'password' => 'Wachtwoord',
'phone_number' => 'Telefoonnummer',
'user_status' => 'Status',
'preferred_language' => 'Taal',
'portal_management' => 'Portaal beheer',
'overview' => 'Overzicht',
'mfa' => 'MFA',
'ldap_settings' => 'LDAP',
'saml_settings' => 'SAML',
'health_check' => 'Health Check',
'cannot_add_superuser_group' => 'Superuser groep kan niet gewijzigd worden',
'on' => 'Aan',
'off' => 'Uit',
'edit_admin' => 'Admin bewerken',
'add_permission' => 'Permissie toevoegen',
'edit_permission' => 'Permissie bewerken',
'permission_name' => 'Permissie naam',
'permission_slugify' => 'Permissie slugify',
'item_already_exists' => 'Item met deze informatie wordt al gebruikt',
'item_added' => 'Item succesvol toegevoegd',
'group_added' => 'Groep succesvol toegevoegd',
'permission_description' => 'Permissie beschrijving',
'unable_to_find_item' => 'Item niet gevonden',
'NA' => 'Not Available',
'RO' => 'Read Only',
'RW' => 'Read Write',
'user_profile' => 'Profiel',
'set_mfa' => 'Two factor authenticatie instellen',
'reset_mfa' => 'Two factor authenticatie uitschakelen',
'avatar_changed' => 'Avatar gewijzigd',
'mail_settings' => 'Mail',
'mail_smtp_host' => 'SMTP host',
'mail_smtp_auth' => 'SMTP Authenticatie',
'mail_smtp_port' => 'SMTP Poort',
'mail_smtp_user' => 'SMTP Gebruiker',
'mail_smtp_pass' => 'SMTP Wachtwoord',
'mail_smtp_secure' => 'SMTP Secure',
'mail_from_address' => 'Van Adres',
'mail_from_name' => 'Van Naam',
'mail_settings_edited' => 'Mail instellingen aangepast',
'admin_creation_instruction' => 'Na het aanmaken van een beheerder ontvangt deze een e-mail om het e-mailadres te verifiëren en een wachtwoord aan te maken.',
'edit_profile' => 'Profiel bewerken',
'user_saved' => 'Profiel opgeslagen',
'insecure_password' => 'Onveilig wachtwoord',
'user_management' => 'Gebruiker management',
'reset_password' => 'Wachtwoord wijzigen',
'mfa_disabled' => 'Two factor authenticatie is uitgeschakeld',
'send_password_reset' => 'Wachtwoord herstel e-mail versturen',
'email_send' => 'Verstuur e-mail',
'api_token_created' => 'API token toegevoegd',
'permission_created' => 'Permission aangemaakt',
'permission_updated' => 'Permission bijgewerkt',
'modules' => 'Modules',
'module' => 'Module',
'autoproviosioning' => 'Autoprovisioning',
'dashboard_text_stompjes' => 'Kan je stompen?',
'office' => 'Kantoor',
'stompjeslist' => 'Stompjeslijst',
'stompable' => 'Stompabel',
'stompjes' => 'Stompjes',
'stomped' => 'Gestompt',
'stomped_success' => 'Absoluut grof stomp geweld, lekker!',
'deleted' => 'Verwijderd',
'from' => 'Van',
'to' => 'tot',
'sources' => 'Bronnen',
'api_token' => 'API token',
'api_tokens' => 'API tokens',
'api_token_copy_new' => 'Deze token is alleen nu zichtbaar, kopieer hem nu als je hem later wilt gebruiken.',
'generate_new_api_token' => 'Genereer API token',
'inserve_url' => 'Inserve URL',
'inserve_source' => 'Inserve Configuratie',
'test_connection' => 'Test Connectie',
'connection_success_title' => 'Success',
'connection_success_text' => 'Connectie succesvol',
'connection_error_title' => 'Error',
'connection_error_text' => 'Connectie error',
'companies' => 'Bedrijven',
'sync' => 'Sync',
'company_activated_title' => 'Geactiveerd',
'company_deactivated_title' => 'Gedeactiveerd',
'company_activated_text' => 'Bedrijf is geactiveerd.',
'company_deactivated_text' => 'Bedrijf is gedeactiveerd.',
'company_name' => 'Naam',
'company' => 'Bedrijf',
'company_id' => 'ID',
'company_debtor' => 'Debiteur',
'company_state' => 'Staat',
'server_count' => 'Aantal server(s)',
'show_all' => 'Zie alle',
'show_active' => 'Actieve',
'servers' => 'Servers',
'server_overview' => 'Server overzicht',
'dashboard_text_server_overview' => 'Bekijk het server overzicht',
'server_hostname' => 'Hostnaam',
'server_power_state' => 'Aan/Uit',
'server_state' => 'Status',
'server_os' => 'OS',
'server_cpu' => 'CPU',
'server_memory' => 'Mem',
'server_memory_demand' => 'Mem vbrk.',
'server_disks' => 'Schijven',
'server_ipv4' => 'IPv4',
'server_ipv6' => 'IPv6',
'server_vm_snapshot' => 'Snapshot',
'server_vm_generation' => 'Gen',
'server_licenses' => 'Licenties',
'server_backup' => 'Backups',
'disk_space' => 'Schijf grootte',
'disk_reserved_space' => 'Toegewezen grootte',
'disk_used' => 'Schijf gebruik',
'disk_file_used' => 'Gebruikte grootte',
'disk_location' => 'Schijf locatie',
'type' => 'Type',
'all_technical_information' => 'Alle technische informatie',
'avatar' => 'Avatar',
'user_state' => 'Staat',
'last_login' => 'Laatste login',
'description' => 'Beschrijving',
'name' => 'Naam',
'show_del' => 'del.',
'source_custom_data' => "Custom bron data",
'settings' => 'insetellingen',
'source_description' => 'Voer de benodigde API-gegevens in om uw verbinding met de Inserve API in te stellen en te configureren. Dit stelt Sentri in staat om te communiceren met Inserve en de benodigde gegevens op te halen.',
'source_inserve_sync_cloud' => 'Synchroniseer cloud-distributeurbedrijven',
'source_inserve_sync_cloud_desc' => 'Deze API-call synchroniseert actieve bedrijven in Sentri met de bijbehorende cloud-distributeurbedrijven in Inserve. Deze cloud-distributeurbedrijven zijn nodig om Sentri-serverlicenties te koppelen aan bedrijven in Inserve.',
'source_inserve_sync_companies' => 'Synchroniseer bedrijven van Inserve naar Sentri.',
'source_inserve_sync_companies_desc' => 'Deze API-call haalt alle bedrijven op uit Inserve en maakt ze aan of werkt ze bij in Sentri.',
'source_inserve_sync_licenses' => 'Synchroniseer serverlicenties.',
'source_inserve_sync_licenses_desc' => 'Deze API-call voert eerst de <b>Synchroniseer cloud-distributeurbedrijven</b> actie uit en synchroniseert daarna alle servers in een actieve, verwijderde of trial status met Inserve-licenties. Het maakt serverlicenties in Inserve aan of werkt ze bij als ze niet bestaan of als de licentieaantallen afwijken van die in Sentri.',
'source_inserve_sync_subscriptions' => 'Synchroniseer serverabonnementen',
'source_inserve_sync_subscriptions_desc' => 'Deze API-call voert eerst de actie <b>Sync cloud distributor companies</b> uit en maakt vervolgens een abonnement aan als dit nog niet bestaat, of werkt de beschrijving van het abonnement bij als het wel bestaat. Daarnaast worden abonnementsregels aangemaakt met de juiste product_code die is ingevuld in het <b>custom source data</b> JSON-veld.',
];

View File

@@ -0,0 +1,13 @@
<?php
if (!defined('APP_INIT')) {
exit;
}
if (isset($_GET['add'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/autop/pageDevices_add.php');
} elseif (isset($_GET['edit'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/autop/pageDevices_edit.php');
} elseif (isset($_GET['view'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/autop/pageDevices_view.php');
} else {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/autop/pageDevices_list.php');
}

View File

@@ -0,0 +1 @@
to be made

View File

@@ -0,0 +1,195 @@
<?php
use api\classes\API;
use bin\php\Classes\formBuilder;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/formBuilder.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_devices.php');
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-devices', 'RW', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['form'] = true;
$jsScriptLoadData['slugify'] = true;
$jsScriptLoadData['datepicker'] = true;
$jsScriptLoadData['multiple_select'] = true;
$jsScriptLoadData['validateJson'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
$pageNavbar->AddHTMLButton('<div class="btn-group dropdown">
<button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown">
<i class="fas fa-plus text-success"></i>' . __('add_device') . '</button>
<ul class="dropdown-menu bg-black2" role="menu">
<li>
<a class="dropdown-item text-white-50 bg-black2" href="?add=phone">Phone</a>
<a class="dropdown-item text-white-50 bg-black2" href="?add=module">Module</a>
<a class="dropdown-item text-white-50 bg-black2" href="?add=base">Base</a>
<a class="dropdown-item text-white-50 bg-black2" href="?add=handset">Handset</a>
</li>
</ul>
</div>');
$add_get = htmlspecialchars($_GET['add'], ENT_QUOTES, 'UTF-8');
$formBuilder = new formBuilder('add_' . $add_get . '_device', '<i class="fas fa-plus"></i>', '/devices/');
# Retrieve Information for the page
$formInputs = ['device_type', 'device_vendor_uuid', 'device_name', 'device_slugify', 'device_enabled', 'device_image', 'device_notes'];
if ($_GET['add'] == 'phone' || $_GET['add'] == 'base') {
$formInputs[] = 'device_eol';
$formInputs[] = 'device_extensions';
}
$formInputs[] = 'device_extra';
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('add_device'), 'href' => ''));
# Start page output
$pageNavbar->outPutNavbar();
$formBuilder->startForm();
?>
<form id="FormValidation" enctype="multipart/form-data" method="post" action="/api/v1/devices">
<input type="hidden" name="_return" value="/devices/">
<div class="card-body">
<?php foreach ($formInputs as $input) {
if ($input == 'device_type') { ?>
<input type="hidden" name="device_type" value="<?php echo htmlspecialchars($_GET['add'], ENT_QUOTES, 'UTF-8'); ?>">
<?php }
if ($input == 'device_vendor_uuid') { ?>
<div class="form-group form-show-validation row">
<label for="device_vendor_uuid" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_vendor') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="select2-input">
<select id="device_vendor_uuid" name="device_vendor_uuid" class="form-control" required>
<?php
$data = $GLOBALS['conn']->query("SELECT vendor_uuid, vendor_name FROM vc_vendors WHERE vendor_enabled = 1");
if ($data->num_rows == 0) { ?>
<option value=""><?php echo __('no_vendor_found') ?></option>
<?php } else {
while ($row = $data->fetch_assoc()) { ?>
<option value="<?php echo $row['vendor_uuid'] ?>"><?php echo $row['vendor_name'] ?></option>
<?php }
}
?>
</select>
</div>
</div>
</div>
<?php }
if ($input == 'device_name') { ?>
<div class="form-group form-show-validation row">
<label for="device_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="device_name" name="device_name" data-slugify="device_slugify" placeholder="" required/>
</div>
</div>
<?php }
if ($input == 'device_slugify') { ?>
<div class="form-group form-show-validation row">
<label for="device_slugify" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_slugify') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="device_slugify" name="device_slugify" placeholder="" required/>
</div>
</div>
<?php }
if ($input == 'device_enabled') { ?>
<div class="form-group form-show-validation row">
<label for="device_enabled" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_enabled') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="select2-input">
<select id="device_enabled" name="device_enabled" class="form-control" required>
<option value="1" selected><?php echo __('enabled') ?></option>
<option value="0"><?php echo __('disabled') ?></option>
</select>
</div>
</div>
</div>
<?php }
if ($input == 'device_notes') { ?>
<div class="form-group form-show-validation row">
<label for="device_notes" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_notes') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<textarea class="form-control" id="device_notes" name="device_notes" rows="5"></textarea>
</div>
</div>
<?php }
if ($input == 'device_eol') { ?>
<div class="form-group form-show-validation row">
<label for="device_eol" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('eol') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="input-group">
<input type="text" class="form-control" id="device_eol" name="device_eol" data-datepicker="true" placeholder=""/>
<span class="input-group-text"><i class="fa fa-calendar-check"></i></span>
</div>
</div>
</div>
<?php }
if ($input == 'device_image') { ?>
<div class="form-group form-show-validation row">
<label for="device_image" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_image') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="input-file input-file-image">
<img class="img-upload-preview" width="200" src="/src/images/placeholder500x500.png" alt="preview">
<input type="file" class="form-control form-control-file" id="device_image" name="device_image" accept="image/png">
<label for="device_image" class="label-input-file btn btn-black btn-round">
<span class="btn-label"><i class="fa fa-file-image"></i></span>
<?php echo __('upload_image') ?>
</label>
</div>
</div>
</div>
<?php }
if ($input == 'device_extensions') { ?>
<div class="form-group form-show-validation row">
<label for="device_extensions" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_extensions') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="select2-input">
<select id="device_extensions" name="device_extensions[]" class="form-control" multiple="multiple" data-multiple-select="true">
<?php
$data = $GLOBALS['conn']->query("SELECT device_uuid, device_name, device_vendor_uuid FROM vc_devices WHERE device_type = 'module'");
if ($data->num_rows == 0) { ?>
<option value=""><?php echo __('no_device_found') ?></option>
<?php } else {
while ($row = $data->fetch_assoc()) { ?>
<option value="<?php echo $row['device_uuid'] ?>" data-vendor="<?php echo $row['device_vendor_uuid'] ?>">
<?php echo $row['device_name'] ?>
</option>
<?php }
} ?>
</select>
</div>
</div>
</div>
<?php }
if ($input == 'device_extra') { ?>
<div class="form-group form-show-validation row">
<label for="device_extra" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_extra') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<textarea class="form-control" id="device_extra" name="device_extra" rows="5" data-validate-json="true"></textarea>
<small id="device_extra_help" class="form-text text-muted">
<?php echo __('json_enter') ?>
</small>
</div>
</div>
<?php }
} ?>
</div>
<?php $formBuilder->formFooter(); ?>
</form>
<?php $formBuilder->endForm(); ?>

View File

@@ -0,0 +1,220 @@
<?php
use api\classes\API;
use bin\php\Classes\formBuilder;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/formBuilder.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_devices.php');
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-devices', 'RW', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['form'][] = true;
$jsScriptLoadData['datepicker'] = true;
$jsScriptLoadData['multiple_select'] = true;
$jsScriptLoadData['validateJson'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
$pageNavbar->AddHTMLButton('<div class="btn-group dropdown">
<button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown">
<i class="fas fa-plus text-success"></i>' . __('add_device') . '</button>
<ul class="dropdown-menu bg-black2" role="menu">
<li>
<a class="dropdown-item text-white-50 bg-black2" href="?add=phone">Phone</a>
<a class="dropdown-item text-white-50 bg-black2" href="?add=module">Module</a>
<a class="dropdown-item text-white-50 bg-black2" href="?add=base">Base</a>
<a class="dropdown-item text-white-50 bg-black2" href="?add=handset">Handset</a>
</li>
</ul>
</div>');
$formBuilder = new formBuilder('edit_device', '<i class="fas fa-edit"></i>', '/devices/');
$get_edit = htmlspecialchars($_GET['edit'], ENT_QUOTES, 'UTF-8');
$formBuilder->addExtraButtons(array(0 => array('buttonText' => __('view'), 'buttonIcon' => '<i class="far fa-eye"></i>', 'buttonHref' => '?view=' . $get_edit, 'buttonColor' => 'info')));
# Retrieve Information for the page
$device_found = false;
$stmt = $GLOBALS['conn']->prepare("SELECT * FROM vc_devices INNER JOIN vc_vendors ON vc_devices.device_vendor_uuid = vc_vendors.vendor_uuid WHERE device_uuid = ?");
$stmt->bind_param("s", $_GET['edit']);
$stmt->execute();
$device_data_result = $stmt->get_result();
$device_data = $device_data_result->fetch_assoc();
array_push($GLOBALS['breadCrumbArray'], array('display' => $device_data['vendor_name'] . ' ' . $device_data['device_name'], 'href' => '?view=' . $device_data['device_uuid']));
array_push($GLOBALS['breadCrumbArray'], array('display' => __('edit'), 'href' => '?view=' . $device_data['device_uuid']));
if ($device_data_result->num_rows > 0) {
$device_found = true;
}
$formInputs = ['device_vendor_uuid', 'device_name', 'device_slugify', 'device_enabled', 'device_image', 'device_notes'];
if ($device_data['device_type'] == 'phone' || $device_data['device_type'] == 'base') {
$formInputs[] = 'device_eol';
$formInputs[] = 'device_extensions';
}
$formInputs[] = 'device_extra';
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('devices'), 'href' => '/devices/'));
# Start page output
$pageNavbar->outPutNavbar();
if ($device_found) {
$formBuilder->startForm();
?>
<form id="FormValidation" enctype="multipart/form-data" method="post" action="/api/v1/devices">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_return" value="/devices/?edit=<?php echo $device_data['device_uuid']; ?>">
<input type="hidden" name="device_uuid" value="<?php echo $device_data['device_uuid'] ?>">
<div class="card-body">
<?php foreach ($formInputs as $input) {
if ($input == 'device_vendor_uuid') { ?>
<div class="form-group form-show-validation row">
<label for="device_vendor_uuid" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_vendor') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="select2-input">
<select id="device_vendor_uuid" name="device_vendor_uuid" class="form-control" required>
<?php
$data = $GLOBALS['conn']->query("SELECT vendor_uuid, vendor_name FROM vc_vendors WHERE vendor_enabled = 1");
if ($data->num_rows == 0) { ?>
<option value=""><?php echo __('no_vendor_found') ?></option>
<?php } else {
while ($row = $data->fetch_assoc()) { ?>
<option value="<?php echo $row['vendor_uuid'] ?>" <?php echo(($row['vendor_uuid'] == $device_data['device_vendor_uuid']) ? 'selected' : '') ?>><?php echo $row['vendor_name'] ?></option>
<?php }
} ?>
</select>
</div>
</div>
</div>
<?php }
if ($input == 'device_name') {
?>
<div class="form-group form-show-validation row">
<label for="device_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="device_name" name="device_name" value="<?php echo $device_data['device_name'] ?>" placeholder="" required/>
</div>
</div>
<?php }
if ($input == 'device_slugify') { ?>
<div class="form-group form-show-validation row">
<label for="device_slugify" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_slugify') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="device_slugify" name="device_slugify" value="<?php echo $device_data['device_slugify'] ?>" placeholder="" disabled/>
</div>
</div>
<?php }
if ($input == 'device_enabled') { ?>
<div class="form-group form-show-validation row">
<label for="device_enabled" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_enabled') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="select2-input">
<select id="device_enabled" name="device_enabled" class="form-control" required>
<option value="1" <?php echo(($device_data['device_enabled'] == 1) ? 'selected' : '') ?>><?php echo __('enabled') ?></option>
<option value="0" <?php echo(($device_data['device_enabled'] == 0) ? 'selected' : '') ?>><?php echo __('disabled') ?></option>
</select>
</div>
</div>
</div>
<?php }
if ($input == 'device_notes') { ?>
<div class="form-group form-show-validation row">
<label for="device_notes" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_notes') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<textarea class="form-control" id="device_notes" name="device_notes" rows="5"><?php echo $device_data['device_notes'] ?></textarea>
</div>
</div>
<?php }
if ($input == 'device_eol') { ?>
<div class="form-group form-show-validation row">
<label for="device_eol" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('eol') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="input-group">
<input type="text" class="form-control" id="device_eol" value="<?php echo !empty($device_data['device_eol']) ? date('d/m/Y', $device_data['device_eol']) : ''; ?>" name="device_eol" placeholder="" data-datepicker="true"/>
<span class="input-group-text"><i class="fa fa-calendar-check"></i></span>
</div>
</div>
</div>
<?php }
if ($input == 'device_image') { ?>
<div class="form-group form-show-validation row">
<label for="device_image" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_image') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="input-file input-file-image">
<img class="img-upload-preview" width="200" src="<?php echo(($device_data['device_image'] != null) ? 'data:image/png;base64, ' . $device_data['device_image'] : '/src/images/placeholder500x500.png') ?>" alt="device_image">
<input type="file" class="form-control form-control-file" id="device_image" name="device_image" accept="image/png">
<label for="device_image" class="label-input-file btn btn-black btn-round">
<span class="btn-label"><i class="fa fa-file-image"></i></span>
<?php echo __('upload_image') ?>
</label>
</div>
</div>
</div>
<?php }
if ($input == 'device_extensions') {
$device_extensions = json_decode($device_data['device_extensions']);
?>
<div class="form-group form-show-validation row">
<label for="device_extensions" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_extensions') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="select2-input">
<select id="device_extensions" name="device_extensions[]" class="form-control" multiple="multiple" data-multiple-select="true">
<?php
if ($device_data['device_type'] == 'base') {
$data = $GLOBALS['conn']->query("SELECT device_uuid, device_name, device_vendor_uuid FROM vc_devices WHERE device_type = 'module' OR device_type = 'handset'");
} else {
$data = $GLOBALS['conn']->query("SELECT device_uuid, device_name, device_vendor_uuid FROM vc_devices WHERE device_type = 'module'");
}
if ($data->num_rows == 0) { ?>
<option value=""><?php echo __('no_device_found') ?></option>
<?php } else {
while ($row = $data->fetch_assoc()) { ?>
<option <?php echo(in_array($row['device_uuid'], $device_extensions) ? 'selected' : '') ?> value="<?php echo $row['device_uuid'] ?>" data-vendor="<?php echo $row['device_vendor_uuid'] ?>">
<?php echo $row['device_name'] ?>
</option>
<?php }
} ?>
</select>
</div>
</div>
</div>
<?php }
if ($input == 'device_extra') {
$json_device_extra = json_encode(json_decode($device_data['device_extra']), JSON_PRETTY_PRINT); ?>
<div class="form-group form-show-validation row">
<label for="device_extra" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('device_extra') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<textarea class="form-control" id="device_extra" name="device_extra" rows="5" data-validate-json="true"><?php echo $json_device_extra ?></textarea>
<small id="device_extra_help" class="form-text text-muted">
<?php echo __('json_enter') ?>
</small>
</div>
</div>
<?php }
} ?>
</div>
<?php $formBuilder->formFooter(); ?>
</form>
<?php $formBuilder->endForm();
} else {
echo "No Vendor found with uuid " . $_GET['edit'];
}

View File

@@ -0,0 +1,105 @@
<?php
use api\classes\API;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_devices.php');
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-devices', 'RO', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['multiFilterSelect'] = true;
$jsScriptLoadData['delete_confirmation'] = true;
$jsScriptLoadData['datatables'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(false, '<i class="fas fa-fax"></i> ' . __('devices'));
if ($API->checkPermissions('admin-devices', 'RW', true)) {
$pageNavbar->AddHTMLButton('<div class="btn-group dropdown">
<button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown">
<i class="fas fa-plus text-success"></i>' . __('add_device') . '</button>
<ul class="dropdown-menu bg-black2" role="menu">
<li>
<a class="dropdown-item text-white-50 bg-black2" href="?add=phone">Phone</a>
<a class="dropdown-item text-white-50 bg-black2" href="?add=module">Module</a>
<a class="dropdown-item text-white-50 bg-black2" href="?add=base">Base</a>
<a class="dropdown-item text-white-50 bg-black2" href="?add=handset">Handset</a>
</li>
</ul>
</div>');
}
# Retrieve Information for the page
$data = $GLOBALS['conn']->query("SELECT * FROM vc_devices INNER JOIN vc_vendors ON vc_devices.device_vendor_uuid = vc_vendors.vendor_uuid");
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('devices'), 'href' => '/devices/'));
# Start page output
$pageNavbar->outPutNavbar();
?>
<div class="card-body">
<div class="table-responsive">
<table class="multi-filter-select table table-hover" data-skip-columns="0,5" data-datatables-order='[ [1, "desc"], [3, "asc"] ]' data-page-length="25">
<thead>
<tr>
<th>Image</th>
<th>Type</th>
<th>Vendor</th>
<th>Name</th>
<th>Enabled</th>
<th>Actions</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Image</th>
<th>Type</th>
<th>Vendor</th>
<th>Name</th>
<th>Enabled</th>
<th>Actions</th>
</tr>
</tfoot>
<tbody>
<?php while ($row = $data->fetch_assoc()) { ?>
<tr data-item-id="<?php echo $row['device_uuid']; ?>">
<td style="padding-top: 0px!important;padding-bottom: 0px!important;">
<img class="img-upload-preview" src="data:image/png;base64, <?php echo $row['device_image_thumbnail'] ?>" alt="">
</td>
<td><?php echo ucfirst($row['device_type']) ?></td>
<td><?php echo $row['vendor_name'] ?></td>
<td><?php echo $row['device_name'] ?></td>
<td>
<?php echo(($row['device_enabled'] == 1) ? __('yes') : __('no')) ?>
</td>
<td>
<?php if ($API->checkPermissions('admin-devices', 'RW', true)) { ?>
<a href="?edit=<?php echo $row['device_uuid'] ?>" class="btn btn-primary btn-sm btn-rounded"><i class="fas fa-edit"></i></a>
<?php } ?>
<a href="?view=<?php echo $row['device_uuid'] ?>" class="btn btn-info btn-sm btn-rounded"><i class="far fa-eye"></i></a>
<?php if ($API->checkPermissions('admin-devices', 'RW', true)) { ?>
<a href="#" class="btn btn-danger btn-sm btn-rounded delete-btn" data-item-uuid="<?php echo $row['device_uuid'] ?>" data-api-url="/api/v1/devices/" data-item-name="device_uuid"><i class="fas fa-trash-alt"></i></a>
<?php } ?>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>

View File

@@ -0,0 +1,420 @@
<?php
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_devices.php');
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-devices', 'RO', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
function showExtension($devicesLinked, $filter = false)
{
if (count($devicesLinked) > 0) {
foreach ($devicesLinked as $extension) {
if ($filter === false || $extension['device_type'] == $filter) { ?>
<div class="col-sm-3 d-flex flex-column align-items-center">
<img src="data:image/png;base64, <?php echo $extension['device_image']; ?>" class="img-fluid pb-4" style="max-width: 100%; height: auto;" alt="...">
<a href="?view=<?php echo $extension['device_uuid'] ?>" class="btn btn-info btn-rounded align-items-center"><?php echo $extension['device_name'] ?></a>
</div>
<?php }
}
} else { ?>
<p><?php echo __('no_device_found') ?></p>
<?php }
}
function makeFileTables($API, $dataFolder, $device_slugify)
{
$device_data_dir = $_SERVER['DOCUMENT_ROOT'] . '/data/devices/' . $device_slugify . '/' . $dataFolder . '/';
$documents = array_diff(scandir($device_data_dir), array('..', '.'));
foreach ($documents as $document) {
$full_path = $device_data_dir . $document;
$fileSize = human_filesize(fileSize($full_path));
$fileModified = date("Y-m-d H:i:s", filemtime($full_path));
$urlPath = '/data/devices/' . $device_slugify . '/' . $dataFolder . '/' . $document;
?>
<tr>
<td>
<a target="_blank" href="<?php echo $urlPath ?>"><i class="fas fa-external-link-alt"></i> <?php echo $document; ?>
</a>
</td>
<td>
<?php echo $fileSize ?>
</td>
<td>
<?php echo $fileModified ?>
</td>
<td>
<?php if ($API->checkPermissions('admin-devices-files', 'RW', true)) { ?>
<form action="/api/v1/devices/files" method="post">
<input type="hidden" name="filePath" value="">
<input type="hidden" name="_method" value="DELETE">
<a href="#" class="btn btn-danger btn-sm btn-rounded delete-btn" data-item-uuid="<?php echo $urlPath ?>" data-api-url="/api/v1/devices/files/" data-item-name="file_name"><i class="fas fa-trash-alt"></i></a>
</form>
<?php } ?>
</td>
</tr>
<?php }
}
function render_template_controls($template_uuid, $device_uuid, $default_template, $platform_uuid)
{
?>
<div class="d-flex align-items-center gap-2">
<form id="add_<?php echo $default_template ?>_template" action="/api/v2/templates/add/" method="post" <?= $template_uuid ? 'style="display: none"' : '' ?>>
<input type="hidden" name="template_device_uuid" value="<?= htmlspecialchars($device_uuid) ?>">
<input type="hidden" name="template_name" value="<?php echo $default_template ?>">
<input type="hidden" name="template_slugify" value="<?php echo $default_template ?>">
<?php if ($platform_uuid) { ?>
<input type="hidden" name="platform_uuid" value="<?php echo $platform_uuid ?>">
<?php } ?>
<button type="submit" class="btn btn-success btn-rounded mt-2" disabled>
<i class="fas fa-magic"></i>
</button>
</form>
<a id="edit_<?php echo $default_template ?>_template" class="btn btn-primary btn-rounded" href="/devices/?template=<?= htmlspecialchars($template_uuid) ?>" <?= !$template_uuid ? 'style="display: none"' : '' ?>><i class="fas fa-edit" disabled=""></i></a>
<form id="del_<?php echo $default_template ?>_template" action="/api/v1/templates/del/" method="post" <?= !$template_uuid ? 'style="display: none"' : '' ?>>
<input type="hidden" name="template_uuid" value="<?= htmlspecialchars($template_uuid) ?>">
<a href="#" class="btn btn-danger btn-rounded delete-btn" data-item-uuid="<?= htmlspecialchars($template_uuid) ?>" data-api-url="/api/v2/templates/del/" data-delete-action='{"add_<?php echo $default_template ?>_template":"show", "edit_<?php echo $default_template ?>_template":"hide", "del_<?php echo $default_template ?>_template":"hide"}'><i class="fas fa-trash-alt"></i></a>
</form>
</div>
<?php
}
# JS Scripts to load for this page
$jsScriptLoadData['delete_confirmation'][] = true;
$jsScriptLoadData['load_dropzone'] = true;
$jsScriptLoadData['form'][] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
if ($API->checkPermissions('admin-devices', 'RW', true)) {
$pageNavbar->AddHTMLButton('<button class="btn btn-danger" type="button" disabled><i class="fas fa-trash-alt"></i> ' . __('delete') . '</button>');
$get_view = htmlspecialchars($_GET['view'], ENT_QUOTES, 'UTF-8');
$pageNavbar->AddHTMLButton('<a class="btn btn-primary mx-3" type="button" href="?edit=' . $get_view . '"><i class="fas fa-edit"></i> ' . __('edit') . '</a>');
$pageNavbar->AddHTMLButton('<div class="btn-group dropdown">
<button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown">
<i class="fas fa-plus text-success"></i> ' . __('add_device') . '</button>
<ul class="dropdown-menu bg-black2" role="menu">
<li>
<a class="dropdown-item text-white-50 bg-black2" href="?add=phone">Phone</a>
<a class="dropdown-item text-white-50 bg-black2" href="?add=module">Module</a>
<a class="dropdown-item text-white-50 bg-black2" href="?add=base">Base</a>
<a class="dropdown-item text-white-50 bg-black2" href="?add=handset">Handset</a>
</li>
</ul>
</div>');
}
# Retrieve Information for the page
$stmt = $GLOBALS['conn']->prepare("SELECT * FROM vc_devices INNER JOIN vc_vendors ON vc_devices.device_vendor_uuid = vc_vendors.vendor_uuid WHERE device_uuid = ?");
$stmt->bind_param("s", $_GET['view']);
$stmt->execute();
$device_data_result = $stmt->get_result();
if ($device_data_result->num_rows == 0) {
echo "No Vendor found with uuid " . htmlspecialchars($_GET['edit'], ENT_QUOTES, 'UTF-8');
exit;
} else {
$device_data = $device_data_result->fetch_assoc();
}
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('devices'), 'href' => '/devices/'));
array_push($GLOBALS['breadCrumbArray'], array('display' => $device_data['vendor_name'] . ' ' . $device_data['device_name'], 'href' => '?view=' . $device_data['device_uuid']));
# Start page output
$pageNavbar->outPutNavbar();
?>
<div class="row d-flex align-items-stretch pb-2">
<div class="col-md-4 pb-4">
<div class="card h-100">
<div class="card-body">
<h1 class="text-center"><?php echo $device_data['vendor_name'] . ' ' . $device_data['device_name'] ?></h1>
<img src="data:image/png;base64, <?php echo $device_data['device_image']; ?>" class="img-fluid" style="max-width: 100%; height: auto;" alt="...">
</div>
</div>
</div>
<div class="col-md-8 pb-4">
<div class="card h-100">
<div class="card-body">
<table>
<tr>
<td>vendor_name:</td>
<td><?php echo $device_data['vendor_name'] ?></td>
</tr>
<tr>
<td>device_uuid:</td>
<td><?php echo $device_data['device_uuid'] ?></td>
</tr>
<tr>
<td>device_type:</td>
<td><?php echo $device_data['device_type'] ?></td>
</tr>
<tr>
<td>device_name:</td>
<td><?php echo $device_data['device_name'] ?></td>
</tr>
<tr>
<td>device_slugify:</td>
<td><?php echo $device_data['device_slugify'] ?></td>
</tr>
<tr>
<td>device_enabled:</td>
<td><?php echo $device_data['device_enabled'] ?></td>
</tr>
<tr>
<td>device_eol:</td>
<td><?php echo showTime($device_data['device_eol']) ?></td>
</tr>
<tr>
<td>device_create_timestamp:</td>
<td><?php echo showTime($device_data['device_create_timestamp']) ?></td>
</tr>
<tr>
<td>device_modified_timestamp:&nbsp;&nbsp;</td>
<td><?php echo showTime($device_data['device_modified_timestamp']) ?></td>
</tr>
<tr>
<td class="align-top">device_notes:</td>
<td><?php echo $device_data['device_notes'] ?></td>
</tr>
<tr>
<td class="align-top">device_extra:</td>
<td class="w-100">
<textarea class="form-control" id="device_extra" name="device_extra" rows="5" disabled><?php echo json_encode(json_decode($device_data['device_extra']), JSON_PRETTY_PRINT) ?></textarea>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="card">
<div class="card-header pt-2 pb-1">
<h4>Uses</h4>
</div>
<div class="card-body">
To be made. Its going to be visible where the device is used (organisation/site).
</div>
</div>
</div>
<div class="col-md-6">
<?php
# Retrieve device extension data from the device
$devicesLinked = array();
if ($device_data['device_type'] == 'phone' || $device_data['device_type'] == 'base') {
$device_extensions = json_decode($device_data['device_extensions']);
} elseif ($device_data['device_type'] == 'module' || $device_data['device_type'] == 'handset') {
$query = "SELECT device_extensions, device_uuid FROM vc_devices WHERE device_extensions LIKE ?";
$stmt = $GLOBALS['conn']->prepare($query);
if ($stmt) {
$searchTerm = "%" . $device_data['device_uuid'] . "%"; // Add wildcards manually
$stmt->bind_param('s', $searchTerm);
$stmt->execute();
$result = $stmt->get_result();
$device_extensions = array();
while ($row = $result->fetch_assoc()) {
array_push($device_extensions, $row['device_uuid']);
}
$stmt->close();
}
}
if (!empty($device_extensions)) {
$placeholders = implode(' OR device_uuid = ', array_fill(0, count($device_extensions), '?'));
$query = "SELECT * FROM vc_devices WHERE device_uuid = " . $placeholders;
$stmt = $GLOBALS['conn']->prepare($query);
if ($stmt) {
$types = str_repeat('s', count($device_extensions));
$stmt->bind_param($types, ...$device_extensions);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
array_push($devicesLinked, $row);
}
$stmt->close();
}
}
$connectedDeviceCards = [];
if (in_array($device_data['device_type'], ['phone', 'base'])) {
$connectedDeviceCards[] = [
'title' => __('extensions_available'),
'filter' => 'module'
];
}
if ($device_data['device_type'] == 'base') {
$connectedDeviceCards[] = [
'title' => __('handsets_available'),
'filter' => 'handset'
];
}
if (in_array($device_data['device_type'], ['module', 'handset'])) {
$connectedDeviceCards[] = [
'title' => __('parent_device'),
'filter' => false
];
}
foreach ($connectedDeviceCards as $card) { ?>
<div class="card">
<div class="card-header pt-2 pb-1">
<h4><?php echo $card['title']; ?></h4>
</div>
<div class="card-body">
<div class="row">
<?php showExtension($devicesLinked, $card['filter']); ?>
</div>
</div>
</div>
<?php } ?>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-body pt-0">
<ul class="nav nav-tabs nav-line nav-color-secondary" id="line-tab" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="line-home-tab" data-bs-toggle="pill" href="#line-home" role="tab" aria-controls="pills-home" aria-selected="true">Documents</a>
</li>
<li class="nav-item">
<a class="nav-link" id="line-profile-tab" data-bs-toggle="pill" href="#line-profile" role="tab" aria-controls="pills-profile" aria-selected="false">Firmware</a>
</li>
</ul>
<div class="tab-content mt-3 mb-3" id="line-tabContent">
<div class="tab-pane fade show active" id="line-home" role="tabpanel" aria-labelledby="line-home-tab">
<div class="table-responsive">
<table class="table table-borderless " data-table-type="documents">
<thead>
<tr>
<th><?php echo __('document') ?></th>
<th><?php echo __('filesize') ?></th>
<th><?php echo __('file_last_modified') ?></th>
<th></th>
</tr>
</thead>
<tbody>
<?php makeFileTables($API, 'documents', $device_data['device_slugify']); ?>
</tbody>
</table>
</div>
<?php if ($API->checkPermissions('admin-devices-files', 'RW', true)) { ?>
<form action="/api/v1/devices/files" class="dropzone p-0" data-form-type="documents">
<input type="hidden" name="device_slugify" value="<?php echo $device_data['device_slugify'] ?>">
<input type="hidden" name="filetype" value="documents">
<div class="dz-message mt-1 mb-0" data-dz-message>
<div class="icon">
<i class="icon-doc"></i>
</div>
<h4 class="message"><?php echo __('drag_and_drop_files_here') ?> </h4>
</div>
<div class="fallback">
<input name="file" type="file" multiple/>
</div>
</form>
<?php } ?>
</div>
<div class="tab-pane fade" id="line-profile" role="tabpanel" aria-labelledby="line-profile-tab">
<div class="table-responsive">
<table class="table table-borderless" data-table-type="firmware">
<thead>
<tr>
<th><?php echo __('filename') ?></th>
<th><?php echo __('filesize') ?></th>
<th><?php echo __('file_last_modified') ?></th>
<th></th>
</tr>
</thead>
<tbody>
<?php makeFileTables($API, 'firmware', $device_data['device_slugify']); ?>
</tbody>
</table>
</div>
<form action="/api/v1/devices/files" class="dropzone p-0" data-form-type="firmware">
<input type="hidden" name="device_slugify" value="<?php echo $device_data['device_slugify'] ?>">
<input type="hidden" name="filetype" value="firmware">
<div class="dz-message mt-1 mb-0" data-dz-message>
<div class="icon">
<i class="icon-doc"></i>
</div>
<h4 class="message"><?php echo __('drag_and_drop_files_here') ?> </h4>
</div>
<div class="fallback">
<input name="file" type="file" multiple/>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<?php
$device_uuid = $device_data['device_uuid'] ?? null;
$platforms_enabled = get_enabled_platforms($GLOBALS['conn']);
$default_template_uuid = 0 // to be made
?>
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header pt-2 pb-1">
<h4><?= __('templates') ?></h4>
</div>
<div class="card-body pt-0">
<div class="row">
<!-- Default Template -->
<div class="col-sm-3 d-flex">
<div class="card flex-fill d-flex flex-column">
<div class="card-body d-flex flex-column">
<h4><?= __('default') ?></h4>
<img src="/src/images/default-template-icon.png" alt="" class="img-fluid pb-3 flex-grow-1" style="object-fit: contain;">
<?php render_template_controls($default_template_uuid, $device_uuid, 'default', false); ?>
</div>
</div>
</div>
<!-- Platform Templates -->
<?php foreach ($platforms_enabled as $platform) { ?>
<div class="col-sm-3 d-flex">
<div class="card flex-fill d-flex flex-column">
<div class="card-body d-flex flex-column">
<h4><?= htmlspecialchars($platform['data']['platform_name']) ?></h4>
<img src="data:image/jpeg;base64, <?= htmlspecialchars($platform['data']['platform_image']) ?>" alt="" class="img-fluid pb-3 flex-grow-1" style="object-fit: contain;">
<?php render_template_controls($platform['default_template_uuid'], $device_uuid, $platform['data']['platform_slugify'], $platform['data']['platform_uuid']); ?>
</div>
</div>
</div>
<?php } ?>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,4 @@
to be made
<div class="alert alert-gruvbox">Gruvbox styled alert</div>
<pre>
<?php

View File

@@ -0,0 +1,11 @@
<?php
if (!defined('APP_INIT')) {
exit;
}
if (isset($_GET['add'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/autop/pagePlatforms_add.php');
} elseif (isset($_GET['edit'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/autop/pagePlatforms_edit.php');
} else {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/autop/pagePlatforms_list.php');
}

View File

@@ -0,0 +1,96 @@
<?php
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/formBuilder.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-access-control-permissions', 'RW', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['form'] = true;
$jsScriptLoadData['slugify'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
$pageNavbar->AddHTMLButton('<a href="?add="><button class="btn btn-primary"><i class="fas fa-plus text-success"></i>' . __('add_platform') . '</button></a>');
$formBuilder = new formBuilder('add_platform', '<i class="fas fa-edit"></i>', '/platforms/',);
$formBuilder->submitButtonText = __('save');
$formBuilder->submitButtonIcon = '<i class="fas fa-save"></i>';
# Retrieve Information for the page
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('platforms'), 'href' => '/platforms/'));
array_push($GLOBALS['breadCrumbArray'], array('display' => __('add_platform'), 'href' => ''));
# Start page output
$pageNavbar->outPutNavbar();
$formBuilder->startForm();
?>
<form id="FormValidation" enctype="multipart/form-data" method="post" action="/api/v1/platforms">
<div class="card-body">
<div class="form-group form-show-validation row">
<label for="platform_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('platform_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="platform_name" name="platform_name" placeholder="" data-slugify="platform_slugify" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="platform_slugify" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('platform_slugify') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="platform_slugify" name="platform_slugify" placeholder="" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="platform_enabled" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('platform_enabled') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="select2-input">
<select id="platform_enabled" name="platform_enabled" class="form-control" required>
<option value="1" selected><?php echo __('enabled') ?></option>
<option value="0"><?php echo __('disabled') ?></option>
</select>
</div>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="platform_description" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('platform_description') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<textarea class="form-control" id="platform_description" name="platform_description" rows="5"> </textarea>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="platform_image" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('platform_image') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="input-file input-file-image">
<img class="img-upload-preview" width="200" src="/src/images/placeholder200x200.png" alt="preview">
<input type="file" class="form-control form-control-file" id="platform_image" name="platform_image" accept="image/png">
<label for="platform_image" class="label-input-file btn btn-black btn-round">
<span class="btn-label"><i class="fa fa-file-image"></i></span>
<?php echo __('upload_image') ?>
</label>
</div>
</div>
</div>
</div>
<?php $formBuilder->formFooter(); ?>
</form>
<?php $formBuilder->endForm(); ?>

View File

@@ -0,0 +1,119 @@
<?php
use api\classes\API;
use api\classes\API_platforms;
use bin\php\Classes\formBuilder;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/formBuilder.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_platforms.php');
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-platforms', 'RW', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['form'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
$pageNavbar->AddHTMLButton('<a href="?add="><button class="btn btn-primary"><i class="fas fa-plus text-success"></i>' . __('add_platform') . '</button></a>');
$formBuilder = new formBuilder('edit_platform', '<i class="fas fa-edit"></i>', '/platforms/',);
$formBuilder->submitButtonText = __('save');
$formBuilder->submitButtonIcon = '<i class="fas fa-save"></i>';
# Retrieve Information for the page
$platform_uuid = $_GET['edit'];
$_GET['platform_uuid'] = $platform_uuid;
$API_platforms = new API_platforms();
$_GET['builder'] = [1 => ['where' => [0 => 'platform_uuid', 1 => $platform_uuid]]];
$requiredFields = ['platform_uuid' => ['type' => 'uuid']];
$API_platforms->validateData($requiredFields);
$platform_data = $API_platforms->getPlatforms()[0];
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('platforms'), 'href' => '/platforms/'));
array_push($GLOBALS['breadCrumbArray'], array('display' => __('edit_platform'), 'href' => ''));
# Start page output
if ($platform_data) {
$pageNavbar->outPutNavbar();
$formBuilder->startForm();
?>
<form id="FormValidation" enctype="multipart/form-data" method="post" action="/api/v1/platforms">
<input type="hidden" name="platform_uuid" value="<?php echo $platform_data["platform_uuid"] ?>">
<input type="hidden" name="_method" value="PUT">
<div class="card-body">
<div class="form-group form-show-validation row">
<label for="platform_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('platform_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="platform_name" name="platform_name" placeholder="" value="<?php echo $platform_data['platform_name'] ?>" required>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="platform_slugify" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('platform_slugify') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="platform_slugify" name="platform_slugify" placeholder="" value="<?php echo $platform_data['platform_slugify'] ?>" required disabled>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="platform_enabled" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('platform_enabled') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="select2-input">
<select id="platform_enabled" name="platform_enabled" class="form-control" required>
<option value="1" <?php echo(($platform_data['platform_enabled'] == 1) ? 'selected' : '') ?>><?php echo __('enabled') ?></option>
<option value="0" <?php echo(($platform_data['platform_enabled'] == 0) ? 'selected' : '') ?>><?php echo __('disabled') ?></option>
</select>
</div>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="platform_description" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('platform_description') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<textarea class="form-control" id="platform_description" name="platform_description" rows="5"><?php echo $platform_data['platform_description'] ?></textarea>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="platform_image" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('platform_image') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="input-file input-file-image">
<img class="img-upload-preview" width="200" src="data:image/png;base64, <?php echo $platform_data['platform_image'] ?>" alt="preview">
<input type="file" class="form-control form-control-file" id="platform_image" name="platform_image" accept="image/png">
<label for="platform_image" class="label-input-file btn btn-black btn-round">
<span class="btn-label"><i class="fa fa-file-image"></i></span>
<?php echo __('upload_image') ?>
</label>
</div>
</div>
</div>
</div>
<?php
$formBuilder->formFooter();
?>
</form>
<?php
$formBuilder->endForm();
} else {
echo "No Platform found with uuid " . htmlspecialchars($_GET['edit'], ENT_QUOTES, 'UTF-8');
}

View File

@@ -0,0 +1,101 @@
<?php
use api\classes\API;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-platforms', 'RO', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
# PageClasses Setup
$pageNavbar = new pageNavbar(false, '<i class="fas fa-layer-group"></i> Platforms');
$pageNavbar->AddHTMLButton('<a href="?add="><button class="btn btn-primary"><i class="fas fa-plus text-success"></i>' . __('add_platform') . '</button></a>');
# Retrieve Information for the page
$data = $GLOBALS['conn']->query("SELECT * FROM vc_platforms");
# Set breadcrumb data
# Start page output
$pageNavbar->outPutNavbar();
?>
<div class="row g-3 align-items-stretch">
<?php while ($row = $data->fetch_assoc()) { ?>
<div class="col-md-4 px-2">
<div class="card card-post card-round h-100">
<img class="card-img-top img-fluid px-3" src="data:image/png;base64, <?php echo $row['platform_image'] ?>" alt="Card image cap" style="height: 200px; object-fit: scale-down;">
<div class="card-body">
<h3 class="card-title">
<?php
echo $row['platform_name'];
if ($row['platform_enabled']) {
echo ' <i class="fas fa-toggle-on text-success"></i>';
} else {
echo ' <i class="fas fa-toggle-off text-danger"></i>';
}
?>
</h3>
<p class="card-text"><?php echo $row['platform_description'] ?></p>
</div>
<div class="card-footer pb-3 end-0 justify-content-end">
<?php if ($API->checkPermissions('admin-platforms', 'RW', true)) { ?>
<a href="?edit=<?php echo $row['platform_uuid'] ?>" class="btn btn-primary btn-sm">
<i class="fas fa-edit"></i> <?php echo __('edit') ?>
</a>
<?php } ?>
<?php if ($API->checkPermissions('admin-platforms', 'RO', true)) { ?>
<a href="#" class="btn btn-info btn-sm" data-bs-toggle="modal" data-bs-target="#infoModal<?php echo $row['platform_name'] ?>">
<i class="fas fa-info-circle"></i> <?php echo __('info') ?>
</a>
<?php } ?>
</div>
<div class="modal fade" id="infoModal<?php echo $row['platform_name'] ?>" tabindex="-1" aria-labelledby="infoModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content bg-black2">
<div class="modal-header">
<h5 class="modal-title" id="infoModalLabel">
<i class="fas fa-info-circle"></i> <?php echo __('information') ?>
</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<br>
<table class="table table-sm table-striped-bg-black">
<tr>
<td><?php echo __('uuid') ?>:</td>
<td><?php echo $row['platform_uuid'] ?></td>
</tr>
<tr>
<td><?php echo __('create_date') ?>:</td>
<td><?php echo showTime($row['platform_create_timestamp']) ?></td>
</tr>
<tr>
<td><?php echo __('last_modified_date') ?>:</td>
<td><?php showTime($row['platform_modified_timestamp']) ?></td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
</div>

View File

@@ -0,0 +1 @@
to be made

View File

@@ -0,0 +1,11 @@
<?php
if (!defined('APP_INIT')) {
exit;
}
if (isset($_GET['add'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/autop/pageVendors_add.php');
} elseif (isset($_GET['edit'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/autop/pageVendors_edit.php');
} else {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/autop/pageVendors_list.php');
}

View File

@@ -0,0 +1,101 @@
<?php
use api\classes\API;
use bin\php\Classes\formBuilder;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/formBuilder.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_vendors.php');
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-vendors', 'RW', true)) {
echo 'error 401 unauthorized';
exit;
}
# JS Scripts to load for this page
$jsScriptLoadData['form'] = true;
$jsScriptLoadData['slugify'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
$pageNavbar->AddHTMLButton('<a href="?add="><button class="btn btn-primary"><i class="fas fa-plus text-success"></i>' . __('add_vendor') . '</button></a>');
$formBuilder = new formBuilder('add_vendor', '<i class="fas fa-plus"></i>', '/vendors/');
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('add_vendor'), 'href' => '/vendors/'));
# Retrieve Information for the page
# Start page output
$pageNavbar->outPutNavbar();
$formBuilder->startForm();
?>
<form id="FormValidation" enctype="multipart/form-data" method="post" action="/api/v1/vendors">
<input type="hidden" name="_return" value="/vendors/">
<div class="card-body">
<div class="form-group form-show-validation row">
<label for="vendor_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('vendor_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="vendor_name" name="vendor_name" placeholder="" required data-slugify="vendor_slugify"/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="vendor_slugify" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('vendor_slugify') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="vendor_slugify" name="vendor_slugify" placeholder="" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="vendor_enabled" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('vendor_enabled') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="select2-input">
<select id="vendor_enabled" name="vendor_enabled" class="form-control" required>
<option value="1" selected><?php echo __('enabled') ?></option>
<option value="0"><?php echo __('disabled') ?></option>
</select>
</div>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="vendor_description" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('vendor_description') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<textarea class="form-control" id="vendor_description" name="vendor_description" rows="5"></textarea>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="vendor_image" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('vendor_image') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="input-file input-file-image">
<img class="img-upload-preview" width="200" src="/src/images/placeholder200x200.png" alt="preview">
<input type="file" class="form-control form-control-file" id="vendor_image" name="vendor_image" accept="image/png">
<label for="vendor_image" class="label-input-file btn btn-black btn-round">
<span class="btn-label"><i class="fa fa-file-image"></i></span>
<?php echo __('upload_image') ?>
</label>
</div>
</div>
</div>
</div>
<?php
$formBuilder->formFooter();
?>
</form>
<?php $formBuilder->endForm(); ?>

View File

@@ -0,0 +1,115 @@
<?php
use api\classes\API;
use api\classes\API_vendors;
use bin\php\Classes\formBuilder;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/formBuilder.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_vendors.php');
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-vendors', 'RW', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['form'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
$pageNavbar->AddHTMLButton('<a href="?add="><button class="btn btn-primary"><i class="fas fa-plus text-success"></i>' . __('add_vendor') . '</button></a>');
$formBuilder = new formBuilder('edit_vendor', '<i class="fas fa-edit"></i>', '/vendors/',);
$formBuilder->submitButtonText = __('save');
$formBuilder->submitButtonIcon = '<i class="fas fa-save"></i>';
# Retrieve Information for the page
$vendor_uuid = htmlspecialchars($_GET['edit'], ENT_QUOTES, 'UTF-8');
$_GET['vendor_uuid'] = $vendor_uuid;
$API_vendors = new API_vendors();
$_GET['builder'] = [1 => ['where' => [0 => 'vendor_uuid', 1 => $vendor_uuid]]];
$requiredFields = ['vendor_uuid' => ['type' => 'uuid']];
$API_vendors->validateData($requiredFields);
$vendor_data = $API_vendors->getVendors()[0];
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('edit_vendor'), 'href' => '/vendors/'));
# Start page output
$pageNavbar->outPutNavbar();
$formBuilder->startForm();
if ($vendor_data) { ?>
<form id="FormValidation" enctype="multipart/form-data" method="post" action="/api/v1/vendors">
<input type="hidden" name="vendor_uuid" value="<?php echo $vendor_data["vendor_uuid"] ?>">
<input type="hidden" name="_method" value="PUT">
<div class="card-body">
<div class="form-group form-show-validation row">
<label for="vendor_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('vendor_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="vendor_name_edit" name="vendor_name" placeholder="" value="<?php echo $vendor_data['vendor_name'] ?>" required>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="vendor_slugify" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('vendor_slugify') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="vendor_slugify_edit" name="vendor_slugify" placeholder="" value="<?php echo $vendor_data['vendor_slugify'] ?>" required disabled>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="vendor_enabled" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('vendor_enabled') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="select2-input">
<select id="vendor_enabled" name="vendor_enabled" class="form-control" required>
<option value="1" <?php echo(($vendor_data['vendor_enabled'] == 1) ? 'selected' : '') ?>><?php echo __('enabled') ?></option>
<option value="0" <?php echo(($vendor_data['vendor_enabled'] == 0) ? 'selected' : '') ?>><?php echo __('disabled') ?></option>
</select>
</div>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="vendor_description" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('vendor_description') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<textarea class="form-control" id="vendor_description" name="vendor_description" rows="5"><?php echo $vendor_data['vendor_description'] ?></textarea>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="vendor_image" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('vendor_image') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="input-file input-file-image">
<img class="img-upload-preview" width="200" src="data:image/png;base64, <?php echo $vendor_data['vendor_image'] ?>" alt="preview">
<input type="file" class="form-control form-control-file" id="vendor_image" name="vendor_image" accept="image/png">
<label for="vendor_image" class="label-input-file btn btn-black btn-round">
<span class="btn-label"><i class="fa fa-file-image"></i></span>
<?php echo __('upload_image') ?>
</label>
</div>
</div>
</div>
</div>
<?php
$formBuilder->formFooter();
?>
</form>
<?php
$formBuilder->endForm();
} else {
echo "No Vendor found with uuid " . htmlspecialchars($_GET['edit'], ENT_QUOTES, 'UTF-8');
}

View File

@@ -0,0 +1,107 @@
<?php
use api\classes\API;
use api\classes\API_vendors;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
// N/A
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_vendors.php');
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-vendors', 'RO', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions;
# JS Scripts to load for this page
# PageClasses Setup
$pageNavbar = new pageNavbar(false, '<i class="fas fa-microchip"></i> ' . __('vendors'));
$pageNavbar->AddHTMLButton('<a href="?add="><button class="btn btn-primary"><i class="fas fa-plus text-success"></i>' . __('add_vendor') . '</button></a>');
# Retrieve Information for the page
$API_vendors = new API_vendors();
$vendors_data = $API_vendors->getVendors();
# Set breadcrumb data
# Start page output
$pageNavbar->outPutNavbar();
?>
<div class="row g-3 align-items-stretch">
<?php
foreach ($vendors_data as $vendor_data) { ?>
<div class="col-md-4 px-2">
<div class="card card-post card-round h-100">
<img class="card-img-top img-fluid px-3" src="data:image/png;base64, <?php echo $vendor_data['vendor_image'] ?>" alt="Card image cap" style="height: 200px; object-fit: scale-down;">
<div class="card-body">
<h3 class="card-title">
<?php
echo $vendor_data['vendor_name'];
if ($vendor_data['vendor_enabled']) {
echo ' <i class="fas fa-toggle-on text-success"></i>';
} else {
echo ' <i class="fas fa-toggle-off text-danger"></i>';
}
?>
</h3>
<p class="card-text"><?php echo $vendor_data['vendor_description'] ?></p>
</div>
<div class="card-footer pb-3 end-0 justify-content-end">
<?php if ($API->checkPermissions('admin-vendors', 'RW', true)) { ?>
<a href="?edit=<?php echo $vendor_data['vendor_uuid'] ?>" class="btn btn-primary btn-sm">
<i class="fas fa-edit"></i> <?php echo __('edit') ?>
</a>
<?php } ?>
<?php if ($API->checkPermissions('admin-vendors', 'RO', true)) { ?>
<a href="#" class="btn btn-info btn-sm" data-bs-toggle="modal" data-bs-target="#infoModal<?php echo $vendor_data['vendor_name'] ?>">
<i class="fas fa-info-circle"></i> <?php echo __('info') ?>
</a>
<?php } ?>
</div>
<div class="modal fade" id="infoModal<?php echo $vendor_data['vendor_name'] ?>" tabindex="-1" aria-labelledby="infoModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content bg-black2">
<div class="modal-header">
<h5 class="modal-title" id="infoModalLabel">
<i class="fas fa-info-circle"></i> <?php echo __('information') ?>
</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<br>
<table class="table table-sm table-striped-bg-black">
<tr>
<td><?php echo __('uuid') ?>:</td>
<td><?php echo $vendor_data['vendor_uuid'] ?></td>
</tr>
<tr>
<td><?php echo __('create_date') ?>:</td>
<td><?php showTime($vendor_data['vendor_create_timestamp']); ?></td>
</tr>
<tr>
<td><?php echo __('last_modified_date') ?>:</td>
<td><?php showTime($vendor_data['vendor_modified_timestamp']); ?></td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
</div>

View File

@@ -0,0 +1,15 @@
<?php
if (!defined('APP_INIT')) {
exit;
}
if (!$GLOBALS['modules_enabled']['customers']) {
echo '405 Not Allowed';
exit;
}
if (isset($_GET['view'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/customers/pageCompanies_company_view.php');
} else {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/customers/pageCompanies_view.php');
}

View File

@@ -0,0 +1,126 @@
<?php
use api\classes\API_servers;
use bin\php\Classes\serverOverviewBuilder;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
if (!$GLOBALS['modules_enabled']['customers']) {
echo '405 Not Allowed';
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/serverOverviewBuilder.php');
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_servers.php';
# Check permissions
$API_servers = new API_servers();
if (!$API_servers->checkPermissions('customer-companies', 'RO', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['datepicker'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
$jsScriptLoadData['delete_confirmation'] = true;
$jsScriptLoadData['datatables'] = true;
$jsScriptLoadData['multiFilterSelectServers'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
$serverOverview = new serverOverviewBuilder();
# Retrieve Information for the page
$company_uuid = htmlspecialchars($_GET['view'], ENT_QUOTES, 'UTF-8');
$stmt = $GLOBALS['conn']->prepare("SELECT * FROM companies WHERE company_uuid = ?");
$stmt->bind_param('s', $company_uuid);
$stmt->execute();
$result = $stmt->get_result();
$company_data = $result->fetch_assoc();
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('companies'), 'href' => '/companies/'));
array_push($GLOBALS['breadCrumbArray'], array('display' => $company_data['company_name'], 'href' => ''));
# Retrieve Information for the page
$company_uuid = htmlspecialchars($_GET['view'], ENT_QUOTES, 'UTF-8');
$_GET['company_uuid'] = $company_uuid;
$_GET['builder'] = [1 => ['where' => [0 => 'company_uuid', 1 => $company_uuid]]];
$requiredFields = ['company_uuid' => ['type' => 'uuid']];
$API_servers->postedData = $_GET;
$API_servers->validateData($requiredFields);
$servers_data = $API_servers->getServers(true);
if (count($servers_data) > 0) {
$serverOverview->servers = $servers_data;
$serverOverview->processServerData();
$serverOverview->showDelBtn = false;
$serverOverview->showCompanies = false;
}
# Start page output
$pageNavbar->outPutNavbar();
?>
<div class="card">
<div class="card-body">
<div class="row">
<h1>
<i class="<?php echo $GLOBALS['pages']['customers']['companies']['page_icon'] ?>"></i> <?php echo $company_data['company_name'] ?>
</h1>
</div>
<div class="col-md-6 col-lg-6">
<table>
<tr>
<td>company_uuid:</td>
<td><?php echo $company_data['company_uuid'] ?></td>
</tr>
<tr>
<td>source_uuid:</td>
<td><?php echo $company_data['source_uuid'] ?></td>
</tr>
<tr>
<td>company_source_id:</td>
<td><?php echo $company_data['company_source_id'] ?></td>
</tr>
<tr>
<td>company_source_id2:</td>
<td><?php echo $company_data['company_source_id2'] ?></td>
</tr>
<tr>
<td>company_name:</td>
<td><?php echo $company_data['company_name'] ?></td>
</tr>
<tr>
<td>company_state:</td>
<td><?php echo $company_data['company_state'] ?></td>
</tr>
<tr>
<td>company_create_timestamp:</td>
<td><?php echo $company_data['company_create_timestamp'] ?></td>
</tr>
<tr>
<td>company_modified_timestamp:</td>
<td><?php echo $company_data['company_modified_timestamp'] ?></td>
</tr>
</table>
</div>
</div>
</div>
<?php
if ($GLOBALS['modules_enabled']['servers'] && $API_servers->checkPermissions('servers', 'RO', true)) {
if (count($servers_data) > 0) {
$serverOverview->serverOverviewOutPut();
}
}
?>

View File

@@ -0,0 +1,137 @@
<?php
if (!defined('APP_INIT')) {
exit;
}
if (!$GLOBALS['modules_enabled']['customers']) {
echo '405 Not Allowed';
exit;
}
# IDE Section
# Includes Section
use api\classes\API;
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_permissions.php');
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php';
# Check permissions
$API = new API();
if (!$API->checkPermissions('customer-companies', 'RO', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['delete_confirmation'] = true;
$jsScriptLoadData['datatables'] = true;
$jsScriptLoadData['multiFilterSelect'] = true;
$jsScriptLoadData['datepicker'] = true;
$jsScriptLoadData['activateCompany'] = true;
# PageClasses Setup
# Retrieve Information for the page
if (!isset($_GET['all'])) {
$query = "SELECT companies.*, COUNT(servers.company_uuid) AS server_count FROM companies LEFT JOIN servers ON companies.company_uuid = servers.company_uuid WHERE company_state = 'active' GROUP BY companies.company_uuid ORDER BY companies.company_name ASC;";
} else {
$query = "SELECT companies.*, COUNT(servers.company_uuid) AS server_count FROM companies LEFT JOIN servers ON companies.company_uuid = servers.company_uuid GROUP BY companies.company_uuid ORDER BY companies.company_name ASC;";
}
$stmt = $GLOBALS['conn']->query($query);
$stompjes = array();
$companies = [];
while ($row = $stmt->fetch_assoc()) {
$companies[$row['company_uuid']] = $row;
}
# Start page output
?>
<div class="form-group form-show-validation row mb-3">
<div class="col-5">
<h2>
<i class="<?php echo $GLOBALS['pages']['customers']['companies']['page_icon'] ?>"></i> &nbsp; <?php echo __('companies') ?>
</h2>
</div>
<div class="col d-flex justify-content-end px-1">
<div class="col-lg-auto col-md-auto col-sm-auto">
<?php
if (!isset($_GET['all'])) { ?>
<a class="btn btn-secondary" href="?all">
<i class="fa-solid fa-filter"></i> &nbsp; <?php echo __('show_all') ?>
</a>
<?php } else { ?>
<a class="btn btn-secondary" href="?">
<i class="fa-solid fa-filter"></i> &nbsp; <?php echo __('show_active') ?>
</a>
<?php } ?>
</div> &nbsp;
<form method="post" action="/api/v1/sources/inserve/sync-companies/">
<input type="hidden">
<div class="col-lg-auto col-md-auto col-sm-auto">
<button class="btn btn-primary">
<i class="fa-solid fa-arrow-rotate-right"></i> &nbsp;<?php echo __('sync') ?>
</button>
</div>
</form>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="table-responsive">
<table class="multi-filter-select display table table-striped table-hover" data-skip-columns="0,1,2,4" data-page-length="50">
<thead>
<tr>
<th><?php echo __('company_name') ?></th>
<th><?php echo __('company_id') ?></th>
<th><?php echo __('company_debtor') ?></th>
<th><?php echo __('company_state') ?></th>
<?php if ($GLOBALS['modules_enabled']['servers']) { ?>
<th><?php echo __('server_count') ?></th>
<?php } ?>
<th><?php echo __('actions') ?></th>
</tr>
</thead>
<tfoot>
<tr>
<th><?php echo __('company_name') ?></th>
<th><?php echo __('company_id') ?></th>
<th><?php echo __('company_debtor') ?></th>
<th><?php echo __('company_state') ?></th>
<?php if ($GLOBALS['modules_enabled']['servers']) { ?>
<th><?php echo __('server_count') ?></th>
<?php } ?>
<th><?php echo __('actions') ?></th>
</tr>
</tfoot>
<tbody>
<?php foreach ($companies as $company) { ?>
<tr data-item-id="<?php echo $company['company_uuid'] ?>">
<td class="text-nowrap"><?php echo $company['company_name'] ?></td>
<td class="text-nowrap"><?php echo $company['company_source_id'] ?></td>
<td class="text-nowrap"><?php echo $company['company_source_id2'] ?></td>
<td class="text-nowrap"><?php echo $company['company_state'] ?></td>
<?php if ($GLOBALS['modules_enabled']['servers']) { ?>
<td class="text-nowrap"><?php echo $company['server_count'] ?></td>
<?php } ?>
<td>
<a href="/companies?view=<?php echo $company['company_uuid'] ?>" class="btn btn-info btn-sm btn-rounded" data-item-uuid="<?php echo $company['company_uuid'] ?>"><i class="fa-solid fa-eye"></i></a>
<?php if ($API->checkPermissions('customer-companies', 'RW', true) && $company['server_count'] == 0) { ?>
<a class="btn btn-<?php echo ($company['company_state'] != 'active') ? 'success' : 'danger' ?> btn-sm btn-rounded" data-item-company-state="" data-item-uuid="<?php echo $company['company_uuid'] ?>" data-item-state="<?php echo $company['company_state'] ?>"><i class="fa-solid <?php echo ($company['company_state'] != 'active') ? 'fa-plus' : 'fa-xmark' ?>"></i></a>
<?php } ?>
</td>
</tr>
<?php } ?>
</tbody>
</table>
<br>
</div>
</div>
</div>

View File

@@ -0,0 +1,196 @@
<?php
use api\classes\API;
if (!defined('APP_INIT')) {
exit;
}
if (!$GLOBALS['modules_enabled']['office']) {
echo '405 Not Allowed';
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_permissions.php');
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php';
# Check permissions
$API = new API();
if (!$API->checkPermissions('ofice-stompjes', 'RO', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['delete_confirmation'] = true;
$jsScriptLoadData['stompjes'] = true;
$jsScriptLoadData['datatables'] = true;
$jsScriptLoadData['multiFilterSelect'] = true;
$jsScriptLoadData['datepicker'] = true;
# PageClasses Setup
# Retrieve Information for the page
$stmt = $GLOBALS['conn']->query("SELECT user_uuid, user_full_name, user_first_name, user_profile_picture_thumbnail, user_stompable, user_email FROM vc_users WHERE user_stompable = '1'");
$administrators = [];
while ($row = $stmt->fetch_assoc()) {
$administrators[$row['user_uuid']] = $row;
$administrators[$row['user_uuid']]['amount'] = 0;
}
if (!isset($_GET['fd'])) {
$SelectFromDate = strtotime(date('Y-m-01'));
} else {
$date = str_replace('/', '-', htmlspecialchars($_GET['fd'], ENT_QUOTES, 'UTF-8'));
$SelectFromDate = strtotime($date . ' 00:00:00');
}
if (!isset($_GET['td'])) {
$SelectTillDate = time();
} else {
$date = str_replace('/', '-', htmlspecialchars($_GET['td'], ENT_QUOTES, 'UTF-8'));
$SelectTillDate = strtotime($date . ' 23:59:59');
}
$stompjes = array();
$stmt = $GLOBALS['conn']->query("SELECT stomp_uuid, office_stompjes.user_uuid, user_full_name, user_first_name, stomp_timestamp FROM office_stompjes
INNER JOIN vc_users ON office_stompjes.user_uuid = vc_users.user_uuid
WHERE stomp_timestamp BETWEEN '$SelectFromDate' AND '$SelectTillDate'
AND user_stompable = '1'
ORDER BY stomp_timestamp DESC");
while ($row = $stmt->fetch_assoc()) {
array_push($stompjes, $row);
$administrators[$row['user_uuid']]['amount']++;
}
# Start page output
?>
<script>
const stompData = <?php echo json_encode($stompjes); ?>;
</script>
<div class="form-group form-show-validation row mb-3">
<div class="col-5">
<h2>
<i class="<?php echo $GLOBALS['pages']['office']['stompjeslist']['page_icon'] ?>"></i> &nbsp; <?php echo __('stompjeslist') ?>
</h2>
</div>
<div class="col d-flex justify-content-end px-1">
<div class="col-lg-auto col-md-auto col-sm-auto mt-sm-1 px-1">
<label>
<h5><?php echo __('from') ?>: </h5>
</label>
</div>
<div class="col-lg-auto col-md-auto col-sm-auto">
<div class="input-group">
<input type="text" id="fd" class="form-control" data-datepicker="true" value="<?php echo date('d/m/Y', $SelectFromDate) ?>"/>
<span class="input-group-text"><i class="fa fa-calendar-check"></i></span>
</div>
</div>
<div class="col-lg-auto col-md-auto col-sm-auto mt-sm-1 px-2">
<label>
<h5><?php echo __('to') ?>: </h5>
</label>
</div>
<div class="col-lg-auto col-md-auto col-sm-auto px-2">
<div class="input-group">
<input type="text" id="td" class="form-control" data-datepicker="true" value="<?php echo date('d/m/Y', $SelectTillDate) ?>"/>
<span class="input-group-text"><i class="fa fa-calendar-check"></i></span>
</div>
</div>
<div class="col-lg-auto col-md-auto col-sm-auto">
<a id="datePicker" class="btn btn-primary"><i class="fa-solid fa-arrow-rotate-right"></i></a>
</div>
</div>
</div>
<div class="card">
<div class="card-body">
<canvas id="stompjesChart" height="50"></canvas>
</div>
</div>
<div class="row align-content-center">
<?php foreach ($administrators as $administrator) {
if ($administrator['user_email'] != 'superuser') { ?>
<div class="col-sm-6 col-md-3 flex-shrink-0">
<div class="card card-stats card-round">
<div class="card-body">
<div class="row align-items-center">
<div class="col-icon">
<div class="avatar-l">
<img class="avatar-img rounded-circle" src="data:image/png;base64,<?php echo str_replace("'", '', $administrator['user_profile_picture_thumbnail']) ?>" height="50px" alt="">
</div>
</div>
<div class="col col-stats ms-3 ms-sm-0">
<div class="numbers">
<p class="card-category"><?php echo $administrator['user_first_name'] ?></p>
<h4 class="card-title" id="count-<?php echo $administrator['user_uuid'] ?>"><?php echo $administrator['amount'] ?></h4>
</div>
</div>
<div class="col col-stats ms-3 ms-sm-0">
<a href="#" class="btn btn-warning btn-lg btn-rounded stomp-btn w-100 <?php echo (!$API->checkPermissions('ofice-stompjes-canstomp', 'RW', true)) ? 'disabled' : '' ?>" data-item-uuid="<?php echo $administrator['user_uuid'] ?>" data-item-name="user_uuid" data-api-url="/api/v1/office/stompjes/"><i class="fa-solid fa-hand-fist"></i></a>
</div>
</div>
</div>
</div>
</div>
<?php }
} ?>
</div>
<div class="card">
<div class="card-body">
<div class="table-responsive">
<table class="multi-filter-select display table table-striped table-hover" data-skip-columns="0,2,3" data-page-length="50">
<thead>
<tr>
<th></th>
<th><?php echo __('first_name') ?></th>
<th><?php echo __('time') ?></th>
<?php if ($API->checkPermissions('ofice-stompjes', 'RW', true)) { ?>
<th><?php echo __('actions') ?></th>
<?php } ?>
</tr>
</thead>
<tfoot>
<tr>
<th></th>
<th><?php echo __('first_name') ?></th>
<th><?php echo __('time') ?></th>
<?php if ($API->checkPermissions('ofice-stompjes', 'RW', true)) { ?>
<th><?php echo __('actions') ?></th>
<?php } ?>
</tr>
</tfoot>
<tbody>
<?php foreach ($stompjes as $stompje) {
if ($administrators[$stompje['user_uuid']]['user_email'] != 'superuser') { ?>
<tr data-item-id="<?php echo $stompje['stomp_uuid']; ?>" data-user-uuid=<?php echo $stompje['user_uuid']; ?>>
<td class="text-nowrap">
<div class="avatar-sm ">
<img class="avatar-img rounded-circle" src="data:image/png;base64,<?php echo str_replace("'", '', $administrators[$stompje['user_uuid']]['user_profile_picture_thumbnail']) ?>" height="50px" alt="">
</div>
</td>
<td class="text-nowrap"><?php echo $administrators[$stompje['user_uuid']]['user_first_name'] ?></td>
<td class="text-nowrap"><?php echo date('d-m-y H:i:s', $stompje['stomp_timestamp']) ?></td>
<?php if ($API->checkPermissions('ofice-stompjes', 'RW', true)) { ?>
<td>
<a href="#" class="btn btn-danger btn-sm btn-rounded stomp-delete-btn" data-item-uuid="<?php echo $stompje['stomp_uuid'] ?>" data-api-url="/api/v1/office/stompjes/" data-item-name="stomp_uuid"><i class="fas fa-trash-alt"></i></a>
</td>
<?php } ?>
</tr>
<?php }
} ?>
</tbody>
</table>
<br>
</div>
</div>
</div>

View File

@@ -0,0 +1,12 @@
<div class="card my-0">
<div class="card-body py-0 border">
<h5>
Sentri<br> Made by:
<a class="text-decoration-none" href="https://marcomooij.net" target="_blank">Marco Mooij</a><br> Version 1.2
</h5>
</div>
</div>
<hr>
<h4>Release notes and roadmap can be found
<a class="text-warning" href="https://docs.sentri.mooij.me/Release%20notes/">here</a>.
</h4>

View File

@@ -0,0 +1,68 @@
<?php
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
use api\classes\API;
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php';
$API = new API();
function showCard($module_name, $page_name, $width = 3)
{
$page = $GLOBALS['pages'][$module_name][$page_name];
?>
<div class="col">
<a href="<?php echo $page['page_url'] ?>">
<div class="card-pricing2 card-<?php echo $page['page_color'] ?> text-center h-100">
<div class="pricing-header">
<h3 class="fw-bold mb-3 text-center"><?php echo __($page['page_name']) ?></h3>
</div>
<div class="price-value">
<div class="value ">
<span class="amount"><i class="text-<?php echo $page['page_color'] ?> <?php echo $page['page_icon'] ?> mt-4"></i><span></span></span>
</div>
</div>
<div class="mt-5">
<small>
<br>
<?php echo __($page['page_description']) ?>
</small>
</div>
</div>
</a>
</div>
<?php } ?>
<div class="row row-cols-1 row-cols-md-3 row-cols-sm-2 g-3">
<?php
if ($GLOBALS['modules_enabled']['customers'] && $API->checkPermissions('customer-companies', 'RO', true)) {
showCard('customers', 'companies', '6');
}
if ($GLOBALS['modules_enabled']['servers'] && $API->checkPermissions('servers', 'RO', true)) {
showCard('servers', 'server_overview', '6');
}
if ($GLOBALS['modules_enabled']['office'] && $API->checkPermissions('ofice-stompjes', 'RO', true)) {
showCard('office', 'stompjeslist');
}
if ($GLOBALS['modules_enabled']['autop']) {
showCard('autop', 'platforms');
showCard('autop', 'vendors');
showCard('autop', 'devices');
showCard('autop', 'device_settings');
showCard('autop', 'provisioning');
showCard('autop', 'phonebooks');
}
if ($GLOBALS['modules_enabled']['system']) {
showCard('system', 'access_control');
showCard('system', 'systemconfig');
}
?>
</div>

View File

@@ -0,0 +1,2 @@
<?php
echo '404 not found';

View File

@@ -0,0 +1,9 @@
<?php
if (!defined('APP_INIT')) {
exit;
}
if (isset($_GET['edit'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/pageUserProfile_edit.php');
} else {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/pageUserProfile_view.php');
}

View File

@@ -0,0 +1,108 @@
<?php
use bin\php\Classes\formBuilder;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/formBuilder.php');
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['Generatepassword'] = true;
$jsScriptLoadData['passwordShowHide'] = true;
$jsScriptLoadData['passwordRegen'] = true;
$jsScriptLoadData['enableButtonOnImageUpload'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
$formBuilder = new formBuilder('Edit profile', '<i class="fas fa-plus"></i>', '/userprofile/');
# Retrieve Information for the page
$user_groups_data = $GLOBALS['conn']->query("SELECT * FROM vc_user_groups WHERE user_group_type = 'admin' ORDER BY user_group_weight DESC");
$user_groups = array();
$user_data = false;
while ($user_group = $user_groups_data->fetch_assoc()) {
array_push($user_groups, $user_group);
$last_weight = $user_group['user_group_weight'];
}
$user_uuid = $_SESSION['user']['user_uuid'];
$stmt = $GLOBALS['conn']->prepare("SELECT * FROM vc_users INNER JOIN vc_user_groups ON vc_users.user_group_uuid = vc_user_groups.user_group_uuid WHERE user_uuid = ?");
$stmt->bind_param("s", $user_uuid);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows == 1) {
$user_data = $result->fetch_assoc();
}
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('user_profile'), 'href' => '/userprofile/'));
array_push($GLOBALS['breadCrumbArray'], array('display' => __('edit'), 'href' => ''));
# Start page output
$pageNavbar->outPutNavbar();
if ($user_data) {
$formBuilder->startForm(); ?>
<form id="FormValidation" enctype="multipart/form-data" method="post" action="/api/v1/users/">
<input type="hidden" name="user_uuid" value="<?php echo $user_uuid; ?>"/>
<div class="card-body">
<div class="form-group form-show-validation row">
<label for="user_email" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('user_email') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="email" class="form-control" id="user_email" name="user_email" value="<?php echo $user_data['user_email'] ?>" placeholder="user@example.xxx" required autofill="off" autocomplete="off"/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="user_first_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('first_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="user_first_name" name="user_first_name" value="<?php echo $user_data['user_first_name'] ?>" required/>
</div>
</div>
<!-- Last Name -->
<div class="form-group form-show-validation row">
<label for="user_last_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('last_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="user_last_name" name="user_last_name" value="<?php echo $user_data['user_last_name'] ?>" required/>
</div>
</div>
<!-- Phone Number -->
<div class="form-group form-show-validation row">
<label for="user_phone_number" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('phone_number') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="user_phone_number" name="user_phone_number" placeholder="+1234542069" value="<?php echo $user_data['user_phone_number'] ?>"/>
</div>
</div>
<!-- Preferred Language -->
<div class="form-group form-show-validation row">
<label for="user_pref_language" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('preferred_language') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<select id="user_pref_language" name="user_pref_language" class="form-control">
<?php foreach (scandir($_SERVER['DOCUMENT_ROOT'] . '/bin/locales/') as $file) {
if (pathinfo($file, PATHINFO_EXTENSION) === 'php') {
$language = str_replace('.php', '', $file); ?>
<option <?php echo(($user_data['user_pref_language'] == $language) ? 'selected' : '') ?> value="<?php echo $language ?>"><?php echo __($language) ?></option>
<?php }
} ?>
</select>
</div>
</div>
</div>
<?php $formBuilder->formFooter(); ?>
</form>
<?php $formBuilder->endForm(); ?><?php } else { ?>
<p>no admin with this uuid found.</p>
<?php } ?>

View File

@@ -0,0 +1,332 @@
<?php
use api\classes\API_apitoken;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_apitoken.php');
# Check permissions
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['enableButtonOnImageUpload'] = true;
$jsScriptLoadData['delete_confirmation'] = true;
$jsScriptLoadData['CopyTargetData'] = true;
$jsScriptLoadData['updateToggle'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(false, '<i class="fa-solid fa-address-card"></i> ' . $_SESSION['user']['user_full_name'] . ' ' . strtolower(__('user_profile')));
# Retrieve Information for the page
$user_groups_data = $GLOBALS['conn']->query("SELECT * FROM vc_user_groups WHERE user_group_type = 'admin' ORDER BY user_group_weight DESC");
$user_groups = array();
$admin_data = false;
while ($user_group = $user_groups_data->fetch_assoc()) {
array_push($user_groups, $user_group);
$last_weight = $user_group['user_group_weight'];
}
$user_uuid = $_SESSION['user']['user_uuid'];
$stmt = $GLOBALS['conn']->prepare("SELECT * FROM vc_users INNER JOIN vc_user_groups ON vc_users.user_group_uuid = vc_user_groups.user_group_uuid WHERE user_uuid = ?");
$stmt->bind_param("s", $user_uuid);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows == 1) {
$user_data = $result->fetch_assoc();
}
$_GET['user_uuid'] = $user_uuid;
$requiredFields = ['user_uuid' => ['type' => 'uuid']];
$API_token = new API_apitoken();
$API_token->validateData($requiredFields);
$apitokens = $API_token->getTokens();
$new_api_token = false;
if (isset($_SESSION['tmp_api_token'])) {
$new_api_token = $_SESSION['tmp_api_token'];
unset($_SESSION['tmp_api_token']);
}
if ($API_token->checkPermissions('admin-access-admins', 'RW', true)) {
$pageNavbar->AddHTMLButton('<a class="btn btn-primary mx-3" type="button" href="?edit=' . $_SESSION['user']['user_uuid'] . '"><i class="fas fa-edit"></i> ' . __('edit') . '</a>');
};
# Set breadcrumb data
# Start page output
$pageNavbar->outPutNavbar();
if ($user_data) { ?>
<div class="row d-flex align-items-stretch pb-2">
<div class="col-md-4 pb-4">
<div class="card h-100">
<div class="card-body">
<form method="POST" action="/api/v1/users/avatar/" enctype="multipart/form-data">
<input type="hidden" name="user_uuid" value="<?php echo $user_data['user_uuid'] ?>">
<h1 class="text-center"><?php echo $user_data['user_full_name'] ?></h1>
<div class="form-group form-show-validation row align-items-center justify-content-center">
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="input-file input-file-image">
<img class="img-upload-preview w-100" src="<?php echo(($user_data['user_profile_picture'] != null) ? 'data:image/png;base64, ' . $user_data['user_profile_picture'] : '/src/images/user-avatar-default-small.png') ?>" alt="user_profile_picture">
<input type="file" class="form-control form-control-file" id="user_profile_picture" name="user_profile_picture" accept="image/png" data-enable-button="user_profile_change">
</div>
</div>
</div>
<div class="form-group form-show-validation row justify-content-center">
<div class="d-flex flex-column align-items-center">
<label for="user_profile_picture" class="label-input-file btn btn-black btn-round mb-4">
<span class="btn-label"><i class="fa fa-file-image"></i></span>
<?php echo __('upload_image') ?>
</label>
<button id="user_profile_change" type="submit" class="btn btn-primary opacity-0 transition-opacity" disabled>
<i class="fa-solid fa-floppy-disk"></i> <?php echo __('save') ?>
</button>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="col-md-8 pb-4">
<div class="card h-100">
<div class="card-body">
<table>
<tr>
<td>user_uuid:</td>
<td><?php echo $user_data['user_uuid'] ?></td>
</tr>
<tr>
<td>user_group_uuid:</td>
<td><?php echo $user_data['user_group_uuid'] ?></td>
</tr>
<tr>
<td>user_group_name:</td>
<td><?php echo $user_data['user_group_name'] ?></td>
</tr>
<tr>
<td>user_group_slugify:</td>
<td><?php echo $user_data['user_group_slugify'] ?></td>
</tr>
<tr>
<td>user_email:</td>
<td><?php echo $user_data['user_email'] ?></td>
</tr>
<tr>
<td>user_first_name:</td>
<td><?php echo $user_data['user_first_name'] ?></td>
</tr>
<tr>
<td>user_last_name:</td>
<td><?php echo $user_data['user_last_name'] ?></td>
</tr>
<tr>
<td>user_full_name:</td>
<td><?php echo $user_data['user_full_name'] ?></td>
</tr>
<tr>
<td>user_phone_number:&nbsp;&nbsp;</td>
<td><?php echo $user_data['user_phone_number'] ?></td>
</tr>
<tr>
<td>user_status:&nbsp;&nbsp;</td>
<td><?php echo $user_data['user_status'] ?></td>
</tr>
<tr>
<td>user_password_reset_expires:&nbsp;&nbsp;</td>
<td><?php echo $user_data['user_password_reset_expires'] ?></td>
</tr>
<tr>
<td>user_two_factor_enabled:&nbsp;&nbsp;</td>
<td><?php echo $user_data['user_two_factor_enabled'] ?></td>
</tr>
<tr>
<td>user_verified_email:&nbsp;&nbsp;</td>
<td><?php echo $user_data['user_verified_email'] ?></td>
</tr>
<tr>
<td>user_verified_phone:&nbsp;&nbsp;</td>
<td><?php echo $user_data['user_verified_phone'] ?></td>
</tr>
<tr>
<td>user_create_timestamp:&nbsp;&nbsp;</td>
<td><?php showTime($user_data['user_create_timestamp']); ?></td>
</tr>
<tr>
<td>user_modified_timestamp:&nbsp;&nbsp;</td>
<td><?php showTime($user_data['user_modified_timestamp']); ?></td>
</tr>
<tr>
<td>user_last_login_timestamp:&nbsp;&nbsp;</td>
<td><?php showTime($user_data['user_last_login_timestamp']); ?></td>
</tr>
<tr>
<td>user_login_attempts:&nbsp;&nbsp;</td>
<td><?php echo $user_data['user_login_attempts'] ?></td>
</tr>
<tr>
<td>user_pref_language:&nbsp;&nbsp;</td>
<td><?php echo $user_data['user_pref_language'] ?></td>
</tr>
<?php if ($GLOBALS['modules_enabled']['office']) { ?>
<tr>
<td>user_stompable:&nbsp;&nbsp;</td>
<td><?php echo $user_data['user_stompable'] ?></td>
</tr>
<?php } ?>
</table>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="card">
<div class="card-header pt-2 pb-1">
<h4>Email setttings</h4>
</div>
<div class="card-body">
to be made later
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header pt-2 pb-1">
<h4><?php echo __('user_management') ?></h4>
</div>
<div class="card-body">
<div id="mfa-enabled-row" class="row" style="display: <?php echo(($_SESSION['user']['user_two_factor_enabled'] == 1) ? '' : 'none') ?>">
<div class="col-auto">
<a href="#" class="btn btn-danger delete-btn" data-item-uuid="<?php echo $user_uuid ?>" data-api-url="/api/v1/users/mfa/" data-delete-action='{"mfa-enabled-row":"hide", "mfa-disabled-row":"show"}' data-item-name='user_uuid'>
<i class="fa-solid fa-lock"></i> <?php echo __('reset_mfa') ?>
</a>
</div>
</div>
<div id="mfa-disabled-row" class="row" style="display: <?php echo(($_SESSION['user']['user_two_factor_enabled'] == 1) ? 'none' : '') ?>">
<div class="col-auto">
<a class="btn btn-primary" href="/login/mfaSetup.php">
<i class="fa-solid fa-lock"></i> <?php echo __('set_mfa') ?>
</a>
</div>
</div>
<div class="row">
<div class="col-auto">
<a class="btn btn-primary mt-2" href="/login/resetPassword.php" disabled="">
<i class="fa-solid fa-lock"></i> <?php echo __('reset_password') ?>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header pt-2 pb-1">
<h4 class="mb-0">User history</h4>
</div>
<div class="card-body">
To be made. Its going show the history of the user.
</div>
</div>
</div>
</div>
<?php if ($API_token->checkPermissions('user-apitoken-self', 'RO', true)) { ?>
<div class="row">
<div class="col-md-12">
<?php if ($new_api_token) { ?>
<div class="card bg-primary text-center">
<div class="card-body">
<h4><?php echo __('api_token_created') ?>!</h4>
<p>This token will be visible only now, please copy it now if you ever want to use it: </p>
<div class="d-flex justify-content-center align-items-center gap-2">
<div id="new-api-token" class="text-break" data-copy-data="<?php echo $new_api_token ?>">
<?php echo $new_api_token ?>
</div>
<button type="button" class="btn btn-sm btn-outline-dark" data-copy-target="new-api-token" title="Copy Token">
<i class="fa-solid fa-copy"></i> Copy
</button>
</div>
</div>
</div>
<?php } ?>
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center pt-2 pb-1">
<h4 class="mb-0"><?php echo __('api_tokens') ?></h4>
<?php if ($API_token->checkPermissions('user-apitoken-self', 'RW', true)) { ?>
<form method="POST" action="/api/v1/users/apitoken/">
<input type="hidden" name="user_uuid" value="<?php echo $user_uuid ?>">
<input type="hidden" name="_return" value="/userprofile/">
<button type="submit" href="#" class="btn btn-primary">
<i class="fa-solid fa-plus"></i> <?php echo __('generate_new_api_token') ?>
</button>
</form>
<?php } ?>
</div>
<div class="card-body">
<table class="table table-hover table-striped">
<thead>
<tr>
<th>Token id</th>
<th>Expiration</th>
<th>Created</th>
<th>Last used</th>
<th>Revoked</th>
</tr>
</thead>
<tbody>
<?php foreach ($apitokens as $token_data) { ?>
<tr>
<td class="text-nowrap" style="max-width: 100%;">
<div class="d-flex align-items-center gap-2" style="max-width: 100%;">
<div class="text-truncate" style="max-width: 200px;" id="<?php echo $token_data['api_token_uuid'] ?>" data-copy-data="<?php echo $token_data['api_token_uuid']; ?>">
<?php echo $token_data['api_token_uuid']; ?>
</div>
<button type="button" class="btn btn-sm btn-outline-secondary" data-copy-target="<?php echo $token_data['api_token_uuid'] ?>" title="Copy Token">
<i class="fa-solid fa-copy"></i>
</button>
</div>
</td>
<td><?php showTime($token_data['api_token_expiration_timestamp']) ?></td>
<td><?php showTime($token_data['api_token_created_timestamp']) ?></td>
<td><?php showTime($token_data['api_token_last_used_timestamp']) ?></td>
<td>
<label class="switch">
<input type="checkbox" class="checkbox" data-api-data='<?php echo json_encode(['api_token_uuid' => $token_data['api_token_uuid'], 'api_token_revoked' => $token_data['api_token_revoked'] ? 1 : 0]) ?>' data-api-changevalue="api_token_revoked" data-api-url="/api/v1/users/apitoken/" <?php echo((($token_data['api_token_revoked'])) ? 'checked' : '') ?>>
<div class="slider"></div>
</label>
</td>
<?php if ($API_token->checkPermissions('user-apitoken-self', 'RW', true)) { ?>
<td class="text-nowrap">
<a href="#" class="btn btn-danger btn-sm btn-rounded delete-btn" data-item-uuid="<?php echo $token_data['api_token_uuid'] ?>" data-item-name="api_token_uuid" data-api-url="/api/v1/users/apitoken/"><i class="fas fa-trash-alt"></i></a>
</td>
<?php } ?>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<?php } ?><?php } else {
echo 'user not found';
}

View File

@@ -0,0 +1,15 @@
<?php
if (!defined('APP_INIT')) {
exit;
}
if (!$GLOBALS['modules_enabled']['servers']) {
echo '405 Not Allowed';
exit;
}
if (isset($_GET['view'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/servers/pageServerOverview_server_view.php');
} else {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/servers/pageServerOverview_view.php');
}

View File

@@ -0,0 +1,460 @@
<?php
use api\classes\API;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
if (!$GLOBALS['modules_enabled']['servers']) {
echo '405 Not Allowed';
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php';
# Check permissions
$API = new API();
if (!$API->checkPermissions('servers', 'RO', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['delete_confirmation'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
$jsScriptLoadData['codeblocks'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
# Retrieve Information for the page
$server_uuid = htmlspecialchars($_GET['view'], ENT_QUOTES, 'UTF-8');
$stmt = $GLOBALS['conn']->prepare("SELECT * FROM servers WHERE server_uuid = ?");
$stmt->bind_param('s', $server_uuid);
$stmt->execute();
$result = $stmt->get_result();
$server_data = $result->fetch_assoc();
if ($GLOBALS['modules_enabled']['customers']) {
$companies_data = $GLOBALS['conn']->query("SELECT company_uuid, company_name FROM companies WHERE company_state = 'active'");
$companies = array();
while ($company_data = $companies_data->fetch_assoc()) {
array_push($companies, $company_data);
}
}
# Retrieve Information for the page
$user_groups_data = $GLOBALS['conn']->query("SELECT * FROM vc_user_groups WHERE user_group_type = 'admin' ORDER BY user_group_weight DESC");
# memory
$mem = isset($server_data['server_memory']) ? (float)$server_data['server_memory'] : 0;
$demand = isset($server_data['server_memory_demand']) ? (float)$server_data['server_memory_demand'] : 0;
if ($mem > 0) {
$mem_percent = ($demand / $mem) * 100;
$mem_percent_numb = round($mem_percent, 1);
$mem_demand = round($mem_percent, 1) . "%"; // round to 1 decimal place
$mem_percent_sort = $mem_percent_numb;
if ($mem_percent_numb <= 89) {
$mem_demand_text_color = 'success';
}
if ($mem_percent_numb > 89) {
$mem_demand_text_color = 'secondary';
}
if ($mem_percent_numb > 99) {
$mem_demand_text_color = 'danger';
}
} else {
$mem_demand = "N/A";
$mem_percent_numb = 'N/A';
$mem_percent_sort = -1;
}
# disks
$disks = json_decode($server_data['server_disks'], true);
$totalDiskSpace = 0;
if (is_array($disks)) {
foreach ($disks as $disk) {
$totalDiskSpace += $disk['disk_space'];
}
}
if (is_array($disks) && count($disks) > 0) {
$sizes = array_column($disks, 'disk_space');
$totalDiskSpace = array_sum($sizes);
}
$server_state_color = returnServerStateColor($server_data['server_state']);
# Licences
$licenses = json_decode($server_data['server_licenses'], true);
#
# OS Logo display
$baseos = strtolower(explode(' ', $server_data['server_os'])[0]);
$logos = [
'almalinux' => 'almalinux',
'centos' => 'centos',
];
$logo = $logos[$baseos] ?? 'server';
if ($API->checkPermissions('servers', 'RW', true)) {
$pageNavbar->AddHTMLButton(
'<form id="FormValidation" enctype="multipart/form-data" method="post" action="/api/v1/servers/">
<input type="hidden" name="_method" value="POST">
<input type="hidden" name="_return" value="/servers?view=' . $server_data['server_uuid'] . '">
<input type="hidden" name="server_vm_id" value="' . $server_data['server_vm_id'] . '"/>' .
(
$server_data['server_state'] != 'deleted'
? '<input type="hidden" name="server_state" value="deleted">
<button class="btn btn-danger w-100">
<i class="fas fa-trash-alt"></i> Delete
</button>'
: '<input type="hidden" name="server_state" value="disabled">
<button class="btn btn-primary w-100">
<i class="fa-solid fa-clock-rotate-left"></i> Restore
</button>'
) .
'</form>'
);
};
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('server_overview'), 'href' => '/servers/'));
array_push($GLOBALS['breadCrumbArray'], array('display' => $server_data['server_vm_host_name'], 'href' => ''));
# Start page output
$pageNavbar->outPutNavbar();
?>
<div class="card">
<div class="card-body">
<div class="row">
<h1>
<i class="<?php echo $GLOBALS['pages']['servers']['server_overview']['page_icon'] ?>"> </i> <?php echo $server_data['server_vm_host_name'] ?>
<span class="badge bg-<?php echo $server_state_color ?> fs-4 align-middle"><?php echo ucfirst($server_data['server_state']) ?></span>
</h1>
</div>
<div class="row pb-5">
<div class="col-md-3 col-lg-3">
<h2><?php echo $server_data['server_os'] ?></h2>
<img class="img-fluid os-logo" src="/src/images/os/<?php echo $logo ?>.svg">
</div>
<div class="col-lg-auto col-md-auto">
<table class="table table-borderless">
<form id="FormValidation" enctype="multipart/form-data" method="post" action="/api/v1/servers/">
<input type="hidden" name="_method" value="POST">
<input type="hidden" name="_return" value="/servers?view=<?php echo $server_data['server_uuid'] ?>">
<input type="hidden" name="server_vm_id" value="<?php echo $server_data['server_vm_id'] ?>"/>
<tr>
<td>
<h4>
<i class="fa-solid fa-microchip"></i> <?php echo __('server_cpu') ?>
</h4>
</td>
<td>
<h4>
<?php echo (strlen($server_data['server_cpu']) > 0) ? $server_data['server_cpu'] . 'x' : ''; ?>
</h4>
</td>
</tr>
<tr>
<td>
<h4>
<i class="fa-solid fa-memory"></i> <?php echo __('server_memory') ?>
</h4>
</td>
<td>
<h4>
<?php echo (strlen($server_data['server_memory']) > 0) ? $server_data['server_memory'] . 'MB' : ''; ?>
</h4>
</td>
</tr>
<tr>
<td>
<h4>
<i class="fa-solid fa-hard-drive"></i> <?php echo __('server_disks') ?>
</h4>
</td>
<td class="mx-3">
<h4>
<?php
if (is_array($disks) && count($disks) > 0) {
if (count($sizes) === 1) {
echo $sizes[0] . 'GB';
} else {
echo $totalDiskSpace . 'GB (' . implode('GB, ', $sizes) . 'GB)';
}
} ?>
</h4>
</td>
</tr>
<?php if ($GLOBALS['modules_enabled']['customers']) { ?>
<tr>
<td>
<h4>
<i class="fas fa-building"></i> <?php echo __('company') ?>
</h4>
</td>
<td>
<?php if ($API->checkPermissions('servers', 'RW', true)) { ?>
<div class="input-group">
<select id="company_uuid" name="company_uuid" class="form-control">
<option></option>
<?php foreach ($companies as $company) { ?>
<option <?php echo ($server_data['company_uuid'] == $company['company_uuid']) ? 'selected' : '' ?> value="<?php echo $company['company_uuid'] ?>"><?php echo $company['company_name'] ?></option>
<?php } ?>
</select>
</div>
<?php } else { ?>
<h4>
<?php
$companyMap = array_column($companies, 'company_name', 'company_uuid');
echo $companyMap[$server_data['company_uuid']] ?? null;
?>
</h4>
<?php } ?>
</td>
</tr>
<?php } ?>
<tr>
<td>
<h4>
<i class="fa-solid fa-circle-dot"></i> <?php echo __('server_state') ?>
</h4>
</td>
<td>
<?php if ($API->checkPermissions('servers', 'RW', true)) {
if ($server_data['server_state'] != 'deleted') { ?>
<div class="input-group">
<select id="server_state" class="form-control" onchange="this.name = this.value ? 'server_state' : '';">
<option></option>
<option <?php echo ($server_data['server_state'] == 'active') ? 'selected' : '' ?> value="active">Active</option>
<option <?php echo ($server_data['server_state'] == 'trial') ? 'selected' : '' ?> value="trial">Trial</option>
<option <?php echo ($server_data['server_state'] == 'disabled') ? 'selected' : '' ?> value="disabled">Disabled</option>
</select>
</div>
<?php } else { ?>
<h4>
<?php echo ucfirst($server_data['server_state']) ?>
</h4>
<?php }
} else { ?>
<h4>
<?php echo ucfirst($server_data['server_state']) ?>
</h4>
<?php } ?>
</td>
</tr>
<tr>
<td>
<h4>
<i class="fa-regular fa-clock"></i> <?php echo __('last_update') ?>
</h4>
</td>
<td>
<h4>
<?php echo date('Y-m-d H:i:s', $server_data['server_modified_timestamp']) ?>
</h4>
</td>
</tr>
<?php if ($API->checkPermissions('servers', 'RW', true)) { ?>
<tr>
<td></td>
<td>
<button class="btn btn-rounded btn-success w-100">
<i class="fa-solid fa-floppy-disk"></i> <?php echo __('save') ?>
</button>
</td>
</tr>
<?php } ?>
</form>
</table>
</div>
</div>
<?php if (is_array($disks) && count($disks) > 0) { ?>
<h2 class="">
<i class="fa-solid fa-hard-drive text-secondary"></i> <?php echo __('server_disks') ?>
</h2>
<div id="accordion">
<div class="card">
<?php foreach ($disks as $i => $disk) {
$collapseId = 'collapseDisk' . $i; ?>
<a data-bs-toggle="collapse" data-bs-target="#collapse<?php echo $collapseId ?>">
<div class="card-header py-1" id="heading<?php echo $collapseId ?>">
<h4 class="mb-0">
<i class="fa-solid fa-hard-drive text-secondary"></i> <?php echo $disk['disk_name'] ?>
</h4>
</div>
</a>
<div id="collapse<?php echo $collapseId ?>" class="collapse" data-parent="#accordion">
<div class="card-body">
<table class="table table-borderless table-sm">
<tr>
<td><?php echo __('disk_space') ?>:</td>
<td><?php echo $disk['disk_space'] ?>GB</td>
</tr>
<tr>
<td><?php echo __('disk_file_used') ?>:</td>
<td><?php echo $disk['disk_used'] ?>GB</td>
</tr>
<tr>
<td><?php echo __('disk_location') ?>:</td>
<td><?php echo $disk['disk_location'] ?></td>
</tr>
</table>
</div>
</div>
<?php
} ?>
</div>
</div>
<?php }
if (is_array($licenses) && count($licenses) > 0) { ?>
<h2>
<i class="fa-solid fa-file-invoice-dollar text-success"></i> <?php echo __('server_licenses') ?>
</h2>
<div id="accordion">
<div class="card">
<?php foreach ($licenses as $key => $licence) { ?>
<a data-bs-toggle="collapse" data-bs-target="#collapse<?php echo array_key_first($licence) ?>">
<div class="card-header py-1" id="heading<?php echo array_key_first($licence) ?>">
<h4 class="mb-0">
<i class="fa-solid fa-file-invoice-dollar text-success"></i> <?php echo ucfirst(array_key_first($licence)) ?>
</h4>
</div>
</a>
<div id="collapse<?php echo array_key_first($licence) ?>" class="collapse" data-parent="#accordion">
<div class="card-body">
<?php echo __('type') . ': ' . end($licence) ?>
</div>
</div>
<?php
} ?>
</div>
</div>
<?php } ?>
<h1 class="pt-5"><?php echo __('all_technical_information') ?></h1>
<div class="col-md-12 col-lg-12">
<table class="table table-borderless table-sm table-responsive">
<tr>
<td>server_uuid:</td>
<td class="w-100"><?php echo $server_data['server_uuid'] ?></td>
</tr>
<tr>
<td>company_uuid:</td>
<td><?php echo $server_data['company_uuid'] ?></td>
</tr>
<tr>
<td>server_vm_id:</td>
<td><?php echo $server_data['server_vm_id'] ?></td>
</tr>
<tr>
<td>server_vm_host_name:</td>
<td><?php echo $server_data['server_vm_host_name'] ?></td>
</tr>
<tr>
<td>server_vm_snapshot:</td>
<td><?php echo $server_data['server_vm_snapshot'] ?></td>
</tr>
<tr>
<td>server_vm_generation:</td>
<td><?php echo $server_data['server_vm_generation'] ?></td>
</tr>
<tr>
<td>server_power_state:</td>
<td><?php echo $server_data['server_power_state'] ?></td>
</tr>
<tr>
<td>server_state:</td>
<td><?php echo $server_data['server_state'] ?></td>
</tr>
<tr>
<td>server_hostname:</td>
<td><?php echo $server_data['server_hostname'] ?></td>
</tr>
<tr>
<td>server_os:</td>
<td><?php echo $server_data['server_os'] ?></td>
</tr>
<tr>
<td>server_cpu:</td>
<td><?php echo $server_data['server_cpu'] ?></td>
</tr>
<tr>
<td>server_memory:</td>
<td><?php echo $server_data['server_memory'] ?></td>
</tr>
<tr>
<td>server_memory_demand:</td>
<td><?php echo $server_data['server_memory_demand'] ?></td>
</tr>
<tr>
<td>server_disks:</td>
<td>
<pre class="bg-dark border rounded"><code class="language-json"><?= htmlspecialchars(json_encode(json_decode($server_data['server_disks']), JSON_PRETTY_PRINT)) ?></code></pre>
</td>
</tr>
<tr>
<td>server_ipv4:</td>
<td>
<pre class="bg-dark border rounded w-100 overflow-auto mb-0"><code class="language-json"><?= htmlspecialchars(json_encode(json_decode($server_data['server_ipv4']), JSON_PRETTY_PRINT)) ?></code></pre>
</td>
</tr>
<tr>
<td>server_ipv6:</td>
<td>
<pre class="bg-dark border rounded"><code class="language-json"><?= htmlspecialchars(json_encode(json_decode($server_data['server_ipv6']), JSON_PRETTY_PRINT)) ?></code></pre>
</td>
</tr>
<tr>
<td>server_licenses:</td>
<td>
<pre class="bg-dark border rounded"><code class="language-json"><?= htmlspecialchars(json_encode(json_decode($server_data['server_licenses']), JSON_PRETTY_PRINT)) ?></code></pre>
</td>
</tr>
<tr>
<td>server_backup:</td>
<td>
<pre class="bg-dark border rounded"><code class="language-json"><?= htmlspecialchars(json_encode(json_decode($server_data['server_backup']), JSON_PRETTY_PRINT)) ?></code></pre>
</td>
</tr>
<tr>
<td>server_description:</td>
<td><?php echo $server_data['server_description'] ?></td>
</tr>
<tr>
<td>server_create_timestamp:</td>
<td><?php echo $server_data['server_create_timestamp'] ?> (<?php echo date('Y-m-d H:i:s', $server_data['server_create_timestamp']) ?>)</td>
</tr>
<tr>
<td>server_modified_timestamp:</td>
<td><?php echo $server_data['server_modified_timestamp'] ?> (<?php echo date('Y-m-d H:i:s', $server_data['server_modified_timestamp']) ?>)</td>
</tr>
</table>
</div>
</div>
</div>

View File

@@ -0,0 +1,67 @@
<?php
use api\classes\API_servers;
use bin\php\Classes\serverOverviewBuilder;
if (!defined('APP_INIT')) {
exit;
}
if (!$GLOBALS['modules_enabled']['servers']) {
echo '405 Not Allowed';
exit;
}
# IDE Section
# Includes Section
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_servers.php';
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/serverOverviewBuilder.php');
# Check permissions
$API_servers = new API_servers();
if (!$API_servers->checkPermissions('servers', 'RO', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['delete_confirmation'] = true;
$jsScriptLoadData['datatables'] = true;
$jsScriptLoadData['multiFilterSelectServers'] = true;
# PageClasses Setup
$serverOverview = new serverOverviewBuilder();
# Retrieve Information for the page
if (!isset($_GET['del'])) {
if ($GLOBALS['modules_enabled']['customers']) {
$API_servers->baseQuery = "SELECT * FROM servers LEFT JOIN companies ON companies.company_uuid = servers.company_uuid WHERE servers.server_state != 'deleted'";
} else {
$API_servers->baseQuery = "SELECT * FROM servers WHERE servers.server_state != 'deleted'";
}
} else {
if ($GLOBALS['modules_enabled']['customers']) {
$API_servers->baseQuery = "SELECT * FROM servers LEFT JOIN companies ON companies.company_uuid = servers.company_uuid";
} else {
$API_servers->baseQuery = "SELECT * FROM servers";
}
}
$servers_data = $API_servers->getServers();
$serverOverview->servers = $servers_data;
$serverOverview->processServerData();
if (!$GLOBALS['modules_enabled']['customers']) {
$serverOverview->showCompanies = false;
}
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('permission'), 'href' => '/accesscontrol/#permissions'));
array_push($GLOBALS['breadCrumbArray'], array('display' => __('view'), 'href' => ''));
# Start page output
$serverOverview->serverOverviewOutPut();
?>

View File

@@ -0,0 +1,25 @@
<?php
if (!defined('APP_INIT')) {
exit;
}
if (isset($_GET['user_group_add'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/system/pageAccessControl_user_group_add.php');
} elseif (isset($_GET['user_group_edit'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/system/pageAccessControl_user_group_edit.php');
} elseif (isset($_GET['user_group_view'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/system/pageAccessControl_user_group_view.php');
} elseif (isset($_GET['permission_add'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/system/pageAccessControl_permission_add.php');
} elseif (isset($_GET['permission_edit'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/system/pageAccessControl_permission_edit.php');
} elseif (isset($_GET['permission_view'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/system/pageAccessControl_permission_view.php');
} elseif (isset($_GET['admin_add'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/system/pageAccessControl_admin_add.php');
} elseif (isset($_GET['admin_edit'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/system/pageAccessControl_admin_edit.php');
} elseif (isset($_GET['admin_view'])) {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/system/pageAccessControl_admin_view.php');
} else {
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/pages/system/pageAccessControl_view.php');
}

View File

@@ -0,0 +1,122 @@
<?php
use api\classes\API;
use bin\php\Classes\formBuilder;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/formBuilder.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-access-admins', 'RW', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['form'] = true;
$jsScriptLoadData['Generatepassword'] = true;
$jsScriptLoadData['passwordGenOnLoad'] = true;
$jsScriptLoadData['passwordShowHide'] = true;
$jsScriptLoadData['passwordRegen'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
$pageNavbar->AddHTMLButton('<button class="btn btn-danger mx-3" type="button" disabled><i class="fas fa-trash-alt"></i>' . __('delete') . '</button>');
$pageNavbar->AddHTMLButton('<a href="?admin_add="><button class="btn btn-primary"><i class="fas fa-plus text-success"></i>' . __('add_admin') . '</button></a>');
$formBuilder = new formBuilder('add_admin', '<i class="fas fa-plus"></i>', '/accesscontrol/#user-groups');
# Retrieve Information for the page
$user_groups_data = $GLOBALS['conn']->query("SELECT * FROM vc_user_groups WHERE user_group_type = 'admin' ORDER BY user_group_weight DESC");
$user_groups = array();
while ($user_group = $user_groups_data->fetch_assoc()) {
array_push($user_groups, $user_group);
$last_weight = $user_group['user_group_weight'];
}
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('administrators'), 'href' => '/accesscontrol/#administrators'));
array_push($GLOBALS['breadCrumbArray'], array('display' => __('add_admin'), 'href' => ''));
# Start page output
$pageNavbar->outPutNavbar();
$formBuilder->startForm();
?>
<form id="FormValidation" enctype="multipart/form-data" method="POST" action="/api/v1/users/">
<div class="card-body">
<div class="col">
<p><?php echo __('admin_creation_instruction') ?></p>
</div>
<div class="form-group form-show-validation row">
<label for="user_group_uuid" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('user_group') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<select id="user_group_uuid" name="user_group_uuid" class="form-control" required>
<?php foreach ($user_groups as $user_group) {
if ($user_group['user_group_weight'] >= $_SESSION['user']['user_group_weight']) { ?>
<option value="<?php echo $user_group['user_group_uuid'] ?>"><?php echo $user_group['user_group_name'] ?></option>
<?php }
} ?>
<!-- Options should be dynamically generated from the database -->
</select>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="user_email" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('user_email') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="email" class="form-control" id="user_email" name="user_email" placeholder="user@example.xxx" required autofill="off" autofocus autocomplete="off"/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="user_first_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('first_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="user_first_name" name="user_first_name" required/>
</div>
</div>
<!-- Last Name -->
<div class="form-group form-show-validation row">
<label for="user_last_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('last_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="user_last_name" name="user_last_name" required/>
</div>
</div>
<!-- Phone Number -->
<div class="form-group form-show-validation row">
<label for="user_phone_number" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('phone_number') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="user_phone_number" name="user_phone_number" placeholder="+1234542069"/>
</div>
</div>
<!-- User Status -->
<div class="form-group form-show-validation row">
<label for="user_status" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('user_status') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<select id="user_status" name="user_status" class="form-control" required>
<option value="inactive"><?php echo __('inactive') ?></option>
<option value="banned"><?php echo __('banned') ?></option>
<option value="pending" selected><?php echo __('pending') ?></option>
</select>
</div>
</div>
</div>
<?php $formBuilder->formFooter(); ?>
</form>
<?php $formBuilder->endForm(); ?>

View File

@@ -0,0 +1,158 @@
<?php
use api\classes\API;
use bin\php\Classes\formBuilder;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/formBuilder.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-access-admins', 'RW', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['form'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
$pageNavbar->AddHTMLButton('<button class="btn btn-danger mx-3" type="button" disabled><i class="fas fa-trash-alt"></i>' . __('delete') . '</button>');
$pageNavbar->AddHTMLButton('<a href="?admin_add="><button class="btn btn-primary"><i class="fas fa-plus text-success"></i>' . __('add_admin') . '</button></a>');
$formBuilder = new formBuilder('edit_admin', '<i class="fas fa-plus"></i>', '/accesscontrol/#user-groups');
# Retrieve Information for the page
$user_groups_data = $GLOBALS['conn']->query("SELECT * FROM vc_user_groups WHERE user_group_type = 'admin' ORDER BY user_group_weight DESC");
$user_groups = array();
$admin_data = false;
while ($user_group = $user_groups_data->fetch_assoc()) {
array_push($user_groups, $user_group);
$last_weight = $user_group['user_group_weight'];
}
$user_uuid = $_GET['admin_edit'];
$stmt = $GLOBALS['conn']->prepare("SELECT * FROM vc_users INNER JOIN vc_user_groups ON vc_users.user_group_uuid = vc_user_groups.user_group_uuid WHERE user_uuid = ?");
$stmt->bind_param("s", $user_uuid);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows == 1) {
$admin_data = $result->fetch_assoc();
}
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('administrators'), 'href' => '/accesscontrol/#administrators'));
array_push($GLOBALS['breadCrumbArray'], array('display' => __('edit_admin'), 'href' => ''));
# Start page output
$pageNavbar->outPutNavbar();
if ($admin_data) {
$formBuilder->startForm(); ?>
<form id="FormValidation" enctype="multipart/form-data" method="post" action="/api/v1/users/">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_return" value="/accesscontrol/?admin_view=<?php echo $user_uuid ?>">
<input type="hidden" name="user_uuid" value="<?php echo $user_uuid; ?>"/>
<div class="card-body">
<!-- User Group -->
<div class="form-group form-show-validation row">
<label for="user_group_uuid" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('user_group') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<select id="user_group_uuid" name="user_group_uuid" class="form-control" required>
<?php foreach ($user_groups as $user_group) {
if ($user_group['user_group_weight'] >= $_SESSION['user']['user_group_weight']) { ?>?>
<option <?php echo(($admin_data['user_group_uuid'] == $user_group['user_group_uuid']) ? 'selected' : '') ?> value="<?php echo $user_group['user_group_uuid'] ?>"><?php echo $user_group['user_group_name'] ?></option>
<?php }
} ?>
</select>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="user_email" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('user_email') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="email" class="form-control" id="user_email" name="user_email" value="<?php echo $admin_data['user_email'] ?>" placeholder="user@example.xxx" required autofill="off" autocomplete="off"/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="user_first_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('first_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="user_first_name" name="user_first_name" value="<?php echo $admin_data['user_first_name'] ?>" required/>
</div>
</div>
<!-- Last Name -->
<div class="form-group form-show-validation row">
<label for="user_last_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('last_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="user_last_name" name="user_last_name" value="<?php echo $admin_data['user_last_name'] ?>" required/>
</div>
</div>
<!-- Phone Number -->
<div class="form-group form-show-validation row">
<label for="user_phone_number" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('phone_number') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="user_phone_number" name="user_phone_number" placeholder="+1234542069" value="<?php echo $admin_data['user_phone_number'] ?>"/>
</div>
</div>
<!-- User Status -->
<div class="form-group form-show-validation row">
<label for="user_status" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('user_status') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<select id="user_status" name="user_status" class="form-control" required>
<option value="active" <?php echo(($admin_data['user_status'] == 'active') ? 'selected' : '') ?> ><?php echo __('active') ?></option>
<option value="inactive" <?php echo(($admin_data['user_status'] == 'inactive') ? 'selected' : '') ?>><?php echo __('inactive') ?></option>
<option value="banned" <?php echo(($admin_data['user_status'] == 'banned') ? 'selected' : '') ?>><?php echo __('banned') ?></option>
<option value="pending" <?php echo(($admin_data['user_status'] == 'pending') ? 'selected' : '') ?>><?php echo __('pending') ?></option>
</select>
</div>
</div>
<!-- Preferred Language -->
<div class="form-group form-show-validation row">
<label for="user_pref_language" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('preferred_language') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<select id="user_pref_language" name="user_pref_language" class="form-control">
<option value="none" selected>Browser language</option>
<?php foreach (scandir($_SERVER['DOCUMENT_ROOT'] . '/bin/locales/') as $file) {
if (pathinfo($file, PATHINFO_EXTENSION) === 'php') {
$language = str_replace('.php', '', $file); ?>
<option <?php echo(($admin_data['user_pref_language'] == $language) ? 'selected' : '') ?> value="<?php echo $language ?>"><?php echo __($language) ?></option>
<?php }
} ?>
</select>
</div>
</div>
<?php if ($GLOBALS['modules_enabled']['office']) { ?>
<!-- Stompbable -->
<div class="form-group form-show-validation row">
<label for="user_stompable" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('stompable') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<select id="user_stompable" name="user_stompable" class="form-control">
<option <?php echo(($admin_data['user_stompable'] == 0) ? 'selected' : '') ?> value="0">Disabled</option>
<option <?php echo(($admin_data['user_stompable'] == 1) ? 'selected' : '') ?> value="1">Enabled</option>
</select>
</div>
</div>
<?php } ?>
</div>
<?php $formBuilder->formFooter(); ?>
</form>
<?php $formBuilder->endForm(); ?><?php } else { ?>
<p>no admin with this uuid found.</p>
<?php } ?>

View File

@@ -0,0 +1,328 @@
<?php
use api\classes\API;
use api\classes\API_apitoken;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_apitoken.php');
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-access-admins', 'RO', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['Generatepassword'] = true;
$jsScriptLoadData['passwordShowHide'] = true;
$jsScriptLoadData['passwordRegen'] = true;
$jsScriptLoadData['enableButtonOnImageUpload'] = true;
$jsScriptLoadData['delete_confirmation'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
$jsScriptLoadData['updateToggle'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
if ($API->checkPermissions('admin-access-admins', 'RW', true)) {
$pageNavbar->AddHTMLButton('<button class="btn btn-danger" type="button" disabled><i class="fas fa-trash-alt"></i> ' . __('delete') . '</button>');
$admin_view = htmlspecialchars($_GET['admin_view'], ENT_QUOTES, 'UTF-8');
$pageNavbar->AddHTMLButton('<a class="btn btn-primary mx-3" type="button" href="?admin_edit=' . $admin_view . '"><i class="fas fa-edit text-warning"></i> ' . __('edit') . '</a>');
$pageNavbar->AddHTMLButton('<a href="?admin_add="><button class="btn btn-primary"><i class="fas fa-plus text-success"></i> ' . __('add_admin') . '</button></a>');
}
# Retrieve Information for the page
$user_groups_data = $GLOBALS['conn']->query("SELECT * FROM vc_user_groups WHERE user_group_type = 'admin' ORDER BY user_group_weight DESC");
$user_groups = array();
$admin_data = false;
while ($user_group = $user_groups_data->fetch_assoc()) {
array_push($user_groups, $user_group);
$last_weight = $user_group['user_group_weight'];
}
$user_uuid = $_GET['admin_view'];
$stmt = $GLOBALS['conn']->prepare("SELECT * FROM vc_users INNER JOIN vc_user_groups ON vc_users.user_group_uuid = vc_user_groups.user_group_uuid WHERE user_uuid = ?");
$stmt->bind_param("s", $user_uuid);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows == 1) {
$admin_data = $result->fetch_assoc();
}
$_GET['user_uuid'] = $user_uuid;
$API_token = new API_apitoken();
$requiredFields = ['user_uuid' => ['type' => 'uuid']];
$API_token->validateData($requiredFields);
$apitokens = $API_token->getTokens();
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('administrators'), 'href' => '/accesscontrol/#administrators'));
array_push($GLOBALS['breadCrumbArray'], array('display' => __('view'), 'href' => ''));
# Start page output
$pageNavbar->outPutNavbar();
if ($admin_data) { ?>
<div class="row d-flex align-items-stretch pb-2">
<div class="col-md-4 pb-4">
<div class="card h-100">
<div class="card-body">
<form method="POST" action="/api/v1/users/avatar/" enctype="multipart/form-data">
<input type="hidden" name="user_uuid" value="<?php echo $admin_data['user_uuid'] ?>">
<h1 class="text-center"><?php echo $admin_data['user_full_name'] ?></h1>
<div class="form-group form-show-validation row align-items-center justify-content-center">
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="input-file input-file-image">
<img class="img-upload-preview w-100" src="<?php echo(($admin_data['user_profile_picture'] != null) ? 'data:image/png;base64, ' . $admin_data['user_profile_picture'] : '/src/images/user-avatar-default-small.png') ?>" alt="user_profile_picture">
<?php if ($API->checkPermissions('admin-access-admins', 'RW', true)) { ?>
<input type="file" class="form-control form-control-file" id="user_profile_picture" name="user_profile_picture" accept="image/png" data-enable-button="user_profile_change">
<?php } ?>
</div>
</div>
</div>
<div class="form-group form-show-validation row justify-content-center">
<div class="d-flex flex-column align-items-center">
<?php if ($API->checkPermissions('admin-access-admins', 'RW', true)) { ?>
<label for="user_profile_picture" class="label-input-file btn btn-black btn-round mb-4">
<span class="btn-label"><i class="fa fa-file-image"></i></span>
<?php echo __('upload_image') ?>
</label>
<button id="user_profile_change" type="submit" class="btn btn-primary opacity-0 transition-opacity" disabled>
<i class="fa-solid fa-floppy-disk"></i> <?php echo __('save') ?>
</button>
<?php } ?>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="col-md-8 pb-4">
<div class="card h-100">
<div class="card-body">
<table>
<tr>
<td>user_uuid:</td>
<td><?php echo $admin_data['user_uuid'] ?></td>
</tr>
<tr>
<td>user_group_uuid:</td>
<td><?php echo $admin_data['user_group_uuid'] ?></td>
</tr>
<tr>
<td>user_group_name:</td>
<td><?php echo $admin_data['user_group_name'] ?></td>
</tr>
<tr>
<td>user_group_slugify:</td>
<td><?php echo $admin_data['user_group_slugify'] ?></td>
</tr>
<tr>
<td>user_email:</td>
<td><?php echo $admin_data['user_email'] ?></td>
</tr>
<tr>
<td>user_first_name:</td>
<td><?php echo $admin_data['user_first_name'] ?></td>
</tr>
<tr>
<td>user_last_name:</td>
<td><?php echo $admin_data['user_last_name'] ?></td>
</tr>
<tr>
<td>user_full_name:</td>
<td><?php echo $admin_data['user_full_name'] ?></td>
</tr>
<tr>
<td>user_phone_number:&nbsp;&nbsp;</td>
<td><?php echo $admin_data['user_phone_number'] ?></td>
</tr>
<tr>
<td>user_status:&nbsp;&nbsp;</td>
<td><?php echo $admin_data['user_status'] ?></td>
</tr>
<tr>
<td>user_password_reset_expires:&nbsp;&nbsp;</td>
<td><?php echo $admin_data['user_password_reset_expires'] ?></td>
</tr>
<tr>
<td>user_two_factor_enabled:&nbsp;&nbsp;</td>
<td><?php echo $admin_data['user_two_factor_enabled'] ?></td>
</tr>
<tr>
<td>user_verified_email:&nbsp;&nbsp;</td>
<td><?php echo $admin_data['user_verified_email'] ?></td>
</tr>
<tr>
<td>user_verified_phone:&nbsp;&nbsp;</td>
<td><?php echo $admin_data['user_verified_phone'] ?></td>
</tr>
<tr>
<td>user_create_timestamp:&nbsp;&nbsp;</td>
<td><?php showTime($admin_data['user_create_timestamp']) ?></td>
</tr>
<tr>
<td>user_modified_timestamp:&nbsp;&nbsp;</td>
<td><?php showTime($admin_data['user_modified_timestamp']) ?></td>
</tr>
<tr>
<td>user_last_login_timestamp:&nbsp;&nbsp;</td>
<td><?php showTime($admin_data['user_last_login_timestamp']) ?></td>
</tr>
<tr>
<td>user_login_attempts:&nbsp;&nbsp;</td>
<td><?php echo $admin_data['user_login_attempts'] ?></td>
</tr>
<tr>
<td>user_pref_language:&nbsp;&nbsp;</td>
<td><?php echo $admin_data['user_pref_language'] ?></td>
</tr>
<?php if ($GLOBALS['modules_enabled']['office']) { ?>
<tr>
<td>user_stompable:&nbsp;&nbsp;</td>
<td><?php echo $admin_data['user_stompable'] ?></td>
</tr>
<?php } ?>
</table>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="card">
<div class="card-header pt-2 pb-1">
<h4>email-preferences</h4>
</div>
<div class="card-body">
to be made
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header pt-2 pb-1">
<h4><?php echo __('user_management') ?></h4>
</div>
<div class="card-body">
<?php if ($API->checkPermissions('admin-access-admins-mfa', 'RW', true)) { ?>
<div id="mfa-enabled-row" class="row" style="display: <?php echo(($admin_data['user_two_factor_enabled']) ? '' : 'none') ?>">
<div class="col-auto">
<a href="#" class="btn btn-danger delete-btn" data-item-uuid="<?php echo $admin_data['user_uuid'] ?>" data-api-url="/api/v1/users/mfa/" data-item-name='user_uuid' data-delete-action='{"mfa-enabled-row":"hide", "mfa-disabled-row":"show"}'>
<i class="fa-solid fa-lock"></i> <?php echo __('reset_mfa') ?>
</a>
</div>
</div>
<div id="mfa-disabled-row" class="row" style="display: <?php echo(($admin_data['user_two_factor_enabled'] == 1) ? 'none' : '') ?>">
<div class="col-auto">
<button class="btn btn-danger delete-btn" href="#" disabled>
<i class="fa-solid fa-lock"></i> <?php echo __('reset_mfa') ?>
</button>
</div>
</div>
<?php } ?>
<?php if ($API->checkPermissions('admin-access-admins-resetpassword', 'RW', true)) { ?>
<form method="post" action="/api/v1/users/resetpassword/">
<input type="hidden" name="user_uuid" value="<?php echo $user_uuid ?>">
<button class="btn btn-primary mt-2">
<i class="fa-solid fa-lock"></i> <?php echo __('send_password_reset') ?>
</button>
</form>
<?php } ?>
reset the verified email (to be made)<br>
</div>
</div>
</div>
</div>
<?php if ($API_token->checkPermissions('user-apitoken-others', 'RO', true)) { ?>
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center pt-2 pb-1">
<h4 class="mb-0">API Tokens</h4>
<?php if ($API_token->checkPermissions('user-apitoken-others', 'RW', true)) { ?>
<form method="POST" action="/api/v1/users/apitoken/">
<input type="hidden" name="user_uuid" value="<?php echo $user_uuid ?>">
<input type="hidden" name="_return" value="/accesscontrol/?admin_view=<?php echo $user_uuid ?>">
<button type="submit" href="#" class="btn btn-primary">
<i class="fa-solid fa-plus"></i> Generate new token
</button>
</form>
<?php } ?>
</div>
<div class="card-body">
<table class="table table-hover table-striped">
<thead>
<tr>
<th>token</th>
<th>Expiration</th>
<th>Created</th>
<th>Last used</th>
<th>Revoked</th>
</tr>
</thead>
<tbody>
<?php foreach ($apitokens as $token_data) { ?>
<tr>
<td class="text-nowrap" style="max-width: 100%;">
<div class="d-flex align-items-center gap-2" style="max-width: 100%;">
<div class="text-truncate" style="max-width: 200px;">
<?php echo substr($token_data['api_token'], 0, 15) . '...'; ?>
</div>
</div>
</td>
<td><?php showTime($token_data['api_token_expiration_timestamp']) ?></td>
<td><?php showTime($token_data['api_token_created_timestamp']) ?></td>
<td><?php showTime($token_data['api_token_last_used_timestamp']) ?></td>
<td>
<label class="switch">
<input type="checkbox" class="checkbox" data-api-data='<?php echo json_encode(['api_token_uuid' => $token_data['api_token_uuid'], 'api_token_revoked' => $token_data['api_token_revoked'] ? 1 : 0]) ?>' data-api-changevalue="api_token_revoked" data-api-url="/api/v1/users/apitoken/" <?php echo((($token_data['api_token_revoked'])) ? 'checked' : '') ?>>
<div class="slider"></div>
</label>
</td>
<?php if ($API_token->checkPermissions('user-apitoken-others', 'RW', true)) { ?>
<td class="text-nowrap">
<a href="#" class="btn btn-danger btn-sm btn-rounded delete-btn" data-item-uuid="<?php echo $token_data['api_token_uuid'] ?>" data-item-name="api_token_uuid" data-api-url="/api/v1/users/apitoken/"><i class="fas fa-trash-alt"></i></a>
</td>
<?php } ?>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<?php } ?>
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header pt-2 pb-1">
<h4>User history</h4>
</div>
<div class="card-body">
To be made. Its going show the history of the administrator.
</div>
</div>
</div>
</div>
<?php } else {
echo 'admin not found';
}

View File

@@ -0,0 +1,93 @@
<?php
use api\classes\API;
use bin\php\Classes\formBuilder;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/formBuilder.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php';
# Check permissions
$API = new API();
if (!$API->isSuperuser()) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['form'][] = true;
$jsScriptLoadData['slugify'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
$formBuilder = new formBuilder('add_permission', '<i class="fas fa-plus"></i>', '/accesscontrol/#permissions');
# Retrieve Information for the page
$system_modules_data = $GLOBALS['conn']->query("SELECT * FROM system_modules WHERE module_enabled = 1");
$system_modules = array();
while ($module = $system_modules_data->fetch_assoc()) {
array_push($system_modules, $module);
}
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('permission'), 'href' => '/accesscontrol/#permissions'));
array_push($GLOBALS['breadCrumbArray'], array('display' => __('add_permission'), 'href' => ''));
# Start page output
$pageNavbar->outPutNavbar();
$formBuilder->startForm();
?>
<form id="FormValidation" method="POST" action="/api/v1/permissions/">
<input type="hidden" name="_return" value="/accesscontrol/#permission">
<div class="card-body">
<div class="form-group form-show-validation row">
<label for="permission_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('permission_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="permission_name" name="permission_name" placeholder="" data-slugify="permission_slugify" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="permission_slugify" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('permission_slugify') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="permission_slugify" name="permission_slugify" placeholder="" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="module_uuid" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('module') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="select2-input">
<select id="module_uuid" name="module_uuid" class="form-control" required>
<option value=""></option>
<?php
foreach ($system_modules as $module) { ?>
<option value="<?php echo $module['module_uuid'] ?>"> <?php echo $module['module_name'] ?></option>
<?php } ?>
</select>
</div>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="permission_description" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('permission_description') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<textarea type="text" class="form-control" id="permission_description" name="permission_description" placeholder="" required rows="5"></textarea>
</div>
</div>
</div>
<?php $formBuilder->formFooter(); ?>
</form>
<?php $formBuilder->endForm(); ?>

View File

@@ -0,0 +1,106 @@
<?php
use api\classes\API;
use api\classes\API_permissions;
use bin\php\Classes\formBuilder;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/formBuilder.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_permissions.php';
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-access-control-permissions', 'RW', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['form'][] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
$formBuilder = new formBuilder('edit_permission', '<i class="fas fa-plus"></i>', '/accesscontrol/#permission');
# Retrieve Information for the page
$permission_uuid = $_GET['permission_edit'];
$_GET['permission_uuid'] = $permission_uuid;
$API_permissions = new API_permissions();
$_GET['builder'] = [1 => ['where' => [0 => 'permission_uuid', 1 => $permission_uuid]]];
$requiredFields = ['permission_uuid' => ['type' => 'uuid']];
$API_permissions->validateData($requiredFields);
$permission_data = $API_permissions->getPermission()[0];
# Retrieve Information for the page
$system_modules_data = $GLOBALS['conn']->query("SELECT * FROM system_modules WHERE module_enabled = 1");
$system_modules = array();
while ($module = $system_modules_data->fetch_assoc()) {
array_push($system_modules, $module);
}
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('permission'), 'href' => '/accesscontrol/#permissions'));
array_push($GLOBALS['breadCrumbArray'], array('display' => __('edit_permission'), 'href' => ''));
# Start page output
$pageNavbar->outPutNavbar();
if ($permission_data) {
$formBuilder->startForm(); ?>
<form id="FormValidation" method="post" action="/api/v1/permissions/">
<input type="hidden" name="_return" value="/accesscontrol/?permission_view=<?php echo $permission_uuid ?>">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="permission_uuid" value="<?php echo $permission_uuid ?>">
<div class="card-body">
<div class="form-group form-show-validation row">
<label for="permission_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('permission_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="permission_name" name="permission_name" value="<?php echo $permission_data['permission_name'] ?>" placeholder="" data-slugify="permission_slugify" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="permission_slugify" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('permission_slugify') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="permission_slugify" name="permission_slugify" value="<?php echo $permission_data['permission_slugify'] ?>" placeholder="" disabled/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="module_uuid" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('module') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="select2-input">
<select id="module_uuid" name="module_uuid" class="form-control" required>
<option value=""></option>
<?php
foreach ($system_modules as $module) { ?>
<option value="<?php echo $module['module_uuid'] ?>" <?php echo ($module['module_uuid'] == $permission_data['module_uuid']) ? 'selected' : '' ?>> <?php echo $module['module_name'] ?></option>
<?php } ?>
</select>
</div>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="permission_description" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('permission_description') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<textarea type="text" class="form-control" id="permission_description" name="permission_description" placeholder="" required rows="5"><?php echo $permission_data['permission_description'] ?></textarea>
</div>
</div>
</div>
<?php $formBuilder->formFooter(); ?>
</form>
<?php $formBuilder->endForm(); ?><?php } else {
echo 'permission not found';
} ?>

View File

@@ -0,0 +1,153 @@
<?php
use api\classes\API;
use api\classes\API_permissions;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_permissions.php';
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-access-control-permissions', 'RO', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['delete_confirmation'] = true;
$jsScriptLoadData['datatables'] = true;
$jsScriptLoadData['updatePermissions'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
if ($API->isSuperuser()) {
$pageNavbar->AddHTMLButton('<button class="btn btn-danger" type="button" disabled><i class="fas fa-trash-alt"></i> ' . __('delete') . '</button>');
}
if ($API->checkPermissions('admin-access-control-permissions', 'RW', true)) {
$permission_view = htmlspecialchars($_GET['permission_view'], ENT_QUOTES, 'UTF-8');
$pageNavbar->AddHTMLButton('<a class="btn btn-primary mx-3" type="button" href="?permission_edit=' . $permission_view . '"><i class="fas fa-edit text-warning"></i> ' . __('edit') . '</a>');
}
if ($API->isSuperuser()) {
$pageNavbar->AddHTMLButton('<a href="?permission_add="><button class="btn btn-primary"><i class="fas fa-plus text-success"></i> ' . __('add_permission') . '</button></a>');
}
# Retrieve Information for the page
$permission_uuid = $_GET['permission_view'];
$_GET['permission_uuid'] = $permission_uuid;
$API_permissions = new API_permissions();
$requiredFields = ['permission_uuid' => ['type' => 'uuid']];
$API_permissions->validateData($requiredFields);
$permission_data = $API_permissions->getPermissionRights();
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('permission'), 'href' => '/accesscontrol/#permissions'));
array_push($GLOBALS['breadCrumbArray'], array('display' => __('view'), 'href' => ''));
# Start page output
$pageNavbar->outPutNavbar();
if ($permission_data) { ?>
<h2>
<i class="fa-solid fa-lock"></i> <?php echo $permission_data[0]['permission_name'] ?>
</h2>
<div class="card">
<div class="card-body">
<table>
<tr>
<td>permission_uuid:</td>
<td><?php echo $permission_data[0]['permission_uuid'] ?></td>
</tr>
<tr>
<td>permission_name:</td>
<td><?php echo $permission_data[0]['permission_name'] ?></td>
</tr>
<tr>
<td>permission_slugify:</td>
<td><?php echo $permission_data[0]['permission_slugify'] ?></td>
</tr>
<tr>
<td>permission_description:</td>
<td><?php echo $permission_data[0]['permission_description'] ?></td>
</tr>
<tr>
<td>module_uuid:</td>
<td><?php echo $permission_data[0]['module_uuid'] ?></td>
</tr>
<tr>
<td>permission_create_timestamp:</td>
<td><?php showTime($permission_data[0]['permission_create_timestamp']); ?></td>
</tr>
<tr>
<td>permission_modified_datetime:</td>
<td><?php showTime($permission_data[0]['permission_modified_timestamp']); ?></td>
</tr>
</table>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="multi-filter-select display table table-striped table-hover" data-skip-columns="0,5">
<thead>
<tr>
<th><?php echo __('user_group') ?></th>
<th><?php echo __('NA') ?></th>
<th><?php echo __('RO') ?></th>
<th><?php echo __('RW') ?></th>
</tr>
</thead>
<tfoot>
<tr>
<th><?php echo __('user_group') ?></th>
<th><?php echo __('NA') ?></th>
<th><?php echo __('RO') ?></th>
<th><?php echo __('RW') ?></th>
</tr>
</tfoot>
<tbody>
<?php
foreach ($permission_data as $permission_data_group) {
if ($permission_data_group['user_group_slugify'] != 'superuser') { ?>
<tr>
<td><?php echo $permission_data_group['user_group_slugify'] ?> </td>
<td>
<label class="switch">
<input type="checkbox" class="checkbox" data-permission-uuid="<?= $permission_data_group['permission_uuid'] ?>" data-user-group-uuid="<?= $permission_data_group['user_group_uuid'] ?>" data-value="NA" data-api-url="/api/v1/access-rights/" <?php echo(($permission_data_group['permission_value'] == 'NA') ? 'checked' : '') ?>
<?php echo ($API->checkPermissions('admin-access-control-permissions', 'RW', true)) ? '' : 'disabled' ?>>
<div class="slider"></div>
</label>
</td>
<td>
<label class="switch">
<input type="checkbox" class="checkbox" data-permission-uuid="<?= $permission_data_group['permission_uuid'] ?>" data-user-group-uuid="<?= $permission_data_group['user_group_uuid'] ?>" data-value="RO" data-api-url="/api/v1/access-rights/" <?php echo(($permission_data_group['permission_value'] == 'RO') ? 'checked' : '') ?>
<?php echo ($API->checkPermissions('admin-access-control-permissions', 'RW', true)) ? '' : 'disabled' ?>>
<div class="slider"></div>
</label>
</td>
<td>
<label class="switch">
<input type="checkbox" class="checkbox" data-permission-uuid="<?= $permission_data_group['permission_uuid'] ?>" data-user-group-uuid="<?= $permission_data_group['user_group_uuid'] ?>" data-value="RW" data-api-url="/api/v1/access-rights/" <?php echo(($permission_data_group['permission_value'] == 'RW') ? 'checked' : '') ?>
<?php echo ($API->checkPermissions('admin-access-control-permissions', 'RW', true)) ? '' : 'disabled' ?>>
<div class="slider"></div>
</label>
</td>
</tr>
<?php } ?><?php } ?>
</tbody>
</table>
</div>
</div>
<?php } else {
echo '404 not found';
}

View File

@@ -0,0 +1,90 @@
<?php
use api\classes\API;
use bin\php\Classes\formBuilder;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/formBuilder.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php';
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-access-control-user-groups', 'RW', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['form'][] = true;
$jsScriptLoadData['slugify'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
$formBuilder = new formBuilder('add_user_groups', '<i class="fas fa-plus"></i>', '/accesscontrol/#user-groups');
# Retrieve Information for the page
$user_groups_data = $GLOBALS['conn']->query("SELECT * FROM vc_user_groups ORDER BY user_group_weight ASC");
$user_groups = array();
while ($user_group = $user_groups_data->fetch_assoc()) {
array_push($user_groups, $user_group);
$last_weight = $user_group['user_group_weight'];
}
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('user_groups'), 'href' => '/accesscontrol/#user-groups'));
array_push($GLOBALS['breadCrumbArray'], array('display' => __('add_user_groups'), 'href' => ''));
# Start page output
$pageNavbar->outPutNavbar();
$formBuilder->startForm();
?>
<form id="FormValidation" enctype="multipart/form-data" method="post" action="/api/v1/user-groups/">
<div class="card-body">
<div class="form-group form-show-validation row">
<label for="user_group_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('user_group_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="user_group_name" name="user_group_name" placeholder="" data-slugify="user_group_slugify" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="user_group_slugify" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('user_group_slugify') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="user_group_slugify" name="user_group_slugify" placeholder="" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="user_group_type" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('user_group_type') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="select2-input">
<select id="user_group_type" name="user_group_type" class="form-control" required>
<option value="user" selected><?php echo __('users') ?></option>
<option value="admin"><?php echo __('administrators') ?></option>
</select>
</div>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="user_group_slugify" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('weight') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="mb-3">
<input type="number" class="form-control" name="user_group_weight" min="1" max="900" step="1" value="<?php echo $last_weight + 10 ?>">
</div>
</div>
</div>
</div>
<?php $formBuilder->formFooter(); ?>
</form>
<?php $formBuilder->endForm(); ?>

View File

@@ -0,0 +1,97 @@
<?php
use api\classes\API;
use api\classes\API_usergroups;
use bin\php\Classes\formBuilder;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/formBuilder.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_usergroups.php');
# Check permissions
$API = new API();
if (!$API->checkPermissions('admin-access-control-user-groups', 'RW', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['form'] = true;
$jsScriptLoadData['slugify'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
$formBuilder = new formBuilder('edit_user_groups', '<i class="fas fa-plus"></i>', '/accesscontrol/#user-groups');
# Retrieve Information for the page
$user_group_uuid = $_GET['user_group_edit'];
$_GET['user_group_uuid'] = $user_group_uuid;
$API_usergroups = new API_usergroups();
$_GET['builder'] = [1 => ['where' => [0 => 'user_group_uuid', 1 => $user_group_uuid]]];
$requiredFields = ['user_group_uuid' => ['type' => 'uuid']];
$API_usergroups->validateData($requiredFields);
$user_group = $API_usergroups->getUsergroup()[0];
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('user_groups'), 'href' => '/accesscontrol/#user-groups'));
array_push($GLOBALS['breadCrumbArray'], array('display' => $user_group['user_group_name'], 'href' => '/accesscontrol/#user-groups'));
array_push($GLOBALS['breadCrumbArray'], array('display' => __('edit'), 'href' => ''));
# Start page output
$pageNavbar->outPutNavbar();
$formBuilder->startForm();
?>
<form id="FormValidation" enctype="multipart/form-data" method="post" action="/api/v1/user-groups/">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="user_group_uuid" value="<?php echo $user_group['user_group_uuid'] ?>"/>
<input type="hidden" name="user_group_slugify" value="<?php echo $user_group['user_group_slugify'] ?>"/>
<div class="card-body">
<div class="form-group form-show-validation row">
<label for="user_group_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('user_group_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="user_group_name" name="user_group_name" value="<?php echo $user_group['user_group_name'] ?>" placeholder="" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="user_group_slugify" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('user_group_slugify') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="user_group_slugify" name="user_group_slugify" value="<?php echo $user_group['user_group_slugify'] ?>" placeholder="" required disabled/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="user_group_type" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('user_group_type') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="select2-input">
<select id="user_group_type" name="user_group_type" class="form-control" disabled>
<option value="user" selected><?php echo __('users') ?></option>
<option value="admin"><?php echo __('administrators') ?></option>
</select>
</div>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="user_group_slugify" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('weight') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="mb-3">
<input type="number" class="form-control" name="user_group_weight" min="1" max="900" step="1" value="<?php echo $user_group['user_group_weight'] ?>">
</div>
</div>
</div>
</div>
<?php $formBuilder->formFooter(); ?>
</form>
<?php $formBuilder->endForm(); ?>

View File

@@ -0,0 +1,173 @@
<?php
use api\classes\API_usergroups;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_usergroups.php');
# Check permissions
$API = new API_usergroups();
if (!$API->checkPermissions('admin-access-control-user-groups', 'RO', true)) {
echo 'error 401 unauthorized';
exit;
}
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['breadCrumbs'] = true;
$jsScriptLoadData['updatePermissions'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
# Retrieve Information for the page
$user_group_uuid = htmlspecialchars($_GET['user_group_view'], ENT_QUOTES, 'UTF-8');
$_GET['user_group_uuid'] = $user_group_uuid;
$API_usergroups = new API_usergroups();
$_GET['builder'] = [1 => ['where' => [0 => 'user_group_uuid', 1 => $user_group_uuid]]];
$requiredFields = ['user_group_uuid' => ['type' => 'uuid']];
$API_usergroups->validateData($requiredFields);
$user_group = $API_usergroups->getUsergroup()[0];
$query = "SELECT * FROM vc_user_group_permissions_portal
INNER JOIN vc_permissions ON vc_user_group_permissions_portal.permission_uuid = vc_permissions.permission_uuid
WHERE user_group_uuid = ?";
$stmt = $GLOBALS['pdo']->prepare($query);
$stmt->execute([$user_group_uuid]);
$group_permissions = $stmt->fetchAll(PDO::FETCH_ASSOC);
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('user_groups'), 'href' => '/accesscontrol/#user-groups'));
array_push($GLOBALS['breadCrumbArray'], array('display' => $user_group['user_group_name'], 'href' => ''));
# Start page output
$pageNavbar->outPutNavbar();
?>
<div class="card">
<div class="card-body">
<div class="row">
<h1>
<i class="fa-solid fa-user-group"></i> <?php echo __('user_group') . ': ' . $user_group['user_group_name'] ?>
</h1>
</div>
<div class="col-md-6 col-lg-6">
<table>
<tr>
<td>user_group_uuid:</td>
<td><?php echo $user_group['user_group_uuid'] ?></td>
</tr>
<tr>
<td>user_group_name:</td>
<td><?php echo $user_group['user_group_name'] ?></td>
</tr>
<tr>
<td>user_group_slugify:</td>
<td><?php echo $user_group['user_group_slugify'] ?></td>
</tr>
<tr>
<td>user_group_type:</td>
<td><?php echo $user_group['user_group_type'] ?></td>
</tr>
<tr>
<td>user_group_weight:</td>
<td><?php echo $user_group['user_group_weight'] ?></td>
</tr>
<tr>
<td>user_group_create_timestamp:</td>
<td><?php echo $user_group['user_group_create_timestamp'] ?></td>
</tr>
<tr>
<td>user_group_modified_timestamp:</td>
<td><?php echo $user_group['user_group_modified_timestamp'] ?></td>
</tr>
</table>
</div>
</div>
</div>
<div class="card">
<div class="card-body">
<h1>
<i class="fa-solid fa-lock"></i> <?php echo __('permission') ?>
</h1>
<div class="table-responsive">
<table class="multi-filter-select display table table-striped table-hover" data-skip-columns="0,5">
<thead>
<tr>
<th><?php echo __('user_group') ?></th>
<th><?php echo __('NA') ?></th>
<th><?php echo __('RO') ?></th>
<th><?php echo __('RW') ?></th>
<th></th>
</tr>
</thead>
<tfoot>
<tr>
<th><?php echo __('user_group') ?></th>
<th><?php echo __('NA') ?></th>
<th><?php echo __('RO') ?></th>
<th><?php echo __('RW') ?></th>
<th></th>
</tr>
</tfoot>
<tbody>
<?php
foreach ($group_permissions as $group_permissions_data) { ?>
<tr>
<td><?php echo $group_permissions_data['permission_name'] ?> </td>
<td>
<label class="switch">
<input type="checkbox" class="checkbox" data-permission-uuid="<?= $group_permissions_data['permission_uuid'] ?>" data-user-group-uuid="<?= $group_permissions_data['user_group_uuid'] ?>" data-value="NA" data-api-url="/api/v1/access-rights/" <?php echo(($group_permissions_data['permission_value'] == 'NA') ? 'checked' : '') ?>
<?php echo ($API->checkPermissions('admin-access-control-permissions', 'RW', true)) ? '' : 'disabled' ?>>
<div class="slider"></div>
</label>
</td>
<td>
<label class="switch">
<input type="checkbox" class="checkbox" data-permission-uuid="<?= $group_permissions_data['permission_uuid'] ?>" data-user-group-uuid="<?= $group_permissions_data['user_group_uuid'] ?>" data-value="RO" data-api-url="/api/v1/access-rights/" <?php echo(($group_permissions_data['permission_value'] == 'RO') ? 'checked' : '') ?>
<?php echo ($API->checkPermissions('admin-access-control-permissions', 'RW', true)) ? '' : 'disabled' ?>>
<div class="slider"></div>
</label>
</td>
<td>
<label class="switch">
<input type="checkbox" class="checkbox" data-permission-uuid="<?= $group_permissions_data['permission_uuid'] ?>" data-user-group-uuid="<?= $group_permissions_data['user_group_uuid'] ?>" data-value="RW" data-api-url="/api/v1/access-rights/" <?php echo(($group_permissions_data['permission_value'] == 'RW') ? 'checked' : '') ?>
<?php echo ($API->checkPermissions('admin-access-control-permissions', 'RW', true)) ? '' : 'disabled' ?>>
<div class="slider"></div>
</label>
</td>
<td>
<a href="#" class="btn btn-info btn-sm btn-rounded" data-bs-toggle="modal" data-bs-target="#infoModal<?php echo $group_permissions_data['permission_uuid'] ?>"><i class="fa-solid fa-circle-info"></i></a>
</td>
<div class="modal fade" id="infoModal<?php echo $group_permissions_data['permission_uuid'] ?>" tabindex="-1" aria-labelledby="infoModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content bg-black2">
<div class="modal-header">
<h5 class="modal-title" id="infoModalLabel">
<i class="fas fa-info-circle"></i> <?php echo __('information') ?>
</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<?php echo $group_permissions_data['permission_description'] ?>
</div>
</div>
</div>
</div>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>

View File

@@ -0,0 +1,328 @@
<?php
use api\classes\API;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API_permissions.php');
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php';
# Check permissions
$API = new API();
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['activeTabOnRefresh'] = true;;
$jsScriptLoadData['multiFilterSelect'] = true;
$jsScriptLoadData['delete_confirmation'] = true;
$jsScriptLoadData['datatables'] = true;
# PageClasses Setup
# Retrieve Information for the page
$user_groups_data = $GLOBALS['conn']->query("SELECT * FROM vc_user_groups ORDER BY user_group_weight ASC");
$user_groups = array();
while ($user_group = $user_groups_data->fetch_assoc()) {
array_push($user_groups, $user_group);
$last_weight = $user_group['user_group_weight'];
}
# get all the admins
$stmt = $GLOBALS['conn']->query("SELECT * FROM vc_users INNER JOIN vc_user_groups ON vc_users.user_group_uuid = vc_user_groups.user_group_uuid WHERE user_group_type = 'admin'");
$administrators = array();
while ($row = $stmt->fetch_assoc()) {
array_push($administrators, $row);
}
$stmt = $GLOBALS['conn']->query("SELECT * FROM vc_permissions INNER JOIN system_modules ON vc_permissions.module_uuid = system_modules.module_uuid WHERE system_modules.module_enabled = 1");
$permissions = array();
while ($row = $stmt->fetch_assoc()) {
array_push($permissions, $row);
}
# Set breadcrumb data
# Start page output
?>
<div class="card-body activeTabOnRefresh" style="opacity: 0; transition: opacity 10ms;">
<div class="row">
<div class="col-md-1">
<div class="nav flex-column nav-pills nav-secondary nav-pills-no-bd nav-pills-icons" id="v-pills-tab-with-icon" role="tablist" aria-orientation="vertical">
<?php if ($API->checkPermissions('admin-access-admins', 'RO', true)) { ?>
<a class="nav-link active" id="administrators-tab" data-bs-toggle="pill" href="#administrators" role="tab" aria-controls="administrators" aria-selected="true">
<i class="fa-solid fa-user-tie"></i><?php echo __('administrators'); ?>
</a>
<?php } ?>
<?php if ($API->checkPermissions('admin-access-control-permissions', 'RO', true)) { ?>
<a class="nav-link" id="permissions-tab" data-bs-toggle="pill" href="#permissions" role="tab" aria-controls="permissions">
<i class="fa-solid fa-lock"></i><?php echo __('permission'); ?>
</a>
<?php } ?>
<?php if ($API->checkPermissions('admin-access-control-user-groups', 'RO', true)) { ?>
<a class="nav-link" id="user-groups-tab" data-bs-toggle="pill" href="#user-groups" role="tab" aria-controls="user-groups">
<i class="fa-solid fa-user-group"></i><?php echo __('user_groups'); ?>
</a>
<?php } ?>
</div>
</div>
<div class="col-md-11">
<div class="tab-content" id="v-pills-with-icon-tabContent">
<?php if ($API->checkPermissions('admin-access-admins', 'RO', true)) { ?>
<div class="tab-pane fade show active" id="administrators" role="tabpanel" aria-labelledby="administrators-tab">
<div class="row mb-3">
<div class="col-5">
<h2>
<i class="fa-solid fa-user-tie"></i> &nbsp; <?php echo __('administrators') ?>
</h2>
</div>
<div class="col d-flex justify-content-end">
<?php if ($API->checkPermissions('admin-access-admins', 'RW', true)) { ?>
<a href="?admin_add=">
<button class="btn btn-primary">
<i class="fas fa-plus text-success"></i> &nbsp; <?php echo __('add_admin') ?>
</button>
</a>
<?php } ?>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="table-responsive">
<table class="multi-filter-select display table table-striped table-hover" data-skip-columns="0">
<thead>
<tr>
<th><?php echo __('avatar') ?></th>
<th><?php echo __('full_name') ?></th>
<th><?php echo __('user_email') ?></th>
<th><?php echo __('user_state') ?></th>
<th><?php echo __('last_login') ?></th>
<th><?php echo __('user_group_name') ?></th>
<th><?php echo __('actions') ?></th>
</tr>
</thead>
<tfoot>
<tr>
<th><?php echo __('avatar') ?></th>
<th><?php echo __('full_name') ?></th>
<th><?php echo __('user_email') ?></th>
<th><?php echo __('user_state') ?></th>
<th><?php echo __('last_login') ?></th>
<th><?php echo __('user_group_name') ?></th>
<th><?php echo __('actions') ?></th>
</tr>
</tfoot>
<tbody>
<?php foreach ($administrators as $administrator) {
if ($administrator['user_email'] != 'superuser') { ?>
<tr data-item-id="<?php echo $administrator['user_uuid']; ?>">
<td class="text-nowrap">
<div class="avatar-sm ">
<img class="avatar-img rounded-circle" src="data:image/png;base64,<?php echo str_replace("'", '', $administrator['user_profile_picture']) ?>" height="50px" alt="">
</div>
</td>
<td class="text-nowrap"><?php echo $administrator['user_full_name'] ?></td>
<td class="text-nowrap"><?php echo $administrator['user_email'] ?></td>
<td class="text-nowrap"><?php echo $administrator['user_status'] ?></td>
<td class="text-nowrap"><?php showTime($administrator['user_last_login_timestamp']); ?></td>
<td class="text-nowrap"><?php echo $administrator['user_group_name'] ?></td>
<td class="text-nowrap">
<?php if ($API->checkPermissions('admin-access-admins', 'RW', true)) { ?>
<a href="?admin_edit=<?php echo $administrator['user_uuid'] ?>" class="btn btn-primary btn-sm btn-rounded"><i class="fas fa-edit"></i></a>
<?php } ?>
<?php if ($API->checkPermissions('admin-access-admins', 'RO', true)) { ?>
<a href="?admin_view=<?php echo $administrator['user_uuid'] ?>" class="btn btn-info btn-sm btn-rounded"><i class="far fa-eye"></i></a>
<?php } ?>
<?php if ($API->checkPermissions('admin-access-admins', 'RW', true)) { ?>
<a href="#" class="btn btn-danger btn-sm btn-rounded delete-btn" data-item-uuid="<?php echo $administrator['user_uuid'] ?>" data-api-url="/api/v1/users/" data-item-name="user_uuid"><i class="fas fa-trash-alt"></i></a>
<?php } ?>
</td>
</tr>
<?php }
} ?>
</tbody>
</table>
<br>
</div>
</div>
</div>
</div>
<?php } ?>
<?php if ($API->checkPermissions('admin-access-control-permissions', 'RO', true)) { ?>
<div class="tab-pane fade show active" id="permissions" role="tabpanel" aria-labelledby="permissions-tab">
<div class="row mb-3">
<div class="col-6">
<h2>
<i class="fa-solid fa-lock"></i> &nbsp; <?php echo __('permission') ?>
</h2>
</div>
<div class="col d-flex justify-content-end">
<?php if ($API->isSuperuser()) { ?>
<a href="?permission_add=">
<button class="btn btn-primary">
<i class="fas fa-plus text-success"></i> &nbsp; <?php echo __('add_permission') ?>
</button>
</a>
<?php } ?>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="table-responsive">
<table class="multi-filter-select display table table-striped table-hover" data-skip-columns="2,3">
<thead>
<tr>
<th><?php echo __('name') ?></th>
<th><?php echo __('module') ?></th>
<th><?php echo __('description') ?></th>
<th><?php echo __('actions') ?></th>
</tr>
</thead>
<tfoot>
<tr>
<th><?php echo __('name') ?></th>
<th><?php echo __('module') ?></th>
<th><?php echo __('description') ?></th>
<th><?php echo __('actions') ?></th>
</tr>
</tfoot>
<tbody>
<?php foreach ($permissions as $key => $permission) { ?>
<tr data-item-id="<?php echo $permission['permission_uuid']; ?>">
<td class="text-nowrap"><?php echo $permission['permission_name'] ?></td>
<td class="text-nowrap"><?php echo __($permission['module_slugify']) ?></td>
<td class=""><?php echo $permission['permission_description'] ?></td>
<td class="text-nowrap">
<?php if ($API->checkPermissions('admin-access-control-permissions', 'RW', true)) { ?>
<a href="?permission_edit=<?php echo $permission['permission_uuid'] ?>" class="btn btn-primary btn-sm btn-rounded"><i class="fas fa-edit"></i></a>
<?php } ?>
<a href="?permission_view=<?php echo $permission['permission_uuid'] ?>" class="btn btn-info btn-sm btn-rounded"><i class="far fa-eye"></i></a>
<?php if ($API->isSuperuser()) { ?>
<a href="#" class="btn btn-danger btn-sm btn-rounded delete-btn" data-item-uuid="<?php echo $permission['permission_uuid'] ?>" data-item-name="permission_uuid" data-api-url="/api/v1/permissions/"><i class="fas fa-trash-alt"></i></a>
<?php } ?>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<?php } ?>
<?php if ($API->checkPermissions('admin-access-control-user-groups', 'RO', true)) { ?>
<div class="tab-pane fade" id="user-groups" role="tabpanel" aria-labelledby="user-groups-tab">
<div class="row mb-3">
<div class="col-6">
<h2>
<i class="fa-solid fa-user-group"></i> &nbsp; <?php echo __('user_groups') ?>
</h2>
</div>
<?php if ($API->checkPermissions('admin-access-control-user-groups', 'RW', true)) { ?>
<div class="col d-flex justify-content-end">
<a href="?user_group_add=">
<button class="btn btn-primary">
<i class="fas fa-plus text-success"></i> &nbsp; <?php echo __('add_user_groups') ?>
</button>
</a>
</div>
<?php } ?>
</div>
<div class="card">
<div class="card-body">
<?php
if (count($user_groups) == 0) {
echo __('no_user_groups_found');
} else { ?>
<table class="table table-striped">
<thead>
<tr>
<th><?php echo __('user_group_name') ?></th>
<th><?php echo __('user_group_slugify') ?></th>
<th><?php echo __('user_group_type') ?></th>
<th class="text-nowrap text-end"><?php echo __('actions') ?></th>
</tr>
</thead>
<?php foreach ($user_groups as $user_group) { ?>
<tr>
<td><?php echo $user_group['user_group_name']; ?></td>
<td><?php echo $user_group['user_group_slugify']; ?></td>
<td><?php echo __($user_group['user_group_type']); ?></td>
<td class="text-nowrap text-end">
<?php if ($API->checkPermissions('admin-access-control-user-groups', 'RW', true)) { ?>
<a href="?user_group_edit=<?php echo $user_group['user_group_uuid'] ?>" class="btn btn-primary btn-sm btn-rounded"><i class="fas fa-edit"></i></a>
<?php } ?>
<?php if ($API->checkPermissions('admin-access-control-user-groups', 'RO', true)) { ?>
<a href="?user_group_view=<?php echo $user_group['user_group_uuid'] ?>" class="btn btn-info btn-sm btn-rounded"><i class="far fa-eye"></i></a>
<?php } ?>
<?php if ($API->checkPermissions('admin-access-control-user-groups', 'RW', true)) { ?>
<a href="#" class="btn btn-danger btn-sm btn-rounded delete-btn" data-item-uuid="<?php echo $user_group['user_group_uuid'] ?>" data-api-url="/api/v1/user-groups/" data-item-name="user_group_uuid"><i class="fas fa-trash-alt"></i></a>
<?php } ?>
</td>
</tr>
<?php } ?>
</table>
<?php foreach ($user_groups as $user_group) {
if ($API->checkPermissions('admin-access-control-user-groups', 'RO', true)) { ?>
<div class="modal fade" id="infoModal<?php echo $user_group['user_group_slugify'] ?>" tabindex="-1" aria-labelledby="infoModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content bg-black2">
<div class="modal-header">
<h5 class="modal-title" id="infoModalLabel">
<i class="fas fa-info-circle"></i> <?php echo __('information') ?>
</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<br>
<table class="table table-sm table-striped-bg-black">
<tr>
<td><?php echo __('uuid') ?>:</td>
<td><?php echo $user_group['user_group_uuid'] ?></td>
</tr>
<tr>
<td><?php echo __('user_group_name') ?>:</td>
<td><?php echo $user_group['user_group_name'] ?></td>
</tr>
<tr>
<td><?php echo __('user_group_slugify') ?>:</td>
<td><?php echo $user_group['user_group_slugify'] ?></td>
</tr>
<tr>
<td><?php echo __('weight') ?>:</td>
<td><?php echo $user_group['user_group_weight'] ?></td>
</tr>
<tr>
<td><?php echo __('create_date') ?>:</td>
<td><?php showTime($user_group['user_group_create_timestamp']) ?></td>
</tr>
<tr>
<td><?php echo __('last_modified_date') ?>:</td>
<td><?php showTime($user_group['user_group_modified_timestamp']); ?></td>
</tr>
</table>
</div>
</div>
</div>
</div>
<?php }
}
} ?>
</div>
</div>
</div>
<?php } ?>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,55 @@
<?php
if (!defined('APP_INIT')) {
exit;
}
$jsScriptLoadData['activeTabOnRefresh'] = true;
?>
<div class="card-body activeTabOnRefresh" style="opacity: 0; transition: opacity 10ms;">
<div class="row">
<div class="col-md-1">
<div class="nav flex-column nav-pills nav-secondary nav-pills-no-bd nav-pills-icons" id="v-pills-tab-with-icon" role="tablist" aria-orientation="vertical">
<a class="nav-link active" id="overview-tab" data-bs-toggle="pill" href="#overview" role="tab" aria-controls="overview" aria-selected="true">
<i class="fa-solid fa-ear-listen"></i></i><?php echo __('overview'); ?>
</a>
<a class="nav-link" id="monitoring-tab" data-bs-toggle="pill" href="#monitoring" role="tab" aria-controls="monitoring">
<i class="fa-solid fa-magnifying-glass"></i><?php echo __('monitoring'); ?>
</a>
</div>
</div>
<div class="col-md-11">
<div class="tab-content" id="v-pills-with-icon-tabContent">
<div class="tab-pane fade show active" id="overview" role="tabpanel" aria-labelledby="overview-tab">
<div class="row mb-3">
<div class="col-4">
<h2>
<i class="fa-solid fa-ear-listen"></i></i> &nbsp; <?php echo __('overview') ?>
</h2>
</div>
</div>
<div class="card">
<div class="card-body">
to be made
</div>
</div>
</div>
<div class="tab-pane fade" id="monitoring" role="tabpanel" aria-labelledby="monitoring-tab">
<div class="row mb-3">
<div class="col-4">
<h2>
<i class="fa-solid fa-magnifying-glass"></i> &nbsp; <?php echo __('monitoring') ?>
</h2>
</div>
</div>
<div class="card">
<div class="card-body">
to be made
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,343 @@
<?php
use api\classes\API;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
# Check permissions
$API = new API();
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['activeTabOnRefresh'] = true;
$jsScriptLoadData['copyInputValue'] = true;
$jsScriptLoadData['updateToggle'] = true;
# PageClasses Setup
# Retrieve Information for the page
$portal_settings = $GLOBALS['conn']->query("SELECT * FROM vc_portal_settings")->fetch_assoc();
$system_modules_data = $GLOBALS['conn']->query("SELECT * FROM system_modules");
$system_modules = array();
while ($module = $system_modules_data->fetch_assoc()) {
array_push($system_modules, $module);
}
# Set breadcrumb data
# Start page output
?>
<div class="card-body activeTabOnRefresh" style="opacity: 0; transition: opacity 10ms;">
<div class="row">
<div class="col-md-1 col-lg-1">
<div class="nav flex-column nav-pills nav-secondary nav-pills-no-bd nav-pills-icons" id="v-pills-tab-with-icon" role="tablist" aria-orientation="vertical">
<?php if ($API->checkPermissions('admin-portalsettings', 'RO', true)) { ?>
<a class="nav-link" id="global-settings-tab" data-bs-toggle="pill" href="#global-settings" role="tab" aria-controls="global-settings" aria-selected="true">
<i class="fas fa-globe-americas"></i><?php echo __('global_settings'); ?>
</a>
<?php
} ?>
<?php if ($API->checkPermissions('admin-mailsettings', 'RO', true)) {
?>
<a class="nav-link" id="mail-settings-tab" data-bs-toggle="pill" href="#mail-settings" role="tab" aria-controls="mail-settings">
<i class="fa-solid fa-envelope"></i><?php echo __('mail_settings'); ?>
</a>
<?php
} ?>
<?php if ($API->checkPermissions('admin-modules', 'RO', true)) {
$first_nav_active = true; ?>
<a class="nav-link" id="mail-settings-tab" data-bs-toggle="pill" href="#modules" role="tab" aria-controls=modules">
<i class="fa-solid fa-cubes"></i><?php echo __('modules'); ?>
</a>
<?php $first_nav_active = true;
} ?>
<?php if ($API->checkPermissions('admin-sources', 'RO', true)) {
$first_nav_active = true; ?>
<a class="nav-link" id="sources-tab" data-bs-toggle="pill" href="#sources" role="tab" aria-controls=sources">
<i class="fa-solid fa-cloud"></i><?php echo __('sources'); ?>
</a>
<?php $first_nav_active = true;
} ?>
</div>
</div>
<div class="col-md-11 col-lg-11">
<div class="tab-content" id="v-pills-with-icon-tabContent">
<?php if ($API->checkPermissions('admin-portalsettings', 'RO', true)) { ?>
<div class="tab-pane fade show active" id="global-settings" role="tabpanel" aria-labelledby="global-settings-tab">
<div class="row mb-3">
<div class="col-12">
<h2>
<i class="fas fa-globe-americas"></i> &nbsp; <?php echo __('global_settings') ?>
</h2>
</div>
</div>
<div class="card">
<form id="FormValidation" method="post" action="/api/v1/portalsettings/">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_return" value="/systemconfig/#global-settings">
<input type="hidden" name="portal_uuid" value="<?php echo $portal_settings['portal_uuid']; ?>">
<div class="card-body">
<div class="form-group form-show-validation row">
<label for="portal_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('portal_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="portal_name" name="portal_name" value="<?php echo $portal_settings['portal_name'] ?>" placeholder="" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="portal_slugify" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('portal_slugify') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="portal_slugify" name="portal_slugify" value="<?php echo $portal_settings['portal_slugify'] ?>" placeholder="" required disabled/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="portal_provider_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('portal_provider_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="portal_provider_name" name="portal_provider_name" value="<?php echo $portal_settings['portal_provider_name'] ?>" placeholder="" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="portal_provider_slugify" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('portal_provider_slugify') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="portal_provider_slugify" name="portal_provider_slugify" value="<?php echo $portal_settings['portal_provider_slugify'] ?>" placeholder="" disabled/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="admin_auth_methods" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('admin_auth_methods') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="admin_auth_methods" name="admin_auth_methods" value="<?php echo $portal_settings['admin_auth_methods'] ?>" placeholder="" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="cacert_url" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2">
<?php echo __('cacert_url') ?>
</label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="input-group">
<input type="text" class="form-control" id="cacert_url" name="cacert_url" value="<?php echo $portal_settings['cacert_url'] ?>" placeholder="" disabled/>
<button class="btn btn-outline-secondary" type="button" onclick="copyToClipboard('cacert_url')">
<i class="fas fa-copy"></i>
</button>
</div>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="autop_url" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2">
<?php echo __('autop_url') ?>
</label>
<div class="col-lg-9 col-md-12 col-sm-10">
<div class="input-group">
<input type="text" class="form-control" id="autop_url" name="autop_url" value="<?php echo $portal_settings['autop_url'] ?>" placeholder="" disabled/>
<button class="btn btn-outline-secondary" type="button" onclick="copyToClipboard('autop_url')">
<i class="fas fa-copy"></i>
</button>
</div>
</div>
</div>
</div>
<div class="card-footer py-4">
<div class="row">
<div class="col d-flex justify-content-end">
<?php if ($API->checkPermissions('admin-portalsettings', 'RW', true)) { ?>
<button type="submit" class="btn btn-primary">
<i class="fas fa-edit"></i> <?php echo __('edit') ?>
</button>
<?php } ?>
</div>
</div>
</div>
</form>
</div>
</div>
<?php } ?>
<?php if ($API->checkPermissions('admin-mailsettings', 'RO', true)) { ?>
<div class="tab-pane fade show active" id="mail-settings" role="tabpanel" aria-labelledby="mail-settings-tab">
<div class="row mb-3">
<div class="col-12">
<h2>
<i class="fa-solid fa-envelope"></i> &nbsp; <?php echo __('mail_settings') ?>
</h2>
</div>
</div>
<div class="card">
<form id="FormValidation" method="post" action="/api/v1/mailsettings/">
<input type="hidden" name="portal_uuid" value="<?php echo $portal_settings['portal_uuid']; ?>">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_return" value="/systemconfig/#mail-settings">
<div class="card-body">
<div class="form-group form-show-validation row">
<label for="mail_from_name" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('mail_from_name') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="mail_from_name" name="mail_from_name" value="<?php echo $portal_settings['mail_from_name'] ?>" placeholder="" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="mail_from_address" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('mail_from_address') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="email" class="form-control" name="mail_from_address" value="<?php echo $portal_settings['mail_from_address'] ?>" placeholder="" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="mail_smtp_host" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('mail_smtp_host') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" name="mail_smtp_host" value="<?php echo $portal_settings['mail_smtp_host'] ?>" placeholder="" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="mail_smtp_secure" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('mail_smtp_secure') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<select id="mail_smtp_secure" name="mail_smtp_secure" class="form-control" required>
<option value="tls" <?php echo ($portal_settings['mail_smtp_secure'] == 'tls') ? 'selected' : '' ?>>TLS (standard port 587)</option>
<option value="ssl" <?php echo ($portal_settings['mail_smtp_secure'] == 'ssl') ? 'selected' : '' ?>>SSL (standard port 465)</option>
<option value="no" <?php echo ($portal_settings['mail_smtp_secure'] == 'no') ? 'selected' : '' ?>>No Encryption (standard port 25)</option>
</select>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="mail_smtp_port" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('mail_smtp_port') ?></label>
<div class="col-lg-2 col-md-2 col-sm-2">
<input type="number" class="form-control" id="mail_smtp_port" name="mail_smtp_port" value="<?php echo $portal_settings['mail_smtp_port'] ?>" placeholder="" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="mail_smtp_auth" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('mail_smtp_auth') ?></label>
<div class="col-lg-2 col-md-2 col-sm-2">
<select id="mail_smtp_auth" name="mail_smtp_auth" class="form-control" required>
<option value="1" <?php echo ($portal_settings['mail_smtp_auth'] == 1) ? 'selected' : '' ?>>true</option>
<option value="0" <?php echo ($portal_settings['mail_smtp_auth'] == 0) ? 'selected' : '' ?>>false</option>
</select>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="mail_smtp_user" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('mail_smtp_user') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="mail_smtp_user" name="mail_smtp_user" value="<?php echo $portal_settings['mail_smtp_user'] ?>" placeholder="" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="mail_smtp_pass" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('mail_smtp_pass') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="password" class="form-control" id="mail_smtp_pass" name="mail_smtp_pass" value="*******************" placeholder="" autocomplete="new-password" required/>
</div>
</div>
</div>
<div class="card-footer py-4">
<div class="row">
<div class="col d-flex justify-content-end">
<?php if ($API->checkPermissions('admin-mailsettings', 'RW', true)) { ?>
<button type="submit" class="btn btn-primary">
<i class="fas fa-edit"></i> <?php echo __('edit') ?>
</button>
<?php } ?>
</div>
</div>
</div>
</form>
</div>
</div>
<?php } ?>
<?php if ($API->checkPermissions('admin-modules', 'RO', true)) { ?>
<div class="tab-pane fade show" id="modules" role="tabpanel" aria-labelledby="modules-tab">
<div class="row mb-3">
<div class="col-12">
<h2>
<i class="fa-solid fa-cubes"></i> &nbsp; <?php echo __('modules') ?>
</h2>
</div>
</div>
<div class="card p-3">
<form id="FormValidation" method="post" action="/api/v1/modules/">
<input type="hidden" name="portal_uuid" value="<?php echo $portal_settings['portal_uuid']; ?>">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_return" value="/systemconfig/#modules">
<table class="multi-filter-select display table table-striped table-hover" data-skip-columns="0,5">
<thead>
<tr>
<th><?php echo __('module_name') ?></th>
<th><?php echo __('enabled') ?></th>
</tr>
</thead>
<tfoot>
<tr>
<th><?php echo __('module_name') ?></th>
<th><?php echo __('enabled') ?></th>
</tr>
</tfoot>
<tbody>
<?php
foreach ($system_modules as $module) { ?>
<tr>
<td><?php echo $module['module_name'] ?> </td>
<td>
<label class="switch">
<input type="checkbox" class="checkbox" data-api-url="/api/v1/system/modules/" data-api-data='<?php echo json_encode(['module_uuid' => $module['module_uuid'], 'module_enabled' => $module['module_enabled'] ? 0 : 1]) ?>' data-api-changevalue="module_enabled"
<?php echo(($module['module_enabled']) ? 'checked' : '') ?>
<?php echo ($API->checkPermissions('admin-modules', 'RW', true)) ? '' : 'disabled' ?>
<?php echo(($module['module_slugify'] == 'system') ? 'disabled' : '') ?>>
<div class="slider"></div>
</label>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</form>
</div>
</div>
<?php } ?>
<?php if ($API->checkPermissions('admin-sources', 'RO', true)) { ?>
<div class="tab-pane fade show" id="sources" role="tabpanel" aria-labelledby="sources-tab">
<div class="row mb-3">
<div class="col-12">
<h2>
<i class="fa-solid fa-cloud"></i> &nbsp; <?php echo __('sources') ?>
</h2>
</div>
</div>
<div class="card p-3">
<div class="row row-cols-1 row-cols-md-3 g-4">
<div class="col">
<div class="card card-post card-round">
<img class="card-img-top" src="/src/images/sources/inserve/inserve_logo.webp" alt="Inserve Logo">
<div class="card-body">
<h3 class="card-title">
Inserve </h3>
<p class="card-text">
Inserve is Dutch software that helps MSPs support their customers in a personal and structured way. </p>
<a href="/system/sources/inserve" class="btn btn-primary">View</a>
</div>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,195 @@
<?php
use api\classes\API;
use bin\php\Classes\pageNavbar;
if (!defined('APP_INIT')) {
exit;
}
# IDE Section
# Includes Section
include_once($_SERVER['DOCUMENT_ROOT'] . '/bin/php/Classes/pageNavbar.php');
include_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
# Check permissions
$API = new API();
$API->checkPermissions('admin-sources', 'RO');
# Page functions
# JS Scripts to load for this page
$jsScriptLoadData['activeTabOnRefresh'] = true;
$jsScriptLoadData['copyInputValue'] = true;
$jsScriptLoadData['updateToggle'] = true;
$jsScriptLoadData['breadCrumbs'] = true;
$jsScriptLoadData['inserve_source'] = true;
$jsScriptLoadData['validateJson'] = true;
# PageClasses Setup
$pageNavbar = new pageNavbar(true);
# Retrieve Information for the page
$inserve_settings = $GLOBALS['conn']->query("SELECT * FROM system_sources WHERE source_name = 'inserve'")->fetch_assoc();
$inserve_custom_data = ($inserve_settings['source_custom_data'] ? json_encode(json_decode($inserve_settings['source_custom_data']), JSON_PRETTY_PRINT) : "{}");
# Set breadcrumb data
array_push($GLOBALS['breadCrumbArray'], array('display' => __('portal_management'), 'href' => '/systemconfig'));
array_push($GLOBALS['breadCrumbArray'], array('display' => __('sources'), 'href' => '/systemconfig#sources'));
array_push($GLOBALS['breadCrumbArray'], array('display' => 'Inserve', 'href' => ''));
# Start page output
$pageNavbar->outPutNavbar();
?>
<div class="row">
<div class="col-md-12 col-lg-12">
<div class="tab-content" id="v-pills-with-icon-tabContent">
<div class="card">
<div class="mx-2 pb-0 card-body">
<h1 class="">Inserve <?php echo __('settings') ?></h1>
<p>
<?php echo __('source_description') ?></p>
<hr>
</div>
<form id="FormValidation" method="post" action="/api/v1/system/sources/inserve/">
<input type="hidden" name="_method" value="POST">
<input type="hidden" name="_return" value="/system/sources/inserve">
<input type="hidden" name="source_name" value="inserve">
<div class="card-body">
<div class="form-group form-show-validation row">
<label for="source_url" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('inserve_url') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="source_url" name="source_url" value="<?php echo ($inserve_settings) ? $inserve_settings['source_url'] : '' ?>" placeholder="" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="source_auth_token" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('api_token') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<input type="text" class="form-control" id="source_auth_token" name="source_auth_token" value="" autocomplete="off" placeholder="<?php echo ($inserve_settings) ? substr($inserve_settings['source_auth_token'], 0, 6) . str_repeat('*', max(0, strlen($inserve_settings['source_auth_token']) - 6)) : ''; ?>" required/>
</div>
</div>
<div class="form-group form-show-validation row">
<label for="source_custom_data" class="col-lg-3 col-md-3 col-sm-4 mt-sm-2"><?php echo __('source_custom_data') ?></label>
<div class="col-lg-9 col-md-12 col-sm-10">
<textarea class="form-control" id="source_custom_data" name="source_custom_data" rows="5" data-validate-json="true"><?php echo $inserve_custom_data ?></textarea>
<small id="source_custom_data_help" class="form-text text-muted">
<?php echo __('json_enter') ?>
</small>
</div>
</div>
</div>
<div class="card-footer py-4">
<div class="row">
<div class="col d-flex justify-content-end">
<button class="btn btn-success mx-2 test-inserve-connection-btn">
<i class="fa-solid fa-spell-check"></i> <?php echo __('test_connection') ?>
</button>
<?php if ($API->checkPermissions('admin-sources', 'RW', true)) { ?>
<button type="submit" class="btn btn-primary">
<i class="fa-solid fa-floppy-disk"></i> <?php echo __('save') ?>
</button>
<?php } ?>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-lg-12">
<div class="tab-content" id="v-pills-with-icon-tabContent">
<div class="card">
<div class="card-body">
<h1 class="mx-2 pb-0">Inserve actions</h1>
<div class="row row-cols-1 row-cols-md-3 g-2">
<?php if ($GLOBALS['modules_enabled']['customers'] && $API->checkPermissions('customer-companies', 'RW', true)) { ?>
<div class="col d-flex">
<form method="post" action="/api/v1/sources/inserve/sync-companies/">
<div class="card h-100 w-100">
<div class="card-body">
<h5 class="card-title"><?php echo __('source_inserve_sync_companies') ?></h5>
<input type="hidden" name="_return" value="/system/sources/inserve">
<p class="card-text"><?php echo __('source_inserve_sync_companies_desc') ?></p>
</div>
<div class="card-footer mt-auto">
<button class="btn btn-primary">
<i class="fa-solid fa-arrow-rotate-right"></i> &nbsp;<?php echo __('sync') ?>
</button>
</div>
</div>
</form>
</div>
<?php } ?>
<?php if ($GLOBALS['modules_enabled']['servers'] && $API->checkPermissions('servers', 'RW', true)) { ?>
<div class="col d-flex">
<form method="post" action="/api/v1/sources/inserve/sync-cloud-distributor/" class="w-100">
<div class="card h-100 w-100">
<div class="card-body">
<h5 class="card-title"><?php echo __('source_inserve_sync_cloud') ?></h5>
<input type="hidden" name="_return" value="/system/sources/inserve">
<p class="card-text"><?php echo __('source_inserve_sync_cloud_desc') ?></p>
</div>
<div class="card-footer mt-auto">
<button class="btn btn-primary">
<i class="fa-solid fa-arrow-rotate-right"></i> &nbsp;<?php echo __('sync') ?>
</button>
</div>
</div>
</form>
</div>
<?php } ?>
<?php if ($GLOBALS['modules_enabled']['servers'] && $API->checkPermissions('servers', 'RW', true)) { ?>
<div class="col d-flex">
<form method="post" action="/api/v1/sources/inserve/sync-server-licenses/" class="w-100">
<div class="card h-100 w-100">
<div class="card-body">
<h5 class="card-title"><?php echo __('source_inserve_sync_licenses') ?></h5>
<input type="hidden" name="_return" value="/system/sources/inserve">
<p class="card-text"><?php echo __('source_inserve_sync_licenses_desc') ?></p>
</div>
<div class="card-footer mt-auto">
<button class="btn btn-primary">
<i class="fa-solid fa-arrow-rotate-right"></i> &nbsp;<?php echo __('sync') ?>
</button>
</div>
</div>
</form>
</div>
<?php } ?>
<?php if ($GLOBALS['modules_enabled']['servers'] && $API->checkPermissions('servers', 'RW', true)) { ?>
<div class="col d-flex">
<form method="post" action="/api/v1/sources/inserve/sync-server-subscriptions/" class="w-100">
<div class="card h-100 w-100">
<div class="card-body">
<h5 class="card-title"><?php echo __('source_inserve_sync_subscriptions') ?></h5>
<input type="hidden" name="_return" value="/system/sources/inserve">
<p class="card-text"><?php echo __('source_inserve_sync_subscriptions_desc') ?></p>
</div>
<div class="card-footer mt-auto">
<button class="btn btn-primary">
<i class="fa-solid fa-arrow-rotate-right"></i> &nbsp;<?php echo __('sync') ?>
</button>
</div>
</div>
</form>
</div>
<?php } ?>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,90 @@
<?php
namespace bin\php\Classes;
class formBuilder
{
public $title;
public $icon;
public $submitButton;
public $closeButton;
public $closeButtonLocation;
public $submitButtonColor;
public $submitButtonText;
public $submitButtonIcon;
private $extraButtonsArray = array();
public function __construct($title, $icon, $closeButtonLocation, $submitButton = true, $closeButton = true)
{
$this->title = __($title);
$this->icon = $icon;
$this->submitButton = $submitButton;
$this->closeButton = $closeButton;
$this->closeButtonLocation = $closeButtonLocation;
$this->submitButtonColor = 'primary';
$this->submitButtonText = __($title);
$this->submitButtonIcon = $icon;
}
public function startForm()
{ ?>
<div class="row"><div class="col-md-8 ms-auto me-auto"><div class="card">
<div class="card-header">
<h3><?php echo $this->icon ?>&nbsp; &nbsp;&nbsp;<?php echo $this->title ?></h3>
</div>
<?php }
public function endForm()
{ ?>
</div></div></div>
<?php }
# Add extra buttons to the form footer between the submit and close button
# Array example:
# array(
# 0 => array(
# 'buttonText' => 'testButton2123',
# 'buttonIcon' => 'ico123123ncontnet',
# 'buttonHref' => 'test'
# 'buttonColor' => 'success'
# ) > next array
public function addExtraButtons($extraButtonsArray)
{
foreach ($extraButtonsArray as $numb => $extraButtonArray) {
if (is_array($extraButtonArray)) {
if (array_key_exists('buttonIcon', $extraButtonArray) && array_key_exists('buttonText', $extraButtonArray) && array_key_exists('buttonHref', $extraButtonArray) && array_key_exists('buttonColor', $extraButtonArray)) {
array_push($this->extraButtonsArray, $extraButtonArray);
return true;
}
}
}
return false;
}
public function formFooter()
{ ?>
<div class="card-footer pt-3">
<div class="row">
<div class="col d-flex justify-content-end">
<?php if ($this->submitButton) { ?>
<button type="submit" class="btn btn-<?php echo $this->submitButtonColor ?>"><?php echo $this->submitButtonIcon ?>&nbsp;<?php echo $this->submitButtonText ?></button>&nbsp; &nbsp;
<?php }
foreach ($this->extraButtonsArray as $numb => $extraButtonArray) { ?>
<a href="<?php echo $extraButtonArray['buttonHref'] ?>" class="btn btn-<?php echo $extraButtonArray['buttonColor'] ?>"><?php echo $extraButtonArray['buttonIcon'] ?>&nbsp;<?php echo $extraButtonArray['buttonText'] ?></a>&nbsp; &nbsp;
<?php }
if ($this->closeButton) { ?>
<a href="<?php echo $this->closeButtonLocation ?>" class="btn btn-danger">
<i class="fas fa-times"></i> <?php echo __('close') ?>
</a>
<?php } ?>
</div>
</div>
</div>
<?php }
}

View File

@@ -0,0 +1,68 @@
<?php
namespace bin\php\Classes;
if (!defined('APP_INIT')) {
exit;
}
class healthCheck
{
public function __construct()
{
include_once $_SERVER['DOCUMENT_ROOT'] . '/bin/php/db_connect.php';
include_once $_SERVER['DOCUMENT_ROOT'] . '/bin/php/globalFunctions.php';
}
public function healthCheck()
{
echo 'Checking and creating device data folders...';
if ($this->checkDeviceDataFolders()) {
echo 'Success creating device data folders';
} else {
echo 'something went wrong creating device data folders!';
}
}
private function checkDeviceDataFolders()
{
try {
$sql = "SELECT device_slugify FROM vc_devices";
$stmt = $GLOBALS['conn']->prepare($sql);
if ($stmt === false) {
throw new Exception("Failed to prepare the SQL statement: " . $GLOBALS['conn']->error);
}
if (!$stmt->execute()) {
throw new Exception("Failed to execute the SQL statement: " . $stmt->error);
}
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
$device_slugify = $row['device_slugify'];
$dirsToCreate = array(
$_SERVER['DOCUMENT_ROOT'] . "/data/devices/" . $device_slugify,
$_SERVER['DOCUMENT_ROOT'] . "/data/devices/" . $device_slugify . "/firmware",
$_SERVER['DOCUMENT_ROOT'] . "/data/devices/" . $device_slugify . "/documents"
);
foreach ($dirsToCreate as $dir) {
if (!file_exists($dir)) {
if (!mkdir($dir)) {
throw new Exception("Failed to create the directory: " . $dir);
}
}
}
}
$stmt->close();
} catch (Exception $e) {
return $e->getMessage();
}
return true;
}
}

View File

@@ -0,0 +1,81 @@
<?php
namespace bin\php\Classes;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\PHPMailer;
require $_SERVER['DOCUMENT_ROOT'] . '/../vendor/autoload.php';
class mailBuilder
{
public $mail;
public $subject;
public $mailText;
private $portal_uuid;
function __construct()
{
$this->mail = new PHPMailer(true);
$sql = "SELECT mail_from_name,
mail_from_address,
mail_smtp_host,
mail_smtp_secure,
mail_smtp_port,
mail_smtp_auth,
mail_smtp_user,
mail_smtp_pass
FROM vc_portal_settings LIMIT 1";
$stmt = $GLOBALS['conn']->prepare($sql);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
$mail_settings = $result->fetch_assoc();
}
$this->mail->isSMTP();
$this->mail->Host = $mail_settings['mail_smtp_host'];
$this->mail->SMTPAuth = $mail_settings['mail_smtp_auth'];
$this->mail->Username = $mail_settings['mail_smtp_user'];
$this->mail->Password = $mail_settings['mail_smtp_pass'];
$this->mail->SMTPSecure = $mail_settings['mail_smtp_secure'];
$this->mail->Port = $mail_settings['mail_smtp_port'];
$this->mail->CharSet = 'UTF-8';
$this->mail->Encoding = 'base64';
$this->mail->setFrom($mail_settings['mail_from_address'], $mail_settings['mail_from_name']);
}
function addAddress($address, $name)
{
$this->mail->addAddress($address, $name);
}
function sendMail()
{
try {
$this->mail->isHTML(true);
$this->mail->Subject = $this->subject;
$this->mail->Body = $this->mailHtmlBody();
$this->mail->send();
return true;
} catch (Exception $e) {
return false;
}
}
function mailHtmlBody()
{
$body = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/src/html/mailBody.html');
$bodyText = $this->mailText;
$body = str_replace('{{bodyText}}', $bodyText, $body);
return $body;
}
}

View File

@@ -0,0 +1,518 @@
<?php
namespace bin\php\Classes;
if (!defined('APP_INIT')) {
exit;
}
use api\classes\API;
session_start();
require_once($_SERVER['DOCUMENT_ROOT'] . '/api/classes/API.php');
class pageBuilder extends API
{
private $jsScriptLoadData;
public function __construct()
{
# retrieve all the pages from the database
$pages = [];
$query = "SELECT page_name, page_icon, page_description, page_location, page_url, page_color, module_name, module_slugify FROM system_pages
INNER JOIN system_modules ON system_pages.module_uuid = system_modules.module_uuid
WHERE system_modules.module_enabled = 1 ";
if ($stmt = $GLOBALS['conn']->prepare($query)) {
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
$module = $row['module_slugify'];
$pages[$module][$row['page_name']] = $row;
}
$stmt->close();
}
$GLOBALS['pages'] = $pages;
$this->figureOutContent();
}
private function figureOutContent()
{
$requestUri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
// Remove trailing slash, but only if its not the root "/"
if ($requestUri !== '/' && substr($requestUri, -1) === '/') {
$requestUri = rtrim($requestUri, '/');
}
$GLOBALS['breadCrumbArray'] = array(array('display' => '<i class="fas fa-home"></i>', 'href' => '/'));
$GLOBALS['pageContentToShow']['pageName'] = '404';
$GLOBALS['pageContentToShow']['pageFile'] = 'pageNotFound.php';
$GLOBALS['pageContentToShow']['pageIcon'] = '<i class="fa-solid fa-ban"></i>';
$GLOBALS['pageContentToShow']['noUsersAllowed'] = false;
foreach ($GLOBALS['pages'] as $module) {
foreach ($module as $page) {
if ($requestUri == $page['page_url']) {
$GLOBALS['pageContentToShow']['pageName'] = $page['page_name'];
$GLOBALS['pageContentToShow']['pageFile'] = $page['page_location'];
$GLOBALS['pageContentToShow']['pageIcon'] = '<i class="' . $page['page_icon'] . '"></i>';
$GLOBALS['pageContentToShow']['noUsersAllowed'] = false;
}
}
}
}
public function buildPage()
{ ?>
<!DOCTYPE html>
<html lang="en">
<?php $this->pageHeadContent(); ?>
<body data-background-color="dark">
<div class="wrapper<?= (($_COOKIE['sidebarMinimized'] ?? '') === 'true' ? ' sidebar_minimize' : '') . (($_COOKIE['sidebarHovered'] ?? '') === 'true' ? ' sidebar_minimize_hover' : '') ?>">
<?php $this->pageSidebarContent(); ?>
<div class="main-panel">
<?php $this->pageNavbarContent() ?>
<div class="container">
<div class="page-inner">
<?php
include_once './bin/pages/' . $GLOBALS['pageContentToShow']['pageFile'];
if (isset($jsScriptLoadData)) {
$this->jsScriptLoadData = $jsScriptLoadData;
}
?>
</div>
</div>
<?php $this->pageFooterContent() ?>
</div>
</div>
<?php $this->pageScriptContents(); ?>
</body>
</html>
<?php }
private
function pageHeadContent()
{ ?>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0, shrink-to-fit=no" name="viewport"/>
<title>
<?php echo __($GLOBALS['pageContentToShow']['pageName']) ?>
</title>
<!-- Fonts and icons -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<link href="https://fonts.googleapis.com/css?family=Public+Sans:300,400,500,600,700|Quicksand:300,400,500,600,700&display=swap" rel="stylesheet">
<style>
body {
min-height: 100vh;
}
.custom-avatar {
width: 50px; /* Desired width */
height: 50px; /* Desired height */
display: inline-block; /* Ensure it behaves like an inline block */
background-size: cover; /* Stretch to cover the element */
background-position: center; /* Center the background image */
background-repeat: no-repeat; /* Prevent repetition */
border-radius: 50%; /* Circular shape */
overflow: hidden; /* Ensure no overflow for a clean circular look */
}
.flag-bg[data-flag="gb"] {
background-image: url('https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.6.6/flags/4x3/gb.svg'); /* Greece */
}
.flag-bg[data-flag="nl"] {
background-image: url('https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.6.6/flags/4x3/nl.svg'); /* Greece */
}
.dataTables_filter {
width: 100%;
text-align: left;
position: relative;
}
.dataTables_filter label {
width: 100%;
height: 40px;
display: flex;
}
.dataTables_filter input {
height: 40px;
width: 100% !important; /* Make the input field full width */
box-sizing: border-box; /* Ensure padding doesn't exceed the width */
}
.dataTables_filter .fa-search {
position: absolute;
top: 12px;
left: auto;
right: 10px;
}
.dataTables_length label {
display: flex;
align-items: center;
height: 40px;
}
.dataTables_length label::before {
display: inline-block;
height: 40px;
padding-top: 10px; /* Move "Entries" down */
}
.dataTables_length select {
flex: 1; /* Allow the select field to take the remaining space */
max-width: 100%; /* Ensure it doesn't exceed the container */
margin-left: 10px; /* Optional spacing between "Entries" and the select */
}
/* Change the border color of the entire dropdown options container */
.select2-container--bootstrap .select2-dropdown {
border: 0 solid rgba(80, 80, 80, 0.19) !important; /* Light gray border */
border-radius: 0.25rem; /* Optional: Add a border radius to match Bootstrap styles */
}
/* Optional: Remove white edges inside the dropdown */
.select2-container--bootstrap .select2-results {
padding: 0; /* Remove any extra padding inside the dropdown */
}
/* Change background color of selected items in the dropdown */
.select2-container--bootstrap .select2-results__option {
background-color: #282828 !important; /* Light green background */
color: #d5c4a1 !important; /* Dark green text */
}
/* Optional: Change border color on hover */
.select2-container--bootstrap .select2-results__option:hover {
background-color: #346b42 !important; /* Light blue background */
color: #d5c4a1 !important; /* Dark green text */
}
/* Change background color of selected items in the dropdown */
.select2-container--bootstrap .select2-results__option[aria-selected="true"] {
background-color: #1a3522 !important; /* Light green background */
color: #d5c4a1 !important; /* Dark green text */
}
/* Optional: Change the background color when hovering over selected items */
.select2-container--bootstrap .select2-results__option[aria-selected="true"]:hover {
background-color: #346b42 !important; /* Slightly darker green */
color: #d5c4a1 !important;
}
/* Custom Slider switch (on/off button) */
</style>
<!-- CSS Files -->
<link rel="stylesheet" href="/src/css/bootstrap.gruvbox.min.css"/>
<link rel="stylesheet" href="/src/css/plugins.min.css"/>
<link rel="stylesheet" href="/src/css/kaiadmin.gruvbox.dark.css"/>
<!--<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/lipis/flag-icons@7.2.3/css/flag-icons.min.css"/> -->
<!-- favicon -->
<link rel="icon" type="image/png" href="/src/images/favicon/favicon-96x96.png" sizes="96x96"/>
<link rel="icon" type="image/svg+xml" href="/src/images/favicon/favicon-96x96.png"/>
<link rel="shortcut icon" href="/src/images/favicon/favicon.ico"/>
<link rel="apple-touch-icon" sizes="180x180" href="/src/images/favicon/apple-touch-icon.png"/>
<link rel="manifest" href="/src/images/favicon/site.webmanifest"/>
<style>
.fade-in {
opacity: 0;
transition: opacity 0.3s ease, transform 0.3s ease;
}
.fade-in.show {
opacity: 1;
transform: scale(1);
}
.transition-opacity {
transition: opacity 0.3s ease;
}
</style>
</head>
<?php }
private function pageSidebarContent()
{
$API = new API();
function showSpan($module_name)
{
?>
<li class="nav-section">
<h4 class="text-section"><?php echo $module_name ?></h4>
</li>
<?php }
function showPage($module_name, $page_name)
{
$page = $GLOBALS['pages'][$module_name][$page_name];
?>
<li class="nav-item <?php echo($_SERVER['REQUEST_URI'] == $page['page_url'] ? 'active' : '') ?>">
<a href="<?php echo $page['page_url'] ?>">
<i class="<?php echo $page['page_icon'] ?>"></i> <?php echo __($page['page_name']) ?>
</a>
</li>
<?php } ?>
<div class="sidebar" data-background-color="dark">
<div class="sidebar-logo">
<div class="logo-header" data-background-color="dark2">
<a href="/" class="logo">
<img src="/src/images/logo-sidebar-dark.webp" alt="navbar brand" class="navbar-brand" height="50"/>
</a>
<div class="nav-toggle">
<button class="btn btn-toggle toggle-sidebar">
<i class="gg-menu-right"></i>
</button>
<button class="btn btn-toggle sidenav-toggler">
<i class="gg-menu-left"></i>
</button>
</div>
<button class="topbar-toggler more">
<i class="gg-more-vertical-alt"></i>
</button>
</div>
</div>
<div class="sidebar-wrapper scrollbar scrollbar-inner">
<div class="sidebar-content">
<ul class="nav nav-secondary">
<?php
showPage('system', 'dashboard');
if ($GLOBALS['modules_enabled']['office'] && $API->checkPermissions('ofice-stompjes', 'RO', true)) {
showSpan('office');
showPage('office', 'stompjeslist');
}
if ($GLOBALS['modules_enabled']['servers'] && $API->checkPermissions('servers', 'RO', true)) {
showSpan('servers');
showPage('servers', 'server_overview');
}
if ($GLOBALS['modules_enabled']['customers'] && $API->checkPermissions('customer-companies', 'RO', true)) {
showSpan('customers');
showPage('customers', 'companies');
}
if ($GLOBALS['modules_enabled']['autop']) {
showSpan('autop');
showPage('autop', 'platforms');
showPage('autop', 'vendors');
showPage('autop', 'devices');
showPage('autop', 'provisioning');
showPage('autop', 'phonebooks');
showPage('autop', 'device_settings');
}
showSpan('system');
showPage('system', 'access_control');
showPage('system', 'systemconfig');
?>
</ul>
</div>
</div>
</div>
<?php
}
private
function pageNavbarContent()
{
?>
<div class="main-header">
<div class="main-header-logo">
<!-- Logo Header -->
<div class="logo-header" data-background-color="dark2">
<a href="/" class="logo">
<img src="/src/images/logo-sidebar-dark.webp" alt="navbar brand" class="navbar-brand" height="50"/>
</a>
<div class="nav-toggle">
<button class="btn btn-toggle toggle-sidebar">
<i class="gg-menu-right"></i>
</button>
<button class="btn btn-toggle sidenav-toggler">
<i class="gg-menu-left"></i>
</button>
</div>
<button class="topbar-toggler more">
<i class="gg-more-vertical-alt"></i>
</button>
</div>
<!-- End Logo Header -->
</div>
<!-- Navbar Header -->
<nav class="navbar navbar-header navbar-header-transparent navbar-expand-lg border-bottom" data-background-color="dark2">
<div class="container-fluid">
<ul class="navbar-nav topbar-nav ms-md-auto align-items-center">
<li class="nav-item topbar-icon dropdown hidden-caret d-flex d-lg-none"></li>
<li class="nav-item topbar-user dropdown hidden-caret">
<a class="dropdown-toggle profile-pic" data-bs-toggle="dropdown" href="#" aria-expanded="false">
<div class="avatar-sm">
<img src="<?php echo(($_SESSION['user']['user_profile_picture_thumbnail'] != null) ? 'data:image/png;base64, ' . $_SESSION['user']['user_profile_picture_thumbnail'] : '/src/images/user-avatar-default-small.png') ?>" alt="..." class="avatar-img rounded-circle">
</div> &nbsp;
<span class="op-7"> <?php echo __('hi') ?>,&nbsp;</span>
<span class="fw-bold"><?php echo $_SESSION['user']['user_first_name'] ?></span>
</a>
<ul class="dropdown-menu dropdown-user animated fadeIn">
<div class="dropdown-user-scroll scrollbar-outer">
<li>
<div class="user-box">
<div class="avatar-lg">
<img src="<?php echo(($_SESSION['user']['user_profile_picture_thumbnail'] != null) ? 'data:image/png;base64, ' . $_SESSION['user']['user_profile_picture_thumbnail'] : '/src/images/user-avatar-default-small.png') ?>" alt="image profile" class="avatar-img rounded">
</div>
<div class="u-text">
<h4><?php echo $_SESSION['user']['user_email'] ?></h4>
<p class="text-muted"><?php echo $_SESSION['user']['user_email'] ?></p>
</div>
</div>
</li>
<li>
<?php
if ($_SESSION['user']['user_group_type'] == 'user' || $_SESSION['user']['user_group_type'] == 'admin') { ?>
<a class="dropdown-item" href="/userprofile/"><i class="fa-solid fa-address-card"></i> <?php echo __('user_profile') ?>
</a>
<div class="dropdown-divider"></div>
<?php } else { ?>
<div class="dropdown-divider"></div>
<?php } ?>
<form id="logoutform" class="form-inline logoutform" action="/login/logout.php" method="POST">
<input type="hidden" name="logout">
<a class="dropdown-item" href="#" onclick="document.getElementById('logoutform').submit()">
<i class="fas fa-sign-out-alt"></i> <?php echo __('logout') ?>
</a>
</form>
</li>
</div>
</ul>
</li>
</ul>
</div>
</nav>
<!-- End Navbar -->
</div>
<?php }
private
function pageFooterContent()
{ ?>
<footer class="footer py-2">
<div class="container-fluid d-flex justify-content-between">
<nav class="pull-left">
<ul class="nav">
<li class="nav-item">
<a class="nav-link" href="https://docs.sentri.mooij.me" target="_blank"><i class="far fa-question-circle"></i> Help</a>
</li>
</ul>
</nav>
<div class="copyright">
<?php echo __('version') ?>
<a href="/changelog/">1.2</a>
</div>
<div>
<span class="navbar-text">Sentri</span>
</div>
</div>
</footer>
<?php }
private
function pageScriptContents()
{ ?>
<!-- always load these -->
<script src="/src/js/core/jquery-3.7.1.min.js"></script>
<script src="/src/js/core/popper.min.js"></script>
<script src="/src/js/core/bootstrap.min.js"></script>
<!-- Bootstrap Notify -->
<script src="/src/js/plugin/bootstrap-notify/bootstrap-notify.min.js"></script>
<!-- Sweet Alert -->
<script src="/src/js/plugin/sweetalert2/sweetalert2.min.js"></script>
<!-- Kaiadmin JS -->
<script src="/src/js/kaiadmin.dark.min.js"></script>
<!-- jQuery Scrollbar -->
<script src="/src/js/plugin/jquery-scrollbar/jquery.scrollbar.min.js"></script>
<!-- Chart JS
<script src="/src/js/plugin/chart.js/chart.min.js"></script>
-->
<!-- jQuery Sparkline
<script src="/src/js/plugin/jquery.sparkline/jquery.sparkline.min.js"></script>
-->
<!-- Chart Circle
<script src="/src/js/plugin/chart-circle/circles.min.js"></script>
-->
<!-- jQuery Vector Maps
<script src="/src/js/plugin/jsvectormap/jsvectormap.min.js"></script>
<script src="/src/js/plugin/jsvectormap/world.js"></script>
-->
<?php
# keeps refreshing the timeZoneCookie
setTimeZoneCookie();
if (isset($this->jsScriptLoadData)) {
include_once $_SERVER['DOCUMENT_ROOT'] . '/bin/php/jsScripts.php';
}
# process response from actions
if (isset($_SESSION['response'])) {
$ar = json_decode($_SESSION['response']);
$type = key($ar);
$text = reset($ar);
$title = $type;
if ($type == 'error') {
$type = 'danger';
}
unset($_SESSION['response']) ?>
<script>
var content = {};
content.message = '<?php echo __($text) ?>';
content.title = '<?php echo ucfirst($title) ?>';
content.icon = "fa fa-bell";
$.notify(content, {
type: '<?php echo $type ?>',
placement: {
from: 'top',
align: 'right',
},
time: 10,
delay: 3,
});
$('#multiple').select2({
theme: "bootstrap"
});
</script>
<?php }
}
}

View File

@@ -0,0 +1,47 @@
<?php
namespace bin\php\Classes;
if (!defined('APP_INIT')) {
exit;
}
class pageNavbar
{
public $breadCrumb;
private $buttons = array();
public function __construct($showBreadCrumb, $title = false)
{
$this->breadCrumb = $showBreadCrumb;
$this->title = $title;
}
public function AddHTMLButton($html)
{
array_push($this->buttons, $html);
}
public function outPutNavbar()
{
?>
<div class="row">
<div class="col d-flex justify-content-start">
<?php if ($this->breadCrumb) { ?>
<div class="pb-2" id="breadCrumb"></div>
<?php } elseif ($this->title) { ?>
<h2 class="px-4 mb-0"><?php echo $this->title ?></h2>
<?php } else { ?>
<div></div>
<?php } ?>
</div>
<div class="col d-flex justify-content-end">
<?php if (count($this->buttons)) {
foreach ($this->buttons as $button) {
echo $button;
}
} ?>
</div>
</div>
<br>
<?php }
}

View File

@@ -0,0 +1,484 @@
<?php
namespace bin\php\Classes;
if (!defined('APP_INIT')) {
exit;
}
class serverOverviewBuilder
{
public array $servers = [];
public array $showColumns = array(
'server_hostname' => false,
'company_name' => false,
'server_power_state' => false,
'server_os' => false,
'server_cpu' => false,
'server_memory' => false,
'server_memory_demand' => false,
'server_disks' => false,
'server_ipv4' => false,
'server_ipv6' => false,
'server_vm_snapshot' => false,
'server_vm_generation' => false,
'server_licenses' => false,
'server_backup' => false,
'server_description' => false,
);
public array $allBackupTypes = [];
public array $allLicenseTypes = [];
public bool $showDelBtn = true;
public bool $showServerOverviewTitle = true;
public bool $showCompanies = true;
public function processServerData()
{
foreach ($this->servers as $server) {
if (!empty($server['server_backup'])) {
$backups = json_decode($server['server_backup'], true);
if (is_array($backups)) {
foreach ($backups as $item) {
foreach ($item as $key => $value) {
$this->allBackupTypes[$key] = true;
}
}
}
}
if (!empty($server['server_licenses'])) {
$licenses = json_decode($server['server_licenses'], true);
if (is_array($licenses)) {
foreach ($licenses as $item) {
foreach ($item as $key => $value) {
$this->allLicenseTypes[$key] = true;
}
}
}
}
}
$this->allBackupTypes = array_keys($this->allBackupTypes);
sort($this->allBackupTypes);
$this->allLicenseTypes = array_keys($this->allLicenseTypes);
sort($this->allLicenseTypes);
if (isset($_COOKIE['serverTableColumns'])) {
$CheckedColumns = json_decode(htmlspecialchars(($_COOKIE['serverTableColumns']), true));
foreach ($CheckedColumns as $CheckedColumn) {
$this->showColumns[$CheckedColumn] = true;
}
} else {
$this->showColumns['server_hostname'] = true;
$this->showColumns['company_name'] = true;
$this->showColumns['server_os'] = true;
$this->showColumns['server_cpu'] = true;
$this->showColumns['server_memory'] = true;
$this->showColumns['server_memory_demand'] = true;
$this->showColumns['server_disks'] = true;
$this->showColumns['server_state'] = true;
}
}
private function cleanNumber($num)
{
// If integer value, return without formatting
if (floor($num) == $num) {
return (string)$num;
}
// Otherwise return trimmed float
return rtrim(rtrim(number_format($num, 10, '.', ''), '0'), '.');
}
public function serverOverviewOutPut()
{ ?>
<div class="form-group form-show-validation row mb-3">
<?php if ($this->showServerOverviewTitle) { ?>
<div class="col-auto">
<h2>
<i class="<?php echo $GLOBALS['pages']['servers']['server_overview']['page_icon'] ?>"></i> &nbsp; <?php echo __('server_overview') ?>
</h2>
</div>
<?php } ?>
<div class="col d-flex justify-content-end px-1">
<div class="selectgroup selectgroup-pills">
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_state" class="selectgroup-input" <?php echo($this->showColumns['server_state'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('server_state') ?></span>
</label>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_hostname" class="selectgroup-input" <?php echo($this->showColumns['server_hostname'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('server_hostname') ?></span>
</label>
<?php if ($this->showCompanies) { ?>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="company_name" class="selectgroup-input" <?php echo($this->showColumns['company_name'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('company') ?></span>
</label>
<?php } ?>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_os" class="selectgroup-input" <?php echo($this->showColumns['server_os'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('server_os') ?></span>
</label>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_cpu" class="selectgroup-input" <?php echo($this->showColumns['server_cpu'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('server_cpu') ?></span>
</label>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_memory" class="selectgroup-input" <?php echo($this->showColumns['server_memory'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('server_memory') ?></span>
</label>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_memory_demand" class="selectgroup-input" <?php echo($this->showColumns['server_memory_demand'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('server_memory_demand') ?></span>
</label>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_disks" class="selectgroup-input" <?php echo($this->showColumns['server_disks'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('server_disks') ?></span>
</label>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_ipv4" class="selectgroup-input" <?php echo($this->showColumns['server_ipv4'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('server_ipv4') ?></span>
</label>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_ipv6" class="selectgroup-input" <?php echo($this->showColumns['server_ipv6'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('server_ipv6') ?></span>
</label>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_vm_snapshot" class="selectgroup-input" <?php echo($this->showColumns['server_vm_snapshot'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('server_vm_snapshot') ?></span>
</label>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_vm_generation" class="selectgroup-input" <?php echo($this->showColumns['server_vm_generation'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('server_vm_generation') ?></span>
</label>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_licenses" class="selectgroup-input" <?php echo($this->showColumns['server_licenses'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('server_licenses') ?></span>
</label>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_backup" class="selectgroup-input" <?php echo($this->showColumns['server_backup'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('server_backup') ?></span>
</label>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_power_state" class="selectgroup-input" <?php echo($this->showColumns['server_power_state'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('server_power_state') ?></span>
</label>
<label class="selectgroup-item">
<input type="checkbox" name="value" value="server_description" class="selectgroup-input" <?php echo($this->showColumns['server_description'] ? 'checked=""' : '') ?>>
<span class="selectgroup-button"><?php echo __('description') ?></span>
</label>
</div>
</div>
<?php if ($this->showDelBtn) { ?>
<div class="col-lg-auto col-md-auto col-sm-auto">
<?php
if (!isset($_GET['del'])) { ?>
<a class="btn btn-danger btn-border" href="?del">
<i class="fa-solid fa-filter"></i> &nbsp; <?php echo __('show_del') ?>
</a>
<?php } else { ?>
<a class="btn btn-danger " href="/servers">
<i class="fa-solid fa-filter"></i> &nbsp; <?php echo __('show_del') ?>
</a>
<?php } ?>
</div>
<?php } ?>
</div>
<div class="card">
<div class="card-body">
<div class="table-responsive">
<table class="multi-filter-select display table table-striped table-hover" data-skip-columns="action" data-page-length="50">
<thead>
<tr>
<th data-column="server_state"><?php echo __('server_state') ?></th>
<th data-column="server_hostname"><?php echo __('server_hostname') ?></th>
<?php if ($this->showCompanies) { ?>
<th data-column="company_name"><?php echo __('company') ?></th>
<?php } ?>
<th data-column="server_os"><?php echo __('server_os') ?></th>
<th data-column="server_cpu">
<i class="fa-solid fa-microchip"></i> <?php echo __('server_cpu') ?>
</th>
<th data-column="server_memory">
<i class="fa-solid fa-memory"></i> <?php echo __('server_memory') ?>
</th>
<th data-column="server_memory_demand"><?php echo __('server_memory_demand') ?></th>
<th data-column="server_disks">
<i class="fa-solid fa-hard-drive"></i> <?php echo __('server_disks') ?>
</th>
<th data-column="server_ipv4">
<?php echo __('server_ipv4') ?>
</th>
<th data-column="server_ipv6">
<?php echo __('server_ipv6') ?>
</th>
<th data-column="server_vm_snapshot"><?php echo __('server_vm_snapshot') ?></th>
<th data-column="server_vm_generation"><?php echo __('server_vm_generation') ?></th>
<?php
foreach ($this->allLicenseTypes as $licenseType) { ?>
<th data-column="server_licenses_<?php echo $licenseType ?>"><?php echo $licenseType ?></th>
<?php }
foreach ($this->allBackupTypes as $backupType) { ?>
<th data-column="server_backup_<?php echo $backupType ?>"><?php echo $backupType ?></th>
<?php }
?>
<th data-column="server_power_state"><?php echo __('server_power_state') ?></th>
<th data-column="server_description"><?php echo __('description') ?></th>
<th data-column="action">
<?php echo __('action') ?>
</th>
</tr>
</thead>
<tfoot>
<tr>
<th data-column="server_state"><?php echo __('server_state') ?></th>
<th data-column="server_hostname"><?php echo __('server_hostname') ?></th>
<?php if ($this->showCompanies) { ?>
<th data-column="company_name"><?php echo __('company') ?></th>
<?php } ?>
<th data-column="server_os"><?php echo __('server_os') ?></th>
<th data-column="server_cpu"><?php echo __('server_cpu') ?></th>
<th data-column="server_memory"><?php echo __('server_memory') ?></th>
<th data-column="server_memory_demand"><?php echo __('server_memory_demand') ?></th>
<th data-column="server_disks"><?php echo __('server_disks') ?></th>
<th data-column="server_ipv4"><?php echo __('server_ipv4') ?></th>
<th data-column="server_ipv6"><?php echo __('server_ipv6') ?></th>
<th data-column="server_vm_snapshot"><?php echo __('server_vm_snapshot') ?></th>
<th data-column="server_vm_generation"><?php echo __('server_vm_generation') ?></th>
<?php
foreach ($this->allLicenseTypes as $licenseType) { ?>
<th data-column="server_licenses_<?php echo $licenseType ?>"><?php echo $licenseType ?></th>
<?php }
foreach ($this->allBackupTypes as $backupType) { ?>
<th data-column="server_backup_<?php echo $backupType ?>"><?php echo $backupType ?></th>
<?php }
?>
<th data-column="server_power_state"><?php echo __('server_power_state') ?></th>
<th data-column="server_description"><?php echo __('description') ?></th>
<th data-column="action"><?php echo __('action') ?></th>
</tr>
</tfoot>
<tbody>
<?php
foreach ($this->servers as $server) {
$disks = json_decode($server['server_disks'], true);
$totalDiskSpace = 0;
if (is_array($disks)) {
foreach ($disks as $disk) {
$totalDiskSpace += $disk['disk_space'];
}
}
if (is_null($server['server_vm_host_name'])) {
$hostname = $server['server_hostname'];
} else {
$hostname = $server['server_vm_host_name'];
}
$mem = isset($server['server_memory']) ? (float)$server['server_memory'] : 0;
$demand = isset($server['server_memory_demand']) ? (float)$server['server_memory_demand'] : 0;
if ($mem == 0 && $demand == 0) {
$mem_assigned = 'N/A';
$mem_assigned_sort = 0;
} else {
$mem_assigned = $this->cleanNumber($mem) . "M";
$mem_assigned_sort = $this->cleanNumber($mem);
}
$mem_demand_text_color = '';
if ($mem > 0) {
$mem_percent = ($demand / $mem) * 100;
$mem_percent_numb = round($mem_percent, 1);
$mem_demand = round($mem_percent, 1) . "%"; // round to 1 decimal place
$mem_percent_sort = $mem_percent_numb;
if ($mem_percent_numb <= 89) {
$mem_demand_text_color = 'success';
}
if ($mem_percent_numb > 89) {
$mem_demand_text_color = 'secondary';
}
if ($mem_percent_numb > 99) {
$mem_demand_text_color = 'danger';
}
} else {
$mem_demand = "N/A";
$mem_percent_numb = 'N/A';
$mem_percent_sort = 0;
}
if ($server['server_cpu']) {
$server_cpu = htmlspecialchars($server['server_cpu']);
$server_cpu_sort = (int)$server_cpu;
} else {
$server_cpu = "N/A";
$server_cpu_sort = 0;
}
$ipv4_list = '';
if (!empty($server['server_ipv4'])) {
$ips = json_decode($server['server_ipv4'], true);
if (is_array($ips)) {
$ipv4_list = implode(', ', $ips);
}
}
$ipv6_list = '';
if (!empty($server['server_ipv6'])) {
$ips = json_decode($server['server_ipv6'], true);
if (is_array($ips)) {
$ipv6_list = implode(', ', $ips);
}
}
$thisServerLicenses = [];
foreach ($this->allLicenseTypes as $licenseType) {
$thisServerLicenses[$licenseType] = false;
}
if (!empty($server['server_licenses'])) {
$allLicenseTypesServer = json_decode($server['server_licenses'], true);
if (is_array($allLicenseTypesServer)) {
foreach ($allLicenseTypesServer as $licenseTypeServer) {
foreach ($licenseTypeServer as $licenseTypeServerKey => $licenseTypeServerValue) {
$thisServerLicenses[$licenseTypeServerKey] = true;
}
}
}
}
$thisServerBackup = [];
foreach ($this->allBackupTypes as $BackupType) {
$thisServerBackup[$BackupType] = false;
}
if (!empty($server['server_backup'])) {
$allBackupTypesServer = json_decode($server['server_backup'], true);
if (is_array($allBackupTypesServer)) {
foreach ($allBackupTypesServer as $BackupTypeServer) {
foreach ($BackupTypeServer as $BackupTypeServerKey => $BackupTypeServerValue) {
$thisServerBackup[$BackupTypeServerKey] = true;
}
}
}
}
if ($this->showCompanies) {
$company_name = '';
if (strlen($server['company_name']) > 0) {
$company_name = $server['company_name'];
}
}
$server_state_color = returnServerStateColor($server['server_state']);
?>
<tr data-item-id="<?php echo $server['server_uuid'] ?>">
<td data-column="server_state" class="text-nowrap" data-filter="<?php echo htmlspecialchars($server['server_state']); ?>" data-sort="<?php echo htmlspecialchars($server['server_state']); ?>">
<span class="badge rounded-pill bg-<?php echo $server_state_color ?>"><?php echo $server['server_state'] ?></span>
</td>
<td data-column="server_hostname" class="text-nowrap" data-filter="<?php echo htmlspecialchars($hostname); ?>" data-sort="<?php echo htmlspecialchars($hostname); ?>">
<i class="fa-solid fa-server"></i> <?php echo $hostname ?>
</td>
<?php if ($this->showCompanies) { ?>
<td data-column="company_name" class="text-nowrap" data-filter="<?php echo $company_name ?>" data-sort="<?php echo $company_name ?>">
<?php echo $company_name ?>
</td>
<?php } ?>
<td data-column="server_os" class="text-nowrap"><?php echo $server['server_os'] ?></td>
<td data-column="server_cpu" class="text-nowrap" data-filter="<?php echo $server_cpu ?>" data-sort="<?php echo $server_cpu_sort ?>"><?php echo $server_cpu ?></td>
<td data-column="server_memory" class="text-nowrap" data-filter="<?php echo $mem_assigned; ?>" data-sort="<?php echo $mem_assigned_sort; ?>">
<?php echo $mem_assigned ?>
</td>
<td data-column="server_memory_demand" class="text-nowrap <?php echo 'text-' . $mem_demand_text_color ?>" data-filter="<?php echo htmlspecialchars($mem_percent_numb); ?>" data-sort="<?php echo htmlspecialchars($mem_percent_sort); ?>">
<?php echo $mem_demand ?>
</td>
<td data-column="server_disks" class="text-nowrap"
<?php
$sortValue = '';
$filterValue = '';
if (is_array($disks) && count($disks) > 0) {
$sizes = array_column($disks, 'disk_space');
$totalDiskSpace = array_sum($sizes);
if ($totalDiskSpace > 0) {
$sortValue = $totalDiskSpace;
$filterValue = $totalDiskSpace;
}
}
?>
data-sort="<?php echo htmlspecialchars($sortValue); ?>" data-filter="<?php echo htmlspecialchars($filterValue); ?>">
<?php
if (!empty($sortValue)) {
if (count($sizes) === 1) {
echo $sizes[0] . 'GB';
} else {
echo $totalDiskSpace . 'GB (' . implode('GB, ', $sizes) . 'GB)';
}
}
?>
</td>
<td data-column="server_ipv4" class="text-nowrap" data-sort="<?php echo htmlspecialchars($ipv4_list); ?>" data-filter="<?php echo htmlspecialchars($ipv4_list); ?>">
<?php echo $ipv4_list ?>
</td>
<td data-column="server_ipv6" class="text-nowrap" data-sort="<?php echo htmlspecialchars($ipv6_list); ?>" data-filter="<?php echo htmlspecialchars($ipv6_list); ?>">
<?php echo $ipv6_list ?>
</td>
<td data-column="server_vm_snapshot" class="text-nowrap" data-sort="<?php echo htmlspecialchars($server['server_vm_snapshot']); ?>" data-filter="<?php echo htmlspecialchars($server['server_vm_snapshot']); ?>">
<?php echo $server['server_vm_snapshot']; ?>
</td>
<td data-column="server_vm_generation" class="text-nowrap" data-sort="<?php echo htmlspecialchars($server['server_vm_generation']); ?>" data-filter="<?php echo htmlspecialchars($server['server_vm_generation']); ?>">
<?php echo $server['server_vm_generation']; ?>
</td>
<?php
foreach ($this->allLicenseTypes as $licenseType) { ?>
<td data-column="server_license_<?php echo $licenseType ?>" class="text-nowrap" data-sort="<?php echo ($thisServerLicenses[$licenseType]) ? 'yes' : 'no' ?>" data-filter="<?php echo ($thisServerLicenses[$licenseType]) ? 'yes' : 'no' ?>"><?php echo ($thisServerLicenses[$licenseType]) ? '<i class="fa-solid text-success fa-toggle-on"></i>' : '<i class="fa-solid text-danger fa-toggle-off"></i>' ?></td>
<?php }
foreach ($this->allBackupTypes as $BackupType) { ?>
<td data-column="server_backup_<?php echo $BackupType ?>" class="text-nowrap" data-sort="<?php echo ($thisServerBackup[$BackupType]) ? 'yes' : 'no' ?>" data-filter="<?php echo ($thisServerBackup[$BackupType]) ? 'yes' : 'no' ?>"><?php echo ($thisServerBackup[$BackupType]) ? '<i class="fa-solid text-success fa-toggle-on"></i>' : '<i class="fa-solid text-danger fa-toggle-off"></i>' ?></td>
<?php }
?>
<td data-column="server_power_state" class="text-nowrap" data-filter="<?php echo htmlspecialchars($server['server_power_state']); ?>" data-sort="<?php echo htmlspecialchars($server['server_power_state']); ?>">
<?php
if ($server['server_power_state'] == 'Off') {
echo '<i class="fa-solid text-danger fa-toggle-off"></i>';
} elseif ($server['server_power_state'] == 'Running') {
echo '<i class="fa-solid text-success fa-toggle-on"></i>';
} ?>
</td>
<td data-column="server_description" class="text-nowrap" data-sort="<?php echo htmlspecialchars($server['server_description']); ?>" data-filter="<?php echo $server['server_description']; ?>">
<?php echo $server['server_description']; ?>
</td>
<td>
<a href="/servers?view=<?php echo $server['server_uuid'] ?>" class="btn btn-info btn-sm btn-rounded"><i class="fa-solid fa-eye"></i></a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
<br>
</div>
</div>
</div>
<?php }
}

View File

@@ -0,0 +1,143 @@
<?php
function setResponse($type, $text)
{
$value = json_encode([$type => $text]);
$_SESSION['response'] = $value;
header('location: ' . $_SERVER['HTTP_REFERER']);
exit;
}
function checkIfUser()
{
if ($_SESSION['user']['user_group_type'] == 'user') {
return true;
} else {
return false;
}
}
function showTime($timestamp)
{
if (empty($timestamp)) {
echo __('never');
return;
}
$dt = new DateTime("@$timestamp");
$dt->setTimezone(new DateTimeZone($_SESSION['user']['user_timezone']));
echo $dt->format('Y-m-d H:i:s');
}
function human_filesize($bytes, $decimals = 2)
{
$sizes = ['B', 'K', 'M', 'G', 'T', 'P']; // Array instead of string
$factor = floor((strlen($bytes) - 1) / 3);
return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . $sizes[$factor];
}
function retrieveAvailableLocales()
{
$availableLocales = array();
$localeDir = $_SERVER['DOCUMENT_ROOT'] . "/bin/locales/";
$localesInDir = array_diff(scandir($localeDir), array('.', '..'));
foreach ($localesInDir as $localeFile) {
if (pathinfo($localeFile, PATHINFO_EXTENSION) === 'php') {
$availableLocales[] = basename($localeFile, '.php'); // Strip .php extension
}
}
return $availableLocales;
}
function getPreferredLocale()
{
$availableLocales = retrieveAvailableLocales();
$defaultLocale = 'en';
$selectedLocale = in_array($_SESSION['user']['user_pref_language'], $availableLocales)
? $_SESSION['user']['user_pref_language']
: $defaultLocale;
return $selectedLocale;
}
function __(string $key, array $replacements = [])
{
global $translations;
$translation = $translations[$key] ?? $key;
// Replace placeholders with dynamic values
foreach ($replacements as $placeholder => $value) {
$translation = str_replace(":{$placeholder}", $value, $translation);
}
return $translation;
}
function get_enabled_platforms($conn)
{
$platforms_enabled = [];
$query = "SELECT * FROM vc_platforms WHERE platform_enabled = 1";
if ($stmt = $conn->prepare($query)) {
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
$platforms_enabled[$row['platform_uuid']] = [
'data' => $row,
'default_template_uuid' => false
];
}
$stmt->close();
}
return $platforms_enabled;
}
function getEnabledModules()
{
$modules_enabled = [];
$query = "SELECT * FROM system_modules";
if ($stmt = $GLOBALS['conn']->prepare($query)) {
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
$modules_enabled[$row['module_slugify']] = $row['module_enabled'];
}
$stmt->close();
}
return $modules_enabled;
}
function returnServerStateColor($serverState)
{
$server_state_color = 'secondary';
if (strlen($serverState) > 0) {
$server_state = ucfirst($serverState);
switch ($server_state) {
case 'New':
$server_state_color = 'secondary';
break;
case 'Deleted':
$server_state_color = 'danger';
break;
case 'Trial':
$server_state_color = 'primary';
break;
case 'Disabled':
$server_state_color = 'gray';
break;
case 'Active':
$server_state_color = 'success';
break;
}
}
return $server_state_color;
}

View File

@@ -0,0 +1,28 @@
<?php
/** @var TYPE_NAME $db_server */
/** @var TYPE_NAME $db_user */
/** @var TYPE_NAME $db_password */
/** @var TYPE_NAME $db_database */
/** @var TYPE_NAME $db_port */
include_once($_SERVER['DOCUMENT_ROOT'] . '/config.php');
$GLOBALS['conn'] = mysqli_connect($db_server, $db_user, $db_password, $db_database, $db_port);
if (!$GLOBALS['conn']) {
echo "Fout bij verbinden met de database" . PHP_EOL;
die();
}
try {
$dsn = "mysql:host=$db_server;dbname=$db_database;port=$db_port;charset=utf8mb4";
$username = $db_user;
$password = $db_password;
$GLOBALS['pdo'] = new PDO($dsn, $username, $password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Throw exceptions on errors
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Fetch associative arrays by default
PDO::ATTR_EMULATE_PREPARES => false, // Use real prepared statements
]);
} catch (PDOException $e) {
echo "Fout bij verbinden met de database: " . $e->getMessage() . PHP_EOL;
die();
}

1332
pub/bin/php/jsScripts.php Normal file

File diff suppressed because it is too large Load Diff