Merge branch 'mod/ajustes_mail' into 'main'

Mod/ajustes mail

See merge request jjimenez/safekat!671
This commit is contained in:
Ignacio Martinez Navajas
2025-04-07 20:17:28 +00:00
31 changed files with 108 additions and 8038 deletions

View File

@ -16,17 +16,15 @@ $routes->get('/', 'Home::index', ['as' => 'home']);
$routes->get('lang/{locale}', 'Language::index');
$routes->get('viewmode/(:alpha)', 'Viewmode::index/$1');
/* URL FOR TESTS */
$routes->get('test', 'Test::index');
$routes->group('activity', ['namespace' => 'App\Controllers\Sistema'], function ($routes) {
$routes->get('', 'Actividad::index', ['as' => 'activityList']);
$routes->post('datatable', 'Actividad::datatable', ['as' => 'activityDT']);
});
$routes->group('settings', ['namespace' => 'App\Controllers\Sistema'], function ($routes) {
$routes->get('', 'Ajustes::settings', ['as' => 'ajustesList']);
$routes->post('', 'Ajustes::settings', ['as' => 'ajustesEdit']);
});
/*
* --------------------------------------------------------------------

View File

@ -2,8 +2,6 @@
namespace App\Controllers;
use App\Models\NotificationModel;
use App\Models\SettingsModel;
use CodeIgniter\Controller;
use CodeIgniter\HTTP\CLIRequest;
use CodeIgniter\HTTP\IncomingRequest;

View File

@ -17,10 +17,10 @@ namespace App\Controllers;
*/
use CodeIgniter\Controller;
use CodeIgniter\Database\Query;
use App\Models\NotificationModel;
abstract class GoBaseController extends Controller {
abstract class GoBaseController extends Controller
{
/**
*
@ -102,7 +102,7 @@ abstract class GoBaseController extends Controller {
* @var array
*/
public $viewData;
/**
* JJO: Variable para indicar si el controlador hace soft_delete o no
@ -139,14 +139,15 @@ abstract class GoBaseController extends Controller {
*
* @var array
*/
protected $helpers = ['session', 'go_common', 'text', 'general','jwt', 'rbac']; //JJO
protected $helpers = ['session', 'go_common', 'text', 'general', 'jwt', 'rbac']; //JJO
public static $queries = [];
/**
* Constructor.
*/
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger) {
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
// Do Not Edit This Line
parent::initController($request, $response, $logger);
@ -155,9 +156,9 @@ abstract class GoBaseController extends Controller {
//--------------------------------------------------------------------
// E.g.:
$this->session = \Config\Services::session();
if ((!isset($this->viewData['pageTitle']) || empty($this->viewData['pageTitle']) ) && isset(static::$pluralObjectName) && !empty(static::$pluralObjectName)) {
if ((!isset($this->viewData['pageTitle']) || empty($this->viewData['pageTitle'])) && isset(static::$pluralObjectName) && !empty(static::$pluralObjectName)) {
$this->viewData['pageTitle'] = ucfirst(static::$pluralObjectName);
}
@ -171,7 +172,7 @@ abstract class GoBaseController extends Controller {
if (empty(static::$controllerSlug)) {
$reflect = new \ReflectionClass($this);
$className = $reflect->getShortName();
$this->viewData['currentModule'] = slugify(convertToSnakeCase(str_replace('Controller','',$className)));
$this->viewData['currentModule'] = slugify(convertToSnakeCase(str_replace('Controller', '', $className)));
} else {
$this->viewData['currentModule'] = strtolower(static::$controllerSlug);
@ -185,43 +186,31 @@ abstract class GoBaseController extends Controller {
$this->model = &$this->primaryModel;
}
// Preload any models, libraries, etc, here.
// Preload any models, libraries, etc, here.
// Language Validate
$language = \Config\Services::language();
$language->setLocale($this->session->lang);
// Set TimeZone
if(empty($this->session->get('settings'))){
$settingsModel = new SettingsModel();
$settings = $settingsModel->select('default_timezone')->first()??[];
date_default_timezone_set($this->$settings['default_timezone']??'America/Sao_Paulo');
}else{
date_default_timezone_set($this->session->get('settings')['default_timezone']??'America/Sao_Paulo');
if (empty($this->session->get('settings'))) {
$time_zone = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('default_timezone')->value;
date_default_timezone_set($time_zone ?? 'Europe/Madrid');
} else {
date_default_timezone_set($this->session->get('settings')['default_timezone'] ?? 'Europe/Madrid');
}
// Get notification
if(!empty($this->session->get('token'))) {
$notificationModel = new NotificationModel();
$pulse = $notificationModel->where('user_recipient',$this->session->get('token'))->where('is_read',false)->countAllResults() ?? 0;
$notification = $notificationModel->select('token,title,is_read,created_at')->where('user_recipient',$this->session->get('token'))->orderBy('created_at','desc')->findAll(5) ?? [];
$this->session->set('notification', $notification);
$this->session->set('pulse', $pulse);
}else{
$this->session->set('notification', []);
$this->session->set('pulse', 0);
}
$this->viewData['currentLocale'] = $this->request->getLocale();
}
public function index() {
public function index()
{
helper('text');
if ((!isset($this->viewData['boxTitle']) || empty($this->viewData['boxTitle']) ) && isset(static::$pluralObjectName) && !empty(static::$pluralObjectName)) {
if ((!isset($this->viewData['boxTitle']) || empty($this->viewData['boxTitle'])) && isset(static::$pluralObjectName) && !empty(static::$pluralObjectName)) {
$this->viewData['boxTitle'] = ucfirst(static::$pluralObjectName);
}
@ -236,10 +225,10 @@ abstract class GoBaseController extends Controller {
// if $this->currentView is assigned a view name, use it, otherwise assume the view something like 'viewSingleObjectList'
$viewFilePath = static::$viewPath . (empty($this->currentView) ? 'view' . ucfirst(static::$singularObjectNameCc) . 'List' : $this->currentView);
echo view($viewFilePath, $this->viewData);
}
/**
@ -248,12 +237,13 @@ abstract class GoBaseController extends Controller {
* @param null $objId
* @return string
*/
protected function displayForm($forMethod, $objId = null) {
protected function displayForm($forMethod, $objId = null)
{
helper('form');
$this->viewData['usingSelect2'] = true;
$validation = \Config\Services::validation();
$validation = \Config\Services::validation();
$action = str_replace(static::class . '::', '', $forMethod);
$actionSuffix = ' ';
@ -270,13 +260,13 @@ abstract class GoBaseController extends Controller {
}
if (!isset($this->viewData['formAction'])) {
$this->viewData['formAction'] = base_url(strtolower($this->viewData['currentModule']) . '/' . $action . '/' . $formActionSuffix);
$this->viewData['formAction'] = base_url(strtolower($this->viewData['currentModule']) . '/' . $action . '/' . $formActionSuffix);
}
if ((!isset($this->viewData['boxTitle']) || empty($this->viewData['boxTitle']) ) && isset(static::$singularObjectName) && !empty(static::$singularObjectName)) {
if ((!isset($this->viewData['boxTitle']) || empty($this->viewData['boxTitle'])) && isset(static::$singularObjectName) && !empty(static::$singularObjectName)) {
$this->viewData['boxTitle'] = ucfirst($action) . $actionSuffix . ucfirst(static::$singularObjectName);
}
$this->viewData['validation'] = $validation;
$viewFilePath = static::$viewPath . 'view' . ucfirst(static::$singularObjectNameCc) . 'Form';
@ -284,7 +274,8 @@ abstract class GoBaseController extends Controller {
return view($viewFilePath, $this->viewData);
}
protected function redirect2listView($flashDataKey = null, $flashDataValue = null) {
protected function redirect2listView($flashDataKey = null, $flashDataValue = null)
{
if (!empty($this->indexRoute)) {
$uri = base_url(route_to($this->indexRoute));
@ -304,9 +295,9 @@ abstract class GoBaseController extends Controller {
} else {
$getHandlingRoutes = $routes->getRoutes('get');
$indexMethod = array_search('\\App\\Controllers\\'.$className.'::index', $getHandlingRoutes);
$indexMethod = array_search('\\App\\Controllers\\' . $className . '::index', $getHandlingRoutes);
if ($indexMethod) {
$uri = route_to('App\\Controllers\\'.$className.'::index');
$uri = route_to('App\\Controllers\\' . $className . '::index');
} else {
$uri = base_url(static::$controllerSlug);
}
@ -315,7 +306,7 @@ abstract class GoBaseController extends Controller {
$uri = base_url($className);
}
}
if ($flashDataKey != null && $flashDataValue != null) {
return redirect()->to($uri)->with($flashDataKey, $flashDataValue);
} else {
@ -323,10 +314,11 @@ abstract class GoBaseController extends Controller {
}
}
public function delete($requestedId, bool $deletePermanently = true) {
public function delete($requestedId, bool $deletePermanently = true)
{
if (is_string($requestedId)) :
if (is_numeric($requestedId)) :
if (is_string($requestedId)):
if (is_numeric($requestedId)):
$id = filter_var($requestedId, FILTER_SANITIZE_NUMBER_INT);
else:
$onlyAlphaNumeric = true;
@ -338,64 +330,66 @@ abstract class GoBaseController extends Controller {
$id = intval($requestedId);
endif;
if (empty($id) || $id === 0) :
if (empty($id) || $id === 0):
$error = 'Invalid identifier provided to delete the object.';
endif;
$rawResult = null;
if (!isset($error)) :
if (!isset($error)):
try {
if ($deletePermanently && !$this->soft_delete) :
if (is_numeric($id)) :
$rawResult = $this->primaryModel->delete($id);
else:
$rawResult = $this->primaryModel->where($this->primaryModel->getPrimaryKeyName(), $id)->delete();
endif;
elseif ($this->soft_delete):
$datetime = (new \CodeIgniter\I18n\Time("now"));
$rawResult = $this->primaryModel->where('id',$id)
->set(['deleted_at' => $datetime->format('Y-m-d H:i:s'),
'is_deleted' => $this->delete_flag])
->update();
if ($deletePermanently && !$this->soft_delete):
if (is_numeric($id)):
$rawResult = $this->primaryModel->delete($id);
else:
$rawResult = $this->primaryModel->where($this->primaryModel->getPrimaryKeyName(), $id)->delete();
endif;
elseif ($this->soft_delete):
$datetime = (new \CodeIgniter\I18n\Time("now"));
$rawResult = $this->primaryModel->where('id', $id)
->set([
'deleted_at' => $datetime->format('Y-m-d H:i:s'),
'is_deleted' => $this->delete_flag
])
->update();
else:
$rawResult = $this->primaryModel->update($id, ['deleted' => true]);
endif;
else:
$rawResult = $this->primaryModel->update($id, ['deleted' => true]);
endif;
} catch (\Exception $e) {
log_message('error', "Exception: Error deleting object named '".(static::$singularObjectName ?? 'unknown')."' with $id :\r\n".$e->getMessage());
log_message('error', "Exception: Error deleting object named '" . (static::$singularObjectName ?? 'unknown') . "' with $id :\r\n" . $e->getMessage());
}
endif;
$ar = $this->primaryModel->db->affectedRows();
try {
$dbError = $this->primaryModel->db->error();
} catch (\Exception $e2) {
if ($e2->getMessage() != "Trying to get property 'errno' of non-object") {
log_message('error', $e2->getCode() . ' : ' . $e2->getMessage()) ;
log_message('error', $e2->getCode() . ' : ' . $e2->getMessage());
}
}
if (isset($dbError['code']) && isset($dbError['message'])) {
log_message('error', $dbError['code'].' '.$dbError['message']);
log_message('error', $dbError['code'] . ' ' . $dbError['message']);
} else {
$dbError = ['code' => '', 'message'=>''];
$dbError = ['code' => '', 'message' => ''];
}
$result = ['persisted'=>$ar>0, 'ar'=>$ar, 'persistedId'=>null, 'affectedRows'=>$ar, 'errorCode'=>$dbError['code'], 'error'=>$dbError['message']];
$result = ['persisted' => $ar > 0, 'ar' => $ar, 'persistedId' => null, 'affectedRows' => $ar, 'errorCode' => $dbError['code'], 'error' => $dbError['message']];
$nameOfDeletedObject = static::$singularObjectNameCc;
if ($ar < 1) :
if ($ar < 1):
$errorMessage = lang('Basic.global.deleteError', [$nameOfDeletedObject]); // 'No ' . static::$singularObjectName . ' was deleted now, because it probably had already been deleted.';
$fdKey = isset($this->viewData['usingSweetAlert'] ) && $this->viewData['usingSweetAlert'] ? 'sweet-error' : 'errorMessage';
$fdKey = isset($this->viewData['usingSweetAlert']) && $this->viewData['usingSweetAlert'] ? 'sweet-error' : 'errorMessage';
$errorMessage = str_replace("'", "\'", $errorMessage);
return $this->redirect2listView($fdKey, str_replace("'", '', $errorMessage));
else:
$message = lang('Basic.global.deleteSuccess', [$nameOfDeletedObject]); // 'The ' . static::$singularObjectName . ' was successfully deleted.';
$fdKey = isset($this->viewData['usingSweetAlert'] ) && $this->viewData['usingSweetAlert'] ? 'sweet-success' : 'successMessage';
if ($result['affectedRows']>1) :
log_message('warning', "More than one row has been deleted in attempt to delete row for object named '".(static::$singularObjectName ?? 'unknown')."' with id: $id");
$fdKey = isset($this->viewData['usingSweetAlert']) && $this->viewData['usingSweetAlert'] ? 'sweet-success' : 'successMessage';
if ($result['affectedRows'] > 1):
log_message('warning', "More than one row has been deleted in attempt to delete row for object named '" . (static::$singularObjectName ?? 'unknown') . "' with id: $id");
endif;
$message = str_replace("'", "\'", $message);
return $this->redirect2listView($fdKey, $message);
@ -403,7 +397,7 @@ abstract class GoBaseController extends Controller {
}
/**
/**
* Convenience method to validate form submission
* @return bool
*/
@ -416,14 +410,15 @@ abstract class GoBaseController extends Controller {
return true;
}
$validationErrorMessages = $this->model->validationMessages ?? $this->formValidationErrorMessagess ?? null;;
$validationErrorMessages = $this->model->validationMessages ?? $this->formValidationErrorMessagess ?? null;
;
if ($validationErrorMessages != null) {
$valid = $this->validate($validationRules, $validationErrorMessages);
} else {
$valid = $this->validate($validationRules);
}
$this->validationErrors = $valid ? '' : $this->validator->getErrors();
/*
@ -443,7 +438,8 @@ abstract class GoBaseController extends Controller {
* @param array|null $postData
* @return array
*/
protected function sanitized(array $postData = null, bool $nullIfEmpty = false) {
protected function sanitized(array $postData = null, bool $nullIfEmpty = false)
{
if ($postData == null) {
$postData = $this->request->getPost();
}
@ -462,29 +458,31 @@ abstract class GoBaseController extends Controller {
* Convenience method for common exception handling
* @param \Exception $e
*/
protected function dealWithException(\Exception $e) {
protected function dealWithException(\Exception $e)
{
// using another try / catch block to prevent to avoid CodeIgniter bug throwing trivial exceptions for querying DB errors
try {
$query = $this->model->db->getLastQuery();
$queryStr = !is_null($query) ? $query->getQuery() : '';
$dbError = $this->model->db->error();
$userFriendlyErrMsg = lang('Basic.global.persistErr1', [static::$singularObjectNameCc]);
if (isset($dbError['code']) && $dbError['code'] == 1062) :
$userFriendlyErrMsg .= PHP_EOL.lang('Basic.global.persistDuplErr', [static::$singularObjectNameCc]);
if (isset($dbError['code']) && $dbError['code'] == 1062):
$userFriendlyErrMsg .= PHP_EOL . lang('Basic.global.persistDuplErr', [static::$singularObjectNameCc]);
endif;
// $userFriendlyErrMsg = str_replace("'", "\'", $userFriendlyErrMsg); // Uncomment if experiencing unescaped single quote errors
log_message('error', $userFriendlyErrMsg.PHP_EOL.$e->getMessage().PHP_EOL.$queryStr);
if (isset($dbError['message']) && !empty($dbError['message'])) :
log_message('error', $dbError['code'].' : '.$dbError['message']);
log_message('error', $userFriendlyErrMsg . PHP_EOL . $e->getMessage() . PHP_EOL . $queryStr);
if (isset($dbError['message']) && !empty($dbError['message'])):
log_message('error', $dbError['code'] . ' : ' . $dbError['message']);
endif;
$this->viewData['errorMessage'] = $userFriendlyErrMsg;
} catch (\Exception $e2) {
log_message('debug', 'You can probably safely ignore this: In attempt to check DB errors, CodeIgniter threw: '.PHP_EOL.$e2->getMessage());
log_message('debug', 'You can probably safely ignore this: In attempt to check DB errors, CodeIgniter threw: ' . PHP_EOL . $e2->getMessage());
}
}
// Collect the queries so something can be done with them later.
public static function collect(Query $query) {
public static function collect(Query $query)
{
static::$queries[] = $query;
}
@ -495,7 +493,8 @@ abstract class GoBaseController extends Controller {
* @param object $sourceObject
* @return object
*/
function cast($destination, $sourceObject) {
function cast($destination, $sourceObject)
{
if (is_string($destination)) {
$destination = new $destination();
}

View File

@ -1,518 +0,0 @@
<?php
namespace App\Controllers;
use App\Models\ActivityModel;
use App\Models\PasswordRecoveryModel;
use App\Models\SettingsModel;
use App\Models\TemplateModel;
use App\Models\Usuarios\UserModel;
use App\Libraries\PasswordHash;
use CodeIgniter\HTTP\Files\FileCollection;
class Integration extends BaseController
{
private $user_model;
private $settings_model;
private $pass_recovery_model;
private $template_model;
private $activity_model;
private $id_user;
private $token_user;
function __construct()
{
$this->user_model = new UserModel();
$this->settings_model = new SettingsModel();
$this->pass_recovery_model = new PasswordRecoveryModel();
$this->template_model = new TemplateModel();
$this->activity_model = new ActivityModel();
$this->id_user = session()->get('id_user');
$this->token_user = session()->get('token');
}
public function index()
{
echo view(getenv('theme.path').'main/header');
echo view(getenv('theme.path').'form/dashboard/index');
echo view(getenv('theme.path').'main/footer');
}
public function send_email($email='',$subject='',$body='',$key='',$json=false){
if(empty($email)){
return $json ? json_encode(["return" => false]) : false;
}
$phpass = new PasswordHash(8, true);
if(!$phpass->CheckPassword(MD5($email), $key)){
return $json ? json_encode(["return" => false]) : false;
}
$user = $this->user_model->where('email',$email??null)->first();
if(!empty($user)){
foreach (keywordEmail()??[] as $item){
$field = str_replace(['[','user_',']'],'',$item);
if(str_contains($body, $field)){
$body = str_replace('['.$item.']',$user->{$field},$body);
}
}
}
if($this->sendMail($subject,unescape($body),$email)){
return $json ? json_encode(["return" => true]) : true;
}else{
return $json ? json_encode(["return" => false]) : false;
}
}
public function send_email_test($email=''){
$token = session()->get('token')??'';
if(!empty($token)){
if(empty($email)){
return $this->response->setJSON(["return" => false]);
}
$subject = "Email Test";
$body = "Email working successfully!";
if($this->sendMail($subject,unescape($body),$email)){
return $this->response->setJSON(["return" => true]);
}else{
return $this->response->setJSON(["return" => false]);
}
}else{
return $this->response->setJSON(["return" => false]);
}
}
public function reset_password(){
$session = session();
$settings = $session->get('settings');
helper('text');
if($listPost = $this->request->getPost()){
// Captcha Validation
if($settings['captcha_recovery']??false){
if($settings['captcha_gateway'] == 'recaptcha'){
if(isset($listPost['g-recaptcha-response'])){
$captcha = $listPost['g-recaptcha-response'];
$url = 'https://www.google.com/recaptcha/api/siteverify?secret='.urlencode($settings['captcha_secret_key']??'').'&response='.urlencode($captcha);
$response = file_get_contents($url);
$responseKeys = json_decode($response,true);
if(!$responseKeys["success"]) {
$session->setFlashdata('toast', ['error',lang("App.login_alert"),lang("App.login_alert_captcha_invalid")]);
return redirect()->to('/login/forgot_password');
}
}else{
$session->setFlashdata('toast', ['error',lang("App.login_alert"),lang("App.login_alert_captcha_not_found")]);
return redirect()->to('/login/forgot_password');
}
}
if($settings['captcha_gateway'] == 'hcaptcha'){
if(isset($listPost['h-captcha-response'])){
$captcha = $listPost['h-captcha-response'];
$url = 'https://hcaptcha.com/siteverify?secret='.urlencode($settings['captcha_secret_key']??'').'&response='.urlencode($captcha).'&remoteip='.$_SERVER['REMOTE_ADDR'];
$response = file_get_contents($url);
$responseKeys = json_decode($response,true);
if(!$responseKeys["success"]) {
$session->setFlashdata('toast', ['error',lang("App.login_alert"),lang("App.login_alert_captcha_invalid")]);
return redirect()->to('/login/forgot_password');
}
}else{
$session->setFlashdata('toast', ['error',lang("App.login_alert"),lang("App.login_alert_captcha_not_found")]);
return redirect()->to('/login/forgot_password');
}
}
}
$user = $this->user_model->where('email',$listPost['email']??null)->first();
if(empty($user)){
$session->setFlashdata('toast', ['error',lang("App.login_alert"),lang("App.login_alert_user_not_found")]);
return redirect()->to('/login/forgot_password');
}
$template = $this->template_model->where('id_template',1)->first();
foreach (keywordEmail()??[] as $item){
$field = str_replace(['[','user_',']'],'',$item);
$template = str_replace('['.$item.']',$user->$field ?? "",$template);
}
$token = random_string("alnum", 50);
$url = base_url().'login/recovery/'.$token;
$this->pass_recovery_model->save([
'user' => $user->token,
'token' => $token
]);
$title = $template['subject']??'';
$msg = $template['body']??'';
$msg = str_replace('[recovery_password]',$url,$msg);
$email = $user->email;
$this->setLog('recovery','recovery-password',$user->token);
$send = $this->sendMail($title,$msg,$email);
if($send){
$session->setFlashdata('toast', ['success',lang("App.login_alert_send"),lang("App.login_alert_send_pass")]);
return redirect()->to('/login/forgot_password');
}else{
$session->setFlashdata('toast', ['error',lang("App.login_alert"),lang("App.login_alert_error_email")]);
return redirect()->to('/login/forgot_password');
}
}else{
$session->setFlashdata('toast', ['error',lang("App.login_alert"),lang("App.login_alert_error_pass")]);
return redirect()->to('/login/forgot_password');
}
}
public function setLog($level,$event,$user='')
{
$request = \Config\Services::request();
$ip = $request->getIPAddress();
$agent = $request->getUserAgent();
if ($agent->isBrowser())
{
$currentAgent = $agent->getBrowser().' '.$agent->getVersion();
}
elseif ($agent->isRobot())
{
$currentAgent = $this->agent->robot();
}
elseif ($agent->isMobile())
{
$currentAgent = $agent->getMobile();
}
else
{
$currentAgent = 'Unidentified User Agent';
}
$this->activity_model->save([
'user' => $this->token_user??$user,
'level' => $level,
'event' => $event,
'ip' => $ip,
'os' => $agent->getPlatform(),
'browser' => $currentAgent,
'detail' => $agent
]);
}
private function sendMail($subject,$body,$recipient)
{
$config = $this->settings_model->first();
$gateway = $config['email_gateway'];
$body = html_entity_decode($body);
if($gateway == 'smtp'){
try {
//https://codeigniter.com/user_guide/libraries/email.html
$email = \Config\Services::email();
$config['protocol'] = $config['email_gateway'];
$config['SMTPHost'] = $config['email_smtp'];
$config['SMTPUser'] = $config['email_address'];
$config['SMTPPass'] = $config['email_pass'];
$config['SMTPPort'] = $config['email_port'];
$config['SMTPCrypto'] = $config['email_cert']=='none'?'':$config['email_cert'];
$config['SMTPTimeout'] = 15;
$config['mailType'] = 'html';
$config['wordWrap'] = true;
$email->initialize($config);
$email->setFrom($config['email_address'], $config['email_name']);
$email->setTo($recipient);
$email->setSubject($subject);
$email->setMessage($body);
if (!$email->send())
{
return false;
}else{
return true;
}
} catch (\Exception $ex) {
return false;
}
}
return false;
}
public function saveStorage($file=null,$path='',$allow=[]){
$config = $this->settings_model->first();
$gateway = $config['storage_gateway'];
switch ($gateway) {
case "local":
try {
$ext = $file ? $file->getExtension() : '';
if (in_array(strtolower($ext), $allow)) {
if(strtolower(PHP_OS) == 'linux'){
$pathServer = $path;
}else{
$pathServer = str_replace('/','\\',$path);
}
if ($file->isValid()) {
$name = $file->getName();
$rename = $file->getRandomName();
$file->move($pathServer,$rename);
return $path.$rename;
}
}
return null;
} catch (\Exception $ex) {
return null;
}
case "aws":
case "minio":
$aws_endpoint = $config['aws_endpoint'];
$aws_key = $config['aws_key'];
$aws_secret = $config['aws_secret'];
$aws_region = $config['aws_region'];
$aws_bucket = $config['aws_bucket'];
try {
$ext = $file ? $file->getExtension() : '';
if (in_array(strtolower($ext), $allow)) {
if($gateway=="minio"){
$s3Client = new \Aws\S3\S3Client([
'version' => 'latest',
'region' => $aws_region,
'endpoint' => $aws_endpoint,
'use_path_style_endpoint' => true,
'credentials' => [
'key' => $aws_key,
'secret' => $aws_secret
]
]);
}else{
$s3Client = new \Aws\S3\S3Client([
'version' => 'latest',
'region' => $aws_region,
'credentials' => [
'key' => $aws_key,
'secret' => $aws_secret
]
]);
}
try {
$rename = $file->getRandomName();
$file->move(WRITEPATH.'uploads',$rename);
if(strtolower(PHP_OS) == 'linux'){
$file_Path = WRITEPATH.'uploads/'. $rename;
}else{
$file_Path = WRITEPATH.'uploads\\'. $rename;
}
$result = $s3Client->putObject([
'Bucket' => $aws_bucket,
'Key' => $rename,
'Body' => fopen($file_Path, 'r')
]);
unlink($file_Path);
if($result['@metadata']['statusCode'] == 200){
return $result['@metadata']['effectiveUri'];
}else{
return null;
}
} catch (\Aws\S3\Exception\S3Exception $e) {
return null;
}
}
return null;
} catch (\Exception $ex) {
return null;
}
default:
return null;
}
}
public function saveStorageBackup($file=null,$name=null){
$config = $this->settings_model->first();
$gateway = $config['backup_storage'];
switch ($gateway) {
case "local":
try {
return $file;
} catch (\Exception $ex) {
return null;
}
case "aws":
case "minio":
$aws_endpoint = $config['aws_endpoint'];
$aws_key = $config['aws_key'];
$aws_secret = $config['aws_secret'];
$aws_region = $config['aws_region'];
$aws_bucket = $config['aws_bucket'];
try {
if($gateway=="minio"){
$s3Client = new \Aws\S3\S3Client([
'version' => 'latest',
'region' => $aws_region,
'endpoint' => $aws_endpoint,
'use_path_style_endpoint' => true,
'credentials' => [
'key' => $aws_key,
'secret' => $aws_secret
]
]);
}else{
$s3Client = new \Aws\S3\S3Client([
'version' => 'latest',
'region' => $aws_region,
'credentials' => [
'key' => $aws_key,
'secret' => $aws_secret
]
]);
}
try {
$result = $s3Client->putObject([
'Bucket' => $aws_bucket,
'Key' => $name,
'Body' => fopen($file, 'r')
]);
unlink($file);
if($result['@metadata']['statusCode'] == 200){
return $result['@metadata']['effectiveUri'];
}else{
return null;
}
} catch (\Aws\S3\Exception\S3Exception $e) {
return null;
}
} catch (\Exception $ex) {
return null;
}
default:
return null;
}
}
public function create_backup($download=false)
{
//Demo Mode
if(env('demo.mode')??false){
if($download==true){
session()->setFlashdata('sweet', ['warning',lang("App.general_demo_mode")]);
return redirect()->to('/settings');
}else{
die();
}
}
$settings = $this->settings_model->first()??[];
if($settings['backup_automatic']){
helper('text');
$db = db_connect('default');
try {
$all = false;
$tables = explode(',',$settings['backup_table']??'');
foreach ($tables as $item){
if ($item == 'all'){
$all = true;
}
}
$token = random_string("alnum", 10);
$name ='mysql_'.$token.'_'.date("YmdHis").'.sql';
if(strtolower(PHP_OS) == 'linux'){
$file_Path = WRITEPATH.'uploads/'.$name;
}else{
$file_Path = WRITEPATH.'uploads\\'.$name;
}
if($all){
\Spatie\DbDumper\Databases\MySql::create()
->setHost(getenv('database.default.hostname'))
->setDbName(getenv('database.default.database'))
->setUserName(getenv('database.default.username'))
->setPassword(getenv('database.default.password'))
->setDumpBinaryPath(getenv('database.default.dump'))
->dumpToFile($file_Path);
}else{
\Spatie\DbDumper\Databases\MySql::create()
->setHost(getenv('database.default.hostname'))
->setDbName(getenv('database.default.database'))
->setUserName(getenv('database.default.username'))
->setPassword(getenv('database.default.password'))
->setDumpBinaryPath(getenv('database.default.dump'))
->includeTables($tables)
->dumpToFile($file_Path);
}
$file = $this->saveStorageBackup($file_Path,$name);
$db->query("INSERT INTO backup VALUES (NULL,'".$file."','',NOW(),NOW())");
if($settings['backup_notification_email']){
$send = $this->send_email($settings['backup_email'],$settings['title']." (BACKUP)",lang("App.crontab_backup_success").date("Y-m-d H:i:s"));
if(!$send){
$db->query("INSERT INTO backup VALUES (NULL,'','".lang("App.crontab_email_error")."',NOW(),NOW())");
}
}
if($download){
$this->download_backup($file,$name);
}
} catch (\Spatie\DbDumper\Exceptions\DumpFailed $e) {
$error = str_replace("'","\'",$e->getMessage());
$db->query("INSERT INTO backup VALUES (NULL,'','".$error."',NOW(),NOW())");
if($settings['backup_notification_email']){
$send = $this->send_email($settings['backup_email'],$settings['title']." (BACKUP ERROR)",'Error: '.$e->getMessage());
if(!$send){
$db->query("INSERT INTO backup VALUES (NULL,'','".lang("App.crontab_email_error")."',NOW(),NOW())");
}
}
if($download){
session()->setFlashdata('sweet', ['error',lang("App.crontab_backup_error")]);
return redirect()->to('/settings');
}
}
}
}
private function download_backup($path=null,$name=null)
{
if (!empty(session()->get('token')??'')){
set_time_limit(0);
if(!empty($path) && !empty($name) && file_exists($path)){
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.$name.'"');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($path));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Expires: 0');
readfile($path);
}
}else{
return redirect()->to('/settings');
}
}
public function download_postman()
{
if(!empty(session()->get('token')??'')){
set_time_limit(0);
$path = WRITEPATH.'postman_collection.json';
if(file_exists($path)){
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="WebGuard ApiRest - postman_collection.json"');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($path));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Expires: 0');
readfile($path);
}
}else{
return redirect()->to('/settings');
}
}
}

View File

@ -1,111 +0,0 @@
<?php namespace App\Controllers\Sistema;
use App\Controllers\BaseResourceController;
use App\Models\Sistema\SettingsModel;
class Ajustes extends BaseResourceController
{
protected $modelName = SettingsModel::class;
protected $format = 'json';
protected static $controllerSlug = 'settings';
protected static $viewPath = 'themes/vuexy/form/settings/';
protected static string $formViewName = 'settingsForm';
protected static $singularObjectName = 'settings';
protected static $singularObjectNameCc = 'settings';
protected $indexRoute = 'ajustesList';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
$this->viewData['pageTitle'] = lang('Provincias.moduleTitle');
$this->viewData['usingSweetAlert'] = true;
// Breadcrumbs (IMN)
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_configuration"), 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("App.menu_settings"), 'route' => route_to('ajustesList'), 'active' => true]
];
parent::initController($request, $response, $logger);
}
public function settings()
{
checkPermission('ajustes.menu');
$id = 1;
$settingsEntity = $this->model->find($id);
if (!$settingsEntity) :
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Provincias.provincia')), $id]);
return $this->redirect2listView('sweet-error', $message);
endif;
if ($this->request->is('post')) :
$postData = $this->request->getPost();
$sanitizedData = $this->sanitized($postData, true);
$noException = true;
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()) :
try {
$successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData);
} catch (\Exception $e) {
$noException = false;
$this->dealWithException($e);
}
else:
$this->viewData['warningMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Provincias.provincia'))]);
$this->session->setFlashdata('formErrors', $this->model->errors());
endif;
$settingsEntity->fill($sanitizedData);
$thenRedirect = false;
endif;
if ($noException && $successfulResult) :
$id = $settingsEntity->id ?? $id;
$message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.';
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
else:
return $this->redirect2listView('sweet-success', $message);
endif;
else:
$this->session->setFlashData('sweet-success', $message);
endif;
endif; // $noException && $successfulResult
endif; // ($requestMethod === 'post')
$this->viewData['settingsEntity'] = $settingsEntity;
$this->viewData['formAction'] = route_to('settingsEdit');
$this->viewData['tables'] = db_connect()->listTables();
return $this->displayForm(__METHOD__, $id);
} // end function settings(...)
}

View File

@ -2,7 +2,6 @@
namespace App\Controllers\Soporte;
use App\Models\Sistema\SettingsModel;
use App\Models\Soporte\TicketModel;
use App\Models\CategoriaModel;
use App\Models\EstadoModel;

View File

@ -14,7 +14,6 @@ use App\Models\Usuarios\GroupModel;
use App\Models\Usuarios\PermisosModel;
use App\Services\PresupuestoService;
use CodeIgniter\Shield\Entities\User;
use App\Models\Sistema\SettingsModel;
class Test extends BaseController
@ -31,11 +30,9 @@ class Test extends BaseController
public function index()
{
$clienteModel = model('App\Models\Clientes\ClienteModel');
$datos = $clienteModel->getResumenPagos(1870);
echo '<pre>';
var_dump($datos);
echo '</pre>';
$emailService = service('emailService');
return $emailService->send("Hola mundo", "Hola mundo", "imnavajas@coit.es");
}

View File

@ -172,9 +172,6 @@ if (!function_exists('getSystemSettings')) {
{
// Get Settings
$session = session();
$settingsBase = new \App\Models\Sistema\SettingsModel();
$settings = $settingsBase->asArray()->first() ?? [];
$session->set('settings', $settings);
if (empty($session->get('lang'))) {
$session->set('lang', 'es');
}

View File

@ -1,38 +0,0 @@
<?php
namespace App\Models\Sistema;
use App\Models\BaseModel;
class SettingsModel extends BaseModel
{
protected $table = 'auth_settings';
protected $primaryKey = 'id';
protected $returnType = "App\Entities\Sistema\SettingsEntity";
const SORTABLE = [
];
protected $allowedFields = [
'email_gateway',
'email_name',
'email_address',
'email_smtp',
'email_port',
'email_pass',
'email_cert',
'remove_log',
'remove_log_time',
'remove_log_latest',
'storage_gateway',
'backup_storage',
'backup_table',
'backup_email',
'backup_notification_email',
'backup_automatic',
'backup_time',
'backup_latest'
];
protected $useTimestamps = true;
protected $updatedField = 'updated_at';
}

View File

@ -2,7 +2,6 @@
namespace App\Services;
use App\Models\Sistema\SettingsModel;
use Config\Services;
class EmailService
@ -17,10 +16,8 @@ class EmailService
$recipient = 'imnavajas@coit.es'; // <-- Cambia por el correo de pruebas
}
$settings_model = new SettingsModel();
$config = $settings_model->first()->toArray();
$gateway = $config['email_gateway'];
$settings_model = model('App\Models\Configuracion\ConfigVariableModel');
$gateway = $settings_model->getVariable('email_protocol')->value;
$body = html_entity_decode($body);
if ($gateway === 'smtp') {
@ -28,12 +25,12 @@ class EmailService
$email = Services::email();
$emailConfig = [
'protocol' => $config['email_gateway'],
'SMTPHost' => $config['email_smtp'],
'SMTPUser' => $config['email_address'],
'SMTPPass' => $config['email_pass'],
'SMTPPort' => (int) $config['email_port'],
'SMTPCrypto' => $config['email_cert'] === 'none' ? '' : $config['email_cert'],
'protocol' => $gateway,
'SMTPHost' => $settings_model->getVariable('email_host')->value,
'SMTPUser' => $settings_model->getVariable('email_from_address')->value,
'SMTPPass' => $settings_model->getVariable('email_pass')->value,
'SMTPPort' => (int) $settings_model->getVariable('email_port')->value,
'SMTPCrypto' => $settings_model->getVariable('email_cert')->value === 'none' ? '' : $settings_model->getVariable('email_cert')->value,
'SMTPTimeout' => 15,
'mailType' => 'html',
'wordWrap' => true,
@ -41,7 +38,7 @@ class EmailService
$email->initialize($emailConfig);
$email->setFrom($config['email_address'], $config['email_name']);
$email->setFrom($settings_model->getVariable('email_from_address')->value, $settings_model->getVariable('email_from_name')->value);
$email->setTo($recipient);
$email->setSubject($subject);
$email->setMessage($body);

View File

@ -1,431 +0,0 @@
<div class="row mt-4">
<!-- Navigation -->
<div class="col-lg-3 col-md-4 col-12 mb-md-0 mb-3">
<div class="d-flex justify-content-between flex-column mb-2 mb-md-0">
<ul class="nav nav-align-left nav-pills flex-column">
<li class="nav-item">
<button class="nav-link active" data-bs-toggle="tab" data-bs-target="#general">
<i class="ti ti-sitemap me-1 ti-sm"></i>
<span class="align-middle fw-semibold"><?=lang("App.settings_label_general")?></span>
</button>
</li>
<li class="nav-item">
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#email">
<i class="ti ti-mail me-1 ti-sm"></i>
<span class="align-middle fw-semibold"><?=lang("App.settings_label_email")?></span>
</button>
</li>
<?php /*
<li class="nav-item">
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#backup">
<i class="ti ti-server me-1 ti-sm"></i>
<span class="align-middle fw-semibold"><?=lang("App.settings_label_backup")?></span>
</button>
</li>
<li class="nav-item">
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#logs">
<i class="ti ti-archive me-1 ti-sm"></i>
<span class="align-middle fw-semibold"><?=lang("App.settings_label_logs")?></span>
</button>
</li>
<li class="nav-item">
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#cron">
<i class="ti ti-rotate-clockwise me-1 ti-sm"></i>
<span class="align-middle fw-semibold"><?=lang("App.settings_label_cron")?></span>
</button>
</li>
*/ ?>
</ul>
</div>
</div>
<!-- /Navigation -->
<!-- System Settings -->
<div class="col-lg-9 col-md-8 col-12">
<form class="form" action="<?= $formAction ?>" method="post">
<?= csrf_field() ?>
<div class="tab-content py-0">
<!-- General Settings -->
<div class="tab-pane fade show active" id="general" role="tabpanel">
<div class="d-flex mb-3 gap-3">
<div>
<span class="badge bg-label-primary rounded-2 p-2">
<i class="ti ti-sitemap ti-lg"></i>
</span>
</div>
<div>
<h4 class="mb-0">
<span class="align-middle"><?=lang("App.settings_label_general_title")?></span>
</h4>
</div>
</div>
<div class="card">
<div class="row card-body">
DETALLES ESPECIFICOS DEL ERP (TBD)
</div>
</div>
</div>
<!-- /General Settings -->
<!-- Email Settings -->
<div class="tab-pane fade show" id="email" role="tabpanel">
<div class="d-flex mb-3 gap-3">
<div>
<span class="badge bg-label-primary rounded-2 p-2">
<i class="ti ti-mail ti-lg"></i>
</span>
</div>
<div>
<h4 class="mb-0">
<span class="align-middle"><?=lang("App.settings_label_email_title")?></span>
</h4>
</div>
</div>
<div class="card">
<div class="row card-body">
<div class="col-lg-12 mb-3">
<label class="text-primary"><?=lang("App.settings_label_email_subtitle_1")?></label>
</div>
<div class="col-lg-3 mb-3">
<label for="email_gateway" class="form-label"><?=lang("App.settings_field_email_gateway")?></label>
<?php $id_select = (isset($obj)) ? $obj['email_gateway'] : set_value('email_gateway');?>
<select name="email_gateway" id="email_gateway" class="select2 form-control">
<option value="smtp" <?= $id_select == "smtp" ? 'selected' : '' ?>><?=lang("App.settings_field_email_gateway_smtp")?></option>
</select>
</div>
<div class="col-lg-3 mb-3">
<label for="email_smtp" class="form-label"><?=lang("App.settings_field_email_smtp")?></label>
<input
type="text"
id="email_smtp"
name="email_smtp"
class="form-control"
placeholder="<?=lang("App.settings_field_email_smtp_ph")?>"
value="<?= old('email_smtp', $settingsEntity->email_smtp) ?>"
>
</div>
<div class="col-lg-3 mb-3">
<label for="email_port" class="form-label"><?=lang("App.settings_field_email_port")?></label>
<input
type="number"
id="email_port"
name="email_port"
class="form-control"
placeholder="<?=lang("App.settings_field_email_port_ph")?>"
value="<?= old('email_port', $settingsEntity->email_port) ?>"
>
</div>
<div class="col-lg-3 mb-3">
<label for="email_cert" class="form-label"><?=lang("App.settings_field_email_cert")?></label>
<?php $id_select = (isset($settingsEntity)) ? $settingsEntity->email_cert : 'none';?>
<select name="email_cert" id="email_cert" class="select2 form-control">
<option value="none" <?= $id_select == "none" ? 'selected' : '' ?>><?=lang("App.settings_field_email_cert_none")?></option>
<option value="ssl" <?= $id_select == "ssl" ? 'selected' : '' ?>><?=lang("App.settings_field_email_cert_ssl")?></option>
<option value="tls" <?= $id_select == "tls" ? 'selected' : '' ?>><?=lang("App.settings_field_email_cert_tls")?></option>
</select>
</div>
<div class="col-lg-6 mb-3">
<label for="email_address" class="form-label"><?=lang("App.settings_field_email_address")?></label>
<input
type="text"
id="email_address"
name="email_address"
class="form-control"
placeholder="<?=lang("App.settings_field_email_address_ph")?>"
value="<?= old('email_address', $settingsEntity->email_address) ?>"
>
</div>
<div class="col-lg-6 mb-3">
<label for="email_pass" class="form-label"><?=lang("App.settings_field_email_pass")?></label>
<input
type="password"
id="email_pass"
name="email_pass"
class="form-control"
placeholder="<?=lang("App.settings_field_email_pass_ph")?>"
value="<?= old('email_pass', $settingsEntity->email_pass) ?>"
>
</div>
<div class="col-lg-6 mb-3">
<label for="email_name" class="form-label"><?=lang("App.settings_field_email_name")?></label>
<input
type="text"
id="email_name"
name="email_name" class="form-control"
placeholder="<?=lang("App.settings_field_email_name_ph")?>"
value="<?= old('email_name', $settingsEntity->email_name) ?>"
>
</div>
<?php /*
<div class="col-lg-12 mt-4 mb-3">
<label class="text-primary"><?=lang("App.settings_field_test_send")?></label>
</div>
<div class="col-lg-6 mb-3">
<label class="form-label"><?=lang("App.settings_field_email_address")?></label>
<div class="input-group">
<input
type="email"
id="send_email_test"
name="send_email_test"
class="form-control"
placeholder="<?=lang("App.settings_field_email_address_ph")?>"
>
<div class="input-group-append">
<button type="button" class="btn btn-outline-primary" onclick="send_test()"><?=lang("App.settings_field_test_send_btn")?></button>
</div>
</div>
<p class="text-primary" id="msg_email_test" style="display: none;"><i class="fas fa-spinner fa-pulse"></i> <?= lang("App.login_wait") ?></p>
</div>
*/ ?>
</div>
</div>
</div>
<!-- /Email Settings -->
<?php /*
<!-- Backup Settings -->
<div class="tab-pane fade show" id="backup" role="tabpanel">
<div class="d-flex mb-3 gap-3">
<div>
<span class="badge bg-label-primary rounded-2 p-2">
<i class="ti ti-server ti-lg"></i>
</span>
</div>
<div>
<h4 class="mb-0">
<span class="align-middle"><?=lang("App.settings_label_backup_title")?></span>
</h4>
</div>
</div>
<div class="card">
<div class="row card-body">
<div class="row">
<div class="col-lg-12 mb-3">
<label class="text-primary"><?=lang("App.settings_label_backup_subtitle_1")?></label>
</div>
<div class="col-lg-4 mb-3">
<label for="backup_storage" class="form-label"><?=lang("App.settings_field_backup_storage")?></label>
<?php $id_select = (isset($obj)) ? $obj['backup_storage'] : set_value('backup_storage');?>
<select name="backup_storage" id="backup_storage" class="select2 form-control">
<option value="local" <?= $id_select == "local" ? 'selected' : '' ?>><?=lang("App.settings_field_storage_gateway_local")?></option>
</select>
</div>
<div class="col-lg-4 mb-3">
<label for="backup_table" class="form-label"><?=lang("App.settings_field_backup_table")?></label>
<?php $select = (isset($obj)) ? $obj['backup_table'] : set_value('backup_table');?>
<select name="backup_table[]" id="backup_table" class="select2 form-control" multiple="multiple">
<?php
$select = explode(',',$select);
foreach($select??[] as $id_select){
if ($id_select == "all"){
$all = 'selected';
}
}
?>
<option value="all" <?=$all??''?>><?=lang("App.settings_field_backup_table_all")?></option>
<?php foreach ($tables??[] as $item) : ?>
<?php foreach ($select??[] as $id_select) : ?>
<?php
if ($id_select == $item){
$selItem = 'selected';
}
?>
<?php endforeach; ?>
<option value="<?=$item?>" <?=$selItem??''?>><?=lang("App.settings_field_backup_table")?> (<?=$item?>)</option>
<?php endforeach; ?>
</select>
</div>
<div class="col-lg-4 mb-3">
<label for="backup_time" class="form-label"><?=lang("App.settings_field_backup_time")?></label>
<?php $id_select = (isset($obj)) ? $obj['backup_time'] : set_value('backup_time');?>
<select name="backup_time" id="backup_time" class="select2 form-control">
<?php for ($i = 0; $i <= 23; $i++) : ?>
<option value="<?= $i < 10 ? '0'.$i.':00:00':$i.':00:00' ?>" <?= $id_select == "<?= $i < 10 ? '0'.$i.':00:00':$i.':00:00' ?>" ? 'selected' : '' ?>><?= $i < 10 ? '0'.$i.':00':$i.':00' ?></option>
<option value="<?= $i < 10 ? '0'.$i.':30:00':$i.':30:00' ?>" <?= $id_select == "<?= $i < 10 ? '0'.$i.':30:00':$i.':30:00' ?>" ? 'selected' : '' ?>><?= $i < 10 ? '0'.$i.':30':$i.':30' ?></option>
<?php endfor; ?>
</select>
</div>
<div class="col-lg-12 mb-3">
<label for="backup_email" class="form-label"><?=lang("App.settings_field_backup_email")?></label>
<input
type="text"
id="backup_email"
min="1"
name="backup_email"
class="form-control"
placeholder="<?=lang("App.settings_field_backup_email_ph")?>"
value="<?= (isset($obj)) ? $obj['backup_email'] : set_value('backup_email');?>"
/>
</div>
<div class="col-lg-3 mb-3">
<div class="small mb-3"><?=lang("App.settings_field_backup_notification_email")?></div>
<label class="switch">
<input
type="checkbox"
id="backup_notification_email"
name="backup_notification_email"
class="switch-input"
<?= $obj['backup_notification_email']??false ? 'checked' : ''?>
/>
<span class="switch-toggle-slider">
<span class="switch-on"></span>
<span class="switch-off"></span>
</span>
<span class="switch-label"><?=lang("App.global_activate")?></span>
</label>
</div>
<div class="col-lg-3 mb-3">
<div class="small mb-3"><?=lang("App.settings_field_backup_automatic")?></div>
<label class="switch">
<input
type="checkbox"
id="backup_automatic"
name="backup_automatic"
class="switch-input"
<?= $obj['backup_automatic']??false ? 'checked' : ''?>
/>
<span class="switch-toggle-slider">
<span class="switch-on"></span>
<span class="switch-off"></span>
</span>
<span class="switch-label"><?=lang("App.global_activate")?></span>
</label>
</div>
</div>
<div class="row">
<div class="col-lg-12 text-right mb-3">
<a href="<?=site_url("integration/create_backup/1")?>" class="btn btn-primary mt-2">
<i class="fas fa-download"></i> <?=lang("App.settings_label_backup_btn_1")?>
</a>
</div>
</div>
</div>
</div>
</div>
<!-- /Backup Settings -->
<!-- Logs Settings -->
<div class="tab-pane fade show" id="logs" role="tabpanel">
<div class="d-flex mb-3 gap-3">
<div>
<span class="badge bg-label-primary rounded-2 p-2">
<i class="ti ti-archive ti-lg"></i>
</span>
</div>
<div>
<h4 class="mb-0">
<span class="align-middle"><?=lang("App.settings_label_logs_title")?></span>
</h4>
</div>
</div>
<div class="card">
<div class="row card-body">
<div class="row">
<div class="col-lg-12 mb-3">
<label class="text-primary"><?=lang("App.settings_label_logs_subtitle_1")?></label>
</div>
<div class="col-lg-3 mb-3">
<div class="small mb-3"><?=lang("App.settings_field_remove_log")?></div>
<label class="switch">
<input
type="checkbox"
id="remove_log"
name="remove_log"
class="switch-input"
<?= $obj['remove_log']??false ? 'checked' : ''?>
/>
<span class="switch-toggle-slider">
<span class="switch-on"></span>
<span class="switch-off"></span>
</span>
<span class="switch-label"><?=lang("App.global_activate")?></span>
</label>
</div>
<div class="col-lg-3 mb-3">
<label for="remove_log_time" class="form-label"><?=lang("App.settings_field_remove_log_time")?></label>
<div class="input-group">
<input
type="number"
id="remove_log_time"
min="1"
name="remove_log_time"
class="form-control"
placeholder="<?=lang("App.settings_field_remove_log_time_ph")?>"
value="<?= (isset($obj)) ? $obj['remove_log_time'] : set_value('remove_log_time');?>"
/>
<span class="input-group-text"><?=lang("App.global_days")?></span>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- /Logs Settings -->
<!-- Cron Settings -->
<div class="tab-pane fade show" id="cron" role="tabpanel">
<div class="d-flex mb-3 gap-3">
<div>
<span class="badge bg-label-primary rounded-2 p-2">
<i class="ti ti-rotate-clockwise ti-lg"></i>
</span>
</div>
<div>
<h4 class="mb-0">
<span class="align-middle"><?=lang("App.settings_label_cron_title")?></span>
</h4>
</div>
</div>
<div class="card">
<div class="row card-body">
<div class="row">
<div class="col-lg-12 mb-3">
<label class="text-primary"><?=lang("App.settings_label_cron_subtitle_1")?></label>
</div>
<div class="col-lg-12 mb-3">
<p class="form-label">
<b><?=lang("App.settings_label_cron_timer")?></b>
<br><?=lang("App.settings_label_cron_timer_time")?>
<br><?=getenv('app.baseURL').'/cron'?>
</p>
</div>
<div class="col-lg-12 mb-3">
<label class="text-primary"><?=lang("App.settings_label_cron_subtitle_2")?></label>
<!-- CSRF token -->
<input type="hidden" class="txt_csrfname" name="<?= csrf_token() ?>" value="<?= csrf_hash() ?>" />
<!-- Table -->
<table id='table-grid' class="table table-striped nowrap" style="width:100%">
<thead>
<tr>
<th><?=lang("App.settings_grid_routine")?></th>
<th><?=lang("App.settings_group_grid_error")?></th>
<th><?=lang("App.settings_group_grid_created_at")?></th>
</tr>
</thead>
</table>
</div>
</div>
</div>
</div>
</div>
<!-- /Cron Settings -->
*/ ?>
</div>
<div class="tab-content pt-4">
<button type="submit" class="btn btn-primary float-start me-sm-3 me-1">
<?= lang("App.global_save") ?>
</button>
<a href="<?= site_url('/') ?>" class="btn btn-secondary">
<?= lang("App.global_come_back") ?>
</a>
</div>
</form>
</div>
<!-- /System Settings -->
</div>

View File

@ -1,32 +0,0 @@
<?= $this->include("themes/_commonPartialsBs/select2bs5") ?>
<?= $this->include("themes/_commonPartialsBs/sweetalert") ?>
<?= $this->extend('themes/vuexy/main/defaultlayout') ?>
<?= $this->section("content") ?>
<div class="row">
<div class="col-12">
<div class="card card-info">
<div class="card-header">
<h3 class="card-title"><?= $boxTitle ?? $pageTitle ?></h3>
</div><!--//.card-header -->
<div class="card-body">
<?= view("themes/_commonPartialsBs/_alertBoxes") ?>
<?= !empty($validation->getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?>
<?= view("themes/vuexy/form/settings/_settingsFormItems") ?>
</div><!-- /.card-body -->
<div class="card-footer">
</div><!-- /.card-footer -->
</div><!-- //.card -->
</div><!--//.col -->
</div><!--//.row -->
<?= $this->endSection() ?>
<?= $this->section("additionalInlineJs") ?>
<?= $this->endSection() ?>

View File

@ -300,10 +300,8 @@
<?php endif; ?>
<li class="menu-header small text-uppercase">
<span class="menu-header-text">Ajustes del Sistema</span>
<span class="menu-header-text">Sistema</span>
</li>
<?php

View File

@ -325,7 +325,7 @@
<li class="menu-header small text-uppercase">
<span class="menu-header-text">Ajustes del Sistema</span>
<span class="menu-header-text">Sistema</span>
</li>
<?php

View File

@ -55,7 +55,7 @@ if (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente
<?php } ?>
<?php if (auth()->user()->can('plantilla-tarifa.menu')) { ?>
<li class="menu-item">
<a href="<?= site_url("clientes/clienteplantillaprecios") ?>" class="menu-link">
<a href="<?= route_to('clienteplantillapreciosList') ?>" class="menu-link">
<?= lang("App.menu_plantillas_tarifas_clientes") ?>
</a>
</li>

View File

@ -3,28 +3,12 @@
* SEPARADOR Y MENUS DE SISTEMA
*/
if (auth()->user()->can('ajustes.menu') ||
auth()->user()->can('actividad.menu')) {
if (auth()->user()->can('actividad.menu')) {
?>
<li class="menu-header small text-uppercase">
<span class="menu-header-text">Ajustes del Sistema</span>
<span class="menu-header-text">Sistema</span>
</li>
<?php
/**
* MENU AJUSTES
*/
if (auth()->user()->can('ajustes.menu')) {
?>
<!-- Settings -->
<li class="menu-item">
<a href="<?= route_to("ajustesList") ?>" class="menu-link">
<i class="menu-icon tf-icons ti ti-settings""></i>
<div data-i18n="<?= lang("App.menu_settings") ?>"><?= lang("App.menu_settings") ?></div>
</a>
</li>
<?php } ?>
<?php
/**
* MENU ACTIVIDAD

View File

@ -1,463 +0,0 @@
{
"draw": 1,
"recordsTotal": 57,
"recordsFiltered": 57,
"data": [
[
"Tiger Nixon",
"tiger@example.com",
"System Architect",
"Edinburgh",
"2011/04/25",
"$320,800"
],
[
"Garrett Winters",
"garrett@example.com",
"Accountant",
"Tokyo",
"2011/07/25",
"$170,750"
],
[
"Ashton Cox",
"ashton@example.com",
"Junior Technical Author",
"San Francisco",
"2009/01/12",
"$86,000"
],
[
"Cedric Kelly",
"cedric@example.com",
"Senior Javascript Developer",
"Edinburgh",
"2012/03/29",
"$433,060"
],
[
"Airi Satou",
"airi@example.com",
"Accountant",
"Tokyo",
"2008/11/28",
"$162,700"
],
[
"Brielle Williamson",
"brielle@example.com",
"Integration Specialist",
"New York",
"2012/12/02",
"$372,000"
],
[
"Herrod Chandler",
"herrod@example.com",
"Sales Assistant",
"San Francisco",
"2012/08/06",
"$137,500"
],
[
"Rhona Davidson",
"rhona@example.com",
"Integration Specialist",
"Tokyo",
"2010/10/14",
"$327,900"
],
[
"Colleen Hurst",
"colleen@example.com",
"Javascript Developer",
"San Francisco",
"2009/09/15",
"$205,500"
],
[
"Sonya Frost",
"sonya@example.com",
"Software Engineer",
"Edinburgh",
"2008/12/13",
"$103,600"
],
[
"Jena Gaines",
"jena@example.com",
"Office Manager",
"London",
"2008/12/19",
"$90,560"
],
[
"Quinn Flynn",
"quinn@example.com",
"Support Lead",
"Edinburgh",
"2013/03/03",
"$342,000"
],
[
"Charde Marshall",
"charde@example.com",
"Regional Director",
"San Francisco",
"2008/10/16",
"$470,600"
],
[
"Haley Kennedy",
"haley@example.com",
"Senior Marketing Designer",
"London",
"2012/12/18",
"$313,500"
],
[
"Tatyana Fitzpatrick",
"tatyana@example.com",
"Regional Director",
"London",
"2010/03/17",
"$385,750"
],
[
"Michael Silva",
"michael@example.com",
"Marketing Designer",
"London",
"2012/11/27",
"$198,500"
],
[
"Paul Byrd",
"paul@example.com",
"Chief Financial Officer (CFO)",
"New York",
"2010/06/09",
"$725,000"
],
[
"Gloria Little",
"gloria@example.com",
"Systems Administrator",
"New York",
"2009/04/10",
"$237,500"
],
[
"Bradley Greer",
"bradley@example.com",
"Software Engineer",
"London",
"2012/10/13",
"$132,000"
],
[
"Dai Rios",
"dai@example.com",
"Personnel Lead",
"Edinburgh",
"2012/09/26",
"$217,500"
],
[
"Jenette Caldwell",
"jenette@example.com",
"Development Lead",
"New York",
"2011/09/03",
"$345,000"
],
[
"Yuri Berry",
"yuri@example.com",
"Chief Marketing Officer (CMO)",
"New York",
"2009/06/25",
"$675,000"
],
[
"Caesar Vance",
"caesar@example.com",
"Pre-Sales Support",
"New York",
"2011/12/12",
"$106,450"
],
[
"Doris Wilder",
"doris@example.com",
"Sales Assistant",
"Sydney",
"2010/09/20",
"$85,600"
],
[
"Angelica Ramos",
"angelica@example.com",
"Chief Executive Officer (CEO)",
"London",
"2009/10/09",
"$1,200,000"
],
[
"Gavin Joyce",
"gavin@example.com",
"Developer",
"Edinburgh",
"2010/12/22",
"$92,575"
],
[
"Jennifer Chang",
"jennifer@example.com",
"Regional Director",
"Singapore",
"2010/11/14",
"$357,650"
],
[
"Brenden Wagner",
"brenden@example.com",
"Software Engineer",
"San Francisco",
"2011/06/07",
"$206,850"
],
[
"Fiona Green",
"fiona@example.com",
"Chief Operating Officer (COO)",
"San Francisco",
"2010/03/11",
"$850,000"
],
[
"Shou Itou",
"shou@example.com",
"Regional Marketing",
"Tokyo",
"2011/08/14",
"$163,000"
],
[
"Michelle House",
"michelle@example.com",
"Integration Specialist",
"Sydney",
"2011/06/02",
"$95,400"
],
[
"Suki Burks",
"suki@example.com",
"Developer",
"London",
"2009/10/22",
"$114,500"
],
[
"Prescott Bartlett",
"prescott@example.com",
"Technical Author",
"London",
"2011/05/07",
"$145,000"
],
[
"Gavin Cortez",
"gavin@example.com",
"Team Leader",
"San Francisco",
"2008/10/26",
"$235,500"
],
[
"Martena Mccray",
"martena@example.com",
"Post-Sales support",
"Edinburgh",
"2011/03/09",
"$324,050"
],
[
"Unity Butler",
"unity@example.com",
"Marketing Designer",
"San Francisco",
"2009/12/09",
"$85,675"
],
[
"Howard Hatfield",
"howard@example.com",
"Office Manager",
"San Francisco",
"2008/12/16",
"$164,500"
],
[
"Hope Fuentes",
"hope@example.com",
"Secretary",
"San Francisco",
"2010/02/12",
"$109,850"
],
[
"Vivian Harrell",
"vivian@example.com",
"Financial Controller",
"San Francisco",
"2009/02/14",
"$452,500"
],
[
"Timothy Mooney",
"timothy@example.com",
"Office Manager",
"London",
"2008/12/11",
"$136,200"
],
[
"Jackson Bradshaw",
"jackson@example.com",
"Director",
"New York",
"2008/09/26",
"$645,750"
],
[
"Olivia Liang",
"olivia@example.com",
"Support Engineer",
"Singapore",
"2011/02/03",
"$234,500"
],
[
"Bruno Nash",
"bruno@example.com",
"Software Engineer",
"London",
"2011/05/03",
"$163,500"
],
[
"Sakura Yamamoto",
"sakura@example.com",
"Support Engineer",
"Tokyo",
"2009/08/19",
"$139,575"
],
[
"Thor Walton",
"thor@example.com",
"Developer",
"New York",
"2013/08/11",
"$98,540"
],
[
"Finn Camacho",
"finn@example.com",
"Support Engineer",
"San Francisco",
"2009/07/07",
"$87,500"
],
[
"Serge Baldwin",
"serge@example.com",
"Data Coordinator",
"Singapore",
"2012/04/09",
"$138,575"
],
[
"Zenaida Frank",
"zenaida@example.com",
"Software Engineer",
"New York",
"2010/01/04",
"$125,250"
],
[
"Zorita Serrano",
"zorita@example.com",
"Software Engineer",
"San Francisco",
"2012/06/01",
"$115,000"
],
[
"Jennifer Acosta",
"jennifer@example.com",
"Junior Javascript Developer",
"Edinburgh",
"2013/02/01",
"$75,650"
],
[
"Cara Stevens",
"cara@example.com",
"Sales Assistant",
"New York",
"2011/12/06",
"$145,600"
],
[
"Hermione Butler",
"hermione@example.com",
"Regional Director",
"London",
"2011/03/21",
"$356,250"
],
[
"Lael Greer",
"lael@example.com",
"Systems Administrator",
"London",
"2009/02/27",
"$103,500"
],
[
"Jonas Alexander",
"jonas@example.com",
"Developer",
"San Francisco",
"2010/07/14",
"$86,500"
],
[
"Shad Decker",
"shad@example.com",
"Regional Director",
"Edinburgh",
"2008/11/13",
"$183,000"
],
[
"Michael Bruce",
"michael@example.com",
"Javascript Developer",
"Singapore",
"2011/06/27",
"$183,000"
],
[
"Donna Snider",
"donna@example.com",
"Customer Support",
"New York",
"2011/01/25",
"$112,000"
]
]
}

View File

@ -1,64 +0,0 @@
{
"data": [
{
"id": 1,
"chart_data": [
28,
10,
45,
38,
15,
30,
35,
30,
8
],
"active_option": 2
},
{
"id": 2,
"chart_data": [
35,
25,
15,
40,
42,
25,
48,
8,
30
],
"active_option": 6
},
{
"id": 3,
"chart_data": [
10,
22,
27,
33,
42,
32,
27,
22,
8
],
"active_option": 4
},
{
"id": 4,
"chart_data": [
5,
9,
12,
18,
20,
25,
30,
36,
48
],
"active_option": 8
}
]
}

View File

@ -1,604 +0,0 @@
{
"data": [
{
"invoice_id": 4477,
"issued_date": "12/13/2020",
"client_name": "Roxy Floodgate",
"service": "Software Development",
"total": 3428,
"avatar_image": false,
"invoice_status": "Paid",
"balance": "$724",
"due_date": "04/23/2020",
"action": 1
},
{
"invoice_id": 5020,
"issued_date": "07/17/2020",
"client_name": "Roy Southerell",
"service": "UI/UX Design & Development",
"total": 5219,
"avatar_image": true,
"invoice_status": "Downloaded",
"balance": 0,
"due_date": "12/15/2020",
"action": 1
},
{
"invoice_id": 4506,
"issued_date": "10/19/2020",
"client_name": "Briny Undrell",
"service": "Unlimited Extended License",
"total": 3719,
"avatar_image": true,
"invoice_status": "Paid",
"balance": 0,
"due_date": "11/03/2020",
"action": 1
},
{
"invoice_id": 4515,
"issued_date": "03/06/2021",
"client_name": "Kendell Longstreeth",
"service": "Software Development",
"total": 4749,
"avatar_image": true,
"invoice_status": "Sent",
"balance": 0,
"due_date": "02/11/2021",
"action": 1
},
{
"invoice_id": 4831,
"issued_date": "02/08/2021",
"client_name": "Dorris Grigoriev",
"service": "UI/UX Design & Development",
"total": 4056,
"avatar_image": true,
"invoice_status": "Draft",
"balance": "$815",
"due_date": "06/30/2020",
"action": 1
},
{
"invoice_id": 4881,
"issued_date": "08/26/2020",
"client_name": "Zeb Kenningham",
"service": "UI/UX Design & Development",
"total": 2771,
"avatar_image": false,
"invoice_status": "Paid",
"balance": 0,
"due_date": "06/24/2020",
"action": 1
},
{
"invoice_id": 4877,
"issued_date": "09/17/2020",
"client_name": "Tudor Pereira",
"service": "UI/UX Design & Development",
"total": 2713,
"avatar_image": false,
"invoice_status": "Draft",
"balance": "$407",
"due_date": "11/22/2020",
"action": 1
},
{
"invoice_id": 4687,
"issued_date": "02/11/2021",
"client_name": "Peggy Viccary",
"service": "Template Customization",
"total": 4309,
"avatar_image": true,
"invoice_status": "Paid",
"balance": "-$205",
"due_date": "02/10/2021",
"action": 1
},
{
"invoice_id": 4917,
"issued_date": "01/26/2021",
"client_name": "Charo Praill",
"service": "Software Development",
"total": 3367,
"avatar_image": true,
"invoice_status": "Downloaded",
"balance": 0,
"due_date": "12/24/2020",
"action": 1
},
{
"invoice_id": 4790,
"issued_date": "01/15/2021",
"client_name": "Ozzie Youles",
"service": "Software Development",
"total": 4776,
"avatar_image": true,
"invoice_status": "Downloaded",
"balance": "$305",
"due_date": "06/02/2020",
"action": 1
},
{
"invoice_id": 4965,
"issued_date": "09/27/2020",
"client_name": "Yelena O'Hear",
"service": "Unlimited Extended License",
"total": 3789,
"avatar_image": true,
"invoice_status": "Partial Payment",
"balance": "$666",
"due_date": "03/18/2021",
"action": 1
},
{
"invoice_id": 4449,
"issued_date": "07/31/2020",
"client_name": "Tom O'Loughlin",
"service": "Unlimited Extended License",
"total": 5200,
"avatar_image": true,
"invoice_status": "Partial Payment",
"balance": 0,
"due_date": "01/17/2021",
"action": 1
},
{
"invoice_id": 4511,
"issued_date": "02/14/2021",
"client_name": "Donni Goning",
"service": "Software Development",
"total": 4558,
"avatar_image": true,
"invoice_status": "Paid",
"balance": 0,
"due_date": "10/01/2020",
"action": 1
},
{
"invoice_id": 4677,
"issued_date": "05/21/2020",
"client_name": "Syman Asbery",
"service": "Template Customization",
"total": 3503,
"avatar_image": true,
"invoice_status": "Paid",
"balance": 0,
"due_date": "05/22/2020",
"action": 1
},
{
"invoice_id": 5024,
"issued_date": "06/30/2020",
"client_name": "Ariella Filippyev",
"service": "Unlimited Extended License",
"total": 5285,
"avatar_image": true,
"invoice_status": "Partial Payment",
"balance": "-$202",
"due_date": "08/02/2020",
"action": 1
},
{
"invoice_id": 4743,
"issued_date": "06/21/2020",
"client_name": "Britteny Barham",
"service": "UI/UX Design & Development",
"total": 3668,
"avatar_image": true,
"invoice_status": "Downloaded",
"balance": "$731",
"due_date": "12/15/2020",
"action": 1
},
{
"invoice_id": 4416,
"issued_date": "12/30/2020",
"client_name": "Shelly Pyott",
"service": "Unlimited Extended License",
"total": 4372,
"avatar_image": false,
"invoice_status": "Sent",
"balance": "-$344",
"due_date": "09/17/2020",
"action": 1
},
{
"invoice_id": 4943,
"issued_date": "05/27/2020",
"client_name": "Fancy Hunnicot",
"service": "Template Customization",
"total": 3198,
"avatar_image": true,
"invoice_status": "Partial Payment",
"balance": "-$253",
"due_date": "08/16/2020",
"action": 1
},
{
"invoice_id": 4989,
"issued_date": "07/30/2020",
"client_name": "Orson Grafton",
"service": "Unlimited Extended License",
"total": 5293,
"avatar_image": false,
"invoice_status": "Past Due",
"balance": 0,
"due_date": "08/01/2020",
"action": 1
},
{
"invoice_id": 4582,
"issued_date": "06/10/2020",
"client_name": "Keane Barfitt",
"service": "Template Customization",
"total": 5612,
"avatar_image": true,
"invoice_status": "Downloaded",
"balance": "$883",
"due_date": "04/12/2020",
"action": 1
},
{
"invoice_id": 5041,
"issued_date": "02/01/2021",
"client_name": "Shamus Tuttle",
"service": "Software Development",
"total": 2230,
"avatar_image": true,
"invoice_status": "Sent",
"balance": 0,
"due_date": "11/19/2020",
"action": 1
},
{
"invoice_id": 4401,
"issued_date": "03/22/2021",
"client_name": "Bealle Daskiewicz",
"service": "Unlimited Extended License",
"total": 2032,
"avatar_image": true,
"invoice_status": "Partial Payment",
"balance": 0,
"due_date": "11/30/2020",
"action": 1
},
{
"invoice_id": 4535,
"issued_date": "11/30/2020",
"client_name": "Ignace Levington",
"service": "UI/UX Design & Development",
"total": 3128,
"avatar_image": true,
"invoice_status": "Paid",
"balance": 0,
"due_date": "09/10/2020",
"action": 1
},
{
"invoice_id": 4683,
"issued_date": "01/06/2021",
"client_name": "Isidor Navarro",
"service": "Software Development",
"total": 2060,
"avatar_image": true,
"invoice_status": "Downloaded",
"balance": 0,
"due_date": "12/08/2020",
"action": 1
},
{
"invoice_id": 4410,
"issued_date": "06/01/2020",
"client_name": "Keslie Lermit",
"service": "UI/UX Design & Development",
"total": 4077,
"avatar_image": false,
"invoice_status": "Draft",
"balance": 0,
"due_date": "02/01/2021",
"action": 1
},
{
"invoice_id": 4716,
"issued_date": "10/30/2020",
"client_name": "Ninette Forde",
"service": "Template Customization",
"total": 2872,
"avatar_image": true,
"invoice_status": "Partial Payment",
"balance": 0,
"due_date": "10/18/2020",
"action": 1
},
{
"invoice_id": 4341,
"issued_date": "02/05/2021",
"client_name": "Ninnetta Roylance",
"service": "Software Development",
"total": 3740,
"avatar_image": true,
"invoice_status": "Draft",
"balance": 0,
"due_date": "11/01/2020",
"action": 1
},
{
"invoice_id": 4989,
"issued_date": "12/01/2020",
"client_name": "Lorine Hischke",
"service": "Unlimited Extended License",
"total": 3623,
"avatar_image": false,
"invoice_status": "Downloaded",
"balance": 0,
"due_date": "09/23/2020",
"action": 1
},
{
"invoice_id": 4446,
"issued_date": "04/16/2020",
"client_name": "Gray Waldock",
"service": "Software Development",
"total": 2477,
"avatar_image": true,
"invoice_status": "Draft",
"balance": 0,
"due_date": "04/01/2020",
"action": 1
},
{
"invoice_id": 4765,
"issued_date": "01/24/2021",
"client_name": "Pryce Scothorn",
"service": "Unlimited Extended License",
"total": 3904,
"avatar_image": false,
"invoice_status": "Paid",
"balance": "$951",
"due_date": "09/30/2020",
"action": 1
},
{
"invoice_id": 4575,
"issued_date": "02/24/2021",
"client_name": "Hermia Fosten",
"service": "UI/UX Design & Development",
"total": 3102,
"avatar_image": true,
"invoice_status": "Partial Payment",
"balance": "-$153",
"due_date": "08/25/2020",
"action": 1
},
{
"invoice_id": 4538,
"issued_date": "02/29/2021",
"client_name": "Brandy Cleveland",
"service": "UI/UX Design & Development",
"total": 2483,
"avatar_image": true,
"invoice_status": "Draft",
"balance": 0,
"due_date": "07/10/2020",
"action": 1
},
{
"invoice_id": 4798,
"issued_date": "08/07/2020",
"client_name": "Lloyd Janaszkiewicz",
"service": "Unlimited Extended License",
"total": 2825,
"avatar_image": true,
"invoice_status": "Partial Payment",
"balance": "-$459",
"due_date": "10/14/2020",
"action": 1
},
{
"invoice_id": 4963,
"issued_date": "05/10/2020",
"client_name": "Morgan Ewbanks",
"service": "Unlimited Extended License",
"total": 2029,
"avatar_image": true,
"invoice_status": "Past Due",
"balance": 0,
"due_date": "03/28/2020",
"action": 1
},
{
"invoice_id": 4528,
"issued_date": "04/02/2020",
"client_name": "Rahal Bezemer",
"service": "Software Development",
"total": 3208,
"avatar_image": false,
"invoice_status": "Sent",
"balance": 0,
"due_date": "09/06/2020",
"action": 1
},
{
"invoice_id": 5089,
"issued_date": "05/02/2020",
"client_name": "Jamal Kerrod",
"service": "Software Development",
"total": 3077,
"avatar_image": false,
"invoice_status": "Sent",
"balance": 0,
"due_date": "05/09/2020",
"action": 1
},
{
"invoice_id": 4456,
"issued_date": "03/23/2021",
"client_name": "Claudine Mechell",
"service": "Software Development",
"total": 5578,
"avatar_image": true,
"invoice_status": "Draft",
"balance": 0,
"due_date": "07/23/2020",
"action": 1
},
{
"invoice_id": 5027,
"issued_date": "09/28/2020",
"client_name": "Devonne Wallbridge",
"service": "Software Development",
"total": 2787,
"avatar_image": true,
"invoice_status": "Partial Payment",
"balance": 0,
"due_date": "09/25/2020",
"action": 1
},
{
"invoice_id": 4748,
"issued_date": "02/21/2021",
"client_name": "Ruddie Gabb",
"service": "UI/UX Design & Development",
"total": 5591,
"avatar_image": false,
"invoice_status": "Downloaded",
"balance": 0,
"due_date": "06/07/2020",
"action": 1
},
{
"invoice_id": 4651,
"issued_date": "05/24/2020",
"client_name": "Jennica Aronov",
"service": "Template Customization",
"total": 2783,
"avatar_image": true,
"invoice_status": "Draft",
"balance": 0,
"due_date": "10/22/2020",
"action": 1
},
{
"invoice_id": 4794,
"issued_date": "01/13/2021",
"client_name": "Hephzibah Hanshawe",
"service": "Template Customization",
"total": 2719,
"avatar_image": false,
"invoice_status": "Sent",
"balance": 0,
"due_date": "02/04/2021",
"action": 1
},
{
"invoice_id": 4593,
"issued_date": "05/18/2020",
"client_name": "Darwin Dory",
"service": "Template Customization",
"total": 3325,
"avatar_image": false,
"invoice_status": "Draft",
"balance": "$361",
"due_date": "03/02/2021",
"action": 1
},
{
"invoice_id": 4437,
"issued_date": "10/29/2020",
"client_name": "Orbadiah Norton",
"service": "Template Customization",
"total": 3851,
"avatar_image": false,
"invoice_status": "Draft",
"balance": 0,
"due_date": "08/25/2020",
"action": 1
},
{
"invoice_id": 4632,
"issued_date": "04/07/2020",
"client_name": "Eadith Garshore",
"service": "Template Customization",
"total": 5565,
"avatar_image": false,
"invoice_status": "Draft",
"balance": 0,
"due_date": "03/06/2021",
"action": 1
},
{
"invoice_id": 4995,
"issued_date": "08/21/2020",
"client_name": "Raynell Clendennen",
"service": "Template Customization",
"total": 3313,
"avatar_image": true,
"invoice_status": "Partial Payment",
"balance": 0,
"due_date": "06/09/2020",
"action": 1
},
{
"invoice_id": 4375,
"issued_date": "05/31/2020",
"client_name": "Dido Smitton",
"service": "Template Customization",
"total": 5181,
"avatar_image": false,
"invoice_status": "Partial Payment",
"balance": 0,
"due_date": "10/22/2020",
"action": 1
},
{
"invoice_id": 4323,
"issued_date": "07/12/2020",
"client_name": "Hershel Pennetti",
"service": "Template Customization",
"total": 2869,
"avatar_image": true,
"invoice_status": "Partial Payment",
"balance": 0,
"due_date": "03/22/2021",
"action": 1
},
{
"invoice_id": 4993,
"issued_date": "07/10/2020",
"client_name": "Lutero Aloshechkin",
"service": "Unlimited Extended License",
"total": 4836,
"avatar_image": false,
"invoice_status": "Partial Payment",
"balance": 0,
"due_date": "10/22/2020",
"action": 1
},
{
"invoice_id": 4439,
"issued_date": "07/20/2020",
"client_name": "Beck Cottle",
"service": "UI/UX Design & Development",
"total": 4263,
"avatar_image": false,
"invoice_status": "Draft",
"balance": "$762",
"due_date": "06/12/2020",
"action": 1
},
{
"invoice_id": 4567,
"issued_date": "04/19/2020",
"client_name": "Deny Pell",
"service": "Unlimited Extended License",
"total": 3171,
"avatar_image": true,
"invoice_status": "Draft",
"balance": "-$205",
"due_date": "09/25/2020",
"action": 1
}
]
}

View File

@ -1,66 +0,0 @@
[
{
"id": 1,
"text": "css",
"children": [
{
"text": "app.css",
"type": "css"
},
{
"text": "style.css",
"type": "css"
}
]
},
{
"id": 2,
"text": "img",
"state": {
"opened": true
},
"children": [
{
"text": "bg.jpg",
"type": "img"
},
{
"text": "logo.png",
"type": "img"
},
{
"text": "avatar.png",
"type": "img"
}
]
},
{
"id": 3,
"text": "js",
"state": {
"opened": true
},
"children": [
{
"text": "jquery.js",
"type": "js"
},
{
"text": "app.js",
"type": "js"
}
]
},
{
"text": "index.html",
"type": "html"
},
{
"text": "page-one.html",
"type": "html"
},
{
"text": "page-two.html",
"type": "html"
}
]

View File

@ -1,127 +0,0 @@
[
{
"id": "board-in-progress",
"title": "In Progress",
"item": [
{
"id": "in-progress-1",
"title": "Research FAQ page UX",
"comments": "12",
"badge-text": "UX",
"badge": "success",
"due-date": "5 April",
"attachments": "4",
"assigned": [
"12.png",
"5.png"
],
"members": [
"Bruce",
"Clark"
]
},
{
"id": "in-progress-2",
"title": "Review Javascript code",
"comments": "8",
"badge-text": "Code Review",
"badge": "danger",
"attachments": "2",
"due-date": "10 April",
"assigned": [
"3.png",
"8.png"
],
"members": [
"Helena",
"Iris"
]
}
]
},
{
"id": "board-in-review",
"title": "In Review",
"item": [
{
"id": "in-review-1",
"title": "Review completed Apps",
"comments": "17",
"badge-text": "Info",
"badge": "info",
"due-date": "8 April",
"attachments": "8",
"assigned": [
"11.png",
"6.png"
],
"members": [
"Laurel",
"Harley"
]
},
{
"id": "in-review-2",
"title": "Find new images for pages",
"comments": "18",
"badge-text": "Images",
"image": "16.jpg",
"badge": "warning",
"due-date": "2 April",
"attachments": "10",
"assigned": [
"9.png",
"2.png",
"3.png",
"12.png"
],
"members": [
"Dianna",
"Jordan",
"Vinnie",
"Lasa"
]
}
]
},
{
"id": "board-done",
"title": "Done",
"item": [
{
"id": "done-1",
"title": "Forms & Tables section",
"comments": "4",
"badge-text": "App",
"badge": "secondary",
"due-date": "7 April",
"attachments": "1",
"assigned": [
"2.png",
"9.png",
"10.png"
],
"members": [
"Kara",
"Nyssa",
"Darcey"
]
},
{
"id": "done-2",
"title": "Completed Charts & Maps",
"comments": "21",
"badge-text": "Charts & Maps",
"badge": "primary",
"due-date": "7 April",
"attachments": "6",
"assigned": [
"1.png"
],
"members": [
"Sarah"
]
}
]
}
]

View File

@ -1,85 +0,0 @@
{
"data": [
{
"id": 1,
"name": "Management",
"assigned_to": [
"Admin"
],
"created_date": "14 Apr 2021, 8:43 PM"
},
{
"id": 2,
"name": "Manage Billing & Roles",
"assigned_to": [
"Admin"
],
"created_date": "16 Sep 2021, 5:20 PM"
},
{
"id": 3,
"name": "Add & Remove Users",
"assigned_to": [
"Admin",
"Manager"
],
"created_date": "14 Oct 2021, 10:20 AM"
},
{
"id": 4,
"name": "Project Planning",
"assigned_to": [
"Admin",
"Users",
"Support"
],
"created_date": "14 May 2021, 12:10 PM"
},
{
"id": 5,
"name": "Manage Email Sequences",
"assigned_to": [
"Admin",
"Users",
"Support"
],
"created_date": "23 Aug 2021, 2:00 PM"
},
{
"id": 6,
"name": "Client Communication",
"assigned_to": [
"Admin",
"Manager"
],
"created_date": "15 Apr 2021, 11:30 AM"
},
{
"id": 7,
"name": "Only View",
"assigned_to": [
"Admin",
"Restricted"
],
"created_date": "04 Dec 2021, 8:15 PM"
},
{
"id": 8,
"name": "Financial Management",
"assigned_to": [
"Admin",
"Manager"
],
"created_date": "25 Feb 2021, 10:30 AM"
},
{
"id": 9,
"name": "Manage Others Tasks",
"assigned_to": [
"Admin",
"Support"
],
"created_date": "04 Nov 2021, 11:45 AM"
}
]
}

View File

@ -1,92 +0,0 @@
{
"data": [
{
"project_name": "BGC eCommerce App",
"framework": "React Project",
"total_task": "122/240",
"project_image": "react-label.png",
"hours": "210:30h",
"progress": "60"
},
{
"project_name": "Falcon Logo Design",
"framework": "UI/UX Project",
"total_task": "9/50",
"project_image": "xd-label.png",
"hours": "89h",
"progress": "15"
},
{
"project_name": "Dashboard Design",
"framework": "Vuejs Project",
"total_task": "100/190",
"project_image": "vue-label.png",
"hours": "129:45h",
"progress": "90"
},
{
"project_name": "Foodista mobile app",
"framework": "iPhone Project",
"total_task": "12/86",
"project_image": "sketch-label.png",
"hours": "45h",
"progress": "49"
},
{
"project_name": "Dojo React Project",
"framework": "React Project",
"total_task": "234/378",
"project_image": "react-label.png",
"hours": "67:10h",
"progress": "73"
},
{
"project_name": "Crypto Website",
"framework": "HTML Project",
"total_task": "264/537",
"project_image": "html-label.png",
"hours": "108:39h",
"progress": "81"
},
{
"project_name": "Vue Admin template",
"framework": "Vuejs Project",
"total_task": "214/627",
"project_image": "vue-label.png",
"hours": "88:19h",
"progress": "78"
},
{
"project_name": "Admin template Project",
"framework": "UI/UX Project",
"total_task": "148/280",
"project_image": "xd-label.png",
"hours": "26:02h",
"progress": "53"
},
{
"project_name": "Online Webinar",
"framework": "Official Event",
"total_task": "12/20",
"project_image": "event-label.png",
"hours": "12:12h",
"progress": "69"
},
{
"project_name": "Blockchain Website",
"framework": "Python Project",
"total_task": "104/137",
"project_image": "figma-label.png",
"hours": "138:39h",
"progress": "95"
},
{
"project_name": "Hoffman Website",
"framework": "HTML Project",
"total_task": "56/183",
"project_image": "html-label.png",
"hours": "76h",
"progress": "43"
}
]
}

View File

@ -1,720 +0,0 @@
{
"pages": [
{
"name": "Dashboard Analytics",
"icon": "ti-smart-home",
"url": "index.html"
},
{
"name": "Dashboard CRM",
"icon": "ti-smart-home",
"url": "dashboards-crm.html"
},
{
"name": "Dashboard eCommerce",
"icon": "ti-smart-home",
"url": "dashboards-ecommerce.html"
},
{
"name": "Layout Without menu",
"icon": "ti-layout-sidebar",
"url": "layouts-without-menu.html"
},
{
"name": "Layout Fluid",
"icon": "ti-layout-sidebar",
"url": "layouts-fluid.html"
},
{
"name": "Layout Container",
"icon": "ti-layout-sidebar",
"url": "layouts-container.html"
},
{
"name": "Layout Blank",
"icon": "ti-layout-sidebar",
"url": "layouts-blank.html"
},
{
"name": "Email",
"icon": "ti-mail",
"url": "app-email.html"
},
{
"name": "Chat",
"icon": "ti-messages",
"url": "app-chat.html"
},
{
"name": "Calendar",
"icon": "ti-calendar",
"url": "app-calendar.html"
},
{
"name": "Kanban",
"icon": "ti-layout-kanban",
"url": "app-kanban.html"
},
{
"name": "User List",
"icon": "ti-list-numbers",
"url": "app-user-list.html"
},
{
"name": "User View - Account",
"icon": "ti-user",
"url": "app-user-view-account.html"
},
{
"name": "User View - Security",
"icon": "ti-shield-chevron",
"url": "app-user-view-security.html"
},
{
"name": "User View - Billing & Plans",
"icon": "ti-file-text",
"url": "app-user-view-billing.html"
},
{
"name": "User View - Notifications",
"icon": "ti-notification",
"url": "app-user-view-notifications.html"
},
{
"name": "User View - Connections",
"icon": "ti-brand-google",
"url": "app-user-view-connections.html"
},
{
"name": "Roles",
"icon": "ti-shield-checkered",
"url": "app-access-roles.html"
},
{
"name": "Permission",
"icon": "ti-ban",
"url": "app-access-permission.html"
},
{
"name": "Invoice List",
"icon": "ti-list-numbers",
"url": "app-invoice-list.html"
},
{
"name": "Invoice Preview",
"icon": "ti-file-text",
"url": "app-invoice-preview.html"
},
{
"name": "Invoice Edit",
"icon": "ti-pencil",
"url": "app-invoice-edit.html"
},
{
"name": "Invoice Add",
"icon": "ti-user-plus",
"url": "app-invoice-add.html"
},
{
"name": "User Profile",
"icon": "ti-user-circle",
"url": "pages-profile-user.html"
},
{
"name": "User Profile - Teams",
"icon": "ti-users",
"url": "pages-profile-teams.html"
},
{
"name": "User Profile - Projects",
"icon": "ti-layout-grid",
"url": "pages-profile-projects.html"
},
{
"name": "User Profile - Connections",
"icon": "ti-link",
"url": "pages-profile-connections.html"
},
{
"name": "Account Settings - Account",
"icon": "ti-user",
"url": "pages-account-settings-account.html"
},
{
"name": "Account Settings - Security",
"icon": "ti-shield-chevron",
"url": "pages-account-settings-security.html"
},
{
"name": "Account Settings - Billing & Plans",
"icon": "ti-file-text",
"url": "pages-account-settings-billing.html"
},
{
"name": "Account Settings - Notifications",
"icon": "ti-notification",
"url": "pages-account-settings-notifications.html"
},
{
"name": "Account Settings - Connections",
"icon": "ti-link",
"url": "pages-account-settings-connections.html"
},
{
"name": "FAQ",
"icon": "ti-help",
"url": "pages-faq.html"
},
{
"name": "Help Center Landing",
"icon": "ti-lifebuoy",
"url": "pages-help-center-landing.html"
},
{
"name": "Help Center Categories",
"icon": "ti-lifebuoy",
"url": "pages-help-center-categories.html"
},
{
"name": "Help Center Article",
"icon": "ti-lifebuoy",
"url": "pages-help-center-article.html"
},
{
"name": "Pricing",
"icon": "ti-diamond",
"url": "pages-pricing.html"
},
{
"name": "Error",
"icon": "ti-alert-circle",
"url": "pages-misc-error.html"
},
{
"name": "Under Maintenance",
"icon": "ti-barrier-block",
"url": "pages-misc-under-maintenance.html"
},
{
"name": "Coming Soon",
"icon": "ti-clock",
"url": "pages-misc-comingsoon.html"
},
{
"name": "Not Authorized",
"icon": "ti-user-x",
"url": "pages-misc-not-authorized.html"
},
{
"name": "Login Basic",
"icon": "ti-login",
"url": "auth-login-basic.html"
},
{
"name": "Login Cover",
"icon": "ti-login",
"url": "auth-login-cover.html"
},
{
"name": "Register Basic",
"icon": "ti-user-plus",
"url": "auth-register-basic.html"
},
{
"name": "Register Cover",
"icon": "ti-user-plus",
"url": "auth-register-cover.html"
},
{
"name": "Register Multi-steps",
"icon": "ti-user-plus",
"url": "auth-register-multisteps.html"
},
{
"name": "Verify Email Basic",
"icon": "ti-mail",
"url": "auth-verify-email-basic.html"
},
{
"name": "Verify Email Cover",
"icon": "ti-mail",
"url": "auth-verify-email-cover.html"
},
{
"name": "Reset Password Basic",
"icon": "ti-help",
"url": "auth-reset-password-basic.html"
},
{
"name": "Reset Password Cover",
"icon": "ti-help",
"url": "auth-reset-password-cover.html"
},
{
"name": "Forgot Password Basic",
"icon": "ti-question-mark",
"url": "auth-forgot-password-basic.html"
},
{
"name": "Forgot Password Cover",
"icon": "ti-question-mark",
"url": "auth-forgot-password-cover.html"
},
{
"name": "Two Steps Verification Basic",
"icon": "ti-question-mark",
"url": "auth-two-steps-basic.html"
},
{
"name": "Two Steps Verification Cover",
"icon": "ti-question-mark",
"url": "auth-two-steps-cover.html"
},
{
"name": "Modal Examples",
"icon": "ti-square",
"url": "modal-examples.html"
},
{
"name": "Checkout Wizard",
"icon": "ti-shopping-cart",
"url": "wizard-ex-checkout.html"
},
{
"name": "Property Listing Wizard",
"icon": "ti-building-cottage",
"url": "wizard-ex-property-listing.html"
},
{
"name": "Create Deal Wizard",
"icon": "ti-gift",
"url": "wizard-ex-create-deal.html"
},
{
"name": "Tabler",
"icon": "ti-pencil",
"url": "icons-tabler.html"
},
{
"name": "Font Awesome",
"icon": "ti-typography",
"url": "icons-font-awesome.html"
},
{
"name": "Basic Cards",
"icon": "ti-credit-card",
"url": "cards-basic.html"
},
{
"name": "Advance Cards",
"icon": "ti-id",
"url": "cards-advance.html"
},
{
"name": "Statistics Cards",
"icon": "ti-chart-bar",
"url": "cards-statistics.html"
},
{
"name": "Analytics Cards",
"icon": "ti-chart-bar",
"url": "cards-analytics.html"
},
{
"name": "Actions Cards",
"icon": "ti-mouse-2",
"url": "cards-actions.html"
},
{
"name": "Accordion",
"icon": "ti-arrows-maximize",
"url": "ui-accordion.html"
},
{
"name": "Alerts",
"icon": "ti-alert-triangle",
"url": "ui-alerts.html"
},
{
"name": "Badges",
"icon": "ti-badge",
"url": "ui-badges.html"
},
{
"name": "Buttons",
"icon": "ti-circle-plus",
"url": "ui-buttons.html"
},
{
"name": "Carousel",
"icon": "ti-photo",
"url": "ui-carousel.html"
},
{
"name": "Collapse",
"icon": "ti-arrows-minimize",
"url": "ui-collapse.html"
},
{
"name": "Dropdowns",
"icon": "ti-arrow-autofit-height",
"url": "ui-dropdowns.html"
},
{
"name": "Footer",
"icon": "ti-layout-bottombar",
"url": "ui-footer.html"
},
{
"name": "List Groups",
"icon": "ti-list-numbers",
"url": "ui-list-groups.html"
},
{
"name": "Modals",
"icon": "ti-layout",
"url": "ui-modals.html"
},
{
"name": "Navbar",
"icon": "ti-layout-navbar",
"url": "ui-navbar.html"
},
{
"name": "Offcanvas",
"icon": "ti-layout",
"url": "ui-offcanvas.html"
},
{
"name": "Pagination & Breadcrumbs",
"icon": "ti-chevrons-right",
"url": "ui-pagination-breadcrumbs.html"
},
{
"name": "Progress",
"icon": "ti-adjustments-horizontal",
"url": "ui-progress.html"
},
{
"name": "Spinners",
"icon": "ti-loader-2",
"url": "ui-spinners.html"
},
{
"name": "Tabs & Pills",
"icon": "ti-server-2",
"url": "ui-tabs-pills.html"
},
{
"name": "Toasts",
"icon": "ti-box-model",
"url": "ui-toasts.html"
},
{
"name": "Tooltips & Popovers",
"icon": "ti-message-2",
"url": "ui-tooltips-popovers.html"
},
{
"name": "Typography",
"icon": "ti-typography",
"url": "ui-typography.html"
},
{
"name": "Avatar",
"icon": "ti-user-circle",
"url": "extended-ui-avatar.html"
},
{
"name": "BlockUI",
"icon": "ti-window-maximize",
"url": "extended-ui-blockui.html"
},
{
"name": "Drag & Drop",
"icon": "ti-drag-drop",
"url": "extended-ui-drag-and-drop.html"
},
{
"name": "Media Player",
"icon": "ti-music",
"url": "extended-ui-media-player.html"
},
{
"name": "Perfect Scrollbar",
"icon": "ti-arrows-move-vertical",
"url": "extended-ui-perfect-scrollbar.html"
},
{
"name": "Star Ratings",
"icon": "ti-star",
"url": "extended-ui-star-ratings.html"
},
{
"name": "SweetAlert2",
"icon": "ti-alert-triangle",
"url": "extended-ui-sweetalert2.html"
},
{
"name": "Text Divider",
"icon": "ti-separator-horizontal",
"url": "extended-ui-text-divider.html"
},
{
"name": "Timeline Basic",
"icon": "ti-arrows-horizontal",
"url": "extended-ui-timeline-basic.html"
},
{
"name": "Timeline Fullscreen",
"icon": "ti-arrows-horizontal",
"url": "extended-ui-timeline-fullscreen.html"
},
{
"name": "Tour",
"icon": "ti-brand-telegram",
"url": "extended-ui-tour.html"
},
{
"name": "Treeview",
"icon": "ti-git-fork rotate-180",
"url": "extended-ui-treeview.html"
},
{
"name": "Miscellaneous",
"icon": "ti-sitemap",
"url": "extended-ui-misc.html"
},
{
"name": "Basic Inputs",
"icon": "ti-cursor-text",
"url": "forms-basic-inputs.html"
},
{
"name": "Input groups",
"icon": "ti-arrow-autofit-content",
"url": "forms-input-groups.html"
},
{
"name": "Custom Options",
"icon": "ti-circle",
"url": "forms-custom-options.html"
},
{
"name": "Editors",
"icon": "ti-text-resize",
"url": "forms-editors.html"
},
{
"name": "File Upload",
"icon": "ti-file-upload",
"url": "forms-file-upload.html"
},
{
"name": "Pickers",
"icon": "ti-edit-circle",
"url": "forms-pickers.html"
},
{
"name": "Select & Tags",
"icon": "ti-select",
"url": "forms-selects.html"
},
{
"name": "Sliders",
"icon": "ti-adjustments-alt rotate-90",
"url": "forms-sliders.html"
},
{
"name": "Switches",
"icon": "ti-toggle-right",
"url": "forms-switches.html"
},
{
"name": "Extras",
"icon": "ti-circle-plus",
"url": "forms-extras.html"
},
{
"name": "Vertical Form",
"icon": "ti-file-text",
"url": "form-layouts-vertical.html"
},
{
"name": "Horizontal Form",
"icon": "ti-file-text",
"url": "form-layouts-horizontal.html"
},
{
"name": "Sticky Actions",
"icon": "ti-file-text",
"url": "form-layouts-sticky.html"
},
{
"name": "Numbered Wizard",
"icon": "ti-text-wrap-disabled",
"url": "form-wizard-numbered.html"
},
{
"name": "Icons Wizard",
"icon": "ti-text-wrap-disabled",
"url": "form-wizard-icons.html"
},
{
"name": "Form Validation",
"icon": "ti-checkbox",
"url": "form-validation.html"
},
{
"name": "Tables",
"icon": "ti-table",
"url": "tables-basic.html"
},
{
"name": "Datatable Basic",
"icon": "ti-layout-grid",
"url": "tables-datatables-basic.html"
},
{
"name": "Datatable Advanced",
"icon": "ti-layout-grid",
"url": "tables-datatables-advanced.html"
},
{
"name": "Datatable Extensions",
"icon": "ti-layout-grid",
"url": "tables-datatables-extensions.html"
},
{
"name": "Apex Charts",
"icon": "ti-chart-line",
"url": "charts-apex.html"
},
{
"name": "ChartJS",
"icon": "ti-chart-bar",
"url": "charts-chartjs.html"
},
{
"name": "Leaflet Maps",
"icon": "ti-map-pin",
"url": "maps-leaflet.html"
}
],
"files": [
{
"name": "Class Attendance",
"subtitle": "By Tommy Shelby",
"src": "img/icons/misc/search-xls.png",
"meta": "17kb",
"url": "javascript:;"
},
{
"name": "Passport Image",
"subtitle": "By William Budd",
"src": "img/icons/misc/search-jpg.png",
"meta": "35kb",
"url": "app-file-manager.html"
},
{
"name": "Class Notes",
"subtitle": "By Laurel Lance",
"src": "img/icons/misc/search-doc.png",
"meta": "153kb",
"url": "app-file-manager.html"
},
{
"name": "Receipt",
"subtitle": "By Donnie Darko",
"src": "img/icons/misc/search-jpg.png",
"meta": "25kb",
"url": "app-file-manager.html"
},
{
"name": "Social Guide",
"subtitle": "By Ryan Middleton",
"src": "img/icons/misc/search-doc.png",
"meta": "39kb",
"url": "app-file-manager.html"
},
{
"name": "Expenses",
"subtitle": "By Slade Wilson",
"src": "img/icons/misc/search-xls.png",
"meta": "15kb",
"url": "app-file-manager.html"
},
{
"name": "Documentation",
"subtitle": "By Walter White",
"src": "img/icons/misc/search-doc.png",
"meta": "200kb",
"url": "app-file-manager.html"
},
{
"name": "Avatar",
"subtitle": "By Ross Geller",
"src": "img/icons/misc/search-jpg.png",
"meta": "100kb",
"url": "app-file-manager.html"
},
{
"name": "Data",
"subtitle": "By Erik Foreman",
"src": "img/icons/misc/search-xls.png",
"meta": "5kb",
"url": "app-file-manager.html"
},
{
"name": "Gardening Guide",
"subtitle": "By Jerry Seinfeld",
"src": "img/icons/misc/search-doc.png",
"meta": "25kb",
"url": "app-file-manager.html"
}
],
"members": [
{
"name": "John Doe",
"subtitle": "Admin",
"src": "img/avatars/1.png",
"url": "app-user-view-account.html"
},
{
"name": "Micheal Clarke",
"subtitle": "Customer",
"src": "img/avatars/2.png",
"url": "app-user-view-account.html"
},
{
"name": "Melina Gibson",
"subtitle": "Staff",
"src": "img/avatars/5.png",
"url": "app-user-view-account.html"
},
{
"name": "Anna Strong",
"subtitle": "Staff",
"src": "img/avatars/7.png",
"url": "app-user-view-account.html"
},
{
"name": "Stephanie Gould",
"subtitle": "Customer",
"src": "img/avatars/3.png",
"url": "app-user-view-account.html"
},
{
"name": "David Budd",
"subtitle": "Admin",
"src": "img/avatars/10.png",
"url": "app-user-view-account.html"
},
{
"name": "Mark Shepiro",
"subtitle": "Admin",
"src": "img/avatars/12.png",
"url": "app-user-view-account.html"
}
]
}

View File

@ -1,740 +0,0 @@
{
"pages": [
{
"name": "Dashboard Analytics",
"icon": "ti-smart-home",
"url": "index.html"
},
{
"name": "Dashboard CRM",
"icon": "ti-smart-home",
"url": "dashboards-crm.html"
},
{
"name": "Dashboard eCommerce",
"icon": "ti-smart-home",
"url": "dashboards-ecommerce.html"
},
{
"name": "Layout Collapsed menu",
"icon": "ti-layout-sidebar",
"url": "layouts-collapsed-menu.html"
},
{
"name": "Layout Content navbar",
"icon": "ti-layout-sidebar",
"url": "layouts-content-navbar.html"
},
{
"name": "Layout Content nav + Sidebar",
"icon": "ti-layout-sidebar",
"url": "layouts-content-navbar-with-sidebar.html"
},
{
"name": "Layout Without menu",
"icon": "ti-layout-sidebar",
"url": "layouts-without-menu.html"
},
{
"name": "Layout Without navbar",
"icon": "ti-layout-sidebar",
"url": "layouts-without-navbar.html"
},
{
"name": "Layout Fluid",
"icon": "ti-layout-sidebar",
"url": "layouts-fluid.html"
},
{
"name": "Layout Container",
"icon": "ti-layout-sidebar",
"url": "layouts-container.html"
},
{
"name": "Layout Blank",
"icon": "ti-layout-sidebar",
"url": "layouts-blank.html"
},
{
"name": "Email",
"icon": "ti-mail",
"url": "app-email.html"
},
{
"name": "Chat",
"icon": "ti-messages",
"url": "app-chat.html"
},
{
"name": "Calendar",
"icon": "ti-calendar",
"url": "app-calendar.html"
},
{
"name": "Kanban",
"icon": "ti-layout-kanban",
"url": "app-kanban.html"
},
{
"name": "User List",
"icon": "ti-list-numbers",
"url": "app-user-list.html"
},
{
"name": "User View - Account",
"icon": "ti-user",
"url": "app-user-view-account.html"
},
{
"name": "User View - Security",
"icon": "ti-shield-chevron",
"url": "app-user-view-security.html"
},
{
"name": "User View - Billing & Plans",
"icon": "ti-file-text",
"url": "app-user-view-billing.html"
},
{
"name": "User View - Notifications",
"icon": "ti-notification",
"url": "app-user-view-notifications.html"
},
{
"name": "User View - Connections",
"icon": "ti-brand-google",
"url": "app-user-view-connections.html"
},
{
"name": "Roles",
"icon": "ti-shield-checkered",
"url": "app-access-roles.html"
},
{
"name": "Permission",
"icon": "ti-ban",
"url": "app-access-permission.html"
},
{
"name": "Invoice List",
"icon": "ti-list-numbers",
"url": "app-invoice-list.html"
},
{
"name": "Invoice Preview",
"icon": "ti-file-text",
"url": "app-invoice-preview.html"
},
{
"name": "Invoice Edit",
"icon": "ti-pencil",
"url": "app-invoice-edit.html"
},
{
"name": "Invoice Add",
"icon": "ti-user-plus",
"url": "app-invoice-add.html"
},
{
"name": "User Profile",
"icon": "ti-user-circle",
"url": "pages-profile-user.html"
},
{
"name": "User Profile - Teams",
"icon": "ti-users",
"url": "pages-profile-teams.html"
},
{
"name": "User Profile - Projects",
"icon": "ti-layout-grid",
"url": "pages-profile-projects.html"
},
{
"name": "User Profile - Connections",
"icon": "ti-link",
"url": "pages-profile-connections.html"
},
{
"name": "Account Settings - Account",
"icon": "ti-user",
"url": "pages-account-settings-account.html"
},
{
"name": "Account Settings - Security",
"icon": "ti-shield-chevron",
"url": "pages-account-settings-security.html"
},
{
"name": "Account Settings - Billing & Plans",
"icon": "ti-file-text",
"url": "pages-account-settings-billing.html"
},
{
"name": "Account Settings - Notifications",
"icon": "ti-notification",
"url": "pages-account-settings-notifications.html"
},
{
"name": "Account Settings - Connections",
"icon": "ti-link",
"url": "pages-account-settings-connections.html"
},
{
"name": "FAQ",
"icon": "ti-help",
"url": "pages-faq.html"
},
{
"name": "Help Center Landing",
"icon": "ti-lifebuoy",
"url": "pages-help-center-landing.html"
},
{
"name": "Help Center Categories",
"icon": "ti-lifebuoy",
"url": "pages-help-center-categories.html"
},
{
"name": "Help Center Article",
"icon": "ti-lifebuoy",
"url": "pages-help-center-article.html"
},
{
"name": "Pricing",
"icon": "ti-diamond",
"url": "pages-pricing.html"
},
{
"name": "Error",
"icon": "ti-alert-circle",
"url": "pages-misc-error.html"
},
{
"name": "Under Maintenance",
"icon": "ti-barrier-block",
"url": "pages-misc-under-maintenance.html"
},
{
"name": "Coming Soon",
"icon": "ti-clock",
"url": "pages-misc-comingsoon.html"
},
{
"name": "Not Authorized",
"icon": "ti-user-x",
"url": "pages-misc-not-authorized.html"
},
{
"name": "Login Basic",
"icon": "ti-login",
"url": "auth-login-basic.html"
},
{
"name": "Login Cover",
"icon": "ti-login",
"url": "auth-login-cover.html"
},
{
"name": "Register Basic",
"icon": "ti-user-plus",
"url": "auth-register-basic.html"
},
{
"name": "Register Cover",
"icon": "ti-user-plus",
"url": "auth-register-cover.html"
},
{
"name": "Register Multi-steps",
"icon": "ti-user-plus",
"url": "auth-register-multisteps.html"
},
{
"name": "Verify Email Basic",
"icon": "ti-mail",
"url": "auth-verify-email-basic.html"
},
{
"name": "Verify Email Cover",
"icon": "ti-mail",
"url": "auth-verify-email-cover.html"
},
{
"name": "Reset Password Basic",
"icon": "ti-help",
"url": "auth-reset-password-basic.html"
},
{
"name": "Reset Password Cover",
"icon": "ti-help",
"url": "auth-reset-password-cover.html"
},
{
"name": "Forgot Password Basic",
"icon": "ti-question-mark",
"url": "auth-forgot-password-basic.html"
},
{
"name": "Forgot Password Cover",
"icon": "ti-question-mark",
"url": "auth-forgot-password-cover.html"
},
{
"name": "Two Steps Verification Basic",
"icon": "ti-question-mark",
"url": "auth-two-steps-basic.html"
},
{
"name": "Two Steps Verification Cover",
"icon": "ti-question-mark",
"url": "auth-two-steps-cover.html"
},
{
"name": "Modal Examples",
"icon": "ti-square",
"url": "modal-examples.html"
},
{
"name": "Checkout Wizard",
"icon": "ti-shopping-cart",
"url": "wizard-ex-checkout.html"
},
{
"name": "Property Listing Wizard",
"icon": "ti-building-cottage",
"url": "wizard-ex-property-listing.html"
},
{
"name": "Create Deal Wizard",
"icon": "ti-gift",
"url": "wizard-ex-create-deal.html"
},
{
"name": "Tabler",
"icon": "ti-pencil",
"url": "icons-tabler.html"
},
{
"name": "Font Awesome",
"icon": "ti-typography",
"url": "icons-font-awesome.html"
},
{
"name": "Basic Cards",
"icon": "ti-credit-card",
"url": "cards-basic.html"
},
{
"name": "Advance Cards",
"icon": "ti-id",
"url": "cards-advance.html"
},
{
"name": "Statistics Cards",
"icon": "ti-chart-bar",
"url": "cards-statistics.html"
},
{
"name": "Analytics Cards",
"icon": "ti-chart-bar",
"url": "cards-analytics.html"
},
{
"name": "Actions Cards",
"icon": "ti-mouse-2",
"url": "cards-actions.html"
},
{
"name": "Accordion",
"icon": "ti-arrows-maximize",
"url": "ui-accordion.html"
},
{
"name": "Alerts",
"icon": "ti-alert-triangle",
"url": "ui-alerts.html"
},
{
"name": "Badges",
"icon": "ti-badge",
"url": "ui-badges.html"
},
{
"name": "Buttons",
"icon": "ti-circle-plus",
"url": "ui-buttons.html"
},
{
"name": "Carousel",
"icon": "ti-photo",
"url": "ui-carousel.html"
},
{
"name": "Collapse",
"icon": "ti-arrows-minimize",
"url": "ui-collapse.html"
},
{
"name": "Dropdowns",
"icon": "ti-arrow-autofit-height",
"url": "ui-dropdowns.html"
},
{
"name": "Footer",
"icon": "ti-layout-bottombar",
"url": "ui-footer.html"
},
{
"name": "List Groups",
"icon": "ti-list-numbers",
"url": "ui-list-groups.html"
},
{
"name": "Modals",
"icon": "ti-layout",
"url": "ui-modals.html"
},
{
"name": "Navbar",
"icon": "ti-layout-navbar",
"url": "ui-navbar.html"
},
{
"name": "Offcanvas",
"icon": "ti-layout",
"url": "ui-offcanvas.html"
},
{
"name": "Pagination & Breadcrumbs",
"icon": "ti-chevrons-right",
"url": "ui-pagination-breadcrumbs.html"
},
{
"name": "Progress",
"icon": "ti-adjustments-horizontal",
"url": "ui-progress.html"
},
{
"name": "Spinners",
"icon": "ti-loader-2",
"url": "ui-spinners.html"
},
{
"name": "Tabs & Pills",
"icon": "ti-server-2",
"url": "ui-tabs-pills.html"
},
{
"name": "Toasts",
"icon": "ti-box-model",
"url": "ui-toasts.html"
},
{
"name": "Tooltips & Popovers",
"icon": "ti-message-2",
"url": "ui-tooltips-popovers.html"
},
{
"name": "Typography",
"icon": "ti-typography",
"url": "ui-typography.html"
},
{
"name": "Avatar",
"icon": "ti-user-circle",
"url": "extended-ui-avatar.html"
},
{
"name": "BlockUI",
"icon": "ti-window-maximize",
"url": "extended-ui-blockui.html"
},
{
"name": "Drag & Drop",
"icon": "ti-drag-drop",
"url": "extended-ui-drag-and-drop.html"
},
{
"name": "Media Player",
"icon": "ti-music",
"url": "extended-ui-media-player.html"
},
{
"name": "Perfect Scrollbar",
"icon": "ti-arrows-move-vertical",
"url": "extended-ui-perfect-scrollbar.html"
},
{
"name": "Star Ratings",
"icon": "ti-star",
"url": "extended-ui-star-ratings.html"
},
{
"name": "SweetAlert2",
"icon": "ti-alert-triangle",
"url": "extended-ui-sweetalert2.html"
},
{
"name": "Text Divider",
"icon": "ti-separator-horizontal",
"url": "extended-ui-text-divider.html"
},
{
"name": "Timeline Basic",
"icon": "ti-arrows-horizontal",
"url": "extended-ui-timeline-basic.html"
},
{
"name": "Timeline Fullscreen",
"icon": "ti-arrows-horizontal",
"url": "extended-ui-timeline-fullscreen.html"
},
{
"name": "Tour",
"icon": "ti-brand-telegram",
"url": "extended-ui-tour.html"
},
{
"name": "Treeview",
"icon": "ti-git-fork rotate-180",
"url": "extended-ui-treeview.html"
},
{
"name": "Miscellaneous",
"icon": "ti-sitemap",
"url": "extended-ui-misc.html"
},
{
"name": "Basic Inputs",
"icon": "ti-cursor-text",
"url": "forms-basic-inputs.html"
},
{
"name": "Input groups",
"icon": "ti-arrow-autofit-content",
"url": "forms-input-groups.html"
},
{
"name": "Custom Options",
"icon": "ti-circle",
"url": "forms-custom-options.html"
},
{
"name": "Editors",
"icon": "ti-text-resize",
"url": "forms-editors.html"
},
{
"name": "File Upload",
"icon": "ti-file-upload",
"url": "forms-file-upload.html"
},
{
"name": "Pickers",
"icon": "ti-edit-circle",
"url": "forms-pickers.html"
},
{
"name": "Select & Tags",
"icon": "ti-select",
"url": "forms-selects.html"
},
{
"name": "Sliders",
"icon": "ti-adjustments-alt rotate-90",
"url": "forms-sliders.html"
},
{
"name": "Switches",
"icon": "ti-toggle-right",
"url": "forms-switches.html"
},
{
"name": "Extras",
"icon": "ti-circle-plus",
"url": "forms-extras.html"
},
{
"name": "Vertical Form",
"icon": "ti-file-text",
"url": "form-layouts-vertical.html"
},
{
"name": "Horizontal Form",
"icon": "ti-file-text",
"url": "form-layouts-horizontal.html"
},
{
"name": "Sticky Actions",
"icon": "ti-file-text",
"url": "form-layouts-sticky.html"
},
{
"name": "Numbered Wizard",
"icon": "ti-text-wrap-disabled",
"url": "form-wizard-numbered.html"
},
{
"name": "Icons Wizard",
"icon": "ti-text-wrap-disabled",
"url": "form-wizard-icons.html"
},
{
"name": "Form Validation",
"icon": "ti-checkbox",
"url": "form-validation.html"
},
{
"name": "Tables",
"icon": "ti-table",
"url": "tables-basic.html"
},
{
"name": "Datatable Basic",
"icon": "ti-layout-grid",
"url": "tables-datatables-basic.html"
},
{
"name": "Datatable Advanced",
"icon": "ti-layout-grid",
"url": "tables-datatables-advanced.html"
},
{
"name": "Datatable Extensions",
"icon": "ti-layout-grid",
"url": "tables-datatables-extensions.html"
},
{
"name": "Apex Charts",
"icon": "ti-chart-line",
"url": "charts-apex.html"
},
{
"name": "ChartJS",
"icon": "ti-chart-bar",
"url": "charts-chartjs.html"
},
{
"name": "Leaflet Maps",
"icon": "ti-map-pin",
"url": "maps-leaflet.html"
}
],
"files": [
{
"name": "Class Attendance",
"subtitle": "By Tommy Shelby",
"src": "img/icons/misc/search-xls.png",
"meta": "17kb",
"url": "app-file-manager.html"
},
{
"name": "Passport Image",
"subtitle": "By William Budd",
"src": "img/icons/misc/search-jpg.png",
"meta": "35kb",
"url": "app-file-manager.html"
},
{
"name": "Class Notes",
"subtitle": "By Laurel Lance",
"src": "img/icons/misc/search-doc.png",
"meta": "153kb",
"url": "app-file-manager.html"
},
{
"name": "Receipt",
"subtitle": "By Donnie Darko",
"src": "img/icons/misc/search-jpg.png",
"meta": "25kb",
"url": "app-file-manager.html"
},
{
"name": "Social Guide",
"subtitle": "By Ryan Middleton",
"src": "img/icons/misc/search-doc.png",
"meta": "39kb",
"url": "app-file-manager.html"
},
{
"name": "Expenses",
"subtitle": "By Slade Wilson",
"src": "img/icons/misc/search-xls.png",
"meta": "15kb",
"url": "app-file-manager.html"
},
{
"name": "Documentation",
"subtitle": "By Walter White",
"src": "img/icons/misc/search-doc.png",
"meta": "200kb",
"url": "app-file-manager.html"
},
{
"name": "Avatar",
"subtitle": "By Ross Geller",
"src": "img/icons/misc/search-jpg.png",
"meta": "100kb",
"url": "app-file-manager.html"
},
{
"name": "Data",
"subtitle": "By Erik Foreman",
"src": "img/icons/misc/search-xls.png",
"meta": "5kb",
"url": "app-file-manager.html"
},
{
"name": "Gardening Guide",
"subtitle": "By Jerry Seinfeld",
"src": "img/icons/misc/search-doc.png",
"meta": "25kb",
"url": "app-file-manager.html"
}
],
"members": [
{
"name": "John Doe",
"subtitle": "Admin",
"src": "img/avatars/1.png",
"url": "app-user-view-account.html"
},
{
"name": "Micheal Clarke",
"subtitle": "Customer",
"src": "img/avatars/2.png",
"url": "app-user-view-account.html"
},
{
"name": "Melina Gibson",
"subtitle": "Staff",
"src": "img/avatars/5.png",
"url": "app-user-view-account.html"
},
{
"name": "Anna Strong",
"subtitle": "Staff",
"src": "img/avatars/7.png",
"url": "app-user-view-account.html"
},
{
"name": "Stephanie Gould",
"subtitle": "Customer",
"src": "img/avatars/3.png",
"url": "app-user-view-account.html"
},
{
"name": "David Budd",
"subtitle": "Admin",
"src": "img/avatars/10.png",
"url": "app-user-view-account.html"
},
{
"name": "Mark Shepiro",
"subtitle": "Admin",
"src": "img/avatars/12.png",
"url": "app-user-view-account.html"
}
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,452 +0,0 @@
[
{
"year": "1961",
"value": "West Side Story",
"tokens": [
"West",
"Side",
"Story"
]
},
{
"year": "1962",
"value": "Lawrence of Arabia",
"tokens": [
"Lawrence",
"of",
"Arabia"
]
},
{
"year": "1963",
"value": "Tom Jones",
"tokens": [
"Tom",
"Jones"
]
},
{
"year": "1964",
"value": "My Fair Lady",
"tokens": [
"My",
"Fair",
"Lady"
]
},
{
"year": "1965",
"value": "The Sound of Music",
"tokens": [
"The",
"Sound",
"of",
"Music"
]
},
{
"year": "1966",
"value": "A Man for All Seasons",
"tokens": [
"A",
"Man",
"for",
"All",
"Seasons"
]
},
{
"year": "1967",
"value": "In the Heat of the Night",
"tokens": [
"In",
"the",
"Heat",
"of",
"the",
"Night"
]
},
{
"year": "1968",
"value": "Oliver!",
"tokens": [
"Oliver!"
]
},
{
"year": "1969",
"value": "Midnight Cowboy",
"tokens": [
"Midnight",
"Cowboy"
]
},
{
"year": "1970",
"value": "Patton",
"tokens": [
"Patton"
]
},
{
"year": "1971",
"value": "The French Connection",
"tokens": [
"The",
"French",
"Connection"
]
},
{
"year": "1972",
"value": "The Godfather",
"tokens": [
"The",
"Godfather"
]
},
{
"year": "1973",
"value": "The Sting",
"tokens": [
"The",
"Sting"
]
},
{
"year": "1974",
"value": "The Godfather Part II",
"tokens": [
"The",
"Godfather",
"Part",
"II"
]
},
{
"year": "1975",
"value": "One Flew over the Cuckoo's Nest",
"tokens": [
"One",
"Flew",
"over",
"the",
"Cuckoo's",
"Nest"
]
},
{
"year": "1976",
"value": "Rocky",
"tokens": [
"Rocky"
]
},
{
"year": "1977",
"value": "Annie Hall",
"tokens": [
"Annie",
"Hall"
]
},
{
"year": "1978",
"value": "The Deer Hunter",
"tokens": [
"The",
"Deer",
"Hunter"
]
},
{
"year": "1979",
"value": "Kramer vs. Kramer",
"tokens": [
"Kramer",
"vs.",
"Kramer"
]
},
{
"year": "1980",
"value": "Ordinary People",
"tokens": [
"Ordinary",
"People"
]
},
{
"year": "1981",
"value": "Chariots of Fire",
"tokens": [
"Chariots",
"of",
"Fire"
]
},
{
"year": "1982",
"value": "Gandhi",
"tokens": [
"Gandhi"
]
},
{
"year": "1983",
"value": "Terms of Endearment",
"tokens": [
"Terms",
"of",
"Endearment"
]
},
{
"year": "1984",
"value": "Amadeus",
"tokens": [
"Amadeus"
]
},
{
"year": "1985",
"value": "Out of Africa",
"tokens": [
"Out",
"of",
"Africa"
]
},
{
"year": "1986",
"value": "Platoon",
"tokens": [
"Platoon"
]
},
{
"year": "1987",
"value": "The Last Emperor",
"tokens": [
"The",
"Last",
"Emperor"
]
},
{
"year": "1988",
"value": "Rain Man",
"tokens": [
"Rain",
"Man"
]
},
{
"year": "1989",
"value": "Driving Miss Daisy",
"tokens": [
"Driving",
"Miss",
"Daisy"
]
},
{
"year": "1990",
"value": "Dances With Wolves",
"tokens": [
"Dances",
"With",
"Wolves"
]
},
{
"year": "1991",
"value": "The Silence of the Lambs",
"tokens": [
"The",
"Silence",
"of",
"the",
"Lambs"
]
},
{
"year": "1992",
"value": "Unforgiven",
"tokens": [
"Unforgiven"
]
},
{
"year": "1993",
"value": "Schindlers List",
"tokens": [
"Schindlers",
"List"
]
},
{
"year": "1994",
"value": "Forrest Gump",
"tokens": [
"Forrest",
"Gump"
]
},
{
"year": "1995",
"value": "Braveheart",
"tokens": [
"Braveheart"
]
},
{
"year": "1996",
"value": "The English Patient",
"tokens": [
"The",
"English",
"Patient"
]
},
{
"year": "1997",
"value": "Titanic",
"tokens": [
"Titanic"
]
},
{
"year": "1998",
"value": "Shakespeare in Love",
"tokens": [
"Shakespeare",
"in",
"Love"
]
},
{
"year": "1999",
"value": "American Beauty",
"tokens": [
"American",
"Beauty"
]
},
{
"year": "2000",
"value": "Gladiator",
"tokens": [
"Gladiator"
]
},
{
"year": "2001",
"value": "A Beautiful Mind",
"tokens": [
"A",
"Beautiful",
"Mind"
]
},
{
"year": "2002",
"value": "Chicago",
"tokens": [
"Chicago"
]
},
{
"year": "2003",
"value": "The Lord of the Rings: The Return of the King",
"tokens": [
"The",
"Lord",
"of",
"the",
"Rings:",
"The",
"Return",
"of",
"the",
"King"
]
},
{
"year": "2004",
"value": "Million Dollar Baby",
"tokens": [
"Million",
"Dollar",
"Baby"
]
},
{
"year": "2005",
"value": "Crash",
"tokens": [
"Crash"
]
},
{
"year": "2006",
"value": "The Departed",
"tokens": [
"The",
"Departed"
]
},
{
"year": "2007",
"value": "No Country for Old Men",
"tokens": [
"No",
"Country",
"for",
"Old",
"Men"
]
},
{
"year": "2008",
"value": "Slumdog Millionaire",
"tokens": [
"Slumdog",
"Millionaire"
]
},
{
"year": "2009",
"value": "The Hurt Locker",
"tokens": [
"The",
"Hurt",
"Locker"
]
},
{
"year": "2010",
"value": "The King's Speech",
"tokens": [
"The",
"King's",
"Speech"
]
},
{
"year": "2011",
"value": "The Artist",
"tokens": [
"The",
"Artist"
]
},
{
"year": "2012",
"value": "Argo",
"tokens": [
"Argo"
]
}
]

View File

@ -1,52 +0,0 @@
[
"Alabama",
"Alaska",
"Arizona",
"Arkansas",
"California",
"Colorado",
"Connecticut",
"Delaware",
"Florida",
"Georgia",
"Hawaii",
"Idaho",
"Illinois",
"Indiana",
"Iowa",
"Kansas",
"Kentucky",
"Louisiana",
"Maine",
"Maryland",
"Massachusetts",
"Michigan",
"Minnesota",
"Mississippi",
"Missouri",
"Montana",
"Nebraska",
"Nevada",
"New Hampshire",
"New Jersey",
"New Mexico",
"New York",
"North Carolina",
"North Dakota",
"Ohio",
"Oklahoma",
"Oregon",
"Pennsylvania",
"Rhode Island",
"South Carolina",
"South Dakota",
"Tennessee",
"Texas",
"Utah",
"Vermont",
"Virginia",
"Washington",
"West Virginia",
"Wisconsin",
"Wyoming"
]

View File

@ -1,554 +0,0 @@
{
"data": [
{
"id": 1,
"full_name": "Galen Slixby",
"role": "Editor",
"username": "gslixby0",
"email": "gslixby0@abc.net.au",
"current_plan": "Enterprise",
"billing": "Manual - Credit Card",
"status": 3,
"avatar": ""
},
{
"id": 2,
"full_name": "Halsey Redmore",
"role": "Author",
"username": "hredmore1",
"email": "hredmore1@imgur.com",
"current_plan": "Team",
"billing": "Manual - Paypal",
"status": 1,
"avatar": "10.png"
},
{
"id": 3,
"full_name": "Marjory Sicely",
"role": "Maintainer",
"username": "msicely2",
"email": "msicely2@who.int",
"current_plan": "Enterprise",
"billing": "Auto Debit",
"status": 2,
"avatar": "1.png"
},
{
"id": 4,
"full_name": "Cyrill Risby",
"role": "Maintainer",
"username": "crisby3",
"email": "crisby3@wordpress.com",
"current_plan": "Team",
"billing": "Manual - Credit Card",
"status": 3,
"avatar": "9.png"
},
{
"id": 5,
"full_name": "Maggy Hurran",
"role": "Subscriber",
"username": "mhurran4",
"email": "mhurran4@yahoo.co.jp",
"current_plan": "Enterprise",
"billing": "Auto Debit",
"status": 1,
"avatar": "10.png"
},
{
"id": 6,
"full_name": "Silvain Halstead",
"role": "Author",
"username": "shalstead5",
"email": "shalstead5@shinystat.com",
"current_plan": "Company",
"billing": "Auto Debit",
"status": 2,
"avatar": ""
},
{
"id": 7,
"full_name": "Breena Gallemore",
"role": "Subscriber",
"username": "bgallemore6",
"email": "bgallemore6@boston.com",
"current_plan": "Company",
"billing": "Manual - Paypal",
"status": 1,
"avatar": ""
},
{
"id": 8,
"full_name": "Kathryne Liger",
"role": "Author",
"username": "kliger7",
"email": "kliger7@vinaora.com",
"current_plan": "Enterprise",
"billing": "Manual - Cash",
"status": 1,
"avatar": "9.png"
},
{
"id": 9,
"full_name": "Franz Scotfurth",
"role": "Subscriber",
"username": "fscotfurth8",
"email": "fscotfurth8@dailymotion.com",
"current_plan": "Team",
"billing": "Auto Debit",
"status": 1,
"avatar": "2.png"
},
{
"id": 10,
"full_name": "Jillene Bellany",
"role": "Maintainer",
"username": "jbellany9",
"email": "jbellany9@kickstarter.com",
"current_plan": "Company",
"billing": "Auto Debit",
"status": 3,
"avatar": "9.png"
},
{
"id": 11,
"full_name": "Jonah Wharlton",
"role": "Subscriber",
"username": "jwharltona",
"email": "jwharltona@oakley.com",
"current_plan": "Team",
"billing": "Manual - Paypal",
"status": 3,
"avatar": "4.png"
},
{
"id": 12,
"full_name": "Seth Hallam",
"role": "Subscriber",
"username": "shallamb",
"email": "shallamb@hugedomains.com",
"current_plan": "Team",
"billing": "Manual - Credit Card",
"status": 1,
"avatar": "5.png"
},
{
"id": 13,
"full_name": "Yoko Pottie",
"role": "Subscriber",
"username": "ypottiec",
"email": "ypottiec@privacy.gov.au",
"current_plan": "Basic",
"billing": "Auto Debit",
"status": 3,
"avatar": "7.png"
},
{
"id": 14,
"full_name": "Maximilianus Krause",
"role": "Author",
"username": "mkraused",
"email": "mkraused@stanford.edu",
"current_plan": "Team",
"billing": "Auto Debit",
"status": 2,
"avatar": "9.png"
},
{
"id": 15,
"full_name": "Zsazsa McCleverty",
"role": "Maintainer",
"username": "zmcclevertye",
"email": "zmcclevertye@soundcloud.com",
"current_plan": "Enterprise",
"billing": "Auto Debit",
"status": 2,
"avatar": "2.png"
},
{
"id": 16,
"full_name": "Bentlee Emblin",
"role": "Author",
"username": "bemblinf",
"email": "bemblinf@wired.com",
"current_plan": "Company",
"billing": "Auto Debit",
"status": 2,
"avatar": "6.png"
},
{
"id": 17,
"full_name": "Brockie Myles",
"role": "Maintainer",
"username": "bmylesg",
"email": "bmylesg@amazon.com",
"current_plan": "Basic",
"billing": "Manual - Paypal",
"status": 2,
"avatar": ""
},
{
"id": 18,
"full_name": "Bertha Biner",
"role": "Editor",
"username": "bbinerh",
"email": "bbinerh@mozilla.com",
"current_plan": "Team",
"billing": "Manual - Cash",
"status": 2,
"avatar": "7.png"
},
{
"id": 19,
"full_name": "Travus Bruntjen",
"role": "Admin",
"username": "tbruntjeni",
"email": "tbruntjeni@sitemeter.com",
"current_plan": "Enterprise",
"billing": "Manual - Cash",
"status": 2,
"avatar": ""
},
{
"id": 20,
"full_name": "Wesley Burland",
"role": "Editor",
"username": "wburlandj",
"email": "wburlandj@uiuc.edu",
"current_plan": "Team",
"billing": "Auto Debit",
"status": 3,
"avatar": "6.png"
},
{
"id": 21,
"full_name": "Stu Delamaine",
"role": "Author",
"username": "sdelamainek",
"email": "sdelamainek@who.int",
"current_plan": "Basic",
"billing": "Auto Debit",
"status": 1,
"avatar": "1.png"
},
{
"id": 22,
"full_name": "Jameson Lyster",
"role": "Editor",
"username": "jlysterl",
"email": "jlysterl@guardian.co.uk",
"current_plan": "Company",
"billing": "Auto Debit",
"status": 3,
"avatar": "8.png"
},
{
"id": 23,
"full_name": "Kare Skitterel",
"role": "Maintainer",
"username": "kskitterelm",
"email": "kskitterelm@washingtonpost.com",
"current_plan": "Basic",
"billing": "Manual - Paypal",
"status": 1,
"avatar": "3.png"
},
{
"id": 24,
"full_name": "Cleavland Hatherleigh",
"role": "Admin",
"username": "chatherleighn",
"email": "chatherleighn@washington.edu",
"current_plan": "Team",
"billing": "Manual - Paypal",
"status": 1,
"avatar": "2.png"
},
{
"id": 25,
"full_name": "Adeline Micco",
"role": "Admin",
"username": "amiccoo",
"email": "amiccoo@whitehouse.gov",
"current_plan": "Enterprise",
"billing": "Manual - Credit Card",
"status": 1,
"avatar": ""
},
{
"id": 26,
"full_name": "Hugh Hasson",
"role": "Admin",
"username": "hhassonp",
"email": "hhassonp@bizjournals.com",
"current_plan": "Basic",
"billing": "Manual - Cash",
"status": 3,
"avatar": "4.png"
},
{
"id": 27,
"full_name": "Germain Jacombs",
"role": "Editor",
"username": "gjacombsq",
"email": "gjacombsq@jigsy.com",
"current_plan": "Enterprise",
"billing": "Manual - Cash",
"status": 2,
"avatar": "10.png"
},
{
"id": 28,
"full_name": "Bree Kilday",
"role": "Maintainer",
"username": "bkildayr",
"email": "bkildayr@mashable.com",
"current_plan": "Team",
"billing": "Manual - Credit Card",
"status": 2,
"avatar": ""
},
{
"id": 29,
"full_name": "Candice Pinyon",
"role": "Maintainer",
"username": "cpinyons",
"email": "cpinyons@behance.net",
"current_plan": "Team",
"billing": "Auto Debit",
"status": 2,
"avatar": "7.png"
},
{
"id": 30,
"full_name": "Isabel Mallindine",
"role": "Subscriber",
"username": "imallindinet",
"email": "imallindinet@shinystat.com",
"current_plan": "Team",
"billing": "Manual - Credit Card",
"status": 1,
"avatar": ""
},
{
"id": 31,
"full_name": "Gwendolyn Meineken",
"role": "Admin",
"username": "gmeinekenu",
"email": "gmeinekenu@hc360.com",
"current_plan": "Basic",
"billing": "Manual - Cash",
"status": 1,
"avatar": "1.png"
},
{
"id": 32,
"full_name": "Rafaellle Snowball",
"role": "Editor",
"username": "rsnowballv",
"email": "rsnowballv@indiegogo.com",
"current_plan": "Basic",
"billing": "Manual - Paypal",
"status": 1,
"avatar": "5.png"
},
{
"id": 33,
"full_name": "Rochette Emer",
"role": "Admin",
"username": "remerw",
"email": "remerw@blogtalkradio.com",
"current_plan": "Basic",
"billing": "Auto Debit",
"status": 2,
"avatar": "8.png"
},
{
"id": 34,
"full_name": "Ophelie Fibbens",
"role": "Subscriber",
"username": "ofibbensx",
"email": "ofibbensx@booking.com",
"current_plan": "Company",
"billing": "Manual - Cash",
"status": 2,
"avatar": "4.png"
},
{
"id": 35,
"full_name": "Stephen MacGilfoyle",
"role": "Maintainer",
"username": "smacgilfoyley",
"email": "smacgilfoyley@bigcartel.com",
"current_plan": "Company",
"billing": "Manual - Paypal",
"status": 1,
"avatar": ""
},
{
"id": 36,
"full_name": "Bradan Rosebotham",
"role": "Subscriber",
"username": "brosebothamz",
"email": "brosebothamz@tripadvisor.com",
"current_plan": "Team",
"billing": "Manual - Paypal",
"status": 3,
"avatar": ""
},
{
"id": 37,
"full_name": "Skip Hebblethwaite",
"role": "Admin",
"username": "shebblethwaite10",
"email": "shebblethwaite10@arizona.edu",
"current_plan": "Company",
"billing": "Manual - Cash",
"status": 3,
"avatar": "9.png"
},
{
"id": 38,
"full_name": "Moritz Piccard",
"role": "Maintainer",
"username": "mpiccard11",
"email": "mpiccard11@vimeo.com",
"current_plan": "Enterprise",
"billing": "Manual - Credit Card",
"status": 3,
"avatar": "1.png"
},
{
"id": 39,
"full_name": "Tyne Widmore",
"role": "Subscriber",
"username": "twidmore12",
"email": "twidmore12@bravesites.com",
"current_plan": "Team",
"billing": "Manual - Cash",
"status": 1,
"avatar": ""
},
{
"id": 40,
"full_name": "Florenza Desporte",
"role": "Author",
"username": "fdesporte13",
"email": "fdesporte13@omniture.com",
"current_plan": "Company",
"billing": "Manual - Cash",
"status": 2,
"avatar": "6.png"
},
{
"id": 41,
"full_name": "Edwina Baldetti",
"role": "Maintainer",
"username": "ebaldetti14",
"email": "ebaldetti14@theguardian.com",
"current_plan": "Team",
"billing": "Manual - Credit Card",
"status": 1,
"avatar": ""
},
{
"id": 42,
"full_name": "Benedetto Rossiter",
"role": "Editor",
"username": "brossiter15",
"email": "brossiter15@craigslist.org",
"current_plan": "Team",
"billing": "Manual - Cash",
"status": 3,
"avatar": ""
},
{
"id": 43,
"full_name": "Micaela McNirlan",
"role": "Admin",
"username": "mmcnirlan16",
"email": "mmcnirlan16@hc360.com",
"current_plan": "Basic",
"billing": "Manual - Credit Card",
"status": 3,
"avatar": ""
},
{
"id": 44,
"full_name": "Vladamir Koschek",
"role": "Author",
"username": "vkoschek17",
"email": "vkoschek17@abc.net.au",
"current_plan": "Team",
"billing": "Manual - Paypal",
"status": 2,
"avatar": ""
},
{
"id": 45,
"full_name": "Corrie Perot",
"role": "Subscriber",
"username": "cperot18",
"email": "cperot18@goo.ne.jp",
"current_plan": "Team",
"billing": "Manual - Paypal",
"status": 1,
"avatar": "3.png"
},
{
"id": 46,
"full_name": "Saunder Offner",
"role": "Maintainer",
"username": "soffner19",
"email": "soffner19@mac.com",
"current_plan": "Enterprise",
"billing": "Auto Debit",
"status": 1,
"avatar": ""
},
{
"id": 47,
"full_name": "Karena Courtliff",
"role": "Admin",
"username": "kcourtliff1a",
"email": "kcourtliff1a@bbc.co.uk",
"current_plan": "Basic",
"billing": "Manual - Paypal",
"status": 2,
"avatar": "1.png"
},
{
"id": 48,
"full_name": "Onfre Wind",
"role": "Admin",
"username": "owind1b",
"email": "owind1b@yandex.ru",
"current_plan": "Basic",
"billing": "Manual - Paypal",
"status": 1,
"avatar": ""
},
{
"id": 49,
"full_name": "Paulie Durber",
"role": "Subscriber",
"username": "pdurber1c",
"email": "pdurber1c@gov.uk",
"current_plan": "Team",
"billing": "Manual - Cash",
"status": 3,
"avatar": ""
},
{
"id": 50,
"full_name": "Beverlie Krabbe",
"role": "Editor",
"username": "bkrabbe1d",
"email": "bkrabbe1d@home.pl",
"current_plan": "Company",
"billing": "Auto Debit",
"status": 2,
"avatar": "9.png"
}
]
}

View File

@ -1,140 +0,0 @@
{
"data": [
{
"id": 1,
"project_img": "xd-label.png",
"project_leader": "Fred",
"project_name": "App Design",
"team": [
"1.png",
"3.png",
"4.png"
],
"date": "09 Feb 2021",
"status": "89%"
},
{
"id": 2,
"project_img": "react-label.png",
"project_leader": "Georgie",
"project_name": "Create Website",
"team": [
"2.png",
"6.png",
"5.png",
"3.png"
],
"date": "20 Mar 2021",
"status": "72%"
},
{
"id": 3,
"project_img": "social-label.png",
"project_leader": "Owen",
"project_name": "Social Banners",
"team": [
"11.png",
"10.png"
],
"date": "03 Jan 2021",
"status": "45%"
},
{
"id": 4,
"project_img": "sketch-label.png",
"project_leader": "Keith",
"project_name": "Logo Designs",
"team": [
"5.png",
"7.png",
"12.png",
"4.png"
],
"date": "12 Aug 2021",
"status": "92%"
},
{
"id": 5,
"project_img": "figma-label.png",
"project_leader": "Harmonia",
"project_name": "Figma Dashboards",
"team": [
"9.png",
"2.png",
"4.png"
],
"date": "08 Apr 2021",
"status": "25%"
},
{
"id": 6,
"project_img": "vue-label.png",
"project_leader": "Genevra",
"project_name": "Admin Template",
"team": [
"11.png",
"13.png",
"7.png",
"6.png"
],
"date": "06 Oct 2021",
"status": "100%"
},
{
"id": 7,
"project_img": "",
"project_leader": "Eileen",
"project_name": "Website SEO",
"team": [
"10.png",
"3.png",
"2.png",
"8.png"
],
"date": "10 May 2021",
"status": "38%"
},
{
"id": 8,
"project_img": "xd-label.png",
"project_leader": "Richardo",
"project_name": "Angular APIs",
"team": [
"4.png",
"13.png",
"10.png",
"3.png"
],
"date": "17 June 2021",
"status": "77%"
},
{
"id": 9,
"project_img": "html-label.png",
"project_leader": "Allyson",
"project_name": "Crypto Admin",
"team": [
"7.png",
"3.png",
"7.png",
"2.png"
],
"date": "29 Sept 2021",
"status": "36%"
},
{
"id": 10,
"project_img": "sketch-label.png",
"project_leader": "Merline",
"project_name": "IOS App Design",
"team": [
"2.png",
"8.png",
"5.png",
"1.png"
],
"date": "19 Apr 2021",
"status": "56%"
}
]
}