PHP Classes

File: aksara/Common.php

Recommend this page to a friend!
  Classes of Aby Dahana   Aksara   aksara/Common.php   Download  
File: aksara/Common.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Aksara
A CodeIgniter based API and CRUD generator
Author: By
Last change: Refine blog category filter and version update
Date: 22 days ago
Size: 7,100 bytes
 

Contents

Class file image Download
<?php

/**
 * This file is part of Aksara CMS, both framework and publishing
 * platform.
 *
 * @author Aby Dahana <abydahana@gmail.com>
 * @copyright (c) Aksara Laboratory <https://aksaracms.com>
 * @license MIT License
 *
 * This source file is subject to the MIT license that is bundled
 * with this source code in the LICENSE.txt file.
 *
 * When the signs is coming, those who don't believe at "that time"
 * have only two choices, commit suicide or become brutal.
 */

if (! function_exists('aksara')) {
   
/**
     * Get Aksara variable
     */
   
function aksara(string $parameter = null)
    {
       
$version = '5.0.5';

        if (
'version' == $parameter) {
            return
$version;
        } elseif (
'build_version' == $parameter) {
            return
$version . \CodeIgniter\CodeIgniter::CI_VERSION;
        } elseif (
'date_modified' == $parameter) {
           
$modified = filemtime(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Laboratory' . DIRECTORY_SEPARATOR . 'Core.php');

            return
date('F d Y H:i:s', $modified);
        }

        return
false;
    }
}

if (!
function_exists('get_setting')) {
   
/**
     * Get setting variable
     */
   
function get_setting(string $parameter = null)
    {
       
$model = new \Aksara\Laboratory\Model();

        if (
$model->field_exists($parameter, 'app__settings')) {
            return
$model->select($parameter)->get_where(
               
'app__settings',
                [
                   
'id' => 1
               
],
               
1
           
)
            ->
row($parameter);
        }

        return
false;
    }
}

if (!
function_exists('get_userdata')) {
   
/**
     * Get user session
     */
   
function get_userdata(string $field = '')
    {
        if (!
service('session')->get($field) && service('session')->get('user_id')) {
           
$model = new \Aksara\Laboratory\Model();
           
$user_id = service('session')->get('user_id');

            if (
$model->field_exists($field, 'app__users_privileges')) {
                return
$model->select($field)->get_where(
                   
'app__users_privileges',
                    [
                       
'user_id' => $user_id
                   
],
                   
1
               
)
                ->
row($field);
            } elseif (
$model->field_exists($field, 'app__users')) {
                return
$model->select(
                   
$field
               
)
                ->
get_where(
                   
'app__users',
                    [
                       
'user_id' => $user_id
                   
],
                   
1
               
)
                ->
row($field);
            }

            return
false;
        }

        return
service('session')->get($field);
    }
}

if (!
function_exists('set_userdata')) {
   
/**
     * Set user data
     *
     * @param mixed|null $value
     */
   
function set_userdata($key = [], $value = null)
    {
        if (!
is_array($key)) {
           
$key = [
               
$key => $value
           
];
        }

        return
service('session')->set($key);
    }
}

if (!
function_exists('unset_userdata')) {
   
/**
     * Unset user data
     */
   
function unset_userdata($key = [])
    {
        return
service('session')->remove($key);
    }
}

if (!
function_exists('phrase')) {
   
/**
     * Get phrase of translation
     */
   
function phrase(string $phrase = null, bool $check = false)
    {
       
// Make sure the phrase and language is valid
       
if (! $phrase || is_numeric($phrase)) {
           
// Otherwise, throwback the null result
           
return false;
        }

       
// Load model
       
$model = new \Aksara\Laboratory\Model();

       
// Transform the phrase into safe-string
       
$phrase = preg_replace('/[^\w\s\p{P}]/', ' ', $phrase);

       
// Remove multiple whitespace
       
$phrase = preg_replace('/\s+/', ' ', $phrase);

       
// Replace sequare braces to parentheses
       
$phrase = str_replace(['[', ']'], ['(', ')'], $phrase);

       
// Get locale by session
       
$language = get_userdata('language');

       
// Check if language session isn't available
       
if (! $language) {
           
$language_id = (get_userdata('language_id') ? get_userdata('language_id') : (get_setting('app_language') > 0 ? get_setting('app_language') : 1));

           
$language = $model->select('
                code
            '
)
            ->
get_where(
               
'app__languages',
                [
                   
'id' => $language_id
               
]
            )
            ->
row('code');
        }

       
$translation_file = WRITEPATH . 'translations' . DIRECTORY_SEPARATOR . $language . '.json';

        if (!
$check && ! file_exists($translation_file)) {
           
// Translation file not exists
           
if (! is_dir(WRITEPATH . 'translations')) {
               
// Translation directory not exists
               
try {
                   
// Try to create directory
                   
mkdir(WRITEPATH . 'translations', 0755, true);

                   
// Put default content to file
                   
file_put_contents($translation_file, json_encode([]));
                } catch(\
Throwable $e) {
                   
// Safe absraction
               
}
            } elseif (
is_writable(WRITEPATH . 'translations')) {
               
// Translation directory is exists
               
try {
                   
// Put content into file
                   
file_put_contents($translation_file, json_encode([]));
                } catch(\
Throwable $e) {
                   
// Safe abstraction
               
}
            }
        }

        try {
           
// Get existing translation
           
$buffer = file_get_contents($translation_file);

           
// Decode json from translation
           
$phrases = (is_json($buffer) ? json_decode($buffer, true) : []);

           
// Check if language property is valid
           
if (! isset($phrases[$phrase])) {
               
// Set new phrase and push into existing
               
$phrases[$phrase] = $phrase;

               
// Sort and humanize the order of phrase
               
ksort($phrases);

               
// Put new phrase into existing language
               
if (file_exists($translation_file) && is_writable($translation_file)) {
                   
file_put_contents($translation_file, json_encode($phrases, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_INVALID_UTF8_SUBSTITUTE | JSON_UNESCAPED_UNICODE));
                }
            }

           
// Sanitize translation from XSS
           
$phrase = preg_replace('/"([^<>]*?)"(?=[^>]*?<)/', '&raquo;\1&laquo', str_replace(['"', '\''], ['&quot;', '&apos;'], $phrases[$phrase]));
        } catch(\
Throwable $e) {
           
// Safe abstraction
       
}

        return
$phrase;
    }
}