PHP Classes

File: includes/functions.php

Recommend this page to a friend!
  Classes of Mark Richards   CliqonV4   includes/functions.php   Download  
File: includes/functions.php
Role: Example script
Content type: text/plain
Description: Example script
Class: CliqonV4
Framework with modules to build Web applications
Author: By
Last change: Added support for Blog

Added support for Blog and other changes
Merge branch 'master' of https://github.com/webcliq/CliqonV4
Date: 5 years ago
Size: 10,030 bytes
 

Contents

Class file image Download
<?php

spl_autoload_register
(function ($class)
{
   
//class directories
   
$dirs = array(
       
'models/',
       
'controllers/',
       
'plugins/',
       
'framework/core/',
       
'framework/app/',
       
'framework/filter/',
       
'framework/template/',
       
'framework/fluentpdo/',
       
'framework/oauth/',
       
'framework/curl/',
       
'framework/utils/'
   
);
  
   
//for each directory
   
foreach($dirs as $dir)
    {
       
//see if the file exsists
       
if(existsFile($dir.$class.'.php'))
        {
           
loadFile($dir.$class.'.php');
            return;
        }
    }
});

function
loadFile($file)
{
    try {
        global
$basedir;
   
$fp = $basedir.$file;
        if(!
is_readable($fp)) {
             throw new
Exception("File does not exist at: ".$fp);
        }
        require_once
$fp;
        return
true;
  } catch(
Exception $e) {
      return
false;
     
Debugger::log($e->getMessage());
  }
}

function
existsFile($file)
{
    try {
    global
$basedir;
       
$fp = $basedir.$file;
        if(!
is_readable($fp)) {
             throw new
Exception("File does not exist at: ".$fp);
        }
        return
true;
    } catch(
Exception $e) {
        return
false;
       
Debugger::log($e->getMessage());
    }
}

/**
* Recursively computes the intersection of arrays using keys for comparison.
*
* @param array $array1 The array with master keys to check.
* @param array $array2 An array to compare keys against.
* @return array associative array containing all the entries of array1 which have keys that are present in array2.
**/
function array_intersect_key_recursive(array $array1, array $array2) {
   
$array1 = array_intersect_key($array1, $array2);
    foreach (
$array1 as $key => &$value) {
        if (
is_array($value) && is_array($array2[$key])) {
           
$value = array_intersect_key_recursive($value, $array2[$key]);
        }
    }
    return
$array1;
}

function
serialize_array_values($arr){
    foreach(
$arr as $key=>$val){
       
sort($val);
       
$arr[$key]=serialize($val);
    }
    return
$arr;
}

function
array_intersect_other(array $array1, array $array2) {
  foreach (
$array1 as $key=>$value){
      if (!
in_array($value,$array2)){
          unset(
$array1[$key]);
      }
  }
  return
$array1;
}

function
array_intersect_value($array1, $array2) {
   
$result = array();
    foreach (
$array1 as $val) {
      if ((
$key = array_search($val, $array2, TRUE))!==false) {
        
$result[] = $val;
         unset(
$array2[$key]);
      }
    }
    return
$result;
}

function
strtobool($val) {
    if(
$val === 'false') {
        return
false;
    } else if(
$val === 'true') {
        return
true;
    } else {
        return
$val;
    }
}

function
array_map_deep($callback, $array) {
   
   
$new = [];
    if(
is_array($array)) {
      foreach (
$array as $key => $val) {
          if (
is_array($val)) {
             
$new[$key] = array_map_deep($callback, $val);
          } else {
             
$new[$key] = call_user_func($callback, $val);
          }
      }
    }
 
    return
$new;
}

function
startsWith($haystack, $needle)
{
    
$length = strlen($needle);
     return (
substr($haystack, 0, $length) === $needle);
}

function
endsWith($haystack, $needle)
{
   
$length = strlen($needle);
    if (
$length == 0) {
        return
true;
    }

    return (
substr($haystack, -$length) === $needle);
}

function
n($n)
{
   
$n = str_replace(',','.',$n);
   
$n = floatval($n);
    return
$n;
}

function
getSum(float $a, float $b)
{
    return
$a + $b;
}


function
object_encode($a) {
    return
json_encode(Q::object_to_array($a), JSON_FORCE_OBJECT);
}

// This will retrieve the "intended" request method. Normally, this is the
// actual method of the request. Sometimes, though, the intended request method
// must be hidden in the parameters of the request. For example, when attempting to
// delete a file using a POST request. In that case, "DELETE" will be sent along with
// the request in a "_method" parameter.
function get_request_method() {
    global
$HTTP_RAW_POST_DATA;

    if(isset(
$HTTP_RAW_POST_DATA)) {
       
parse_str($HTTP_RAW_POST_DATA, $_POST);
    }

    if (isset(
$_POST["_method"]) && $_POST["_method"] != null) {
        return
$_POST["_method"];
    }

    return
$_SERVER["REQUEST_METHOD"];
}


/*
 * Inserts a new key/value before the key in the array.
 *
 * @param $key
 * The key to insert before.
 * @param $array
 * An array to insert in to.
 * @param $new_key
 * The key to insert.
 * @param $new_value
 * An value to insert.
 *
 * @return
 * The new array if the key exists, FALSE otherwise.
 *
 * @see array_insert_after()
 */
function array_insert_before($key, array &$array, $new_key, $new_value) {
  if (
array_key_exists($key, $array)) {
   
$new = array();
    foreach (
$array as $k => $value) {
      if (
$k === $key) {
       
$new[$new_key] = $new_value;
      }
     
$new[$k] = $value;
    }
    return
$new;
  }
  return
FALSE;
}

/*
 * Inserts a new key/value after the key in the array.
 *
 * @param $key
 * The key to insert after.
 * @param $array
 * An array to insert in to.
 * @param $new_key
 * The key to insert.
 * @param $new_value
 * An value to insert.
 *
 * @return
 * The new array if the key exists, FALSE otherwise.
 *
 * @see array_insert_before()
 */
function array_insert_after($key, array &$array, $new_key, $new_value) {
  if (
array_key_exists($key, $array)) {
   
$new = array();
    foreach (
$array as $k => $value) {
     
$new[$k] = $value;
      if (
$k === $key) {
       
$new[$new_key] = $new_value;
      }
    }
    return
$new;
  }
  return
FALSE;
}

function
is_json($string)
{
   
$result = json_decode($string, true);
    switch (
json_last_error()) {
        case
JSON_ERROR_NONE:
           return
$result;
        break;
        case
JSON_ERROR_DEPTH:
        case
JSON_ERROR_STATE_MISMATCH:
        case
JSON_ERROR_CTRL_CHAR:
        case
JSON_ERROR_SYNTAX:
        case
JSON_ERROR_UTF8:
        default:
            return
$string;
        break;
    }
}


// Does not support flag GLOB_BRACE
function glob_recursive($pattern, $flags = 0)
{
 
$files = glob($pattern, $flags);
  foreach (
glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
   
$files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
  }
  return
$files;
}


function
normalize_files_array($files = [])
{
   
$normalized_array = [];
    foreach(
$files as $index => $file) {

        if (!
is_array($file['name'])) {
           
$normalized_array[$index][] = $file;
            continue;
        }

        foreach(
$file['name'] as $idx => $name) {
           
$normalized_array[$index][$idx] = [
               
'name' => $name,
               
'type' => $file['type'][$idx],
               
'tmp_name' => $file['tmp_name'][$idx],
               
'error' => $file['error'][$idx],
               
'size' => $file['size'][$idx]
            ];
        }

    }
    return
$normalized_array;
}

function
is_true($key, $array)
{
  if(
array_key_exists($key, $array) and $array[$key] == 'true') {
    return
true;
  } else if (
array_key_exists($key, $array) and $array[$key] == true) {
    return
true;
  } else {
    return
false;
  }
}

function
is_set($key, $array)
{
  if(
array_key_exists($key, $array) and $array[$key] != "") {
    return
true;
  } else {
    return
false;
  }
}

/**
 * All of the Defines for the classes below.
 * @author S.C. Chen <me578022@gmail.com>
 */
define('HDOM_TYPE_ELEMENT', 1);
define('HDOM_TYPE_COMMENT', 2);
define('HDOM_TYPE_TEXT', 3);
define('HDOM_TYPE_ENDTAG', 4);
define('HDOM_TYPE_ROOT', 5);
define('HDOM_TYPE_UNKNOWN', 6);
define('HDOM_QUOTE_DOUBLE', 0);
define('HDOM_QUOTE_SINGLE', 1);
define('HDOM_QUOTE_NO', 3);
define('HDOM_INFO_BEGIN', 0);
define('HDOM_INFO_END', 1);
define('HDOM_INFO_QUOTE', 2);
define('HDOM_INFO_SPACE', 3);
define('HDOM_INFO_TEXT', 4);
define('HDOM_INFO_INNER', 5);
define('HDOM_INFO_OUTER', 6);
define('HDOM_INFO_ENDSPACE',7);
define('DEFAULT_TARGET_CHARSET', 'UTF-8');
define('DEFAULT_BR_TEXT', "\r\n");
define('DEFAULT_SPAN_TEXT', " ");
define('MAX_FILE_SIZE', 600000);
// helper functions
// -----------------------------------------------------------------------------
// get html dom from file
// $maxlen is defined in the code as PHP_STREAM_COPY_ALL which is defined as -1.
function file_get_html(
   
$url,
   
$use_include_path = false,
   
$context = null,
   
$offset = -1,
   
$maxLen = -1,
   
$lowercase = true,
   
$forceTagsClosed = true,
   
$target_charset = DEFAULT_TARGET_CHARSET,
   
$stripRN = true,
   
$defaultBRText = DEFAULT_BR_TEXT,
   
$defaultSpanText=DEFAULT_SPAN_TEXT
)
{
   
// We DO force the tags to be terminated.
   
$dom = new Htmldom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText);
   
// For sourceforge users: uncomment the next line and comment the retreive_url_contents line 2 lines down if it is not already done.
   
$contents = file_get_contents($url, $use_include_path, $context, $offset);
   
// Paperg - use our own mechanism for getting the contents as we want to control the timeout.
    //$contents = retrieve_url_contents($url);
   
if (empty($contents) || strlen($contents) > MAX_FILE_SIZE)
    {
      return
false;
    }
   
// The second parameter can force the selectors to all be lowercase.
   
$dom->load($contents, $lowercase, $stripRN);
    return
$dom;
}

// get html dom from string
function str_get_html(
   
$str,
   
$lowercase=true,
   
$forceTagsClosed=true,
   
$target_charset = DEFAULT_TARGET_CHARSET,
   
$stripRN=true,
   
$defaultBRText=DEFAULT_BR_TEXT,
   
$defaultSpanText=DEFAULT_SPAN_TEXT
)
{
 
$dom = new Htmldom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText);
  if (empty(
$str) || strlen($str) > MAX_FILE_SIZE)
  {
   
$dom->clear();
    return
false;
  }
 
$dom->load($str, $lowercase, $stripRN);
  return
$dom;
}

// dump html dom tree
function dump_html_tree($node, $show_attr=true, $deep=0)
{
 
$node->dump($node);
}