first commit

This commit is contained in:
root
2025-05-14 12:02:52 +07:00
commit 0a0931cbfe
2342 changed files with 839982 additions and 0 deletions

BIN
App antrian.ods Normal file
View File

Binary file not shown.

9
README.md Normal file
View File

@@ -0,0 +1,9 @@
# CodeIgniter 2
Open Source PHP Framework (originally from EllisLab)
For more info, please refer to the user-guide at http://www.codeigniter.com/userguide2/
(also available within the download package for offline use)
**WARNING:** *CodeIgniter 2.x is no longer under development and only receives security patches until October 31st, 2015.
Please update your installation to the latest CodeIgniter 3.x version available
(upgrade instructions [here](http://www.codeigniter.com/userguide3/installation/upgrade_300.html)).*

228
antrian_rssa.sql Normal file
View File

File diff suppressed because one or more lines are too long

BIN
antrian_rssa.zip Normal file
View File

Binary file not shown.

10
application/cache/index.html vendored Normal file
View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1,116 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| AUTO-LOADER
| -------------------------------------------------------------------
| This file specifies which systems should be loaded by default.
|
| In order to keep the framework as light-weight as possible only the
| absolute minimal resources are loaded by default. For example,
| the database is not connected to automatically since no assumption
| is made regarding whether you intend to use it. This file lets
| you globally define which systems you would like loaded with every
| request.
|
| -------------------------------------------------------------------
| Instructions
| -------------------------------------------------------------------
|
| These are the things you can load automatically:
|
| 1. Packages
| 2. Libraries
| 3. Helper files
| 4. Custom config files
| 5. Language files
| 6. Models
|
*/
/*
| -------------------------------------------------------------------
| Auto-load Packges
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['packages'] = array(APPPATH.'third_party', '/usr/local/shared');
|
*/
$autoload['packages'] = array();
/*
| -------------------------------------------------------------------
| Auto-load Libraries
| -------------------------------------------------------------------
| These are the classes located in the system/libraries folder
| or in your application/libraries folder.
|
| Prototype:
|
| $autoload['libraries'] = array('database', 'session', 'xmlrpc');
*/
$autoload['libraries'] = array('form_validation','database','table','session');
/*
| -------------------------------------------------------------------
| Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['helper'] = array('url', 'file');
*/
$autoload['helper'] = array('url','form','date');
/*
| -------------------------------------------------------------------
| Auto-load Config files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['config'] = array('config1', 'config2');
|
| NOTE: This item is intended for use ONLY if you have created custom
| config files. Otherwise, leave it blank.
|
*/
$autoload['config'] = array();
/*
| -------------------------------------------------------------------
| Auto-load Language files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['language'] = array('lang1', 'lang2');
|
| NOTE: Do not include the "_lang" part of your file. For example
| "codeigniter_lang.php" would be referenced as array('codeigniter');
|
*/
$autoload['language'] = array();
/*
| -------------------------------------------------------------------
| Auto-load Models
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['model'] = array('model1', 'model2');
|
*/
$autoload['model'] = array();
/* End of file autoload.php */
/* Location: ./application/config/autoload.php */

View File

@@ -0,0 +1,372 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
date_default_timezone_set("Asia/Jakarta");
ini_set('memory_limit', '2048M');
/*
|--------------------------------------------------------------------------
| Base Site URL
|--------------------------------------------------------------------------
|
| URL to your CodeIgniter root. Typically this will be your base URL,
| WITH a trailing slash:
|
| http://example.com/
|
| WARNING: You MUST set this value!
|
| If it is not set, then CodeIgniter will try guess the protocol and path
| your installation, but due to security concerns the hostname will be set
| to $_SERVER['SERVER_ADDR'] if available, or localhost otherwise.
| The auto-detection mechanism exists only for convenience during
| development and MUST NOT be used in production!
|
| If you need to allow multiple domains, remember that this file is still
| a PHP script and you can easily do that on your own.
|
*/
//$config['base_url'] = 'http://antrian.rssa/';
$config['base_url'] = 'http://stag.antrian.rssa';
/*
|--------------------------------------------------------------------------
| Index File
|--------------------------------------------------------------------------
|
| Typically this will be your index.php file, unless you've renamed it to
| something else. If you are using mod_rewrite to remove the page set this
| variable so that it is blank.
|
*/
$config['index_page'] = '';
/*
|--------------------------------------------------------------------------
| URI PROTOCOL
|--------------------------------------------------------------------------
|
| This item determines which server global should be used to retrieve the
| URI string. The default setting of 'AUTO' works for most servers.
| If your links do not seem to work, try one of the other delicious flavors:
|
| 'AUTO' Default - auto detects
| 'PATH_INFO' Uses the PATH_INFO
| 'QUERY_STRING' Uses the QUERY_STRING
| 'REQUEST_URI' Uses the REQUEST_URI
| 'ORIG_PATH_INFO' Uses the ORIG_PATH_INFO
|
*/
$config['uri_protocol'] = 'AUTO';
/*
|--------------------------------------------------------------------------
| URL suffix
|--------------------------------------------------------------------------
|
| This option allows you to add a suffix to all URLs generated by CodeIgniter.
| For more information please see the user guide:
|
| http://codeigniter.com/user_guide/general/urls.html
*/
$config['url_suffix'] = '';
/*
|--------------------------------------------------------------------------
| Default Language
|--------------------------------------------------------------------------
|
| This determines which set of language files should be used. Make sure
| there is an available translation if you intend to use something other
| than english.
|
*/
$config['language'] = 'english';
/*
|--------------------------------------------------------------------------
| Default Character Set
|--------------------------------------------------------------------------
|
| This determines which character set is used by default in various methods
| that require a character set to be provided.
|
*/
$config['charset'] = 'UTF-8';
/*
|--------------------------------------------------------------------------
| Enable/Disable System Hooks
|--------------------------------------------------------------------------
|
| If you would like to use the 'hooks' feature you must enable it by
| setting this variable to TRUE (boolean). See the user guide for details.
|
*/
$config['enable_hooks'] = FALSE;
/*
|--------------------------------------------------------------------------
| Class Extension Prefix
|--------------------------------------------------------------------------
|
| This item allows you to set the filename/classname prefix when extending
| native libraries. For more information please see the user guide:
|
| http://codeigniter.com/user_guide/general/core_classes.html
| http://codeigniter.com/user_guide/general/creating_libraries.html
|
*/
$config['subclass_prefix'] = 'MY_';
/*
|--------------------------------------------------------------------------
| Allowed URL Characters
|--------------------------------------------------------------------------
|
| This lets you specify with a regular expression which characters are permitted
| within your URLs. When someone tries to submit a URL with disallowed
| characters they will get a warning message.
|
| As a security measure you are STRONGLY encouraged to restrict URLs to
| as few characters as possible. By default only these are allowed: a-z 0-9~%.:_-
|
| Leave blank to allow all characters -- but only if you are insane.
|
| DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!!
|
*/
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
/*
|--------------------------------------------------------------------------
| Enable Query Strings
|--------------------------------------------------------------------------
|
| By default CodeIgniter uses search-engine friendly segment based URLs:
| example.com/who/what/where/
|
| By default CodeIgniter enables access to the $_GET array. If for some
| reason you would like to disable it, set 'allow_get_array' to FALSE.
|
| You can optionally enable standard query string based URLs:
| example.com?who=me&what=something&where=here
|
| Options are: TRUE or FALSE (boolean)
|
| The other items let you set the query string 'words' that will
| invoke your controllers and its functions:
| example.com/index.php?c=controller&m=function
|
| Please note that some of the helpers won't work as expected when
| this feature is enabled, since CodeIgniter is designed primarily to
| use segment based URLs.
|
*/
$config['allow_get_array'] = TRUE;
$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c';
$config['function_trigger'] = 'm';
$config['directory_trigger'] = 'd'; // experimental not currently in use
/*
|--------------------------------------------------------------------------
| Error Logging Threshold
|--------------------------------------------------------------------------
|
| If you have enabled error logging, you can set an error threshold to
| determine what gets logged. Threshold options are:
| You can enable error logging by setting a threshold over zero. The
| threshold determines what gets logged. Threshold options are:
|
| 0 = Disables logging, Error logging TURNED OFF
| 1 = Error Messages (including PHP errors)
| 2 = Debug Messages
| 3 = Informational Messages
| 4 = All Messages
|
| For a live site you'll usually only enable Errors (1) to be logged otherwise
| your log files will fill up very fast.
|
*/
$config['log_threshold'] = 0;
/*
|--------------------------------------------------------------------------
| Error Logging Directory Path
|--------------------------------------------------------------------------
|
| Leave this BLANK unless you would like to set something other than the default
| application/logs/ folder. Use a full server path with trailing slash.
|
*/
$config['log_path'] = '';
/*
|--------------------------------------------------------------------------
| Date Format for Logs
|--------------------------------------------------------------------------
|
| Each item that is logged has an associated date. You can use PHP date
| codes to set your own date formatting
|
*/
$config['log_date_format'] = 'Y-m-d H:i:s';
/*
|--------------------------------------------------------------------------
| Cache Directory Path
|--------------------------------------------------------------------------
|
| Leave this BLANK unless you would like to set something other than the default
| system/cache/ folder. Use a full server path with trailing slash.
|
*/
$config['cache_path'] = '';
/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| If you use the Encryption class or the Session class you
| MUST set an encryption key. See the user guide for info.
|
*/
$config['encryption_key'] = 'B3b4SSsss555';
/*
|--------------------------------------------------------------------------
| Session Variables
|--------------------------------------------------------------------------
|
| 'sess_cookie_name' = the name you want for the cookie
| 'sess_expiration' = the number of SECONDS you want the session to last.
| by default sessions last 7200 seconds (two hours). Set to zero for no expiration.
| 'sess_expire_on_close' = Whether to cause the session to expire automatically
| when the browser window is closed
| 'sess_encrypt_cookie' = Whether to encrypt the cookie
| 'sess_use_database' = Whether to save the session data to a database
| 'sess_table_name' = The name of the session database table
| 'sess_match_ip' = Whether to match the user's IP address when reading the session data
| 'sess_match_useragent' = Whether to match the User Agent when reading the session data
| 'sess_time_to_update' = how many seconds between CI refreshing Session Information
|
*/
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = FALSE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
/*
|--------------------------------------------------------------------------
| Cookie Related Variables
|--------------------------------------------------------------------------
|
| 'cookie_prefix' = Set a prefix if you need to avoid collisions
| 'cookie_domain' = Set to .your-domain.com for site-wide cookies
| 'cookie_path' = Typically will be a forward slash
| 'cookie_secure' = Cookies will only be set if a secure HTTPS connection exists.
|
*/
$config['cookie_prefix'] = "";
$config['cookie_domain'] = "";
$config['cookie_path'] = "/";
$config['cookie_secure'] = FALSE;
/*
|--------------------------------------------------------------------------
| Global XSS Filtering
|--------------------------------------------------------------------------
|
| Determines whether the XSS filter is always active when GET, POST or
| COOKIE data is encountered
|
*/
$config['global_xss_filtering'] = FALSE;
/*
|--------------------------------------------------------------------------
| Cross Site Request Forgery
|--------------------------------------------------------------------------
| Enables a CSRF cookie token to be set. When set to TRUE, token will be
| checked on a submitted form. If you are accepting user data, it is strongly
| recommended CSRF protection be enabled.
|
| 'csrf_token_name' = The token name
| 'csrf_cookie_name' = The cookie name
| 'csrf_expire' = The number in seconds the token should expire.
*/
$config['csrf_protection'] = FALSE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
/*
|--------------------------------------------------------------------------
| Output Compression
|--------------------------------------------------------------------------
|
| Enables Gzip output compression for faster page loads. When enabled,
| the output class will test whether your server supports Gzip.
| Even if it does, however, not all browsers support compression
| so enable only if you are reasonably sure your visitors can handle it.
|
| VERY IMPORTANT: If you are getting a blank page when compression is enabled it
| means you are prematurely outputting something to your browser. It could
| even be a line of whitespace at the end of one of your scripts. For
| compression to work, nothing can be sent before the output buffer is called
| by the output class. Do not 'echo' any values with compression enabled.
|
*/
$config['compress_output'] = FALSE;
/*
|--------------------------------------------------------------------------
| Master Time Reference
|--------------------------------------------------------------------------
|
| Options are 'local' or 'gmt'. This pref tells the system whether to use
| your server's local time as the master 'now' reference, or convert it to
| GMT. See the 'date helper' page of the user guide for information
| regarding date handling.
|
*/
$config['time_reference'] = 'local';
/*
|--------------------------------------------------------------------------
| Rewrite PHP Short Tags
|--------------------------------------------------------------------------
|
| If your PHP installation does not have short tag support enabled CI
| can rewrite the tags on-the-fly, enabling you to utilize that syntax
| in your view files. Options are TRUE or FALSE (boolean)
|
*/
$config['rewrite_short_tags'] = FALSE;
/*
|--------------------------------------------------------------------------
| Reverse Proxy IPs
|--------------------------------------------------------------------------
|
| If your server is behind a reverse proxy, you must whitelist the proxy IP
| addresses from which CodeIgniter should trust the HTTP_X_FORWARDED_FOR
| header in order to properly identify the visitor's IP address.
| Comma-delimited, e.g. '10.0.1.200,10.0.1.201'
|
*/
$config['proxy_ips'] = '';
/* End of file config.php */
/* Location: ./application/config/config.php */

View File

@@ -0,0 +1,41 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
|--------------------------------------------------------------------------
| File and Directory Modes
|--------------------------------------------------------------------------
|
| These prefs are used when checking and setting modes when working
| with the file system. The defaults are fine on servers with proper
| security, but you may wish (or even need) to change the values in
| certain environments (Apache running a separate process for each
| user, PHP under CGI with Apache suEXEC, etc.). Octal values should
| always be used to set the mode correctly.
|
*/
define('FILE_READ_MODE', 0644);
define('FILE_WRITE_MODE', 0666);
define('DIR_READ_MODE', 0755);
define('DIR_WRITE_MODE', 0777);
/*
|--------------------------------------------------------------------------
| File Stream Modes
|--------------------------------------------------------------------------
|
| These modes are used when working with fopen()/popen()
|
*/
define('FOPEN_READ', 'rb');
define('FOPEN_READ_WRITE', 'r+b');
define('FOPEN_WRITE_CREATE_DESTRUCTIVE', 'wb'); // truncates existing file data, use with care
define('FOPEN_READ_WRITE_CREATE_DESTRUCTIVE', 'w+b'); // truncates existing file data, use with care
define('FOPEN_WRITE_CREATE', 'ab');
define('FOPEN_READ_WRITE_CREATE', 'a+b');
define('FOPEN_WRITE_CREATE_STRICT', 'xb');
define('FOPEN_READ_WRITE_CREATE_STRICT', 'x+b');
/* End of file constants.php */
/* Location: ./application/config/constants.php */

View File

@@ -0,0 +1,70 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| DATABASE CONNECTIVITY SETTINGS
| -------------------------------------------------------------------
| This file will contain the settings needed to access your database.
|
| For complete instructions please consult the 'Database Connection'
| page of the User Guide.
|
| -------------------------------------------------------------------
| EXPLANATION OF VARIABLES
| -------------------------------------------------------------------
|
| ['hostname'] The hostname of your database server.
| ['username'] The username used to connect to the database
| ['password'] The password used to connect to the database
| ['database'] The name of the database you want to connect to
| ['dbdriver'] The database type. ie: mysql. Currently supported:
mysql, mysqli, postgre, odbc, mssql, sqlite, oci8
| ['dbprefix'] You can add an optional prefix, which will be added
| to the table name when using the Active Record class
| ['pconnect'] TRUE/FALSE - Whether to use a persistent connection
| ['db_debug'] TRUE/FALSE - Whether database errors should be displayed.
| ['cache_on'] TRUE/FALSE - Enables/disables query caching
| ['cachedir'] The path to the folder where cache files should be stored
| ['char_set'] The character set used in communicating with the database
| ['dbcollat'] The character collation used in communicating with the database
| NOTE: For MySQL and MySQLi databases, this setting is only used
| as a backup if your server is running PHP < 5.2.3 or MySQL < 5.0.7
| (and in table creation queries made with DB Forge).
| There is an incompatibility in PHP with mysql_real_escape_string() which
| can make your site vulnerable to SQL injection if you are using a
| multi-byte character set and are running versions lower than these.
| Sites using Latin-1 or UTF-8 database character set and collation are unaffected.
| ['swap_pre'] A default table prefix that should be swapped with the dbprefix
| ['autoinit'] Whether or not to automatically initialize the database.
| ['stricton'] TRUE/FALSE - forces 'Strict Mode' connections
| - good for ensuring strict SQL while developing
|
| The $active_group variable lets you choose which connection group to
| make active. By default there is only one group (the 'default' group).
|
| The $active_record variables lets you determine whether or not to load
| the active record class
*/
$active_group = 'default';
$active_record = TRUE;
$db['default']['hostname'] = '127.0.0.1';
$db['default']['username'] = 'www-data';
$db['default']['password'] = 'www-data';
$db['default']['database'] = 'antrian_rssa';
//$db['default']['database'] = 'antrian_rssa_staging';
$db['default']['dbdriver'] = 'mysqli';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = FALSE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
/* End of file database.php */
/* Location: ./application/config/database.php */

View File

@@ -0,0 +1,15 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$_doctypes = array(
'xhtml11' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">',
'xhtml1-strict' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
'xhtml1-trans' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
'xhtml1-frame' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">',
'html5' => '<!DOCTYPE html>',
'html4-strict' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">',
'html4-trans' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">',
'html4-frame' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'
);
/* End of file doctypes.php */
/* Location: ./application/config/doctypes.php */

View File

@@ -0,0 +1,64 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| Foreign Characters
| -------------------------------------------------------------------
| This file contains an array of foreign characters for transliteration
| conversion used by the Text helper
|
*/
$foreign_characters = array(
'/ä|æ|ǽ/' => 'ae',
'/ö|œ/' => 'oe',
'/ü/' => 'ue',
'/Ä/' => 'Ae',
'/Ü/' => 'Ue',
'/Ö/' => 'Oe',
'/À|Á|Â|Ã|Ä|Å|Ǻ|Ā|Ă|Ą|Ǎ/' => 'A',
'/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª/' => 'a',
'/Ç|Ć|Ĉ|Ċ|Č/' => 'C',
'/ç|ć|ĉ|ċ|č/' => 'c',
'/Ð|Ď|Đ/' => 'D',
'/ð|ď|đ/' => 'd',
'/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě/' => 'E',
'/è|é|ê|ë|ē|ĕ|ė|ę|ě/' => 'e',
'/Ĝ|Ğ|Ġ|Ģ/' => 'G',
'/ĝ|ğ|ġ|ģ/' => 'g',
'/Ĥ|Ħ/' => 'H',
'/ĥ|ħ/' => 'h',
'/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ/' => 'I',
'/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı/' => 'i',
'/Ĵ/' => 'J',
'/ĵ/' => 'j',
'/Ķ/' => 'K',
'/ķ/' => 'k',
'/Ĺ|Ļ|Ľ|Ŀ|Ł/' => 'L',
'/ĺ|ļ|ľ|ŀ|ł/' => 'l',
'/Ñ|Ń|Ņ|Ň/' => 'N',
'/ñ|ń|ņ|ň|ʼn/' => 'n',
'/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ/' => 'O',
'/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º/' => 'o',
'/Ŕ|Ŗ|Ř/' => 'R',
'/ŕ|ŗ|ř/' => 'r',
'/Ś|Ŝ|Ş|Š/' => 'S',
'/ś|ŝ|ş|š|ſ/' => 's',
'/Ţ|Ť|Ŧ/' => 'T',
'/ţ|ť|ŧ/' => 't',
'/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ/' => 'U',
'/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ/' => 'u',
'/Ý|Ÿ|Ŷ/' => 'Y',
'/ý|ÿ|ŷ/' => 'y',
'/Ŵ/' => 'W',
'/ŵ/' => 'w',
'/Ź|Ż|Ž/' => 'Z',
'/ź|ż|ž/' => 'z',
'/Æ|Ǽ/' => 'AE',
'/ß/'=> 'ss',
'/IJ/' => 'IJ',
'/ij/' => 'ij',
'/Œ/' => 'OE',
'/ƒ/' => 'f'
);
/* End of file foreign_chars.php */
/* Location: ./application/config/foreign_chars.php */

View File

@@ -0,0 +1,16 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| Hooks
| -------------------------------------------------------------------------
| This file lets you define "hooks" to extend CI without hacking the core
| files. Please see the user guide for info:
|
| http://codeigniter.com/user_guide/general/hooks.html
|
*/
/* End of file hooks.php */
/* Location: ./application/config/hooks.php */

View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1,41 @@
<?php defined('BASEPATH') OR exit('No direct script access allowed');
/*
|--------------------------------------------------------------------------
| Enable/Disable Migrations
|--------------------------------------------------------------------------
|
| Migrations are disabled by default but should be enabled
| whenever you intend to do a schema migration.
|
*/
$config['migration_enabled'] = FALSE;
/*
|--------------------------------------------------------------------------
| Migrations version
|--------------------------------------------------------------------------
|
| This is used to set migration version that the file system should be on.
| If you run $this->migration->latest() this is the version that schema will
| be upgraded / downgraded to.
|
*/
$config['migration_version'] = 0;
/*
|--------------------------------------------------------------------------
| Migrations Path
|--------------------------------------------------------------------------
|
| Path to your migrations folder.
| Typically, it will be within your application path.
| Also, writing permission is required within the migrations path.
|
*/
$config['migration_path'] = APPPATH . 'migrations/';
/* End of file migration.php */
/* Location: ./application/config/migration.php */

View File

@@ -0,0 +1,106 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| MIME TYPES
| -------------------------------------------------------------------
| This file contains an array of mime types. It is used by the
| Upload class to help identify allowed file types.
|
*/
$mimes = array( 'hqx' => 'application/mac-binhex40',
'cpt' => 'application/mac-compactpro',
'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'),
'bin' => 'application/macbinary',
'dms' => 'application/octet-stream',
'lha' => 'application/octet-stream',
'lzh' => 'application/octet-stream',
'exe' => array('application/octet-stream', 'application/x-msdownload'),
'class' => 'application/octet-stream',
'psd' => 'application/x-photoshop',
'so' => 'application/octet-stream',
'sea' => 'application/octet-stream',
'dll' => 'application/octet-stream',
'oda' => 'application/oda',
'pdf' => array('application/pdf', 'application/x-download'),
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'smi' => 'application/smil',
'smil' => 'application/smil',
'mif' => 'application/vnd.mif',
'xls' => array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'),
'ppt' => array('application/powerpoint', 'application/vnd.ms-powerpoint'),
'wbxml' => 'application/wbxml',
'wmlc' => 'application/wmlc',
'dcr' => 'application/x-director',
'dir' => 'application/x-director',
'dxr' => 'application/x-director',
'dvi' => 'application/x-dvi',
'gtar' => 'application/x-gtar',
'gz' => 'application/x-gzip',
'php' => 'application/x-httpd-php',
'php4' => 'application/x-httpd-php',
'php3' => 'application/x-httpd-php',
'phtml' => 'application/x-httpd-php',
'phps' => 'application/x-httpd-php-source',
'js' => 'application/x-javascript',
'swf' => 'application/x-shockwave-flash',
'sit' => 'application/x-stuffit',
'tar' => 'application/x-tar',
'tgz' => array('application/x-tar', 'application/x-gzip-compressed'),
'xhtml' => 'application/xhtml+xml',
'xht' => 'application/xhtml+xml',
'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'mpga' => 'audio/mpeg',
'mp2' => 'audio/mpeg',
'mp3' => array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'),
'aif' => 'audio/x-aiff',
'aiff' => 'audio/x-aiff',
'aifc' => 'audio/x-aiff',
'ram' => 'audio/x-pn-realaudio',
'rm' => 'audio/x-pn-realaudio',
'rpm' => 'audio/x-pn-realaudio-plugin',
'ra' => 'audio/x-realaudio',
'rv' => 'video/vnd.rn-realvideo',
'wav' => array('audio/x-wav', 'audio/wave', 'audio/wav'),
'bmp' => array('image/bmp', 'image/x-windows-bmp'),
'gif' => 'image/gif',
'jpeg' => array('image/jpeg', 'image/pjpeg'),
'jpg' => array('image/jpeg', 'image/pjpeg'),
'jpe' => array('image/jpeg', 'image/pjpeg'),
'png' => array('image/png', 'image/x-png'),
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'css' => 'text/css',
'html' => 'text/html',
'htm' => 'text/html',
'shtml' => 'text/html',
'txt' => 'text/plain',
'text' => 'text/plain',
'log' => array('text/plain', 'text/x-log'),
'rtx' => 'text/richtext',
'rtf' => 'text/rtf',
'xml' => 'text/xml',
'xsl' => 'text/xml',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'avi' => 'video/x-msvideo',
'movie' => 'video/x-sgi-movie',
'doc' => 'application/msword',
'docx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip'),
'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'),
'word' => array('application/msword', 'application/octet-stream'),
'xl' => 'application/excel',
'eml' => 'message/rfc822',
'json' => array('application/json', 'text/json')
);
/* End of file mimes.php */
/* Location: ./application/config/mimes.php */

View File

@@ -0,0 +1,17 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| Profiler Sections
| -------------------------------------------------------------------------
| This file lets you determine whether or not various sections of Profiler
| data are displayed when the Profiler is enabled.
| Please see the user guide for info:
|
| http://codeigniter.com/user_guide/general/profiling.html
|
*/
/* End of file profiler.php */
/* Location: ./application/config/profiler.php */

View File

@@ -0,0 +1,46 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| URI ROUTING
| -------------------------------------------------------------------------
| This file lets you re-map URI requests to specific controller functions.
|
| Typically there is a one-to-one relationship between a URL string
| and its corresponding controller class/method. The segments in a
| URL normally follow this pattern:
|
| example.com/class/method/id/
|
| In some instances, however, you may want to remap this relationship
| so that a different class/function is called than the one
| corresponding to the URL.
|
| Please see the user guide for complete details:
|
| http://codeigniter.com/user_guide/general/routing.html
|
| -------------------------------------------------------------------------
| RESERVED ROUTES
| -------------------------------------------------------------------------
|
| There area two reserved routes:
|
| $route['default_controller'] = 'welcome';
|
| This route indicates which controller class should be loaded if the
| URI contains no data. In the above example, the "welcome" class
| would be loaded.
|
| $route['404_override'] = 'errors/page_missing';
|
| This route will tell the Router what URI segments to use if those provided
| in the URL cannot be matched to a valid route.
|
*/
$route['default_controller'] = "welcome";
$route['404_override'] = '';
/* End of file routes.php */
/* Location: ./application/config/routes.php */

View File

@@ -0,0 +1,66 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| SMILEYS
| -------------------------------------------------------------------
| This file contains an array of smileys for use with the emoticon helper.
| Individual images can be used to replace multiple simileys. For example:
| :-) and :) use the same image replacement.
|
| Please see user guide for more info:
| http://codeigniter.com/user_guide/helpers/smiley_helper.html
|
*/
$smileys = array(
// smiley image name width height alt
':-)' => array('grin.gif', '19', '19', 'grin'),
':lol:' => array('lol.gif', '19', '19', 'LOL'),
':cheese:' => array('cheese.gif', '19', '19', 'cheese'),
':)' => array('smile.gif', '19', '19', 'smile'),
';-)' => array('wink.gif', '19', '19', 'wink'),
';)' => array('wink.gif', '19', '19', 'wink'),
':smirk:' => array('smirk.gif', '19', '19', 'smirk'),
':roll:' => array('rolleyes.gif', '19', '19', 'rolleyes'),
':-S' => array('confused.gif', '19', '19', 'confused'),
':wow:' => array('surprise.gif', '19', '19', 'surprised'),
':bug:' => array('bigsurprise.gif', '19', '19', 'big surprise'),
':-P' => array('tongue_laugh.gif', '19', '19', 'tongue laugh'),
'%-P' => array('tongue_rolleye.gif', '19', '19', 'tongue rolleye'),
';-P' => array('tongue_wink.gif', '19', '19', 'tongue wink'),
':P' => array('raspberry.gif', '19', '19', 'raspberry'),
':blank:' => array('blank.gif', '19', '19', 'blank stare'),
':long:' => array('longface.gif', '19', '19', 'long face'),
':ohh:' => array('ohh.gif', '19', '19', 'ohh'),
':grrr:' => array('grrr.gif', '19', '19', 'grrr'),
':gulp:' => array('gulp.gif', '19', '19', 'gulp'),
'8-/' => array('ohoh.gif', '19', '19', 'oh oh'),
':down:' => array('downer.gif', '19', '19', 'downer'),
':red:' => array('embarrassed.gif', '19', '19', 'red face'),
':sick:' => array('sick.gif', '19', '19', 'sick'),
':shut:' => array('shuteye.gif', '19', '19', 'shut eye'),
':-/' => array('hmm.gif', '19', '19', 'hmmm'),
'>:(' => array('mad.gif', '19', '19', 'mad'),
':mad:' => array('mad.gif', '19', '19', 'mad'),
'>:-(' => array('angry.gif', '19', '19', 'angry'),
':angry:' => array('angry.gif', '19', '19', 'angry'),
':zip:' => array('zip.gif', '19', '19', 'zipper'),
':kiss:' => array('kiss.gif', '19', '19', 'kiss'),
':ahhh:' => array('shock.gif', '19', '19', 'shock'),
':coolsmile:' => array('shade_smile.gif', '19', '19', 'cool smile'),
':coolsmirk:' => array('shade_smirk.gif', '19', '19', 'cool smirk'),
':coolgrin:' => array('shade_grin.gif', '19', '19', 'cool grin'),
':coolhmm:' => array('shade_hmm.gif', '19', '19', 'cool hmm'),
':coolmad:' => array('shade_mad.gif', '19', '19', 'cool mad'),
':coolcheese:' => array('shade_cheese.gif', '19', '19', 'cool cheese'),
':vampire:' => array('vampire.gif', '19', '19', 'vampire'),
':snake:' => array('snake.gif', '19', '19', 'snake'),
':exclaim:' => array('exclaim.gif', '19', '19', 'excaim'),
':question:' => array('question.gif', '19', '19', 'question') // no comma after last item
);
/* End of file smileys.php */
/* Location: ./application/config/smileys.php */

View File

@@ -0,0 +1,178 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| USER AGENT TYPES
| -------------------------------------------------------------------
| This file contains four arrays of user agent data. It is used by the
| User Agent Class to help identify browser, platform, robot, and
| mobile device data. The array keys are used to identify the device
| and the array values are used to set the actual name of the item.
|
*/
$platforms = array (
'windows nt 6.0' => 'Windows Longhorn',
'windows nt 5.2' => 'Windows 2003',
'windows nt 5.0' => 'Windows 2000',
'windows nt 5.1' => 'Windows XP',
'windows nt 4.0' => 'Windows NT 4.0',
'winnt4.0' => 'Windows NT 4.0',
'winnt 4.0' => 'Windows NT',
'winnt' => 'Windows NT',
'windows 98' => 'Windows 98',
'win98' => 'Windows 98',
'windows 95' => 'Windows 95',
'win95' => 'Windows 95',
'windows' => 'Unknown Windows OS',
'os x' => 'Mac OS X',
'ppc mac' => 'Power PC Mac',
'freebsd' => 'FreeBSD',
'ppc' => 'Macintosh',
'linux' => 'Linux',
'debian' => 'Debian',
'sunos' => 'Sun Solaris',
'beos' => 'BeOS',
'apachebench' => 'ApacheBench',
'aix' => 'AIX',
'irix' => 'Irix',
'osf' => 'DEC OSF',
'hp-ux' => 'HP-UX',
'netbsd' => 'NetBSD',
'bsdi' => 'BSDi',
'openbsd' => 'OpenBSD',
'gnu' => 'GNU/Linux',
'unix' => 'Unknown Unix OS'
);
// The order of this array should NOT be changed. Many browsers return
// multiple browser types so we want to identify the sub-type first.
$browsers = array(
'Flock' => 'Flock',
'Chrome' => 'Chrome',
'Opera' => 'Opera',
'MSIE' => 'Internet Explorer',
'Internet Explorer' => 'Internet Explorer',
'Shiira' => 'Shiira',
'Firefox' => 'Firefox',
'Chimera' => 'Chimera',
'Phoenix' => 'Phoenix',
'Firebird' => 'Firebird',
'Camino' => 'Camino',
'Netscape' => 'Netscape',
'OmniWeb' => 'OmniWeb',
'Safari' => 'Safari',
'Mozilla' => 'Mozilla',
'Konqueror' => 'Konqueror',
'icab' => 'iCab',
'Lynx' => 'Lynx',
'Links' => 'Links',
'hotjava' => 'HotJava',
'amaya' => 'Amaya',
'IBrowse' => 'IBrowse'
);
$mobiles = array(
// legacy array, old values commented out
'mobileexplorer' => 'Mobile Explorer',
// 'openwave' => 'Open Wave',
// 'opera mini' => 'Opera Mini',
// 'operamini' => 'Opera Mini',
// 'elaine' => 'Palm',
'palmsource' => 'Palm',
// 'digital paths' => 'Palm',
// 'avantgo' => 'Avantgo',
// 'xiino' => 'Xiino',
'palmscape' => 'Palmscape',
// 'nokia' => 'Nokia',
// 'ericsson' => 'Ericsson',
// 'blackberry' => 'BlackBerry',
// 'motorola' => 'Motorola'
// Phones and Manufacturers
'motorola' => "Motorola",
'nokia' => "Nokia",
'palm' => "Palm",
'iphone' => "Apple iPhone",
'ipad' => "iPad",
'ipod' => "Apple iPod Touch",
'sony' => "Sony Ericsson",
'ericsson' => "Sony Ericsson",
'blackberry' => "BlackBerry",
'cocoon' => "O2 Cocoon",
'blazer' => "Treo",
'lg' => "LG",
'amoi' => "Amoi",
'xda' => "XDA",
'mda' => "MDA",
'vario' => "Vario",
'htc' => "HTC",
'samsung' => "Samsung",
'sharp' => "Sharp",
'sie-' => "Siemens",
'alcatel' => "Alcatel",
'benq' => "BenQ",
'ipaq' => "HP iPaq",
'mot-' => "Motorola",
'playstation portable' => "PlayStation Portable",
'hiptop' => "Danger Hiptop",
'nec-' => "NEC",
'panasonic' => "Panasonic",
'philips' => "Philips",
'sagem' => "Sagem",
'sanyo' => "Sanyo",
'spv' => "SPV",
'zte' => "ZTE",
'sendo' => "Sendo",
// Operating Systems
'symbian' => "Symbian",
'SymbianOS' => "SymbianOS",
'elaine' => "Palm",
'palm' => "Palm",
'series60' => "Symbian S60",
'windows ce' => "Windows CE",
// Browsers
'obigo' => "Obigo",
'netfront' => "Netfront Browser",
'openwave' => "Openwave Browser",
'mobilexplorer' => "Mobile Explorer",
'operamini' => "Opera Mini",
'opera mini' => "Opera Mini",
// Other
'digital paths' => "Digital Paths",
'avantgo' => "AvantGo",
'xiino' => "Xiino",
'novarra' => "Novarra Transcoder",
'vodafone' => "Vodafone",
'docomo' => "NTT DoCoMo",
'o2' => "O2",
// Fallback
'mobile' => "Generic Mobile",
'wireless' => "Generic Mobile",
'j2me' => "Generic Mobile",
'midp' => "Generic Mobile",
'cldc' => "Generic Mobile",
'up.link' => "Generic Mobile",
'up.browser' => "Generic Mobile",
'smartphone' => "Generic Mobile",
'cellphone' => "Generic Mobile"
);
// There are hundreds of bots but these are the most common.
$robots = array(
'googlebot' => 'Googlebot',
'msnbot' => 'MSNBot',
'slurp' => 'Inktomi Slurp',
'yahoo' => 'Yahoo',
'askjeeves' => 'AskJeeves',
'fastcrawler' => 'FastCrawler',
'infoseek' => 'InfoSeek Robot 1.0',
'lycos' => 'Lycos'
);
/* End of file user_agents.php */
/* Location: ./application/config/user_agents.php */

View File

@@ -0,0 +1,29 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Login extends CI_Controller{
function __construct(){
parent::__construct();
}
public function index($error = NULL){
$data['error']=$error;
$this->load->view('login/v_login',$data);
}
public function process(){
$this->load->model('m_login');
$result = $this->m_login->validate();
if(! $result){
$error = '<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">x</button>
Username atau Password Salah!
</div>';
$this->index($error);
}else{
redirect('index.php/ps_anjungan/admin_anjungan');
}
}
public function logout(){
$this->session->sess_destroy();
redirect('index.php/login');
}
}
?>

View File

@@ -0,0 +1,429 @@
<?php
//-------------ID Anjungan = 10
class Ps_anjungan extends CI_Controller {
//-----------start variables for check action access----------//
public $vartambah = null;
public $varedit = null;
public $vardelete = null;
public $varview = null;
//-----------start variables for check action access----------//
function __construct(){
parent::__construct();
//$this->check_isvalidated();
$this->load->helper(array('form', 'date'));
}
// private function check_isvalidated(){
// if(! $this->session->userdata('validated')){
// redirect('index.php/login');
// }
//--------------start check access this form page-------------//
// $this->db->where('mum_tipeuser_id', $this->session->userdata('s_FK_TipeUser'));
// $this->db->where('mum_menu_id', '9');
// $cekMenu = $this->db->get('master_user_menu');
// $rowcount = $cekMenu->num_rows();
// if($rowcount==0){
// redirect('index.php');
// }else{
// foreach ($cekMenu->result() as $cm)
// {
// $this->vartambah=$cm->mum_tambah;
// $this->varedit=$cm->mum_ubah;
// $this->vardelete=$cm->mum_hapus;
// $this->varview=$cm->mum_lihat;
// }
// }
//--------------end check access this form page-------------//
// }
public function index($error = NULL) {
//-----------------start untuk cek jam shift, jam shift, dan aktif klinik------------------//
$this->load->model('m_anjungan');
$info_pengunjung = $this->m_anjungan->cek_shift_jam();
$this->load->model('m_anjungan');
$cekanjungan = $this->m_anjungan->cekanjungan();
//-----------------end untuk cek jam shift, jam shift, dan aktif klinik------------------//
$data['title'] = 'Anjungan';
$data['main_content'] = 'anjungan/v_anjungan';
$data['error']=$error;
$this->load->model('m_klinik');
$masterklinik = $this->m_klinik->klinikasc();
$this->load->vars('mk', $masterklinik);
$this->load->model('m_anjungan');
$terlambat = $this->m_anjungan->anjunganterlambat();
$this->load->vars('tr', $terlambat);
$this->load->view('includes3/template', $data);
}
public function admin_anjungan(){
if(! $this->session->userdata('validated')){
redirect('index.php/login');
}
//-----------------start untuk cek jam shift, jam shift, dan aktif klinik------------------//
$this->load->model('m_anjungan');
$info_pengunjung = $this->m_anjungan->cek_shift_jam();
$this->load->model('m_anjungan');
$cekanjungan = $this->m_anjungan->cekanjungan();
//-----------------end untuk cek jam shift, jam shift, dan aktif klinik------------------//
$data['title'] = 'Admin Anjungan';
$data['main_content'] = 'anjungan/v_admin_anjungan';
$this->load->model('m_klinik');
$masterklinik = $this->m_klinik->klinikasc();
$this->load->vars('mk', $masterklinik);
$this->load->model('m_anjungan');
$terlambat = $this->m_anjungan->anjunganterlambat();
$this->load->vars('tr', $terlambat);
$this->load->model('m_anjungan');
$fasttrack = $this->m_anjungan->batasallpasien();
$this->load->vars('fs', $fasttrack);
$this->load->model('m_klinik');
$masterklinik = $this->m_klinik->klinikasc();
$this->load->vars('mk', $masterklinik);
$this->load->view('includes/template', $data);
}
public function print_ulang($id,$ket){
$data['title'] = 'Anjungan';
$data['main_content'] = 'print/print_anjungan/p_print_ulang';
$data['ket']=$ket;
$this->load->model('m_anjungan');
$fasttrack = $this->m_anjungan->cetakulang($id);
$this->load->vars('cu', $fasttrack);
$this->load->model('m_loket');
$getloket = $this->m_loket->index();
$this->load->vars('lk', $getloket);
$this->load->view('print/print_anjungan/p_print_ulang',$data);
}
public function sekarang($id,$shift,$pembayaran){
$data['title'] = 'Anjungan';
$data['main_content'] = 'print/print_anjungan/p_sekarang';
$data['idklinik']=$id;
$data['ket']="1";
$this->load->model('m_anjungan');
$sekarang = $this->m_anjungan->insert_sekarang($id,$shift,1,$pembayaran);
if($sekarang===FALSE){
$this->session->set_flashdata('messagefalse', 'Anda gagal mendaftar, coba lagi!');
redirect('index.php/ps_anjungan');
}else{
$this->load->model('m_anjungan');
$getpas = $this->m_anjungan->datapengunjung($id);
$this->load->vars('dp', $getpas);
$this->load->model('m_loket');
$getloket = $this->m_loket->index();
$this->load->vars('lk', $getloket);
$this->load->view('print/print_anjungan/p_sekarang',$data);
//redirect('index.php/ps_anjungan');
}
}
public function print_pengantar($id,$ket){
$data['title'] = 'Anjungan';
$data['main_content'] = 'print/print_anjungan/p_pengantar';
$data['ket']=$ket;
$this->load->model('m_anjungan');
$getpas = $this->m_anjungan->datapengunjungthis($id);
$this->load->vars('dp', $getpas);
$this->load->view('print/print_anjungan/p_pengantar',$data);
}
public function pesan(){
$data['title'] = 'Anjungan';
$data['main_content'] = 'print/print_anjungan/p_sekarang';
$this->load->model('m_anjungan');
$this->m_anjungan->insert_pesan();
$idk = $this->input->post('idklinikpesan');
$data['tglperiksa']=$this->input->post('tanggalpesan');
$data['idklinik']=$idk;
$data['ket']="2";
$this->load->model('m_anjungan');
$getpas = $this->m_anjungan->datapengunjungpesan($idk,$this->input->post('tanggalpesan'),$this->input->post('shiftpesan'));
$this->load->vars('dp', $getpas);
$this->load->model('m_loket');
$getloket = $this->m_loket->index();
$this->load->vars('lk', $getloket);
$this->load->view('print/print_anjungan/p_sekarang',$data);
//redirect('index.php/ps_anjungan');
}
public function daftar_online(){
$data['title'] = 'Anjungan';
$data['main_content'] = 'print/print_anjungan/p_sekarang';
$data['idklinik']=$this->input->post('klinik');
$data['ket']="3";
$idk = $this->input->post('klinik');
$this->load->model('m_anjungan');
$this->m_anjungan->insert_daftar_online();
$this->load->model('m_anjungan');
$getpas = $this->m_anjungan->datapengunjung($idk);
$this->load->vars('dp', $getpas);
$this->load->model('m_loket');
$getloket = $this->m_loket->index();
$this->load->vars('lk', $getloket);
$this->load->view('print/print_anjungan/p_sekarang',$data);
//redirect('index.php/ps_anjungan');
}
public function fasttrack(){
$id=$this->input->post('idkliniksekarangFS');
$shift=$this->input->post('shiftsekarangFS');
$pembayaran=$this->input->post('pembayaranfs');
$data['title'] = 'Anjungan';
$data['main_content'] = 'print/print_anjungan/p_sekarang';
$data['idklinik']=$id;
$data['ket']="4";
$this->load->model('m_anjungan');
$this->m_anjungan->insert_sekarang($id,$shift,4,$pembayaran);
$this->load->model('m_anjungan');
$getpas = $this->m_anjungan->datapengunjung($id);
$this->load->vars('dp', $getpas);
$this->load->model('m_loket');
$getloket = $this->m_loket->index();
$this->load->vars('lk', $getloket);
$this->load->view('print/print_anjungan/p_fasttrack',$data);
}
function datashift_pesan($bulan,$tanggal,$tahun){
$idk = $this->input->post('idk');
$tanggalpesan = $tahun."-".$bulan."-".$tanggal;
//$tanggalpesan = date("Y-m-d", strtotime($tanggalpesan));
$jumshift;
$jumquota;
$jumpp=0;
$jadwal;
$jamshift;
//---------------------start get data klinik--------------//
$this->db->where('mk_id', $idk);
$query_kl = $this->db->get('master_klinik');
foreach ($query_kl->result() as $datklinik ){
$jumshift=$datklinik->mk_shift;
$jumquota=$datklinik->mk_quota;
$jadwal=$datklinik->mk_jadwal;
$jamshift=$datklinik->mk_jam_shift;
}
//---------------------end get data klinik--------------//
$pecahjamshift = explode("|",$jamshift);
$numpecah = 0;
for($i=1;$i<=$jumshift;$i++){
$jumpp=0;
$aktif=0;
$setaktifdb=0;
$this->db->where('pp_tanggal_periksa', $tanggalpesan);
$this->db->where('pp_klinik_id', $idk);
$this->db->where('pp_shift', $i);
$query_pp = $this->db->get('proses_pengunjung');
$jumpp = $query_pp->num_rows();
//----------------start cek hari sekarang klinik buka atau tidak----------------//
$hari = date("D", strtotime($tanggalpesan));
switch($hari){
case 'Sun':$hari_ini = "minggu";break;case 'Mon':$hari_ini = "senin";break;case 'Tue':$hari_ini = "selasa";break;
case 'Wed':$hari_ini = "rabu";break;case 'Thu':$hari_ini = "kamis";break;case 'Fri':$hari_ini = "jumat";break;
case 'Sat':$hari_ini = "sabtu";break;default:$hari_ini = "Tidak di ketahui";break;
}
$pecahjadwal = explode("|",$jadwal);
$jumdat = count($pecahjadwal);
for ($x = 0; $x <= $jumdat; $x++){
if(isset($pecahjadwal[$x])){
if($pecahjadwal[$x]==$hari_ini){$aktif=$aktif+1;}
}
}
if($aktif==0){$setaktifdb=1;}
//----------------end cek hari sekarang klinik buka atau tidak----------------//
if($jumpp>=$jumquota){
$data[] = ['datashiftpesan'=>"<option disabled='' id='delshiftpesan$i' value=''>Shift $i penuh</option>"];
}elseif($setaktifdb==1){
$data[] = ['datashiftpesan'=>"<option disabled='' id='delshiftpesan$i' value=''>Klinik Tutup</option>"];
}
else{
$data[] = ['datashiftpesan'=>"<option id='delshiftpesan$i' value='$i'>Shift $i &plusmn Mulai Pukul $pecahjamshift[$numpecah] </option>"];
}
$numpecah++;
}
echo json_encode($data);
}
function data_shift_klinik(){
$id = $this->input->post('klinik');
$query = $this->db->query("select * from master_klinik where mk_id='$id'");
foreach ($query->result() as $row){
$data[] = $row;
}
echo json_encode($data);
}
//--------------------------------------------------------START ANTRIAN PENDAFTARAN 1--------------------------------//
function info_anjungan(){
$data['title'] = 'Antrian Pendaftaran';
$data['main_content'] = 'anjungan/v_info_anjungan';
$this->load->model('m_anjungan');
$info_pengunjung = $this->m_anjungan->info_pengunjung();
$this->load->vars('ip', $info_pengunjung);
$this->load->model('m_klinik');
$klinik = $this->m_klinik->index();
$this->load->vars('mk', $klinik);
//-----------------start untuk cek jam shift, jam shift, dan aktif klinik------------------//
$this->load->model('m_anjungan');
$info_pengunjung = $this->m_anjungan->cek_shift_jam();
$this->load->model('m_anjungan');
$cekanjungan = $this->m_anjungan->cekanjungan();
//-----------------end untuk cek jam shift, jam shift, dan aktif klinik------------------//
$this->load->view('includes3/template', $data);
}
//--------------------------------------------------------END ANTRIAN PENDAFTARAN--------------------------------//
//--------------------------------------------------------START ANTRIAN PENDAFTARAN 2--------------------------------//
function info_anjungan2(){
$data['title'] = 'Antrian Pendaftaran';
$data['main_content'] = 'anjungan/v_info_anjungan2';
$this->load->model('m_anjungan');
$info_pengunjung = $this->m_anjungan->info_pengunjung();
$this->load->vars('ip', $info_pengunjung);
$this->load->model('m_klinik');
$klinik = $this->m_klinik->index();
$this->load->vars('mk', $klinik);
$this->load->model('m_loket');
$loket = $this->m_loket->index();
$this->load->vars('ml', $loket);
$this->load->view('includes3/template', $data);
}
//--------------------------------------------------------END ANTRIAN PENDAFTARAN--------------------------------//
//--------------------------------------------------------START ANTRIAN PENDAFTARAN 2--------------------------------//
function info_anjungan3(){
$data['title'] = 'Antrian Pendaftaran';
$data['main_content'] = 'anjungan/v_info_anjungan3';
$this->load->model('m_anjungan');
$info_pengunjung = $this->m_anjungan->info_pengunjung();
$this->load->vars('ip', $info_pengunjung);
$this->load->model('m_klinik');
$klinik = $this->m_klinik->index();
$this->load->vars('mk', $klinik);
$this->load->model('m_loket');
$loket = $this->m_loket->index();
$this->load->vars('ml', $loket);
$this->load->view('includes3/template', $data);
}
//--------------------------------------------------------END ANTRIAN PENDAFTARAN--------------------------------//
//--------------------------------------------------------START BARCODE------------------------------------------------//
function barcode($barcode){
$this->load->model('m_anjungan');
$this->m_anjungan->barcode($barcode);
redirect('index.php/ps_anjungan/admin_anjungan');
}
//--------------------------------------------------------END BARCODE------------------------------------------------//
function proses_datang($id){
$this->load->model('m_anjungan');
$this->m_anjungan->datang($id);
redirect('index.php/ps_anjungan/admin_anjungan');
}
//--------------------------------------------------------START ANTRIAN KLINIK----------------------------------------------------------//
function proses_bypass($id){
$this->load->model('m_anjungan');
$this->m_anjungan->bypass($id);
redirect('index.php/ps_anjungan/admin_anjungan');
}
function info_klinik(){
$data['title'] = 'Antrian Klinik';
$data['main_content'] = 'anjungan/v_info_klinik';
$this->load->model('m_anjungan');
$info_pengunjung = $this->m_anjungan->info_klinik();
$this->load->vars('ip', $info_pengunjung);
$this->load->model('m_anjungan');
$info_panggil = $this->m_anjungan->panggilpasien();
$this->load->vars('pg', $info_panggil);
$this->load->model('m_klinik');
$klinik = $this->m_klinik->index();
$this->load->vars('mk', $klinik);
//-----------------start untuk cek jam shift, jam shift, dan aktif klinik------------------//
$this->load->model('m_anjungan');
$info_pengunjung = $this->m_anjungan->cek_shift_jam();
$this->load->model('m_anjungan');
$cekanjungan = $this->m_anjungan->cekanjungan();
//-----------------end untuk cek jam shift, jam shift, dan aktif klinik------------------//
$this->load->view('includes3/template', $data);
}
//--------------------------------------------------------END ANTRIAN KLINIK----------------------------------------------------------//
public function panggil_anjungan_null($idpp){
$this->load->model('m_loket');
$this->m_loket->proses_panggil_anjungan_null($idpp);
redirect('index.php/ps_anjungan/info_anjungan');
}
public function panggil_admin_null($idpp){
$this->load->model('m_loket');
$this->m_loket->proses_panggil_null($idpp);
redirect('index.php/ps_anjungan/info_klinik');
}
}
?>

View File

@@ -0,0 +1,93 @@
<?php
//-------------ID fast track = 14
class Ps_fasttrack extends CI_Controller {
//-----------start variables for check action access----------//
public $vartambah = null;
public $varedit = null;
public $vardelete = null;
public $varview = null;
//-----------start variables for check action access----------//
function __construct(){
parent::__construct();
$this->check_isvalidated();
$this->load->helper(array('form', 'date'));
}
private function check_isvalidated(){
if(! $this->session->userdata('validated')){
redirect('index.php/login');
}
//--------------start check access this form page-------------//
$this->db->where('mum_tipeuser_id', $this->session->userdata('s_FK_TipeUser'));
$this->db->where('mum_menu_id', '14');
$cekMenu = $this->db->get('master_user_menu');
$rowcount = $cekMenu->num_rows();
if($rowcount==0){
redirect('index.php');
}else{
foreach ($cekMenu->result() as $cm)
{
$this->vartambah=$cm->mum_tambah;
$this->varedit=$cm->mum_ubah;
$this->vardelete=$cm->mum_hapus;
$this->varview=$cm->mum_lihat;
}
}
//--------------end check access this form page-------------//
}
public function index($error = NULL) {
$data['title'] = 'Fast Track';
$data['main_content'] = 'fasttrack/v_fasttrack';
//$data['main_content'] = 'maintenance';
$data['error']=$error;
$this->load->model('m_fasttrack');
$fasttrack = $this->m_fasttrack->index();
$this->load->vars('fs', $fasttrack);
$this->load->view('includes/template', $data);
}
public function set_fasttrack() {
//----start validate page tambah-------//
//if($this->vartambah==null){redirect('index.php/ps_fasttrack');}
//----end validate page tambah---------//
$this->load->helper('form');
$this->load->helper('url');
$this->load->library('form_validation');
$this->form_validation->set_rules('penanggungjawab','Nama Penanggung Jawab','required');
$this->form_validation->set_rules('ket','Alasan Fast Track','required');
$id = $this->input->post('idpengunjung');
if($this->form_validation->run()==FALSE){
$data['title'] = 'Fast Track';
$data['main_content'] = 'fasttrack/v_fasttrack';
$this->load->model('m_fasttrack');
$fasttrack = $this->m_fasttrack->index();
$this->load->vars('fs', $fasttrack);
$this->load->view('includes/template', $data);
}else{
$this->load->model('m_fasttrack');
$this->m_fasttrack->setfastrack();
$this->load->model('m_anjungan');
$fasttrack = $this->m_anjungan->cetakulang($id);
$this->load->vars('cu', $fasttrack);
$this->load->model('m_loket');
$getloket = $this->m_loket->index();
$this->load->vars('lk', $getloket);
$this->load->view('print/print_anjungan/p_fasttrack2');
//$this->session->set_flashdata('message', 'Anda berhasil melakukan fast track');
//redirect('index.php/ps_fasttrack');
}
}
}
?>

View File

@@ -0,0 +1,212 @@
<?php
//-------------ID hak akses = 3
class Ps_hakakses extends CI_Controller {
//-----------start variables for check action access----------//
public $vartambah = null;
public $varedit = null;
public $vardelete = null;
public $varview = null;
//-----------start variables for check action access----------//
function __construct(){
parent::__construct();
$this->check_isvalidated();
$this->load->helper(array('form', 'date'));
}
private function check_isvalidated(){
if(! $this->session->userdata('validated')){
redirect('index.php/login');
}
//--------------start check access this form page-------------//
$this->db->where('mum_tipeuser_id', $this->session->userdata('s_FK_TipeUser'));
$this->db->where('mum_menu_id', '3');
$cekMenu = $this->db->get('master_user_menu');
$rowcount = $cekMenu->num_rows();
if($rowcount==0){
redirect('index.php');
}else{
foreach ($cekMenu->result() as $cm)
{
$this->vartambah=$cm->mum_tambah;
$this->varedit=$cm->mum_ubah;
$this->vardelete=$cm->mum_hapus;
$this->varview=$cm->mum_lihat;
}
}
//--------------end check access this form page-------------//
}
public function index($error = NULL) {
$data['title'] = 'Hak Akses';
$data['main_content'] = 'setting/hakakses/v_hakakses';
$data['error']=$error;
$this->load->model('m_tipeuser');
$hakakses = $this->m_tipeuser->index();
$this->load->vars('ha', $hakakses);
$this->load->view('includes/template', $data);
}
// fungsi untuk menampilkan form tambah data
public function add() {
//----start validate page tambah-------//
if($this->vartambah==null){redirect('index.php/ps_hakakses');}
//----end validate page tambah---------//
$data['title'] = 'Tambah Tipe User';
$data['actionform'] = 'prosesadd';
$data['main_content'] = 'setting/hakakses/form_tipeuser';
$this->load->view('includes/template', $data);
}
//fungsi untuk memproses penambahan dengan memanggil model
public function prosesadd() {
//----start validate page tambah-------//
if($this->vartambah==null){redirect('index.php/ps_hakakses');}
//----end validate page tambah---------//
$this->load->helper('form');
$this->load->helper('url');
$this->load->library('form_validation');
$this->form_validation->set_rules('namatipeuser','Nama Tipe User','required');
if($this->form_validation->run()==FALSE){
$data['title'] = 'Tambah Tipe User';
$data['actionform'] = 'prosesadd';
$data['main_content'] = 'setting/hakakses/form_tipeuser';
$this->load->view('includes/template', $data);
}else{
$this->load->model('m_tipeuser');
$this->m_tipeuser->insert();
$this->session->set_flashdata('message', 'Anda berhasil menambahkan Tipe User baru');
redirect('index.php/ps_hakakses');
}
}
//fungsi untuk menampilkan form edit data dengan data terpilih
public function edit($id) {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_hakakses');}
//----end validate page edit---------//
$data['title'] = 'Edit Tipe User';
$data['actionform'] = 'prosesedit';
$data['main_content'] = 'setting/hakakses/form_tipeuser';
$this->load->model('m_tipeuser');
$hakakses = $this->m_tipeuser->edit($id);
$this->load->vars('ha', $hakakses);
$this->load->view('includes/template', $data);
}
//funsi untuk memproses update data
public function prosesedit() {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_hakakses');}
//----end validate page edit---------//
$id = $this->input->post('id');
$this->load->helper('form');
$this->load->helper('url');
$this->load->library('form_validation');
$this->form_validation->set_rules('namatipeuser','Nama Tipe User','required');
if($this->form_validation->run()==FALSE){
$data['title'] = 'Edit Tipe User';
$data['actionform'] = 'prosesedit';
$data['main_content'] = 'setting/hakakses/form_tipeuser';
$this->load->model('m_tipeuser');
$hakakses = $this->m_tipeuser->edit($id);
$this->load->vars('ha', $hakakses);
$this->load->view('includes/template', $data);
}
else{
$this->session->set_flashdata('message', 'Anda berhasil mengedit Tipe User');
$this->load->model('m_tipeuser');
$this->m_tipeuser->prosesedit();
redirect('index.php/ps_hakakses');
}
}
//fungsi untuk menampilkan form view data dengan data terpilih
public function view($id) {
//----start validate page view-------//
if($this->varview==null){redirect('index.php/ps_hakakses');}
//----end validate page view---------//
$data['title'] = 'View Tipe User';
$data['actionform'] = 'prosesview';
$data['main_content'] = 'setting/hakakses/form_tipeuser';
$this->load->model('m_tipeuser');
$hakakses = $this->m_tipeuser->view($id);
$this->load->vars('ha', $hakakses);
$this->load->view('includes/template', $data);
}
//fungsi untuk delete
function delete($id) {
//----start validate page delete-------//
if($this->vardelete==null){redirect('index.php/ps_hakakses');}
//----end validate page delete---------//
$this->session->set_flashdata('message', 'Anda berhasil menghapus Tipe User');
$this->load->model('m_tipeuser');
$this->m_tipeuser->delete($id);
redirect('index.php/ps_hakakses');
}
//--------------------------------------------------HAK AKSES---------------------------------------------------------//
public function edithakakses($id) {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_hakakses');}
//----end validate page edit---------//
$data['title'] = 'Edit Hak Akses Menu';
$data['actionform'] = 'prosesedithakakses';
$data['main_content'] = 'setting/hakakses/form_hakakses';
$data['iduserpost']=$id;
$this->load->model('m_tipeuser');
$tipeuser = $this->m_tipeuser->edit($id);
$this->load->vars('tu', $tipeuser);
$this->load->model('m_menu');
$menu = $this->m_menu->urutan();
$this->load->vars('mn', $menu);
$this->load->model('m_menu');
$hakakses = $this->m_menu->hakakses($id);
$this->load->vars('um', $hakakses);
$this->load->view('includes/template', $data);
}
//funsi untuk memproses update data karyawan
public function prosesedithakakses() {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_hakakses');}
//----end validate page edit---------//
$id = $this->input->post('id');
$this->load->helper('form');
$this->load->helper('url');
$this->load->library('form_validation');
$this->load->model('m_tipeuser');
$tipeuser = $this->m_tipeuser->edit($id);
$this->load->vars('tu', $tipeuser);
$this->load->model('m_menu');
$menu = $this->m_menu->index();
$this->load->vars('mn', $menu);
$this->load->model('m_menu');
$hakakses = $this->m_menu->hakakses($id);
$this->load->vars('um', $hakakses);
$this->session->set_flashdata('message', 'Anda berhasil mengedit hakakses');
$this->load->model('m_hakakses');
$this->m_hakakses->prosesedithakakses();
redirect('index.php/ps_hakakses');
}
}
?>

View File

@@ -0,0 +1,156 @@
<?php
//-------------ID master klinik = 6
class Ps_klinik extends CI_Controller {
//-----------start variables for check action access----------//
public $vartambah = null;
public $varedit = null;
public $vardelete = null;
public $varview = null;
//-----------start variables for check action access----------//
function __construct(){
parent::__construct();
$this->check_isvalidated();
$this->load->helper(array('form', 'date'));
}
private function check_isvalidated(){
if(! $this->session->userdata('validated')){
redirect('index.php/login');
}
//--------------start check access this form page-------------//
$this->db->where('mum_tipeuser_id', $this->session->userdata('s_FK_TipeUser'));
$this->db->where('mum_menu_id', '6');
$cekMenu = $this->db->get('master_user_menu');
$rowcount = $cekMenu->num_rows();
if($rowcount==0){
redirect('index.php');
}else{
foreach ($cekMenu->result() as $cm)
{
$this->vartambah=$cm->mum_tambah;
$this->varedit=$cm->mum_ubah;
$this->vardelete=$cm->mum_hapus;
$this->varview=$cm->mum_lihat;
}
}
//--------------end check access this form page-------------//
}
public function index($error = NULL) {
$data['title'] = 'Master Klinik';
$data['main_content'] = 'setting/klinik/v_klinik';
$data['error']=$error;
$this->load->model('m_klinik');
$masterklinik = $this->m_klinik->index();
$this->load->vars('mk', $masterklinik);
$this->load->view('includes/template', $data);
}
// fungsi untuk menampilkan form tambah data
public function add() {
//----start validate page tambah-------//
if($this->vartambah==null){redirect('index.php/ps_klinik');}
//----end validate page tambah---------//
$data['title'] = 'Tambah Klinik';
$data['actionform'] = 'prosesadd';
$data['main_content'] = 'setting/klinik/form_klinik';
$this->load->view('includes/template', $data);
}
//fungsi untuk memproses penambahan dengan memanggil model
public function prosesadd() {
//----start validate page tambah-------//
if($this->vartambah==null){redirect('index.php/ps_klinik');}
//----end validate page tambah---------//
$this->load->helper('form');
$this->load->helper('url');
$this->load->library('form_validation');
$this->form_validation->set_rules('nama','Nama Klinik','required');
if($this->form_validation->run()==FALSE){
$data['title'] = 'Tambah Klinik';
$data['actionform'] = 'prosesadd';
$data['main_content'] = 'setting/klinik/form_klinik';
$this->load->view('includes/template', $data);
}else{
$this->load->model('m_klinik');
$this->m_klinik->insert();
$this->session->set_flashdata('message', 'Anda berhasil menambahkan Klinik baru');
redirect('index.php/ps_klinik');
}
}
//fungsi untuk menampilkan form edit data dengan data terpilih
public function edit($id) {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_klinik');}
//----end validate page edit---------//
$data['title'] = 'Edit Klinik';
$data['actionform'] = 'prosesedit';
$data['main_content'] = 'setting/klinik/form_klinik';
$this->load->model('m_klinik');
$masterklinik = $this->m_klinik->edit($id);
$this->load->vars('mk', $masterklinik);
$this->load->view('includes/template', $data);
}
//funsi untuk memproses update data
public function prosesedit() {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_klinik');}
//----end validate page edit---------//
$id = $this->input->post('id');
$this->load->helper('form');
$this->load->helper('url');
$this->load->library('form_validation');
$this->form_validation->set_rules('nama','Nama Klinik','required');
if($this->form_validation->run()==FALSE){
$data['title'] = 'Edit Klinik';
$data['actionform'] = 'prosesedit';
$data['main_content'] = 'setting/klinik/form_klinik';
$this->load->model('m_klinik');
$masterklinik = $this->m_klinik->edit($id);
$this->load->vars('mk', $masterklinik);
$this->load->view('includes/template', $data);
}
else{
$this->session->set_flashdata('message', 'Anda berhasil mengedit Klinik');
$this->load->model('m_klinik');
$this->m_klinik->prosesedit();
redirect('index.php/ps_klinik');
}
}
//fungsi untuk menampilkan form view data dengan data terpilih
public function view($id) {
//----start validate page view-------//
if($this->varview==null){redirect('index.php/ps_klinik');}
//----end validate page view---------//
$data['title'] = 'View Klinik';
$data['actionform'] = 'prosesview';
$data['main_content'] = 'setting/klinik/form_klinik';
$this->load->model('m_klinik');
$masterklinik = $this->m_klinik->view($id);
$this->load->vars('mk', $masterklinik);
$this->load->view('includes/template', $data);
}
//fungsi untuk delete
function delete($id) {
//----start validate page delete-------//
if($this->vardelete==null){redirect('index.php/ps_klinik');}
//----end validate page delete---------//
$this->session->set_flashdata('message', 'Anda berhasil menghapus Klinik');
$this->load->model('m_klinik');
$this->m_klinik->delete($id);
redirect('index.php/ps_klinik');
}
}
?>

View File

@@ -0,0 +1,169 @@
<?php
//-------------ID Klinik Admin = 8
class Ps_klinik_admin extends CI_Controller {
//-----------start variables for check action access----------//
public $vartambah = null;
public $varedit = null;
public $vardelete = null;
public $varview = null;
//-----------start variables for check action access----------//
function __construct(){
parent::__construct();
$this->check_isvalidated();
$this->load->helper(array('form', 'date'));
}
private function check_isvalidated(){
if(! $this->session->userdata('validated')){
redirect('index.php/login');
}
//--------------start check access this form page-------------//
$this->db->where('mum_tipeuser_id', $this->session->userdata('s_FK_TipeUser'));
$this->db->where('mum_menu_id', '8');
$cekMenu = $this->db->get('master_user_menu');
$rowcount = $cekMenu->num_rows();
if($rowcount==0){
redirect('index.php');
}else{
foreach ($cekMenu->result() as $cm)
{
$this->vartambah=$cm->mum_tambah;
$this->varedit=$cm->mum_ubah;
$this->vardelete=$cm->mum_hapus;
$this->varview=$cm->mum_lihat;
}
}
//--------------end check access this form page-------------//
}
public function index($error = NULL) {
$data['title'] = 'Loket';
$data['main_content'] = 'klinik/v_klinik_admin';
$data['error']=$error;
$data['quotabangkuklinik']=0;
$data['shiftbuka']=0;
$data['jumshift']=0;
$data['idklinik']=0;
$data['autoshift']=0;
$data['namaklinik']="";
$idklinik=0;
$iduser = $this->session->userdata('s_ID_User');
//----------------set hari------------------//
$hari = date("D");
switch($hari){
case 'Sun':$hari_ini = "Minggu";break;case 'Mon':$hari_ini = "Senin";break;case 'Tue':$hari_ini = "Selasa";break;
case 'Wed':$hari_ini = "Rabu";break;case 'Thu':$hari_ini = "Kamis";break;case 'Fri':$hari_ini = "Jumat";break;
case 'Sat':$hari_ini = "Sabtu";break;default:$hari_ini = "Tidak di ketahui";break;
}
//----------------set bulan------------------//
$bulan = date("m");
switch($bulan){
case '01':$bulan_ini = "Januari";break;case '02':$bulan_ini = "Februari";break;case '03':$bulan_ini = "Maret";break;
case '04':$bulan_ini = "April";break;case '05':$bulan_ini = "Mei";break;case '06':$bulan_ini = "Juni";break;
case '07':$bulan_ini = "Juli";break;case '08':$bulan_ini = "Agustus";break;case '09':$bulan_ini = "September";break;
case '10':$bulan_ini = "Oktober";break;case '11':$bulan_ini = "November";break;case '12':$bulan_ini = "Desember";break;
default:$bulan_ini = "Tidak di ketahui";break;
}
$this->db->join('master_klinik', 'mk_id = mu_klinik_id');
$this->db->where('mu_id', $iduser);
$user = $this->db->get('master_user');
foreach ($user->result() as $datuser){
$data['title'] = "KLINIK <code>".$datuser->mk_nama."</code> | ".$hari_ini.", ".date("d")." ".$bulan_ini." ".date("Y");
$data['quotabangkuklinik']=$datuser->mk_quota_bangku;
$data['shiftbuka']=$datuser->mk_shift_buka;
$data['jumshift']=$datuser->mk_shift;
$data['idklinik']=$datuser->mk_id;
$data['autoshift']=$datuser->mk_auto_shift;
$idklinik=$datuser->mk_id;
$data['namaklinik']=$datuser->mk_nama;
}
$this->load->model('m_klinik');
$infopengunjung = $this->m_klinik->infopengunjung($idklinik);
$this->load->vars('ip', $infopengunjung);
$this->load->model('m_klinik');
$klinik = $this->m_klinik->index();
$this->load->vars('kl', $klinik);
$this->load->model('m_klinik');
$pengunjung = $this->m_klinik->pengunjungklinik($idklinik);
$this->load->vars('pk', $pengunjung);
$this->load->model('m_klinik');
$datpeng = $this->m_klinik->datapengunjung($idklinik);
$this->load->vars('dp', $datpeng);
$this->load->view('includes/template', $data);
}
public function panggilpengunjung($jumlah,$klinik){
$this->load->model('m_klinik');
$this->m_klinik->panggil($jumlah,$klinik);
$this->session->set_flashdata('message', 'Anda Berhasil Memanggil Pengunjung Sebanyak '.$jumlah.' Orang, Tunggu Beberapa Saat');
redirect('index.php/ps_klinik_admin');
}
public function proses_admin($pengunjung, $kode){
$this->load->model('m_klinik');
$this->m_klinik->proses($pengunjung, $kode);
if($kode==6){
$this->session->set_flashdata('message', 'Anda Berhasil Melakukan Proses Datang');
}elseif($kode==7){
$this->session->set_flashdata('message', 'Anda Berhasil Melakukan Proses');
}elseif($kode==8){
$this->session->set_flashdata('message', 'Anda Berhasil Melakukan Proses Pending');
}elseif($kode==9){
$this->session->set_flashdata('message', 'Anda Berhasil Melakukan Proses Selesai');
}
redirect('index.php/ps_klinik_admin');
}
public function ubahklinik(){
$ket = $this->input->post('ket');//ket 1 = Ubah Klinik, ket 2 = Konsul
if($ket==1){
$this->load->model('m_klinik');
$this->m_klinik->ubahklinik();
$this->session->set_flashdata('message', 'Anda Berhasil Mengubah Klinik Pengunjung');
redirect('index.php/ps_klinik_admin');
}else{
$this->load->model('m_klinik');
$this->m_klinik->konsul();
$this->session->set_flashdata('message', 'Anda Berhasil Melakukan Konsultasi');
redirect('index.php/ps_klinik_admin');
}
}
public function autoshift($id,$kode){
$this->load->model('m_klinik');
$this->m_klinik->autoshift($id,$kode);
$this->session->set_flashdata('message', 'Anda Berhasil Mengubah Otomatis Shift');
redirect('index.php/ps_klinik_admin');
}
public function aktif($id){
$this->load->model('m_klinik');
$this->m_klinik->aktif($id);
$this->session->set_flashdata('message', 'Anda Berhasil Mengaktifkan kembali pasien');
redirect('index.php/ps_klinik_admin');
}
}
?>

View File

@@ -0,0 +1,103 @@
<?php
//-------------ID list pasien = 20
class Ps_listpasien extends CI_Controller {
//-----------start variables for check action access----------//
public $vartambah = null;
public $varedit = null;
public $vardelete = null;
public $varview = null;
//-----------start variables for check action access----------//
function __construct(){
parent::__construct();
$this->check_isvalidated();
$this->load->helper(array('form', 'date'));
}
private function check_isvalidated(){
if(! $this->session->userdata('validated')){
redirect('index.php/login');
}
//--------------start check access this form page-------------//
$this->db->where('mum_tipeuser_id', $this->session->userdata('s_FK_TipeUser'));
$this->db->where('mum_menu_id', '20');
$cekMenu = $this->db->get('master_user_menu');
$rowcount = $cekMenu->num_rows();
if($rowcount==0){
redirect('index.php');
}else{
foreach ($cekMenu->result() as $cm)
{
$this->vartambah=$cm->mum_tambah;
$this->varedit=$cm->mum_ubah;
$this->vardelete=$cm->mum_hapus;
$this->varview=$cm->mum_lihat;
}
}
//--------------end check access this form page-------------//
}
public function index($error = NULL) {
$data['title'] = 'List Pasien';
$data['main_content'] = 'listpasien/v_listpasien';
$data['error']=$error;
$this->load->model('m_listpasien');
$listpasien = $this->m_listpasien->index();
$this->load->vars('lp', $listpasien);
$this->load->view('includes/template', $data);
}
public function search() {
$data['title'] = 'List Pasien';
$data['main_content'] = 'listpasien/v_listpasien';
$data['tglset'] = $this->input->post('tglperiksa');
$data['ketset'] = $this->input->post('ketkunjungan');
$this->load->model('m_listpasien');
$listpasien = $this->m_listpasien->search();
$this->load->vars('lp', $listpasien);
$this->load->view('includes/template', $data);
}
public function laporanpasien() {
$data['title'] = 'List Pasien';
$data['main_content'] = 'listpasien/v_laporanpasien';
$data['bulanset'] = $this->input->post('bulankunjungan');
$data['tahunset'] = $this->input->post('tahunkunjungan');
$this->load->model('m_listpasien');
$listpasien = $this->m_listpasien->laporanpasien();
$this->load->vars('lp', $listpasien);
$this->load->view('includes/template', $data);
}
public function laporanpasienperklinik() {
$data['title'] = 'List Pasien';
$data['main_content'] = 'listpasien/v_laporanpasienperklinik';
$data['bulanset'] = $this->input->post('bulankunjungan');
$data['tahunset'] = $this->input->post('tahunkunjungan');
//$this->load->model('m_listpasien');
//$listpasien = $this->m_listpasien->laporanpasien();
//$this->load->vars('lp', $listpasien);
$this->load->model('m_klinik');
$masterklinik = $this->m_klinik->index();
$this->load->vars('mk', $masterklinik);
$this->load->view('includes/template', $data);
}
}
?>

View File

@@ -0,0 +1,184 @@
<?php
//-------------ID master loket = 5
class Ps_loket extends CI_Controller {
//-----------start variables for check action access----------//
public $vartambah = null;
public $varedit = null;
public $vardelete = null;
public $varview = null;
//-----------start variables for check action access----------//
function __construct(){
parent::__construct();
$this->check_isvalidated();
$this->load->helper(array('form', 'date'));
}
private function check_isvalidated(){
if(! $this->session->userdata('validated')){
redirect('index.php/login');
}
//--------------start check access this form page-------------//
$this->db->where('mum_tipeuser_id', $this->session->userdata('s_FK_TipeUser'));
$this->db->where('mum_menu_id', '5');
$cekMenu = $this->db->get('master_user_menu');
$rowcount = $cekMenu->num_rows();
if($rowcount==0){
redirect('index.php');
}else{
foreach ($cekMenu->result() as $cm)
{
$this->vartambah=$cm->mum_tambah;
$this->varedit=$cm->mum_ubah;
$this->vardelete=$cm->mum_hapus;
$this->varview=$cm->mum_lihat;
}
}
//--------------end check access this form page-------------//
}
public function index($error = NULL) {
$data['title'] = 'Master Loket';
$data['main_content'] = 'setting/loket/v_loket';
$data['error']=$error;
$this->load->model('m_loket');
$masterloket = $this->m_loket->index();
$this->load->vars('ml', $masterloket);
$this->load->view('includes/template', $data);
}
// fungsi untuk menampilkan form tambah data
public function add() {
//----start validate page tambah-------//
if($this->vartambah==null){redirect('index.php/ps_loket');}
//----end validate page tambah---------//
$data['title'] = 'Tambah Loket';
$data['actionform'] = 'prosesadd';
$data['main_content'] = 'setting/loket/form_loket';
$this->load->model('m_klinik');
$masterklinik = $this->m_klinik->index();
$this->load->vars('mk', $masterklinik);
$this->load->view('includes/template', $data);
}
//fungsi untuk memproses penambahan dengan memanggil model
public function prosesadd() {
//----start validate page tambah-------//
if($this->vartambah==null){redirect('index.php/ps_loket');}
//----end validate page tambah---------//
$this->load->helper('form');
$this->load->helper('url');
$this->load->library('form_validation');
$this->form_validation->set_rules('nama','Nama Loket','required');
if($this->form_validation->run()==FALSE){
$data['title'] = 'Tambah Loket';
$data['actionform'] = 'prosesadd';
$data['main_content'] = 'setting/loket/form_loket';
$this->load->model('m_klinik');
$masterklinik = $this->m_klinik->index();
$this->load->vars('mk', $masterklinik);
$this->load->view('includes/template', $data);
}else{
$this->load->model('m_loket');
$this->m_loket->insert();
$this->session->set_flashdata('message', 'Anda berhasil menambahkan Loket baru');
redirect('index.php/ps_loket');
}
}
//fungsi untuk menampilkan form edit data dengan data terpilih
public function edit($id) {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_loket');}
//----end validate page edit---------//
$data['title'] = 'Edit Loket';
$data['actionform'] = 'prosesedit';
$data['main_content'] = 'setting/loket/form_loket';
$this->load->model('m_loket');
$masterloket = $this->m_loket->edit($id);
$this->load->vars('ml', $masterloket);
$this->load->model('m_klinik');
$masterklinik = $this->m_klinik->index();
$this->load->vars('mk', $masterklinik);
$this->load->view('includes/template', $data);
}
//funsi untuk memproses update data
public function prosesedit() {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_loket');}
//----end validate page edit---------//
$id = $this->input->post('id');
$this->load->helper('form');
$this->load->helper('url');
$this->load->library('form_validation');
$this->form_validation->set_rules('nama','Nama Loket','required');
if($this->form_validation->run()==FALSE){
$data['title'] = 'Edit Loket';
$data['actionform'] = 'prosesedit';
$data['main_content'] = 'setting/loket/form_loket';
$this->load->model('m_loket');
$masterloket = $this->m_loket->edit($id);
$this->load->vars('ml', $masterloket);
$this->load->model('m_klinik');
$masterklinik = $this->m_klinik->index();
$this->load->vars('mk', $masterklinik);
$this->load->view('includes/template', $data);
}
else{
$this->session->set_flashdata('message', 'Anda berhasil mengedit Loket');
$this->load->model('m_loket');
$this->m_loket->prosesedit();
redirect('index.php/ps_loket');
}
}
//fungsi untuk menampilkan form view data dengan data terpilih
public function view($id) {
//----start validate page view-------//
if($this->varview==null){redirect('index.php/ps_loket');}
//----end validate page view---------//
$data['title'] = 'View Loket';
$data['actionform'] = 'prosesview';
$data['main_content'] = 'setting/loket/form_loket';
$this->load->model('m_loket');
$masterloket = $this->m_loket->view($id);
$this->load->vars('ml', $masterloket);
$this->load->model('m_klinik');
$masterklinik = $this->m_klinik->index();
$this->load->vars('mk', $masterklinik);
$this->load->view('includes/template', $data);
}
//fungsi untuk delete
function delete($id) {
//----start validate page delete-------//
if($this->vardelete==null){redirect('index.php/ps_loket');}
//----end validate page delete---------//
$this->session->set_flashdata('message', 'Anda berhasil menghapus Loket');
$this->load->model('m_loket');
$this->m_loket->delete($id);
redirect('index.php/ps_loket');
}
}
?>

View File

@@ -0,0 +1,283 @@
<?php
//-------------ID Loket Admin = 7
class Ps_loket_admin extends CI_Controller {
//-----------start variables for check action access----------//
public $vartambah = null;
public $varedit = null;
public $vardelete = null;
public $varview = null;
//-----------start variables for check action access----------//
function __construct(){
parent::__construct();
$this->check_isvalidated();
$this->load->helper(array('form', 'date'));
}
private function check_isvalidated(){
if(! $this->session->userdata('validated')){
redirect('index.php/login');
}
//--------------start check access this form page-------------//
$this->db->where('mum_tipeuser_id', $this->session->userdata('s_FK_TipeUser'));
$this->db->where('mum_menu_id', '7');
$cekMenu = $this->db->get('master_user_menu');
$rowcount = $cekMenu->num_rows();
if($rowcount==0){
redirect('index.php');
}else{
foreach ($cekMenu->result() as $cm)
{
$this->vartambah=$cm->mum_tambah;
$this->varedit=$cm->mum_ubah;
$this->vardelete=$cm->mum_hapus;
$this->varview=$cm->mum_lihat;
}
}
//--------------end check access this form page-------------//
}
public function index($error = NULL) {
$data['title'] ='Loket';
$data['main_content'] ='loket/v_loket_admin';
$data['error'] =$error;
$data['klinik'] ="";
$data['quotaloket'] =0;
$data['idklinik'] ="";
$data['shiftbuka'] ="";
$data['namaklinik'] ="";
$data['aktifklinik'] ="";
$data['namaloket'] ="";
$data['idloket'] ="";
$data['shiftpenuh'] ="";
$data['online'] ="";
$iduser = $this->session->userdata('s_ID_User');
$this->db->join('master_loket', 'ml_id = mu_loket_id');
$this->db->where('mu_id', $iduser);
$user = $this->db->get('master_user');
foreach ($user->result() as $datuser){
$klinikpecah = explode(",",$datuser->ml_pelayanan);
$pembayaran = $datuser->ml_pembayaran;
$online = $datuser->ml_online;
$hasilklinik = "";
$idklinik = "";
$shiftbuka = "";
$namaklinik = "";
$aktifklinik = "";
$jumshift = "";
$shiftpenuh = "";
$quotaklinik = "";
$jumlah = count($klinikpecah);
for($i=0;$i<$jumlah;$i++){
$this->db->where('mk_id', $klinikpecah[$i]);
$klinik = $this->db->get('master_klinik');
foreach ($klinik->result() as $datklinik){
if($jumlah<=5){$hasilklinik = $hasilklinik."<code>".$datklinik->mk_nama."</code> ";}
$idklinik = $idklinik.$datklinik->mk_id."|";
$shiftbuka = $shiftbuka.$datklinik->mk_shift_buka."|";
$namaklinik = $namaklinik.$datklinik->mk_nama."|";
$aktifklinik = $aktifklinik.$datklinik->mk_aktif."|";
$jumshift = $jumshift.$datklinik->mk_shift."|";
$shiftpenuh = $shiftpenuh.$datklinik->mk_shift_penuh."|";
$quotaklinik = $quotaklinik.$datklinik->mk_quota."|";
}
}
$data['idklinik'] = $idklinik;
$data['shiftbuka'] = $shiftbuka;
$data['namaklinik'] = $namaklinik;
$data['aktifklinik']= $aktifklinik;
$data['jumshift'] = $jumshift;
$data['namaloket'] = $datuser->ml_nama;
$data['idloket'] = $datuser->ml_id;
$data['shiftpenuh'] = $shiftpenuh;
$data['quotaklinik']= $quotaklinik;
$data['pembayaran'] = $pembayaran;
$data['online'] = $online;
$data['quotaloket']=$datuser->ml_quota_bangku;
$data['klinik']=$datuser->ml_pelayanan;
//----------------set hari------------------//
$hari = date("D");
switch($hari){
case 'Sun':$hari_ini = "Minggu";break;case 'Mon':$hari_ini = "Senin";break;case 'Tue':$hari_ini = "Selasa";break;
case 'Wed':$hari_ini = "Rabu";break;case 'Thu':$hari_ini = "Kamis";break;case 'Fri':$hari_ini = "Jumat";break;
case 'Sat':$hari_ini = "Sabtu";break;default:$hari_ini = "Tidak di ketahui";break;
}
//----------------set bulan------------------//
$bulan = date("m");
switch($bulan){
case '01':$bulan_ini = "Januari";break;case '02':$bulan_ini = "Februari";break;case '03':$bulan_ini = "Maret";break;
case '04':$bulan_ini = "April";break;case '05':$bulan_ini = "Mei";break;case '06':$bulan_ini = "Juni";break;
case '07':$bulan_ini = "Juli";break;case '08':$bulan_ini = "Agustus";break;case '09':$bulan_ini = "September";break;
case '10':$bulan_ini = "Oktober";break;case '11':$bulan_ini = "November";break;case '':$bulan_ini = "Desember";break;
default:$bulan_ini = "Tidak di ketahui";break;
}
$data['title'] = $datuser->ml_nama." | ".$hari_ini.", ".date("d")." ".$bulan_ini." ".date("Y")." - Pelayanan : ".$hasilklinik;
}
$this->load->model('m_loket');
$infopengunjung = $this->m_loket->infopengunjung();
$this->load->vars('ip', $infopengunjung);
$this->load->model('m_loket');
$pengunjungklinik = $this->m_loket->pengunjungklinik();
$this->load->vars('pk', $pengunjungklinik);
$this->load->model('m_loket');
$pengunjung = $this->m_loket->pengunjung();
$this->load->vars('pg', $pengunjung);
$this->load->model('m_loket');
$terlambat = $this->m_loket->kunjunganterlambat();
$this->load->vars('tr', $terlambat);
$this->load->model('m_klinik');
$klinik = $this->m_klinik->index();
$this->load->vars('kl', $klinik);
$this->load->view('includes/template', $data);
}
public function panggilpengunjung($jumlah){
$this->load->model('m_loket');
$this->m_loket->panggil($jumlah);
$this->session->set_flashdata('message', 'Anda berhasil memanggil pengunjung sebanyak '.$jumlah.' orang, tunggu beberapa saat');
redirect('index.php/ps_loket_admin');
}
public function proses_admin($pengunjung, $kode){
$this->load->model('m_loket');
$this->m_loket->proses($pengunjung, $kode);
if($kode==2){
$this->session->set_flashdata('message', 'Anda berhasil melakukan proses');
}elseif($kode==3){
$this->session->set_flashdata('message', 'Anda berhasil melakukan proses pending');
}elseif($kode==4){
$this->session->set_flashdata('message', 'Anda berhasil selesai');
}
redirect('index.php/ps_loket_admin');
}
public function barcode($pengunjung){
$this->load->model('m_loket');
$this->m_loket->barcode($pengunjung);
$this->session->set_flashdata('message', 'Anda berhasil melakukan tindakan barcode');
redirect('index.php/ps_loket_admin');
}
public function terlambat($pengunjung){
$this->load->model('m_loket');
$this->m_loket->terlambat($pengunjung);
$this->session->set_flashdata('message', 'Anda berhasil melakukan tindakan terlambat');
redirect('index.php/ps_loket_admin');
}
public function aktif($pengunjung){
$this->load->model('m_loket');
$this->m_loket->aktif($pengunjung);
$this->session->set_flashdata('message', 'Anda berhasil melakukan tindakan aktif');
redirect('index.php/ps_loket_admin');
}
public function ubahklinik(){
$this->load->model('m_loket');
$this->m_loket->ubahklinik();
$this->session->set_flashdata('message', 'Anda berhasil mengubah klinik pengunjung');
redirect('index.php/ps_loket_admin');
}
public function proses_pengunjung(){
$this->load->model('m_loket');
$inputpengunjung = $this->m_loket->proses_pengunjung();
$this->load->model('m_loket');
$pengunjung = $this->m_loket->data_pengunjung($this->input->post('idpp_proses'));
if($inputpengunjung===FALSE){
$this->session->set_flashdata('messagefalse', 'Anda gagal menyelesaikan pasien, coba lagi!');
redirect('index.php/ps_loket_admin');
}else{
$data['title'] = 'Loket Admin';
$data['main_content'] = 'print/print_loket/p_tiket_baru';
$data['idpp']=$this->input->post('idpp_proses');
$data['namaloket']=$this->input->post('loket_proses');
$this->load->vars('pp', $pengunjung);
$this->session->set_flashdata('message', 'Anda berhasil selesai');
//redirect('index.php/ps_loket_admin');
$this->load->view('print/print_loket/p_tiket_baru',$data);
}
}
public function proses_pengunjung_berkas($id,$loket){
$data['title'] = 'Loket Admin';
$data['main_content'] = 'print/print_loket/p_tiket_baru_berkas';
$data['namaloket']=$loket;
$this->load->model('m_loket');
$pengunjung = $this->m_loket->data_pengunjung($id);
$this->load->vars('pp', $pengunjung);
$this->load->view('print/print_loket/p_tiket_baru_berkas',$data);
}
public function cetakulang($id){
$data['title'] = 'Loket Admin';
$data['main_content'] = 'print/print_loket/p_tiket_baru';
$data['idpp']=$id;
$this->load->model('m_loket');
$pengunjung = $this->m_loket->data_pengunjung($id);
$this->load->vars('pp', $pengunjung);
$this->load->view('print/print_loket/p_ulang_tiket_baru',$data);
}
public function panggil_admin($idprt, $idpp, $loket){
$this->load->model('m_loket');
$this->m_loket->proses_panggil($idpp, $loket);
//$this->session->set_flashdata('message', 'Anda berhasil memanggil tunggu beberapa saat');
redirect('index.php/ps_loket_admin');
}
public function panggil_admin_awal($idprt, $idpp, $loket){
$this->load->model('m_loket');
$this->m_loket->proses_panggil($idpp, $loket);
$this->proses_admin($idprt, "2");
redirect('index.php/ps_loket_admin');
}
public function panggil_anjungan_admin($idprt, $idpp){
$this->load->model('m_loket');
$this->m_loket->proses_panggil_anjungan($idpp);
redirect('index.php/ps_loket_admin');
}
// public function panggil_admin_null($idpp){
// $this->load->model('m_loket');
// $this->m_loket->proses_panggil_null($idpp);
//
// redirect('index.php/ps_anjungan/info_klinik');
// }
}
?>

View File

@@ -0,0 +1,168 @@
<?php
//-------------ID pasien = 18
class Ps_pasien extends CI_Controller {
//-----------start variables for check action access----------//
public $vartambah = null;
public $varedit = null;
public $vardelete = null;
public $varview = null;
//-----------start variables for check action access----------//
function __construct(){
parent::__construct();
$this->check_isvalidated();
$this->load->helper(array('form', 'date'));
}
private function check_isvalidated(){
if(! $this->session->userdata('validated')){
redirect('index.php/login');
}
//--------------start check access this form page-------------//
$this->db->where('mum_tipeuser_id', $this->session->userdata('s_FK_TipeUser'));
$this->db->where('mum_menu_id', '18');
$cekMenu = $this->db->get('master_user_menu');
$rowcount = $cekMenu->num_rows();
if($rowcount==0){
redirect('index.php');
}else{
foreach ($cekMenu->result() as $cm)
{
$this->vartambah=$cm->mum_tambah;
$this->varedit=$cm->mum_ubah;
$this->vardelete=$cm->mum_hapus;
$this->varview=$cm->mum_lihat;
}
}
//--------------end check access this form page-------------//
}
public function index($error = NULL) {
$data['title'] = 'Data Pasien';
$data['main_content'] = 'pasien/v_pasien';
$data['error']=$error;
$this->load->model('m_pasien');
$ppdata = $this->m_pasien->index();
$this->load->vars('mp', $ppdata);
$this->load->view('includes/template', $data);
}
//fungsi untuk menampilkan form edit data dengan data terpilih
public function edit($id) {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_pasien');}
//----end validate page edit---------//
$data['title'] = 'Edit Pasien';
$data['actionform'] = 'prosesedit';
$data['main_content'] = 'pasien/form_pasien';
$this->load->model('m_pasien');
$ppdata = $this->m_pasien->edit($id);
$this->load->vars('mp', $ppdata);
$this->load->model('m_klinik');
$klinik = $this->m_klinik->index();
$this->load->vars('mk', $klinik);
$this->load->view('includes/template', $data);
}
//funsi untuk memproses update data
public function prosesedit() {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_pasien');}
//----end validate page edit---------//
$id = $this->input->post('id');
$this->load->helper('form');
$this->load->helper('url');
// $this->load->library('form_validation');
// $this->form_validation->set_rules('klinik','Klinik','required');
// $this->form_validation->set_rules('shift','Shift Periksa','required');
// $this->form_validation->set_rules('pembayaran','Jenis Pembayaran','required');
//
// if($this->form_validation->run()==FALSE){
// $data['title'] = 'Edit Pasien';
// $data['actionform'] = 'prosesedit';
// $data['main_content'] = 'pasien/form_pasien';
//
// $this->load->model('m_pasien');
// $ppdata = $this->m_pasien->edit($id);
// $this->load->vars('mp', $ppdata);
//
// $this->load->model('m_klinik');
// $klinik = $this->m_klinik->index();
// $this->load->vars('mk', $klinik);
//
// $this->load->view('includes/template', $data);
// }
// else{
$this->session->set_flashdata('message', 'Anda berhasil mengedit Pasien');
$this->load->model('m_pasien');
$this->m_pasien->prosesedit();
redirect('index.php/ps_pasien');
// }
}
//fungsi untuk menampilkan form view data dengan data terpilih
public function view($id) {
//----start validate page view-------//
if($this->varview==null){redirect('index.php/ps_pasien');}
//----end validate page view---------//
$data['title'] = 'View Pasien';
$data['actionform'] = 'prosesview';
$data['main_content'] = 'pasien/form_pasien';
$this->load->model('m_pasien');
$ppdata = $this->m_pasien->edit($id);
$this->load->vars('mp', $ppdata);
$this->load->model('m_klinik');
$klinik = $this->m_klinik->index();
$this->load->vars('mk', $klinik);
$this->load->view('includes/template', $data);
}
//fungsi untuk delete
// function delete($id) {
// //----start validate page delete-------//
// if($this->vardelete==null){redirect('index.php/ps_pasien');}
// //----end validate page delete---------//
// $this->session->set_flashdata('message', 'Anda berhasil menghapus pasien');
// $this->load->model('m_paien');
// $this->m_paien->delete($id);
// redirect('index.php/ps_pasien');
// }
function datashift(){
$idk = $this->input->post('idklinik');
$jumshift;
$jamshift;
//---------------------start get data klinik--------------//
$this->db->where('mk_id', $idk);
$query_kl = $this->db->get('master_klinik');
foreach ($query_kl->result() as $datklinik ){
$jumshift=$datklinik->mk_shift;
$jamshift=$datklinik->mk_jam_shift;
}
//---------------------end get data klinik--------------//
$pecahjamshift = explode("|",$jamshift);
$numpecah = 0;
for($i=1;$i<=$jumshift;$i++){
$data[] = ['datashift'=>"<option value='$i'>Shift $i &plusmn Mulai Pukul $pecahjamshift[$numpecah] </option>"];
$numpecah++;
}
echo json_encode($data);
}
}
?>

View File

@@ -0,0 +1,164 @@
<?php
//-------------ID loket ranap admin = 23
class Ps_ranap_admin extends CI_Controller {
//-----------start variables for check action access----------//
public $vartambah = null;
public $varedit = null;
public $vardelete = null;
public $varview = null;
//-----------start variables for check action access----------//
function __construct(){
parent::__construct();
$this->check_isvalidated();
$this->load->helper(array('form', 'date'));
}
private function check_isvalidated(){
if(! $this->session->userdata('validated')){
redirect('index.php/login');
}
//--------------start check access this form page-------------//
$this->db->where('mum_tipeuser_id', $this->session->userdata('s_FK_TipeUser'));
$this->db->where('mum_menu_id', '23');
$cekMenu = $this->db->get('master_user_menu');
$rowcount = $cekMenu->num_rows();
if($rowcount==0){
redirect('index.php');
}else{
foreach ($cekMenu->result() as $cm)
{
$this->vartambah=$cm->mum_tambah;
$this->varedit=$cm->mum_ubah;
$this->vardelete=$cm->mum_hapus;
$this->varview=$cm->mum_lihat;
}
}
//--------------end check access this form page-------------//
}
public function index($error = NULL) {
$data['title'] = 'Ranap Admin';
$data['main_content'] = 'ranap/v_ranapadmin';
$data['error']=$error;
$this->load->model('m_loketranap');
$loketranap = $this->m_loketranap->index();
$this->load->vars('rn', $loketranap);
$this->load->model('m_loketranap');
$loketsearch = $this->m_loketranap->searchloket();
$this->load->vars('sl', $loketsearch);
$this->load->view('includes/template', $data);
}
public function prosesadd() {
$no_antrian;
$hasil_nomor = "";
$this->db->like('ppr_tanggal_periksa', date("Y-m-d"));
$this->db->order_by('ppr_nomor_antrian', 'ASC');
//$this->db->where('ppr_tanggal_periksa', date("Y-m-d"));
$query = $this->db->get('proses_pengunjung_ranap');
foreach ($query->result() as $datpengunjung){
$no_antrian = $datpengunjung->ppr_nomor_antrian;
}
if(isset($no_antrian)){
$hasil_nomor = $no_antrian+1;
$nomjum = strlen($hasil_nomor);$nol="";
if($nomjum=="1"){$nol="00";}
elseif($nomjum=="2"){$nol="0";}
$hasil_nomor=$nol.$hasil_nomor;
}else {
$hasil_nomor="001";
}
$insert = array(
'ppr_nomor_antrian' => $hasil_nomor,
'ppr_tanggal_periksa' => date("Y-m-d H:i:s"),
'ppr_status' => "0",
);
$this->db->insert('proses_pengunjung_ranap', $insert);
$last_insert_id = $this->db->insert_id();
redirect('index.php/ps_ranap_admin/print_ranap/'.$last_insert_id);
}
public function print_ranap($id){
$data['title'] = 'Ranap';
$data['main_content'] = 'print/print_ranap/print_ranap';
$this->load->model('m_loketranap');
$getpas = $this->m_loketranap->datapengunjung($id);
$this->load->vars('dp', $getpas);
$this->load->view('print/print_ranap/print_ranap',$data);
}
public function next(){
$pengunjung="";
$this->db->where('ppr_status', "0");
$this->db->where('ppr_loket is NULL', NULL, TRUE);
$this->db->like('ppr_tanggal_periksa', date("Y-m-d"));
$this->db->order_by('ppr_tanggal_periksa', 'DESC');
$query = $this->db->get('proses_pengunjung_ranap');
foreach ($query->result() as $datpengunjung){
$pengunjung = $datpengunjung->ppr_id;
}
$update = array(
'ppr_loket' => $this->session->userdata('s_loket'),
'ppr_panggil' => date("Y-m-d H:i:s"),
'ppr_callsound' => date("Y-m-d H:i:s"),
'ppr_callstatus'=> "1",
'ppr_status' => "1",
);
$this->db->where('ppr_id', $pengunjung);
$this->db->update('proses_pengunjung_ranap', $update);
redirect('index.php/ps_ranap_admin');
}
public function selesai($id){
$update = array(
'ppr_loket' => null,
'ppr_callsound' => null,
'ppr_status' => "3",
);
$this->db->where('ppr_id', $id);
$this->db->update('proses_pengunjung_ranap', $update);
redirect('index.php/ps_ranap_admin');
}
public function callsound($id){
$update = array(
//'ppr_panggil' => date("Y-m-d H:i:s"),
'ppr_callsound' => date("Y-m-d H:i:s"),
'ppr_callstatus'=> "1",
);
$this->db->where('ppr_id', $id);
$this->db->update('proses_pengunjung_ranap', $update);
redirect('index.php/ps_ranap_admin');
}
public function pending($id){
$update = array(
'ppr_loket' => null,
'ppr_callsound' => null,
'ppr_status' => "2",
);
$this->db->where('ppr_id', $id);
$this->db->update('proses_pengunjung_ranap', $update);
redirect('index.php/ps_ranap_admin');
}
}
?>

View File

@@ -0,0 +1,140 @@
<?php
//-------------ID screen = 19
class Ps_screen extends CI_Controller {
//-----------start variables for check action access----------//
public $vartambah = null;
public $varedit = null;
public $vardelete = null;
public $varview = null;
//-----------start variables for check action access----------//
function __construct(){
parent::__construct();
$this->check_isvalidated();
$this->load->helper(array('form', 'date'));
}
private function check_isvalidated(){
if(! $this->session->userdata('validated')){
//redirect('index.php/login');
}
//--------------start check access this form page-------------//
$this->db->where('mum_tipeuser_id', $this->session->userdata('s_FK_TipeUser'));
$this->db->where('mum_menu_id', '19');
$cekMenu = $this->db->get('master_user_menu');
$rowcount = $cekMenu->num_rows();
if($rowcount==0){
//redirect('index.php');
}else{
foreach ($cekMenu->result() as $cm)
{
$this->vartambah=$cm->mum_tambah;
$this->varedit=$cm->mum_ubah;
$this->vardelete=$cm->mum_hapus;
$this->varview=$cm->mum_lihat;
}
}
//--------------end check access this form page-------------//
}
public function index($error = NULL) {
if(! $this->session->userdata('validated')){
redirect('index.php/login');
}
$data['title'] = 'Screen';
$data['main_content'] = 'setting/screen/v_screen';
$data['error']=$error;
$this->load->model('m_screen');
$screen = $this->m_screen->index();
$this->load->vars('ms', $screen);
$this->load->view('includes/template', $data);
}
function info_klinik_split($layar){
$data['title'] = 'Antrian Klinik Layar '.$layar;
$data['main_content'] = 'screen/v_info_klinik_split';
$this->load->model('m_screen');
$info_pp = $this->m_screen->info_pp($layar);
$this->load->vars('ip', $info_pp);
$this->load->model('m_screen');
$klinik = $this->m_screen->master_klinik($layar);
$this->load->vars('mk', $klinik);
$this->load->view('includes3/template', $data);
}
public function edit() {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_screen');}
//----end validate page edit---------//
$data['title'] = 'Edit Screen';
$data['actionform'] = 'prosesedit';
$data['main_content'] = 'setting/screen/form_screen';
//$data['ketscr'] = $ketscr;
$this->load->model('m_screen');
$screen = $this->m_screen->index();
$this->load->vars('ms', $screen);
$this->load->view('includes/template', $data);
}
public function prosesedit() {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_screen');}
//----end validate page edit---------//
$this->session->set_flashdata('message', 'Anda berhasil mengedit Screen');
$this->load->model('m_screen');
$this->m_screen->prosesedit();
redirect('index.php/ps_screen');
}
public function view() {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_screen');}
//----end validate page edit---------//
$data['title'] = 'View Screen';
$data['actionform'] = 'prosesview';
$data['main_content'] = 'setting/screen/form_screen';
$this->load->model('m_screen');
$screen = $this->m_screen->index();
$this->load->vars('ms', $screen);
$this->load->view('includes/template', $data);
}
//-------------------------------------------------------START INFO LOKET-----------------------------------------------------------//
public function screenloket($loket){
$data['title'] = 'Loket '.$loket;
$data['main_content'] = 'screen/v_info_loket';
$this->db->where('ml_id', $loket);
$datlok = $this->db->get('master_loket');
foreach ($datlok->result() as $datuser){
$data['klinik']=$datuser->ml_pelayanan;
$data['pembayaran'] = $datuser->ml_pembayaran;
}
$data['idloket']=$loket;
$this->load->model('m_screen');
$pengunjung = $this->m_screen->pengunjung($loket);
$this->load->vars('pg', $pengunjung);
$this->load->view('includes3/template', $data);
}
//-------------------------------------------------------END INFO LOKET-----------------------------------------------------------//
}
?>

View File

@@ -0,0 +1,62 @@
<?php
//-------------ID Anjungan = 10
class Ps_screenranap extends CI_Controller {
//-----------start variables for check action access----------//
public $vartambah = null;
public $varedit = null;
public $vardelete = null;
public $varview = null;
//-----------start variables for check action access----------//
function __construct(){
parent::__construct();
$this->load->helper(array('form', 'date'));
}
public function index($error = NULL) {
$data['title'] = 'Screen Ranap';
$data['main_content'] = 'screen/v_ranap';
$data['error']=$error;
$this->load->model('m_loketranap');
$datloket = $this->m_loketranap->dataloket();
$this->load->vars('dl', $datloket);
$this->load->model('m_loketranap');
$datpanggil = $this->m_loketranap->datapanggil();
$this->load->vars('dp', $datpanggil);
// $this->load->model('m_loketranap');
// $datsetpang = $this->m_loketranap->datasetpang();
// $this->load->vars('dsp', $datsetpang);
$this->load->model('m_loketranap');
$datpangsuara = $this->m_loketranap->datapanggilsuara();
$this->load->vars('dps', $datpangsuara);
//
// $this->load->model('m_anjungan');
// $terlambat = $this->m_anjungan->anjunganterlambat();
// $this->load->vars('tr', $terlambat);
$this->load->view('includes3/template', $data);
}
public function set_null($id){
$update = array(
//'ppr_loket' => null,
'ppr_callstatus' => null,
//'ppr_status' => "2",
);
$this->db->where('ppr_id', $id);
$this->db->update('proses_pengunjung_ranap', $update);
redirect('index.php/ps_screenranap');
}
}
?>

View File

@@ -0,0 +1,230 @@
<?php
//-------------ID user login = 4
class Ps_userlogin extends CI_Controller {
//-----------start variables for check action access----------//
public $vartambah = null;
public $varedit = null;
public $vardelete = null;
public $varview = null;
//-----------start variables for check action access----------//
function __construct(){
parent::__construct();
$this->check_isvalidated();
$this->load->helper(array('form', 'date'));
}
private function check_isvalidated(){
if(! $this->session->userdata('validated')){
redirect('index.php/login');
}
//--------------start check access this form page-------------//
$this->db->where('mum_tipeuser_id', $this->session->userdata('s_FK_TipeUser'));
$this->db->where('mum_menu_id', '4');
$cekMenu = $this->db->get('master_user_menu');
$rowcount = $cekMenu->num_rows();
if($rowcount==0){
redirect('index.php');
}else{
foreach ($cekMenu->result() as $cm)
{
$this->vartambah=$cm->mum_tambah;
$this->varedit=$cm->mum_ubah;
$this->vardelete=$cm->mum_hapus;
$this->varview=$cm->mum_lihat;
}
}
//--------------end check access this form page-------------//
}
public function index($error = NULL) {
$data['title'] = 'User Login';
$data['main_content'] = 'setting/userlogin/v_userlogin';
$data['error']=$error;
$this->load->model('m_userlogin');
$userlogin = $this->m_userlogin->index();
$this->load->vars('ul', $userlogin);
$this->load->view('includes/template', $data);
}
// fungsi untuk menampilkan form tambah data
public function add() {
//----start validate page tambah-------//
if($this->vartambah==null){redirect('index.php/ps_userlogin');}
//----end validate page tambah---------//
$data['title'] = 'Tambah User Login';
$data['actionform'] = 'prosesadd';
$data['main_content'] = 'setting/userlogin/form_userlogin';
$this->load->model('m_tipeuser');
$tipeuser = $this->m_tipeuser->index();
$this->load->vars('tu', $tipeuser);
$this->load->model('m_loket');
$loket = $this->m_loket->index();
$this->load->vars('ml', $loket);
$this->load->model('m_klinik');
$klinik = $this->m_klinik->index();
$this->load->vars('mk', $klinik);
$this->load->view('includes/template', $data);
}
//fungsi untuk memproses penambahan dengan memanggil model
public function prosesadd() {
//----start validate page tambah-------//
if($this->vartambah==null){redirect('index.php/ps_userlogin');}
//----end validate page tambah---------//
$this->load->helper('form');
$this->load->helper('url');
$this->load->library('form_validation');
$this->form_validation->set_rules('namauser','Nama User','required');
$this->form_validation->set_rules('passworduser','Password User','required');
$this->form_validation->set_rules('repassworduser', 'Retype Password', 'required|matches[passworduser]');
if($this->form_validation->run()==FALSE){
$data['title'] = 'Tambah User Login';
$data['actionform'] = 'prosesadd';
$data['main_content'] = 'setting/userlogin/form_userlogin';
$this->load->model('m_tipeuser');
$tipeuser = $this->m_tipeuser->index();
$this->load->vars('tu', $tipeuser);
$this->load->model('m_loket');
$loket = $this->m_loket->index();
$this->load->vars('ml', $loket);
$this->load->model('m_klinik');
$klinik = $this->m_klinik->index();
$this->load->vars('mk', $klinik);
$this->load->view('includes/template', $data);
}else{
$this->load->model('m_userlogin');
$this->m_userlogin->insert();
$this->session->set_flashdata('message', 'Anda berhasil menambahkan user login baru');
redirect('index.php/ps_userlogin');
}
}
//fungsi untuk menampilkan form edit data dengan data terpilih
public function edit($id) {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_userlogin');}
//----end validate page edit---------//
$data['title'] = 'Edit User Login';
$data['actionform'] = 'prosesedit';
$data['main_content'] = 'setting/userlogin/form_userlogin';
$this->load->model('m_userlogin');
$userlogin = $this->m_userlogin->edit($id);
$this->load->vars('ul', $userlogin);
$this->load->model('m_tipeuser');
$tipeuser = $this->m_tipeuser->index();
$this->load->vars('tu', $tipeuser);
$this->load->model('m_loket');
$loket = $this->m_loket->index();
$this->load->vars('ml', $loket);
$this->load->model('m_klinik');
$klinik = $this->m_klinik->index();
$this->load->vars('mk', $klinik);
$this->load->view('includes/template', $data);
}
//funsi untuk memproses update data
public function prosesedit() {
//----start validate page edit-------//
if($this->varedit==null){redirect('index.php/ps_userlogin');}
//----end validate page edit---------//
$id = $this->input->post('id');
$setpass = $this->input->post('passworduser');
$this->load->helper('form');
$this->load->helper('url');
$this->load->library('form_validation');
$this->form_validation->set_rules('namauser','Nama User','required');
if(!empty($setpass)){
$this->form_validation->set_rules('passworduser','Password User','required');
$this->form_validation->set_rules('repassworduser', 'Retype Password', 'required|matches[passworduser]');
}
if($this->form_validation->run()==FALSE){
$data['title'] = 'Edit User Login';
$data['actionform'] = 'prosesedit';
$data['main_content'] = 'setting/userlogin/form_userlogin';
$this->load->model('m_userlogin');
$userlogin = $this->m_userlogin->edit($id);
$this->load->vars('ul', $userlogin);
$this->load->model('m_tipeuser');
$tipeuser = $this->m_tipeuser->index();
$this->load->vars('tu', $tipeuser);
$this->load->model('m_loket');
$loket = $this->m_loket->index();
$this->load->vars('ml', $loket);
$this->load->model('m_klinik');
$klinik = $this->m_klinik->index();
$this->load->vars('mk', $klinik);
$this->load->view('includes/template', $data);
}
else{
$this->session->set_flashdata('message', 'Anda berhasil mengedit User Login');
$this->load->model('m_userlogin');
$this->m_userlogin->prosesedit();
redirect('index.php/ps_userlogin');
}
}
//fungsi untuk menampilkan form view data dengan data terpilih
public function view($id) {
//----start validate page view-------//
if($this->varview==null){redirect('index.php/ps_userlogin');}
//----end validate page view---------//
$data['title'] = 'View User Login';
$data['actionform'] = 'prosesview';
$data['main_content'] = 'setting/userlogin/form_userlogin';
$this->load->model('m_userlogin');
$userlogin = $this->m_userlogin->edit($id);
$this->load->vars('ul', $userlogin);
$this->load->model('m_tipeuser');
$tipeuser = $this->m_tipeuser->index();
$this->load->vars('tu', $tipeuser);
$this->load->model('m_loket');
$loket = $this->m_loket->index();
$this->load->vars('ml', $loket);
$this->load->model('m_klinik');
$klinik = $this->m_klinik->index();
$this->load->vars('mk', $klinik);
$this->load->view('includes/template', $data);
}
//fungsi untuk delete
function delete($id) {
//----start validate page delete-------//
if($this->vardelete==null){redirect('index.php/ps_userlogin');}
//----end validate page delete---------//
$this->session->set_flashdata('message', 'Anda berhasil menghapus User Login');
$this->load->model('m_userlogin');
$this->m_userlogin->delete($id);
redirect('index.php/ps_userlogin');
}
}
?>

View File

@@ -0,0 +1,35 @@
<?php
if (!defined('BASEPATH')) {
exit('No direct script access allowed');
}
class Welcome extends CI_Controller
{
function __construct(){
parent::__construct();
$this->check_isvalidated();
}
public function index()
{
$data['title'] = 'App Antrian RSSA';
$data['main_content'] = 'home/v_home';
$this->load->model('m_listpasien');
$listpasien = $this->m_listpasien->datenow();
$this->load->vars('lp', $listpasien);
$this->load->view('includes/template', $data);
}
private function check_isvalidated(){
if(! $this->session->userdata('validated')){
redirect('index.php/login');
}
}
public function do_logout(){
$this->session->sess_destroy();
redirect('login');
}
}

View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>404 Page Not Found</title>
<style type="text/css">
::selection{ background-color: #E13300; color: white; }
::moz-selection{ background-color: #E13300; color: white; }
::webkit-selection{ background-color: #E13300; color: white; }
body {
background-color: #fff;
margin: 40px;
font: 13px/20px normal Helvetica, Arial, sans-serif;
color: #4F5155;
}
a {
color: #003399;
background-color: transparent;
font-weight: normal;
}
h1 {
color: #444;
background-color: transparent;
border-bottom: 1px solid #D0D0D0;
font-size: 19px;
font-weight: normal;
margin: 0 0 14px 0;
padding: 14px 15px 10px 15px;
}
code {
font-family: Consolas, Monaco, Courier New, Courier, monospace;
font-size: 12px;
background-color: #f9f9f9;
border: 1px solid #D0D0D0;
color: #002166;
display: block;
margin: 14px 0 14px 0;
padding: 12px 10px 12px 10px;
}
#container {
margin: 10px;
border: 1px solid #D0D0D0;
-webkit-box-shadow: 0 0 8px #D0D0D0;
}
p {
margin: 12px 15px 12px 15px;
}
</style>
</head>
<body>
<div id="container">
<h1><?php echo $heading; ?></h1>
<?php echo $message; ?>
</div>
</body>
</html>

View File

@@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Database Error</title>
<style type="text/css">
::selection{ background-color: #E13300; color: white; }
::moz-selection{ background-color: #E13300; color: white; }
::webkit-selection{ background-color: #E13300; color: white; }
body {
background-color: #fff;
margin: 40px;
font: 13px/20px normal Helvetica, Arial, sans-serif;
color: #4F5155;
}
a {
color: #003399;
background-color: transparent;
font-weight: normal;
}
h1 {
color: #444;
background-color: transparent;
border-bottom: 1px solid #D0D0D0;
font-size: 19px;
font-weight: normal;
margin: 0 0 14px 0;
padding: 14px 15px 10px 15px;
}
code {
font-family: Consolas, Monaco, Courier New, Courier, monospace;
font-size: 12px;
background-color: #f9f9f9;
border: 1px solid #D0D0D0;
color: #002166;
display: block;
margin: 14px 0 14px 0;
padding: 12px 10px 12px 10px;
}
#container {
margin: 10px;
border: 1px solid #D0D0D0;
-webkit-box-shadow: 0 0 8px #D0D0D0;
}
p {
margin: 12px 15px 12px 15px;
}
</style>
</head>
<body>
<div id="container">
<h1><?php echo $heading; ?></h1>
<?php echo $message; ?>
</div>
</body>
</html>

View File

@@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Error</title>
<style type="text/css">
::selection{ background-color: #E13300; color: white; }
::moz-selection{ background-color: #E13300; color: white; }
::webkit-selection{ background-color: #E13300; color: white; }
body {
background-color: #fff;
margin: 40px;
font: 13px/20px normal Helvetica, Arial, sans-serif;
color: #4F5155;
}
a {
color: #003399;
background-color: transparent;
font-weight: normal;
}
h1 {
color: #444;
background-color: transparent;
border-bottom: 1px solid #D0D0D0;
font-size: 19px;
font-weight: normal;
margin: 0 0 14px 0;
padding: 14px 15px 10px 15px;
}
code {
font-family: Consolas, Monaco, Courier New, Courier, monospace;
font-size: 12px;
background-color: #f9f9f9;
border: 1px solid #D0D0D0;
color: #002166;
display: block;
margin: 14px 0 14px 0;
padding: 12px 10px 12px 10px;
}
#container {
margin: 10px;
border: 1px solid #D0D0D0;
-webkit-box-shadow: 0 0 8px #D0D0D0;
}
p {
margin: 12px 15px 12px 15px;
}
</style>
</head>
<body>
<div id="container">
<h1><?php echo $heading; ?></h1>
<?php echo $message; ?>
</div>
</body>
</html>

View File

@@ -0,0 +1,10 @@
<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">
<h4>A PHP Error was encountered</h4>
<p>Severity: <?php echo $severity; ?></p>
<p>Message: <?php echo $message; ?></p>
<p>Filename: <?php echo $filepath; ?></p>
<p>Line Number: <?php echo $line; ?></p>
</div>

View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

10
application/index.html Normal file
View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1,22 @@
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class m_pdf {
function m_pdf()
{
$CI = & get_instance();
log_message('Debug', 'mPDF class is loaded.');
}
function load($param=NULL)
{
include_once APPPATH.'/third_party/mpdf/mpdf.php';
if ($params == NULL)
{
$param = '"en-GB-x","A4","","",10,10,10,10,6,3';
}
//return new mPDF($param);
return new mPDF();
}
}

View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1,871 @@
<?php
class M_anjungan extends CI_Model {
function cekanjungan(){
$tanggalsekarang = date("Y-m-d");
$hari = date ("D");
$query = $this->db->get('master_klinik');
foreach ($query->result() as $datklinik){
$reset_klinik = array(
'mk_status_shift' => 1,
'mk_aktif' => 0,
);
$this->db->where('mk_id', $datklinik->mk_id);
$this->db->update('master_klinik', $reset_klinik);
$aktif=0;//----------aktif 0 maka klinik tutup
$setaktifdb=0;//----------setaktif 0 maka klinik buka
$setpenuh=0;//----------setpenuh 1 maka klinik penuh
$shiftcek = $datklinik->mk_shift;
//----------------start cek hari sekarang klinik buka atau tidak----------------//
switch($hari){
case 'Sun':$hari_ini = "minggu";break;case 'Mon':$hari_ini = "senin";break;case 'Tue':$hari_ini = "selasa";break;
case 'Wed':$hari_ini = "rabu";break;case 'Thu':$hari_ini = "kamis";break;case 'Fri':$hari_ini = "jumat";break;
case 'Sat':$hari_ini = "sabtu";break;default:$hari_ini = "Tidak di ketahui";break;
}
$pecahjadwal = explode("|",$datklinik->mk_jadwal);
$jumdat = count($pecahjadwal);
for ($x = 0; $x <= $jumdat; $x++){
if(isset($pecahjadwal[$x])){
if($pecahjadwal[$x]==$hari_ini){$aktif=$aktif+1;}
}
}
if($aktif==0){$setaktifdb=1;}
//----------------end cek hari sekarang klinik buka atau tidak----------------//
//----------------start cek quota pasien per shift----------------//
for ($i = 1; $i <= $datklinik->mk_shift; $i++){
$this->db->where('pp_klinik_id', $datklinik->mk_id);
$this->db->where('pp_shift', $i);
$this->db->where('pp_tanggal_periksa', $tanggalsekarang);
$query_pp = $this->db->get('proses_pengunjung');
$jum_row = $query_pp->num_rows();
$next_shift = $i+1;
//-----------start cek quota shift jika penuh ke shift selanjutnya---------//
if($datklinik->mk_quota<=$jum_row){
//-----------start cek klinik tidak bisa lebih dari jumlah shift klinik---------//
if($next_shift<=$shiftcek){
$update_klinik = array(
'mk_status_shift' => $next_shift,
);
$this->db->where('mk_id', $datklinik->mk_id);
$this->db->update('master_klinik', $update_klinik);
}else{
// $update_klinik = array();
$setaktifdb=1;
$setpenuh=1;
}
// $this->db->where('mk_id', $datklinik->mk_id);
// $this->db->update('master_klinik', $update_klinik);
//-----------end cek klinik tidak bisa lebih dari jumlah shift klinik---------//
}
//-----------start cek quota shift jika penuh ke shift selanjutnya---------//
}
//----------------end cek quota pasien per shift----------------//
$update_mk = array(
'mk_tanggal_sekarang' => $tanggalsekarang,
'mk_aktif' => $setaktifdb,
'mk_shift_penuh' => $setpenuh,
);
$this->db->where('mk_id', $datklinik->mk_id);
$this->db->update('master_klinik', $update_mk);
}
$this->db->where('pp_tanggal_periksa', date('Y-m-d'));
$this->db->where('pp_pendaftaran_online is NOT NULL', NULL, FALSE);
$this->db->where('pp_loket is NULL', NULL, TRUE);
$query_pp = $this->db->get('proses_pengunjung');
foreach ($query_pp->result() as $datapp){
$loket = null;
$this->db->order_by("ml_id", "RANDOM");
$this->db->where('ml_pembayaran', $datapp->pp_pembayaran);
$query_loket = $this->db->get('master_loket');
foreach ($query_loket->result() as $datloket){
$loketexplode = explode(",",$datloket->ml_pelayanan);
$count = count($loketexplode);
for ($x = 0; $x <= $count; $x++) {
if(isset($loketexplode[$x])){
if($datapp->pp_klinik_id==$loketexplode[$x]){
$update_pp = array(
'pp_loket' => $datloket->ml_id,
);
$this->db->where('pp_id', $datapp->pp_id);
$this->db->update('proses_pengunjung', $update_pp);
//$loket = $datloket->ml_id;
}
}
}
}
}
}
//-----------------digunakan untuk cek buka shift apabila sudah jam nya....(jika autoshift)
function cek_shift_jam(){
$jamnow = date("H");
$menitnow = date("m");
$this->db->where('mk_aktif', '0');
$query = $this->db->get('master_klinik');
foreach ($query->result() as $datklinik){
if($datklinik->mk_auto_shift==1){
$jumwaktu=0;
$pecahwaktu = explode("|",$datklinik->mk_jam_shift);
$jumwaktu = count($pecahwaktu);
$ketshift = 1;
for ($x = 0; $x < $jumwaktu; $x++){
$waktu_awal =strtotime(date("Y-m-d ").$pecahwaktu[$x]);
$waktu_akhir =strtotime(date("Y-m-d H:i"));
$diff =$waktu_akhir-$waktu_awal;
$hasil = number_format($diff,0,",",".");
if($hasil>=0){
if($pecahwaktu[$x]!=0){
$update_mk = array(
'mk_shift_buka' => $ketshift,
);
$this->db->where('mk_id', $datklinik->mk_id);
$this->db->update('master_klinik', $update_mk);
}
}else{
if($ketshift==1){
$update_mk = array(
'mk_shift_buka' => 1,
);
$this->db->where('mk_id', $datklinik->mk_id);
$this->db->update('master_klinik', $update_mk);
}
}
$ketshift++;
}
}
}
}
function insert_sekarang($idk, $shift, $ket , $pembayaran){
//--------start get kode master klinik-----------//
$kodeklinik="";
$barcode="";$urutanbar=0;
$this->db->where('mk_id', $idk);
$query = $this->db->get('master_klinik');
foreach ($query->result() as $datklinik){
if($pembayaran==1){
$kodeklinik="UM";
}else{
$kodeklinik= $datklinik->mk_kode;
}
}
//--------end get kode master klinik-----------//
//--------start nomor antrian------------------//
$no_antrian;
$hasil_nomor = "";
$query_pengunjung = $this->db->query("select MAX(pp_nomor_antrian) AS maxnomorantrian from proses_pengunjung WHERE pp_tanggal_periksa = '".date("Y-m-d")."' AND pp_nomor_antrian LIKE '".$kodeklinik."%' ");
// $this->db->like('pp_nomor_antrian', $kodeklinik, 'after');
// $this->db->where('pp_tanggal_periksa', date("Y-m-d"));
// $query_pengunjung = $this->db->get('proses_pengunjung');
foreach ($query_pengunjung->result() as $datpengunjung){
$no_antrian = $datpengunjung->maxnomorantrian;
}
if(isset($no_antrian)){
$urutan = (int) substr($no_antrian, 3, 3);
$urutan++;
$hasil_nomor = $kodeklinik.$shift.sprintf("%03s", $urutan);
}else {
$hasil_nomor=$kodeklinik.$shift."001";
}
//--------end nomor antrian--------------------//
//-------start nomor barcode------------------//
$no_barcode;
$hasil_barcode = "";
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$query_barcode = $this->db->get('proses_pengunjung');
foreach ($query_barcode->result() as $datbarcode){
$no_barcode = $datbarcode->pp_barcode;
}
if(isset($no_barcode)){
$urutan = (int) substr($no_barcode, 7, 5);
$urutan++;
$barcode=date("ymd").$shift.sprintf("%05s", $urutan);
$urutanbar=$urutan;
}else {
$barcode=date("ymd").$shift."00001";
$urutanbar=1;
}
//-------end nomor barcode-------------------//
if($ket==4){
$this->db->where('pp_tanggal_periksa', date('Y-m-d'));
$this->db->where('pp_nomor_antrian', $hasil_nomor);
$query_cek_nomor = $this->db->get('proses_pengunjung');
if($query_cek_nomor->num_rows()!=0){
return FALSE;
}else{
//----------------------start untuk pasien fasttrack----------------------------//
$pj = $this->input->post('penanggungjawab');
$rm = $this->input->post('norek');
$np = $this->input->post('namapas');
$ke = $this->input->post('ket');
$rafast = $pj."|".$np."|".$ke."|";
$insert_pp = array(
'pp_nomor_antrian' => $hasil_nomor,
'pp_shift' => $shift,
'pp_tanggal_periksa' => date("Y-m-d"),
'pp_tanggal_datang' => date("Y-m-d H:i:s"),
'pp_posisi_status' => 1,
'pp_pendaftaran_online' => null,
'pp_rekamedik' => $rm,
'pp_status' => 1,
'pp_aktif' => null,
'pp_klinik_id' => $idk,
'pp_barcode' => $barcode,
'pp_pembayaran' => $pembayaran,
'pp_fasttrack' => $rafast,
);
$insert = $this->db->insert('proses_pengunjung', $insert_pp);
$last_insert_id = $this->db->insert_id();
$insert_prt = array(
'prt_status' => 1,
'prt_tanggal' => date("Y-m-d H:i:s"),
'prt_aktif' => 0,
'prt_pengunjung_id' => $last_insert_id,
);
$prt = $this->db->insert('proses_ruang_tunggu', $insert_prt);
//----------------------end untuk pasien fasttrack----------------------------//
}
}else{
$this->db->where('pp_tanggal_periksa', date('Y-m-d'));
$this->db->where('pp_nomor_antrian', $hasil_nomor);
$query_cek_nomor = $this->db->get('proses_pengunjung');
if($query_cek_nomor->num_rows()!=0){
return FALSE;
}else{
$insert_pp = array(
'pp_nomor_antrian' => $hasil_nomor,
'pp_shift' => $shift,
'pp_tanggal_periksa' => date("Y-m-d"),
'pp_tanggal_datang' => date("Y-m-d H:i:s"),
'pp_posisi_status' => 1,
'pp_pendaftaran_online' => null,
'pp_rekamedik' => null,
'pp_status' => null,
'pp_aktif' => null,
'pp_klinik_id' => $idk,
'pp_barcode' => $barcode,
'pp_pembayaran' => $pembayaran,
);
$insert = $this->db->insert('proses_pengunjung', $insert_pp);
$pp_last_id = $this->db->insert_id();
//-----------start langsung masuk-------------------//
if($urutanbar<=70){
$loket = null;
$this->db->order_by("ml_id", "RANDOM");
$this->db->where('ml_pembayaran', $pembayaran);
$query_loket = $this->db->get('master_loket');
foreach ($query_loket->result() as $datloket){
$loketexplode = explode(",",$datloket->ml_pelayanan);
$count = count($loketexplode);
for ($x = 0; $x <= $count; $x++) {
if(isset($loketexplode[$x])){
if($idk==$loketexplode[$x]){
$loket = $datloket->ml_id;
}
}
}
}
$autoinsert_prt = array(
'prt_status' => 0,
'prt_tanggal' => date("Y-m-d H:i:s"),
'prt_aktif' => 0,
'prt_pengunjung_id' => $pp_last_id,
);
$prt = $this->db->insert('proses_ruang_tunggu', $autoinsert_prt);
$update_pp = array(
'pp_status' => 1,
'pp_panggil_anjungan' => date("Y-m-d H:i:s"),
'pp_loket' => $loket,
);
$this->db->where('pp_id', $pp_last_id);
$this->db->update('proses_pengunjung', $update_pp);
}
//-----------end langsung masuk-------------------//
}
}
//--------for cek data quota shift
$date=date("Y-m-d");
$this->cek_quota_shift($idk, $shift,$date);
}
function insert_pesan(){
$urutanbar=0;
$pembayaran=$this->input->post('pembayaran');
$idk = $this->input->post('idklinikpesan');
$shift = $this->input->post('shiftpesan');
$originalDate = $this->input->post('tanggalpesan');
$newDate = date("Y-m-d", strtotime($originalDate));
$newDate2 = date("ymd", strtotime($originalDate));
//--------start get kode master klinik-----------//
$kodeklinik="";
$barcode="";
$this->db->where('mk_id', $idk);
$query = $this->db->get('master_klinik');
foreach ($query->result() as $datklinik){
if($pembayaran==1){
$kodeklinik="UM";
}else{
$kodeklinik= $datklinik->mk_kode;
}
}
//--------end get kode master klinik-----------//
//--------start nomor antrian------------------//
$no_antrian;
$hasil_nomor = "";
$query_pengunjung = $this->db->query("select * from proses_pengunjung WHERE pp_tanggal_periksa = '".$newDate."' AND pp_nomor_antrian LIKE '".$kodeklinik."%' ");
//$this->db->like('pp_nomor_antrian', $kodeklinik, 'after');
//$this->db->where('pp_tanggal_periksa', $newDate);
//$query_pengunjung = $this->db->get('proses_pengunjung');
foreach ($query_pengunjung->result() as $datpengunjung){
$no_antrian = $datpengunjung->pp_nomor_antrian;
}
if(isset($no_antrian)){
$urutan = (int) substr($no_antrian, 3, 3);
$urutan++;
$hasil_nomor = $kodeklinik.$shift.sprintf("%03s", $urutan);
}else {
$hasil_nomor=$kodeklinik.$shift."001";
}
//--------end nomor antrian--------------------//
//-------start nomor barcode------------------//
$no_barcode;
$hasil_barcode = "";
$this->db->where('pp_tanggal_periksa', $newDate);
$query_barcode = $this->db->get('proses_pengunjung');
foreach ($query_barcode->result() as $datbarcode){
$no_barcode = $datbarcode->pp_barcode;
}
if(isset($no_barcode)){
$urutan = (int) substr($no_barcode, 7, 5);
$urutan++;
$barcode=$newDate2.$shift.sprintf("%05s", $urutan);
$urutanbar=$urutan;
}else {
$barcode=$newDate2.$shift."00001";
$urutanbar=1;
}
//-------end nomor barcode-------------------//
// $this->db->where('pp_tanggal_periksa', date('Y-m-d'));
// $this->db->where('pp_nomor_antrian', $hasil_nomor);
// $query_cek_nomor = $this->db->get('proses_pengunjung');
// // var_dump($query_cek_nomor->num_rows());
// // exit();
// if($query_cek_nomor->num_rows()!=0){
// return FALSE;
// }else{
$insert_pp = array(
'pp_nomor_antrian' => $hasil_nomor,
'pp_shift' => $shift,
'pp_tanggal_periksa' => $newDate,
'pp_tanggal_datang' => date("Y-m-d H:i:s"),
'pp_posisi_status' => 1,
'pp_pendaftaran_online' => null,
'pp_rekamedik' => null,
'pp_status' => null,
'pp_aktif' => null,
'pp_klinik_id' => $idk,
'pp_barcode' => $barcode,
'pp_pembayaran' => $pembayaran,
);
$insert = $this->db->insert('proses_pengunjung', $insert_pp);
$pp_last_id = $this->db->insert_id();
// var_dump($pp_last_id);
// exit();
//-----------start langsung masuk-------------------//
if($urutanbar<=70){
$loket = null;
$this->db->order_by("ml_id", "RANDOM");
$this->db->where('ml_pembayaran', $pembayaran);
$query_loket = $this->db->get('master_loket');
foreach ($query_loket->result() as $datloket){
$loketexplode = explode(",",$datloket->ml_pelayanan);
$count = count($loketexplode);
for ($x = 0; $x <= $count; $x++) {
if(isset($loketexplode[$x])){
if($idk==$loketexplode[$x]){
$loket = $datloket->ml_id;
}
}
}
}
$autoinsert_prt = array(
'prt_status' => 0,
'prt_tanggal' => $newDate.date(" 05:00:00"),
'prt_aktif' => 0,
'prt_pengunjung_id' => $pp_last_id,
);
$prt = $this->db->insert('proses_ruang_tunggu', $autoinsert_prt);
$update_pp = array(
'pp_status' => 1,
'pp_panggil_anjungan' => $newDate.date(" 05:10:00"),
'pp_loket' => $loket,
);
$this->db->where('pp_id', $pp_last_id);
$this->db->update('proses_pengunjung', $update_pp);
}
//-----------end langsung masuk-------------------//
//}
$date=$newDate;
$this->cek_quota_shift($idk, $shift,$date);
}
function insert_daftar_online(){
$urutanbar=0;
$pembayaran=$this->input->post('pembayaran');
$idk = $this->input->post('klinik');
$shift = $this->input->post('shiftonline');
//--------start get kode master klinik-----------//
$kodeklinik="";
$barcode="";
$this->db->where('mk_id', $idk);
$query = $this->db->get('master_klinik');
foreach ($query->result() as $datklinik){
if($pembayaran==1){
$kodeklinik="UM";
}else{
$kodeklinik= $datklinik->mk_kode;
}
}
//--------end get kode master klinik-----------//
//--------start nomor antrian------------------//
$no_antrian;
$hasil_nomor = "";
$query_pengunjung = $this->db->query("select * from proses_pengunjung WHERE pp_tanggal_periksa = '".date("Y-m-d")."' AND pp_nomor_antrian LIKE '".$kodeklinik."%' ");
// $this->db->like('pp_nomor_antrian', $kodeklinik, 'after');
// $this->db->where('pp_tanggal_periksa', date("Y-m-d"));
// $query_pengunjung = $this->db->get('proses_pengunjung');
foreach ($query_pengunjung->result() as $datpengunjung){
$no_antrian = $datpengunjung->pp_nomor_antrian;
}
if(isset($no_antrian)){
$urutan = (int) substr($no_antrian, 3, 3);
$urutan++;
$hasil_nomor = $kodeklinik.$shift.sprintf("%03s", $urutan);
}else {
$hasil_nomor=$kodeklinik.$shift."001";
}
//--------end nomor antrian--------------------//
//-------start nomor barcode------------------//
$no_barcode;
$hasil_barcode = "";
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$query_barcode = $this->db->get('proses_pengunjung');
foreach ($query_barcode->result() as $datbarcode){
$no_barcode = $datbarcode->pp_barcode;
}
if(isset($no_barcode)){
$urutan = (int) substr($no_barcode, 7, 5);
$urutan++;
$barcode=date("ymd").$shift.sprintf("%05s", $urutan);
$urutanbar=$urutan;
}else {
$barcode=date("ymd").$shift."00001";
$urutanbar=1;
}
//-------end nomor barcode-------------------//
$loket = null;
$this->db->order_by("ml_id", "RANDOM");
$this->db->where('ml_pembayaran', $pembayaran);
$query_loket = $this->db->get('master_loket');
foreach ($query_loket->result() as $datloket){
$loketexplode = explode(",",$datloket->ml_pelayanan);
$count = count($loketexplode);
for ($x = 0; $x <= $count; $x++) {
if(isset($loketexplode[$x])){
if($idk==$loketexplode[$x]){
$loket = $datloket->ml_id;
}
}
}
}
$this->db->where('pp_nomor_antrian', $hasil_nomor);
$query_cek_nomor = $this->db->get('proses_pengunjung');
if($query_cek_nomor->num_rows()!=0){
return FALSE;
}else{
$insert_pp = array(
'pp_nomor_antrian' => $hasil_nomor,
'pp_shift' => $shift,
'pp_tanggal_periksa' => date("Y-m-d"),
'pp_tanggal_datang' => date("Y-m-d H:i:s"),
'pp_posisi_status' => 1,
'pp_pendaftaran_online' => $this->input->post('nopendaftaran'),
'pp_rekamedik' => $this->input->post('norm'),
'pp_status' => 1,
'pp_aktif' => null,
'pp_klinik_id' => $idk,
'pp_barcode' => $barcode,
'pp_pembayaran' => $pembayaran,
'pp_loket' => $loket,
);
$insert = $this->db->insert('proses_pengunjung', $insert_pp);
$last_insert_id = $this->db->insert_id();
$insert_prt = array(
'prt_status' => 1,
'prt_tanggal' => date("Y-m-d H:i:s"),
'prt_aktif' => 0,
'prt_pengunjung_id' => $last_insert_id,
);
$insert_prt = $this->db->insert('proses_ruang_tunggu', $insert_prt);
}
//--------for cek data quota shift
$date=date("Y-m-d");
$this->cek_quota_shift($idk, $shift,$date);
}
function cek_quota_shift($idk,$shift,$date){
$quota_shift;
$jum_pp;
$shiftcek;
$this->db->where('mk_id', $idk);
$query = $this->db->get('master_klinik');
foreach ($query->result() as $datklinik){
$quota_shift = $datklinik->mk_quota;
$shiftcek = $datklinik->mk_shift;
}
for($i=1;$i<=$shiftcek;$i++){
$this->db->where('pp_klinik_id', $idk);
$this->db->where('pp_shift', $i);
$this->db->where('pp_tanggal_periksa', $date);
$query_pp = $this->db->get('proses_pengunjung');
$jum_row = $query_pp->num_rows();
$next_shift = $i+1;
//-----------start cek quota shift jika penuh ke shift selanjutnya---------//
if($quota_shift<=$jum_row){
//-----------start cek klinik tidak bisa lebih dari jumlah shift klinik---------//
if($next_shift<=$shiftcek){
$update_klinik = array(
'mk_status_shift' => $next_shift,
);
}else{
$update_klinik = array(
'mk_aktif' => 1,
'mk_shift_penuh'=> 1,
);
}
$this->db->where('mk_id', $idk);
$this->db->update('master_klinik', $update_klinik);
//-----------end cek klinik tidak bisa lebih dari jumlah shift klinik---------//
}
//-----------start cek quota shift jika penuh ke shift selanjutnya---------//
}
}
function info_pengunjung(){
$this->db->order_by('pp_panggil_anjungan', 'ASC');
$this->db->join('proses_pengunjung', 'pp_id = prt_pengunjung_id');
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$this->db->where('prt_status', 0);
$this->db->where('prt_aktif', 0);
$query = $this->db->get('proses_ruang_tunggu');
return $query->result();
$this->cekanjungan();
}
function info_pengunjung2(){
$this->db->order_by('mk_nama', 'ASC');
$this->db->order_by('pp_panggil_anjungan', 'ASC');
$this->db->join('proses_pengunjung', 'pp_id = prt_pengunjung_id');
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$this->db->where('prt_status', 0);
$this->db->where('prt_aktif', 0);
$query = $this->db->get('proses_ruang_tunggu');
return $query->result();
$this->cekanjungan();
}
function barcode($barcode){
$barcode = date("y").substr($barcode,2);
$this->db->join('proses_ruang_tunggu', 'prt_pengunjung_id = pp_id', 'LEFT');
$this->db->where('pp_barcode', $barcode);
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
//$this->db->where('prt_status', 0);
$querypp = $this->db->get('proses_pengunjung');
$rowcount = $querypp->num_rows();
if($rowcount!=0){
foreach ($querypp->result() as $datpp){
if($datpp->pp_status!=null){
if($datpp->prt_aktif!=2){
if($datpp->prt_aktif==0){
if($datpp->prt_status==0){
$update_prt = array(
'prt_status' => 1,
);
$this->db->where('prt_id', $datpp->prt_id);
$this->db->update('proses_ruang_tunggu', $update_prt);
$update_pp = array(
'pp_panggil_anjungan' => null,
// 'pp_panggil_loket' => null,
// 'pp_panggil' => null,
);
$this->db->where('pp_id', $datpp->pp_id);
$this->db->update('proses_pengunjung', $update_pp);
$this->checkin($datpp->prt_id, $datpp->pp_id);
$this->session->set_flashdata('message', 'Anda berhasil input barcode, Silahkan Masuk');
}else{
$this->checkin($datpp->prt_id, $datpp->pp_id);
$this->session->set_flashdata('message', 'Pengunjung Ditemukan, Silahkan Masuk');
}
}else{
$this->datang($datpp->prt_id);
$this->session->set_flashdata('messageblue', 'Anda dinyatakan terlambat, tunggu panggilan selanjutnya diruang tunggu');
}
}else{
$this->session->set_flashdata('messagewarning', 'Anda belum di panggil!!!');
}
}else{
$this->session->set_flashdata('messagewarning', 'Anda belum di panggil!!!');
}
}
}else{
$this->session->set_flashdata('messagefail', 'Barcode Tidak Ditemukan!!');
}
}
function anjunganterlambat(){
$this->db->join('proses_pengunjung', 'pp_id = prt_pengunjung_id');
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$this->db->where('prt_status', 0);
$this->db->where('prt_aktif', 1);
$query = $this->db->get('proses_ruang_tunggu');
return $query->result();
}
function datang($id){
$update_prt = array(
'prt_aktif' => 2,
);
$this->db->where('prt_id', $id);
$this->db->update('proses_ruang_tunggu', $update_prt);
//$this->session->set_flashdata('message', 'Anda berhasil input pasien terlambat');
}
function bypass($id){
$autoinsert_prt = array(
'prt_status' => 1,
'prt_tanggal' => date("Y-m-d H:i:s"),
'prt_aktif' => 0,
'prt_pengunjung_id' => $id,
);
$prt = $this->db->insert('proses_ruang_tunggu', $autoinsert_prt);
$update_pp = array(
'pp_status' => 1,
);
$this->db->where('pp_id', $id);
$this->db->update('proses_pengunjung', $update_pp);
$this->session->set_flashdata('message', 'Anda berhasil proses pasien bypass');
}
function info_klinik(){
$this->db->join('proses_pengunjung', 'pp_id = prt_pengunjung_id');
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$this->db->where('prt_status', 5);
$this->db->where('prt_aktif', 0);
$query = $this->db->get('proses_ruang_tunggu');
return $query->result();
}
function datapengunjung($idklinik){
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$this->db->where('pp_klinik_id', $idklinik);
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function datapengunjungthis($idpp){
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
//$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$this->db->where('pp_id', $idpp);
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function datapengunjungpesan($idklinik,$tgl,$shift){
$newDate = date("Y-m-d", strtotime($tgl));
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
$this->db->where('pp_tanggal_periksa', $newDate);
$this->db->where('pp_klinik_id', $idklinik);
$this->db->where('pp_shift', $shift);
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function panggilpasien(){
$this->db->order_by('pp_panggil', 'desc');
$this->db->like('pp_panggil', date("Y-m-d"), 'both');// %a%
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function cetakulang($id) {
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
$this->db->where('pp_id', $id);
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function allpasien() {
$this->db->order_by('pp_tanggal_datang', 'desc');
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
//$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function batasallpasien() {
$this->db->order_by('pp_tanggal_datang', 'desc');
$this->db->join('proses_ruang_tunggu', 'prt_pengunjung_id = pp_id','LEFT');
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
public function checkin($idprt, $idpp){
$this->load->model('m_loket');
$this->m_loket->proses_checkin($idprt,$idpp);
$this->db->join('proses_ruang_tunggu', 'prt_pengunjung_id = pp_id');
$this->db->where('pp_id', $idpp);
$query = $this->db->get('proses_pengunjung');
//var_dump("ij");
//exit();
foreach($query->result() as $dat){
$dataObj = new stdClass();
$dataObj->jenislayanan = 'antrian'; //// JENIS LAYANAN 1: simrs 2: antrian
$dataObj->norm = ''; //// Nomor Rekam Medik
$dataObj->instalasi = 'rajal';
$dataObj->kodebooking = $dat->pp_barcode;//'230119100001'; //// Nomor Booking / Barcode
$dataObj->nomorpendaftaran = ''; //// Nomor Billing Atau idx Pendaftaran
$dataObj->waktu = strtotime(date('Y-m-d H:i:s'));// strtotime('Ymdhis'); //// INstalasi Medik 1:rajal 2:ranap
$dataObj->tasktime = strtotime(date('Y-m-d H:i:s')); //'1674178500'; //// Time by sortime
$dataObj->taskid = '1'; //// Task Id Proses
$dataJSON = json_encode($dataObj);
//var_dump($dataJSON);
$response_array = array(
'url' => "http://10.10.150.170:8080/gomed-api/restapi/taskid",
'action' => "proses",
'method' => "POST",
'data' => $dataJSON,
'header' => array(
'X-Username: antrian@onsite',
'X-Token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjp7InJvbGUiOiJ1c2VyIiwidXNlcm5hbWUiOiJhbnRyaWFuQG9uc2l0ZSIsInBhc3N3b3JkIjoiYW50cmlhbkAyMDIzIn0sImV4cCI6MTY4MzUxNzcyMywiaWF0IjoxNjc0NzkxMzIzfQ.KAjJTxDkC6cP8KqQJQUzwgJLlU5gWNLdHSj-43TcVfA',
'Content-Type: application/json'
)
);
//var_dump($dataJSON);
// //var_dump($response_array);
$respose_data = $this->sendRequest($response_array);
//var_dump($respose_data);
}
// redirect('index.php/ps_loket_admin');
}
protected function sendRequest($options = []){
$curl = curl_init();
$action = isset($options["action"]) ? (trim($options["action"]) != "" ? "/" . $options["action"] : "") : "";
$headers = array(
"Content-type: application/json"
);
$data = isset($options["data"]) ? $options["data"] : "";
//var_dump($data);
$headers = $options["header"];
// if (isset($options["header"])) {
// $headers = array_merge($headers, $options["header"]);
// }
//var_dump($headers);
/** GET URL ACCES IP REST API */
// $id = $this->writeBridgeLog([
// "URL" => $options["url"] . $action,
// "REQUEST" => $data,
// "ACCESS_FROM_IP" => $_SERVER['REMOTE_ADDR']
// ]);
curl_setopt($curl, CURLOPT_URL, $options["url"] . $action);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $options["method"]);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($curl);
var_dump($result);
curl_close($curl);
// /** GET URL ACCES IP REST API */
// // $this->writeBridgeLog([
// // "ID" => $id,
// // "RESPONSE" => $result
// // ]);
//return json_decode($result);
$result = json_decode($result);
// var_dump($result);
//exit();
// if($result['metadata']['code']=='200'){
// $this->session->set_flashdata('message', 'Anda berhasil check in pasien M-JKN');
// redirect('index.php/ps_loket_admin');
// }else{
// $this->session->set_flashdata('message', 'Anda gagal check in pasien M-JKN');
// redirect('index.php/ps_loket_admin');
// }
}
}
?>

View File

@@ -0,0 +1,61 @@
<?php
class M_fasttrack extends CI_Model {
function index() {
//$this->db->order_by("mk_nama", "asc");
$this->db->order_by('pp_fasttrack', 'DESC');
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
$this->db->join('proses_ruang_tunggu', 'prt_pengunjung_id = pp_id', 'left');
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function selectpasien($id) {
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
$this->db->where('pp_id', $id);
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function setfastrack(){
$id = $this->input->post('idpengunjung');
$pj = $this->input->post('penanggungjawab');
$rm = $this->input->post('norek');
$np = $this->input->post('namapas');
$ke = $this->input->post('ket');
$rafast = $pj."|".$np."|".$ke."|";
$update_fastrack = array(
'pp_fasttrack' => $rafast,
'pp_rekamedik' => $rm,
);
$this->db->where('pp_id', $id);
$this->db->update('proses_pengunjung', $update_fastrack);
if($this->input->post('ppstatus')==1){
$update_prt = array(
'prt_status' => 1,
);
$this->db->where('prt_pengunjung_id', $id);
$this->db->update('proses_ruang_tunggu', $update_prt);
}else{
$update_pp = array(
'pp_status' => 1,
);
$this->db->where('pp_id', $id);
$this->db->update('proses_pengunjung', $update_pp);
$insert_prt = array(
'prt_status' => 1,
'prt_tanggal' => date("Y-m-d H:i:s"),
'prt_aktif' => 0,
'prt_pengunjung_id' => $id,
);
$insert = $this->db->insert('proses_ruang_tunggu', $insert_prt);
}
}
}
?>

View File

@@ -0,0 +1,67 @@
<?php
class M_hakakses extends CI_Model {
function prosesedithakakses() {
$this->db->where('mum_tipeuser_id', $this->input->post('id'));
$this->db->delete('master_user_menu');
if(isset($_POST['akses'])){
$postakses= $_POST['akses'];
foreach($postakses as $key1 =>$valueakses)
{
$tambahaction=null;
$editaction=null;
$deleteaction=null;
$dataakses= explode ("-",$valueakses);
if(isset($_POST['tambah'])){
$posttambah= $_POST['tambah'];
foreach($posttambah as $key2 =>$valuetambah)
{
if($dataakses[1]==$valuetambah){
$tambahaction="tambah";
}
}
}
if(isset($_POST['edit'])){
$postedit= $_POST['edit'];
foreach($postedit as $key3 =>$valueedit)
{
if($dataakses[1]==$valueedit){
$editaction="ubah";
}
}
}
if(isset($_POST['delete'])){
$postdelete= $_POST['delete'];
foreach($postdelete as $key4 =>$valuedelete)
{
if($dataakses[1]==$valuedelete){
$deleteaction="hapus";
}
}
}
if(isset($_POST['view'])){
$postview= $_POST['view'];
foreach($postview as $key5 =>$valueview)
{
if($dataakses[1]==$valueview){
$viewaction="lihat";
}
}
}
$insert_hakakses = array(
'mum_tipeuser_id' => $this->input->post('id'),
'mum_menu_id' => $dataakses[1],
'mum_lihat' => $viewaction,
'mum_tambah' => $tambahaction,
'mum_ubah' => $editaction,
'mum_hapus' => $deleteaction,
);
$insert = $this->db->insert('master_user_menu', $insert_hakakses);
}
}
}
}
?>

View File

@@ -0,0 +1,224 @@
<?php
class M_klinik extends CI_Model {
function index() {
$this->db->order_by('mk_nama', 'asc');
$query = $this->db->get('master_klinik');
return $query->result();
}
function klinikasc(){
$this->db->order_by("mk_nama", "asc");
$query = $this->db->get('master_klinik');
return $query->result();
}
function insert() {
$datjadwal="";
$setautoshift="";
$waktu="";
if($this->input->post('autoshift')=="on"){$setautoshift="1";}else{ $setautoshift="0";}
if(isset($_POST['senin'])){$datjadwal = $datjadwal."senin|";}
if(isset($_POST['selasa'])){$datjadwal = $datjadwal."selasa|";}
if(isset($_POST['rabu'])){$datjadwal = $datjadwal."rabu|";}
if(isset($_POST['kamis'])){$datjadwal = $datjadwal."kamis|";}
if(isset($_POST['jumat'])){$datjadwal = $datjadwal."jumat|";}
if(isset($_POST['jam'])){
$jam = $_POST['jam'];
$menit = $_POST['menit'];
$count = count($jam);
for($i=0;$i<$count;$i++){
$waktu = $waktu.$jam[$i].":".$menit[$i]."|";
}
}
$insert_klinik = array(
'mk_nama' => $this->input->post('nama'),
'mk_kode' => $this->input->post('kode'),
'mk_shift' => $this->input->post('shift'),
//'mk_menit' => $this->input->post('menit'),
'mk_quota' => $this->input->post('quota'),
'mk_quota_bangku' => $this->input->post('quotabangku'),
//'mk_status_shift' => $this->input->post('statusshift'),
//'mk_aktif' => $this->input->post('aktif'),
'mk_jadwal' => $datjadwal,
'mk_auto_shift' => $setautoshift,
'mk_jam_shift' => $waktu,
);
$insert = $this->db->insert('master_klinik', $insert_klinik);
}
function edit($id) {
$this->db->where('mk_id', $id);
$query = $this->db->get('master_klinik');
return $query;
}
function prosesedit() {
$datjadwal="";
$setautoshift="";
if($this->input->post('autoshift')=="on"){$setautoshift="1";}else{ $setautoshift="0";}
if(isset($_POST['senin'])){$datjadwal = $datjadwal."senin|";}
if(isset($_POST['selasa'])){$datjadwal = $datjadwal."selasa|";}
if(isset($_POST['rabu'])){$datjadwal = $datjadwal."rabu|";}
if(isset($_POST['kamis'])){$datjadwal = $datjadwal."kamis|";}
if(isset($_POST['jumat'])){$datjadwal = $datjadwal."jumat|";}
if(isset($_POST['jam'])){
$jam = $_POST['jam'];
$menit = $_POST['menit'];
$count = count($jam);
for($i=0;$i<$count;$i++){
$waktu = $waktu.$jam[$i].":".$menit[$i]."|";
}
}
$update_klinik = array(
'mk_nama' => $this->input->post('nama'),
'mk_kode' => $this->input->post('kode'),
'mk_shift' => $this->input->post('shift'),
'mk_menit' => 0,
'mk_quota' => $this->input->post('quota'),
'mk_quota_bangku' => $this->input->post('quotabangku'),
//'mk_status_shift' => $this->input->post('statusshift'),
//'mk_aktif' => $this->input->post('aktif'),
'mk_jadwal' => $datjadwal,
'mk_auto_shift' => $setautoshift,
'mk_jam_shift' => $waktu,
);
$id = $this->input->post('id');
$this->db->where('mk_id', $id);
$this->db->update('master_klinik', $update_klinik);
}
function view($id) {
$this->db->where('mk_id', $id);
$query = $this->db->get('master_klinik');
return $query;
}
function delete($id) {
$this->db->where('mk_id', $id);
$this->db->delete('master_klinik');
}
//-------------------------------------Klinik Admin--------------------------------//
function pengunjungklinik($klinik) {
$this->db->order_by('pp_fasttrack', 'desc');
$this->db->order_by('pp_konsul', 'desc');
$this->db->join('proses_pengunjung', 'pp_id = prt_pengunjung_id', 'left');
$this->db->join('master_klinik', 'mk_id = pp_klinik_id', 'left');
$this->db->where('pp_tanggal_periksa', date('Y-m-d'));
$this->db->where('prt_aktif ', '0');
$this->db->where('prt_status >=', '5');
$this->db->where('prt_status <=', '8');
$this->db->where('pp_klinik_id', $klinik);
$this->db->order_by('pp_nomor_antrian_klinik', 'asc');
$query = $this->db->get('proses_ruang_tunggu');
return $query->result();
}
function infopengunjung($idklinik){
$this->db->join('proses_pengunjung', 'pp_id = prt_pengunjung_id', 'left');
$this->db->where('pp_tanggal_periksa', date('Y-m-d'));
$this->db->where('prt_aktif ', '0');
$this->db->where('pp_klinik_id ', $idklinik);
$this->db->where('prt_status =', '4');
$query = $this->db->get('proses_ruang_tunggu');
return $query->result();
}
function panggil($jumlah,$klinik){
$this->db->join('proses_pengunjung', 'pp_id = prt_pengunjung_id', 'left');
$this->db->where('pp_tanggal_periksa', date('Y-m-d'));
$this->db->where('prt_aktif ', '0');
$this->db->where('prt_status', '4');
$this->db->where('pp_klinik_id', $klinik);
$prt = $this->db->get('proses_ruang_tunggu');
$nomor=1;
foreach ($prt->result() as $datpengunjung){
if($nomor<=$jumlah){$nomor++;
$update_prt = array(
'prt_status' => 5,
);
$this->db->where('prt_id', $datpengunjung->prt_id);
$this->db->update('proses_ruang_tunggu', $update_prt);
}
}
}
function proses($pengunjung,$kode){
$update_rt = array(
'prt_status' => $kode,
);
$this->db->where('prt_id', $pengunjung);
$this->db->update('proses_ruang_tunggu', $update_rt);
}
function ubahklinik(){
$update_pp = array(
'pp_klinik_id' => $this->input->post('klinik'),
'pp_konsul' => null,
);
$this->db->where('pp_id', $this->input->post('idpengunjung'));
$this->db->update('proses_pengunjung', $update_pp);
$update_prt = array(
'prt_status' =>5,
);
$this->db->where('prt_id', $this->input->post('idprt'));
$this->db->update('proses_ruang_tunggu', $update_prt);
}
function konsul(){
$update_pp = array(
'pp_klinik_id' => $this->input->post('klinik'),
'pp_konsul' => 1,
);
$this->db->where('pp_id', $this->input->post('idpengunjung'));
$this->db->update('proses_pengunjung', $update_pp);
$update_prt = array(
'prt_status' => 7,
);
$this->db->where('prt_id', $this->input->post('idprt'));
$this->db->update('proses_ruang_tunggu', $update_prt);
}
function autoshift($klinik,$kode){
$update_autoshift = array(
'mk_auto_shift' => $kode,
);
$this->db->where('mk_id', $klinik);
$this->db->update('master_klinik', $update_autoshift);
}
function datapengunjung($idklinik){
$this->db->join('proses_ruang_tunggu', 'prt_pengunjung_id = pp_id', 'left');
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
$this->db->order_by('prt_tanggal', 'asc');
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$this->db->where('pp_klinik_id', $idklinik);
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function aktif($idprt){
$update_prt = array(
'prt_status' => '7',
);
$this->db->where('prt_id', $idprt);
$this->db->update('proses_ruang_tunggu', $update_prt);
}
}
?>

View File

@@ -0,0 +1,79 @@
<?php
class M_listpasien extends CI_Model {
function index() {
$this->db->join('proses_ruang_tunggu', 'proses_pengunjung.pp_id = proses_ruang_tunggu.prt_pengunjung_id', 'left ');
$this->db->join('m_pasien', 'proses_pengunjung.pp_pasien_id = m_pasien.int_pasien_id', 'left ');
$this->db->join('master_klinik', 'proses_pengunjung.pp_klinik_id = master_klinik.mk_id');
$this->db->order_by("pp_tanggal_periksa", "asc");
$this->db->where('pp_tanggal_periksa >=', date("Y-m-d") );
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function search() {
$tglperiksa=$this->input->post('tglperiksa');
$date = str_replace('/', '-', $tglperiksa);
$newDate= date('Y-m-d', strtotime($date));
$ketkunjungan=$this->input->post('ketkunjungan');
$this->db->join('proses_ruang_tunggu', 'proses_pengunjung.pp_id = proses_ruang_tunggu.prt_pengunjung_id', 'left ');
$this->db->join('m_pasien', 'proses_pengunjung.pp_pasien_id = m_pasien.int_pasien_id', 'left ');
$this->db->join('master_klinik', 'proses_pengunjung.pp_klinik_id = master_klinik.mk_id');
$this->db->where('pp_tanggal_periksa ', $newDate );
if($ketkunjungan=="online"){
$this->db->where('pp_pendaftaran_online is NOT NULL', NULL, FALSE);
}elseif($ketkunjungan=="offline"){
$this->db->where('pp_pendaftaran_online', NULL);
}
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function view($id) {
$this->db->where('mt_id', $id);
$query = $this->db->get('master_tipeuser');
return $query;
}
function datenow(){
$this->db->where('pp_tanggal_periksa >=', date("Y-m-d") );
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function minsatunow(){
$tglend= date('Y-m', strtotime('-1 month', strtotime( date("Y-m") )));
$this->db->like('pp_tanggal_periksa', $tglend , 'after');
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function laporanpasien() {
//$bulan=$this->input->post('bulankunjungan');
//$tahun=$this->input->post('tahunkunjungan');
//$this->db->join('proses_ruang_tunggu', 'proses_pengunjung.pp_id = proses_ruang_tunggu.prt_pengunjung_id', 'left ');
//$this->db->join('m_pasien', 'proses_pengunjung.pp_pasien_id = m_pasien.int_pasien_id', 'left ');
//$this->db->join('master_klinik', 'proses_pengunjung.pp_klinik_id = master_klinik.mk_id');
//$this->db->where('pp_tanggal_periksa >=', date("Y-m-d") );
//$this->db->like('pp_tanggal_periksa', "2023-05");
//$this->db->group_by('day(pp_tanggal_periksa)');
//$this->db->group_by('DATE(pp_tanggal_periksa)');
//$this->db->group_by('date');
//$this->db->where('pp_tanggal_periksa ', $newDate );
// if($ketkunjungan=="online"){
// $this->db->where('pp_pendaftaran_online is NOT NULL', NULL, FALSE);
// }elseif($ketkunjungan=="offline"){
// $this->db->where('pp_pendaftaran_online', NULL);
// }
// $query = $this->db->get('proses_pengunjung');
// return $query->result();
}
}
?>

View File

@@ -0,0 +1,39 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class M_login extends CI_Model{
function __construct(){
parent::__construct();
}
public function validate(){
$username = $this->security->xss_clean($this->input->post('username'));
$password = md5($this->security->xss_clean($this->input->post('password')));
$this->db->where('mu_nama_user', $username);
$this->db->where('mu_password', $password);
$query = $this->db->get('master_user');
if($query->num_rows() == 1)
{
if (date('H') < 7) {
//-----------------start untuk cek jam shift, jam shift, dan aktif klinik------------------//
$this->load->model('m_anjungan');
$info_pengunjung = $this->m_anjungan->cek_shift_jam();
$this->load->model('m_anjungan');
$cekanjungan = $this->m_anjungan->cekanjungan();
//-----------------end untuk cek jam shift, jam shift, dan aktif klinik------------------//
}
$row = $query->row();
$data = array(
's_ID_User' => $row->mu_id,
's_NamaUser_User' => $row->mu_nama_user,
's_FK_TipeUser' => $row->mu_tipeuser_id,
's_loket' => $row->mu_loket_id,
's_klinik' => $row->mu_klinik_id,
'validated' => true
);
$this->session->set_userdata($data);
return true;
}
return false;
}
}
?>

View File

@@ -0,0 +1,350 @@
<?php
class M_loket extends CI_Model {
function index() {
$query = $this->db->get('master_loket');
return $query->result();
}
function insert() {
$datpelayanan = "";
if(isset($_POST['klinik'])){
$dataklinik=$this->input->post('klinik');
$jumlahklinik = count($this->input->post('klinik'));
for($x = 0; $x <= $jumlahklinik; $x++){
if(isset($dataklinik[$x])){
$datpelayanan = $datpelayanan.$dataklinik[$x].",";
}
}
}
$insert_loket = array(
'ml_nama' => $this->input->post('nama'),
'ml_pelayanan' => $datpelayanan,
'ml_quota_bangku' => $this->input->post('quota'),
'ml_pembayaran' => $this->input->post('pembayaran'),
'ml_online' => $this->input->post('online'),
'ml_statuspelayanan'=> $this->input->post('statuspelayanan'),
);
$insert = $this->db->insert('master_loket', $insert_loket);
}
function edit($id) {
$this->db->where('ml_id', $id);
$query = $this->db->get('master_loket');
return $query;
}
function prosesedit() {
$datpelayanan = "";
if(isset($_POST['klinik'])){
$dataklinik=$this->input->post('klinik');
$jumlahklinik = count($this->input->post('klinik'));
for($x = 0; $x <= $jumlahklinik; $x++){
if(isset($dataklinik[$x])){
$datpelayanan = $datpelayanan.$dataklinik[$x].",";
}
}
}
$update_loket = array(
'ml_nama' => $this->input->post('nama'),
'ml_pelayanan' => $datpelayanan,
'ml_quota_bangku' => $this->input->post('quota'),
'ml_pembayaran' => $this->input->post('pembayaran'),
'ml_online' => $this->input->post('online'),
'ml_statuspelayanan'=> $this->input->post('statuspelayanan'),
);
$id = $this->input->post('id');
$this->db->where('ml_id', $id);
$this->db->update('master_loket', $update_loket);
}
function view($id) {
$this->db->where('ml_id', $id);
$query = $this->db->get('master_loket');
return $query;
}
function delete($id) {
$this->db->where('ml_id', $id);
$this->db->delete('master_loket');
}
//-------------------------------------Loket Admin--------------------------------//
function pengunjung() {
$this->db->order_by('pp_fasttrack', 'desc');
$this->db->order_by('pp_tanggal_datang', 'asc');
$this->db->join('proses_pengunjung', 'pp_id = prt_pengunjung_id', 'left');
$this->db->join('master_klinik', 'mk_id = pp_klinik_id', 'left');
$this->db->where('pp_tanggal_periksa', date('Y-m-d'));
$this->db->where('pp_loket', $this->session->userdata('s_loket'));
$this->db->where('prt_aktif ', '0');
$this->db->where('prt_status <', '5');
$query = $this->db->get('proses_ruang_tunggu');
return $query->result();
}
function pengunjungklinik() {
$this->db->join('proses_pengunjung', 'pp_id = prt_pengunjung_id', 'left');
$this->db->join('master_klinik', 'mk_id = pp_klinik_id', 'left');
$this->db->where('pp_tanggal_periksa', date('Y-m-d'));
$this->db->where('prt_aktif ', '0');
$this->db->where('prt_status >', '3');
$this->db->where('prt_status <', '6');
$query = $this->db->get('proses_ruang_tunggu');
return $query->result();
}
function panggil($jumlah){
$iduser = $this->session->userdata('s_ID_User');
$dataklinik="";
$datapembayaran="";
$this->db->join('master_loket', 'ml_id = mu_loket_id');
$this->db->where('mu_id', $iduser);
$user = $this->db->get('master_user');
foreach ($user->result() as $datuser){
$dataklinik = $datuser->ml_pelayanan;
$datapembayaran = $datuser->ml_pembayaran;
}
$klinikpecah = explode(",",$dataklinik);
//$this->db->join('proses_ruang_tunggu', 'prt_pengunjung_id = pp_id','LEFT');
$this->db->order_by('pp_tanggal_datang', 'asc');
$this->db->or_where_in('pp_klinik_id', $klinikpecah);
$this->db->where('pp_status', null);
$this->db->where('pp_tanggal_periksa', date('Y-m-d'));
$this->db->where('pp_pembayaran', $datapembayaran);
$pengunjung = $this->db->get('proses_pengunjung');
$nomor=1;
$this->db->join('proses_pengunjung', 'pp_id = prt_pengunjung_id');
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$this->db->where('prt_aktif', 2);
$rt = $this->db->get('proses_ruang_tunggu');
foreach ($rt->result() as $datruangtunggu){
if($nomor<=$jumlah){$nomor++;
$update_ruangtunggu = array(
'prt_aktif' => 0,
);
$this->db->where('prt_id', $datruangtunggu->prt_id);
$this->db->update('proses_ruang_tunggu', $update_ruangtunggu);
$updatepengunjung = array('pp_status'=> 1,'pp_panggil_anjungan'=> date("Y-m-d H:i:s"));
$this->db->where('pp_id', $datruangtunggu->pp_id);
$this->db->update('proses_pengunjung', $updatepengunjung);
}
}
foreach ($pengunjung->result() as $datpengunjung){
$this->db->where('mk_id', $datpengunjung->pp_klinik_id);
$kl = $this->db->get('master_klinik');
foreach ($kl->result() as $datklinik){
//-------------cek shift buka----------//
if($datpengunjung->pp_shift <= $datklinik->mk_shift_buka){
//echo $datpengunjung->pp_id; echo $nomor;
if($nomor<=$jumlah){$nomor++;
$input_ruangtunggu = array(
'prt_status' => 0,
'prt_tanggal' => date("Y-m-d H:i:s"),
'prt_aktif' => 0,
'prt_pengunjung_id' => $datpengunjung->pp_id,
);
$insert = $this->db->insert('proses_ruang_tunggu', $input_ruangtunggu);
$updatepengunjung = array('pp_status'=> 1,'pp_panggil_anjungan'=> date("Y-m-d H:i:s"),'pp_loket'=>$this->session->userdata('s_loket'));
//$updatepengunjung = array('pp_status'=> 1,'pp_panggil_anjungan'=> date("Y-m-d H:i:s"));
$this->db->where('pp_id', $datpengunjung->pp_id);
$this->db->update('proses_pengunjung', $updatepengunjung);
}
}
}
}
}
function proses($pengunjung,$kode){
$update_rt = array(
'prt_status' => $kode,
);
$this->db->where('prt_id', $pengunjung);
$this->db->update('proses_ruang_tunggu', $update_rt);
}
function barcode($pengunjung){
$update_prt = array(
'prt_status' =>1,
);
$this->db->where('prt_id', $pengunjung);
$this->db->update('proses_ruang_tunggu', $update_prt);
}
function terlambat($pengunjung){
$update_prt = array(
'prt_aktif' =>1,
'prt_status' =>0,
);
$this->db->where('prt_id', $pengunjung);
$this->db->update('proses_ruang_tunggu', $update_prt);
}
function aktif($pengunjung){
$update_prt = array(
'prt_aktif' =>0,
'prt_status' =>1,
);
$this->db->where('prt_id', $pengunjung);
$this->db->update('proses_ruang_tunggu', $update_prt);
}
function infopengunjung(){
$this->db->join('proses_ruang_tunggu', 'prt_pengunjung_id = pp_id','LEFT');
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function ubahklinik(){
$update_pp = array(
'pp_klinik_id' => $this->input->post('klinik'),
'pp_pembayaran' => $this->input->post('pembayaran'),
'pp_loket' => null,
);
$this->db->where('pp_id', $this->input->post('idpengunjung'));
$this->db->update('proses_pengunjung', $update_pp);
$update_prt = array(
'prt_status' =>1,
);
$this->db->where('prt_id', $this->input->post('idprt'));
$this->db->update('proses_ruang_tunggu', $update_prt);
}
function kunjunganterlambat(){
$this->db->join('proses_pengunjung', 'pp_id = prt_pengunjung_id');
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$this->db->where('prt_status', 0);
$this->db->where('prt_aktif', 1);
$query = $this->db->get('proses_ruang_tunggu');
return $query->result();
}
function proses_pengunjung(){
$idprt = $this->input->post('idprt_proses');
$idpp = $this->input->post('idpp_proses');
$idkl = $this->input->post('idklinik_proses');
$kodekl = $this->input->post('kodeklinik_proses');
$rm = $this->input->post('norm');
$fasttr = $this->input->post('data_fastrack');
$kode = 4;
$no_klinik="";
$i=0;
$hasil_nomor = "";
$this->db->order_by('pp_nomor_antrian_klinik', "asc");
$this->db->where('pp_klinik_id', $idkl);
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$this->db->like('pp_nomor_antrian_klinik', 'KL'.$kodekl);
$query_pengunjung = $this->db->get('proses_pengunjung');
foreach ($query_pengunjung->result() as $datpengunjung){
if(isset($datpengunjung->pp_nomor_antrian_klinik)){
$no_klinik = $datpengunjung->pp_nomor_antrian_klinik;
}
}
if($fasttr!=null){$kode=5;}
if(isset($no_klinik)){
$urutan = (int) substr($no_klinik, 4, 3);
$urutan++;
$hasil_nomor = "KL".$kodekl.sprintf("%03s", $urutan);
}else {
$hasil_nomor="KL".$kodekl."001";
}
$this->db->where('pp_tanggal_periksa', date('Y-m-d'));
$this->db->where('pp_nomor_antrian_klinik', $hasil_nomor);
$query_cek_nomor = $this->db->get('proses_pengunjung');
if($query_cek_nomor->num_rows()!=0){
return FALSE;
}else{
$update_pp = array(
'pp_nomor_antrian_klinik' => $hasil_nomor,
'pp_rekamedik' => $rm,
);
$this->db->where('pp_id', $idpp);
$this->db->update('proses_pengunjung', $update_pp);
$update_rt = array(
'prt_status' => $kode,
);
$this->db->where('prt_id', $idprt);
$this->db->update('proses_ruang_tunggu', $update_rt);
}
}
function proses_panggil($idpp, $idloket){
$namaloket = "";
$this->db->where('ml_id', $idloket);
$query_loket = $this->db->get('master_loket');
foreach ($query_loket->result() as $datloket){
$namaloket = $datloket->ml_nama;
}
$update_pp = array(
'pp_panggil' => date("Y-m-d H:i:s"),
'pp_panggil_loket' => $namaloket,
);
$this->db->where('pp_id', $idpp);
$this->db->update('proses_pengunjung', $update_pp);
}
function proses_panggil_anjungan($idpp){
$update_pp = array(
'pp_panggil_anjungan' => date("Y-m-d H:i:s"),
);
$this->db->where('pp_id', $idpp);
$this->db->update('proses_pengunjung', $update_pp);
}
function proses_panggil_null($idpp){
$update_pp = array(
'pp_panggil' => null,
'pp_panggil_loket' => null,
//'pp_panggil_anjungan' => null,
);
$this->db->where('pp_id', $idpp);
$this->db->update('proses_pengunjung', $update_pp);
}
function proses_panggil_anjungan_null($idpp){
$update_pp = array(
'pp_panggil_anjungan' => null,
);
$this->db->where('pp_id', $idpp);
$this->db->update('proses_pengunjung', $update_pp);
}
function data_pengunjung($idpp){
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
$this->db->where('pp_id', $idpp);
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function proses_checkin($idprt, $idpp){
$update_pp = array(
'pp_tanggal_datang' => date("Y-m-d H:i:s"),
);
$this->db->where('pp_id', $idpp);
$this->db->update('proses_pengunjung', $update_pp);
}
}
?>

View File

@@ -0,0 +1,112 @@
<?php
class M_loketranap extends CI_Model {
function index() {
$this->db->join('master_loket', 'ml_id = ppr_loket', 'LEFT');
$this->db->where('ppr_status <=', "2");
$this->db->like('ppr_tanggal_periksa', date("Y-m-d"));
$this->db->order_by('ppr_tanggal_periksa', 'ASC');
$this->db->order_by('ppr_status', 'ASC');
$query = $this->db->get('proses_pengunjung_ranap');
return $query->result();
}
function datapengunjung($id) {
$this->db->where('ppr_id', $id);
$query = $this->db->get('proses_pengunjung_ranap');
return $query;
}
function searchloket() {
$this->db->like('ppr_tanggal_periksa', date("Y-m-d"));
$this->db->where('ppr_status', "1");
$this->db->where('ppr_loket', $this->session->userdata('s_loket'));
$query = $this->db->get('proses_pengunjung_ranap');
return $query;
}
function datapanggil() {
$this->db->join('master_loket', 'ml_id = ppr_loket', 'LEFT');
$this->db->like('ppr_tanggal_periksa', date("Y-m-d"));
$this->db->where('ppr_status <=', "2");
$this->db->where('ppr_loket is NULL', NULL, TRUE);
$this->db->where('ppr_callsound is NULL', NULL, FALSE);
$this->db->order_by('ppr_callsound', 'ASC');
$query = $this->db->get('proses_pengunjung_ranap');
return $query->result();
}
function datapanggilsuara() {
$this->db->join('master_loket', 'ml_id = ppr_loket', 'LEFT');
$this->db->like('ppr_tanggal_periksa', date("Y-m-d"));
$this->db->where('ppr_loket is NOT NULL', NULL, FALSE);
$this->db->where('ppr_callsound is NOT NULL', NULL, FALSE);
$this->db->order_by('ppr_callsound', 'DESC');
$query = $this->db->get('proses_pengunjung_ranap');
return $query->result();
}
function dataloket() {
$this->db->join('master_loket', 'ml_id = mu_loket_id', 'LEFT');
$this->db->where('mu_tipeuser_id', "7");
$query = $this->db->get('master_user');
return $query->result();
}
// function insertpengunjung() {
//
// $no_antrian;
// $hasil_nomor = "";
// $this->db->order_by('ppr_nomor_antrian', 'ASC');
// $this->db->where('ppr_tanggal_periksa', date("Y-m-d"));
// $query = $this->db->get('proses_pengunjung_ranap');
// foreach ($query->result() as $datpengunjung){
// $no_antrian = $datpengunjung->ppr_nomor_antrian;
// }
//
// if(isset($no_antrian)){
// $hasil_nomor = $no_antrian+1;
// $nomjum = strlen($hasil_nomor);$nol="";
// if($nomjum=="1"){$nol="00";}
// elseif($nomjum=="2"){$nol="0";}
// $hasil_nomor=$nol.$hasil_nomor;
// }else {
// $hasil_nomor="001";
// }
//
// $insert = array(
// 'ppr_nomor_antrian' => $hasil_nomor,
// 'ppr_tanggal_periksa' => date("Y-m-d"),
// 'ppr_status' => "0",
// );
// $this->db->insert('proses_pengunjung_ranap', $insert);
// }
//
// function edit($id) {
// $this->db->where('mt_id', $id);
// $query = $this->db->get('master_tipeuser');
// return $query;
// }
//
// function prosesedit() {
// $update_tipeuser = array(
// 'mt_nama' => $this->input->post('namatipeuser'),
// );
// $id = $this->input->post('id');
// $this->db->where('mt_id', $id);
// $this->db->update('master_tipeuser', $update_tipeuser);
// }
//
// function view($id) {
// $this->db->where('mt_id', $id);
// $query = $this->db->get('master_tipeuser');
// return $query;
// }
//
// function delete($id) {
// $this->db->where('mt_id', $id);
// $this->db->delete('master_tipeuser');
// }
}
?>

View File

@@ -0,0 +1,118 @@
<?php
class M_masteruser extends CI_Model {
function index() {
$this->db->select('user.*,tipeuser.Nama_TipeUser');
$this->db->from('user')->join('tipeuser', 'user.FK_TipeUser = tipeuser.ID_TipeUser', 'left');
$query = $this->db->get();
return $query->result();
}
function insert() {
$insert_masteruser = array(
'FK_TipeUser' => $this->input->post('tipeuser'),
'NamaUser_User' => $this->input->post('namauser'),
'Password_User' => "simkoprasiBMB",
'NamaLengkap_User' => $this->input->post('namalengkapuser'),
'Telepon_User' => $this->input->post('teleponuser'),
'Email_User' => $this->input->post('emailuser'),
'TanggalLahir_User' => $this->input->post('tanggallahiruser'),
'TempatLahir_User' => $this->input->post('tempatlahiruser'),
'Alamat_User' => $this->input->post('alamatuser'),
'JenisKelamin_User' => $this->input->post('jeniskelaminuser'),
'Agama_User' => $this->input->post('agamauser'),
'TanggalBuat_User' => date('Y-m-d H:i:s'),
'TanggalEdit_User' => date('Y-m-d H:i:s'),
'Provinsi_ID' => $this->input->post('provinsi'),
'Kabupaten_ID' => $this->input->post('kabupaten'),
'Kecamatan_ID' => $this->input->post('kecamatan'),
'Desa_ID' => $this->input->post('desa'),
);
$insert = $this->db->insert('user', $insert_masteruser);
return $insert;
}
function edit($id) {
$this->db->where('ID_User', $id);
$query = $this->db->get('user');
return $query;
}
function prosesedit() {
$update_masteruser = array(
'FK_TipeUser' => $this->input->post('tipeuser'),
'NamaUser_User' => $this->input->post('namauser'),
//'Password_User' => $this->input->post('passworduser'),
'NamaLengkap_User' => $this->input->post('namalengkapuser'),
'Telepon_User' => $this->input->post('teleponuser'),
'Email_User' => $this->input->post('emailuser'),
'TanggalLahir_User' => $this->input->post('tanggallahiruser'),
'TempatLahir_User' => $this->input->post('tempatlahiruser'),
'Alamat_User' => $this->input->post('alamatuser'),
'JenisKelamin_User' => $this->input->post('jeniskelaminuser'),
'Agama_User' => $this->input->post('agamauser'),
'TanggalEdit_User' => date('Y-m-d H:i:s'),
'Provinsi_ID' => $this->input->post('provinsi'),
'Kabupaten_ID' => $this->input->post('kabupaten'),
'Kecamatan_ID' => $this->input->post('kecamatan'),
'Desa_ID' => $this->input->post('desa'),
);
$id = $this->input->post('id');
$this->db->where('ID_User', $id);
$this->db->update('user', $update_masteruser);
}
function view($id) {
$this->db->where('ID_User', $id);
$query = $this->db->get('user');
return $query;
}
function delete($id) {
$this->db->where('ID_User', $id);
$this->db->delete('user');
}
function editfoto() {
$config = array(
'upload_path' => "./img/",
'allowed_types' => "jpg|jpeg",
'overwrite' => TRUE,
'max_size' => "2048000", // Can be set to particular file size , here it is 2 MB(2048 Kb)
'max_height' => "768",
'max_width' => "1024"
);
$this->load->library('upload', $config);
$upload_data = $this->upload->data();
$file_name = $upload_data['file_name'];
$update_user = array(
'Foto_User' => $file_name,
'TanggalEdit_User' => date('Y-m-d H:i:s'),
);
$id = $this->session->userdata('s_ID_User');
$this->db->where('ID_User', $id);
$this->db->update('user', $update_user);
}
function resetpass($id) {
$update_user = array(
'Password_User' => "simkoprasiBMB",
'TanggalEdit_User' => date('Y-m-d H:i:s'),
);
$this->db->where('ID_User', $id);
$this->db->update('user', $update_user);
}
function editpass($id) {
$update_user = array(
'Password_User' => $this->input->post('renewpass'),
'TanggalEdit_User' => date('Y-m-d H:i:s'),
);
$this->db->where('ID_User', $id);
$this->db->update('user', $update_user);
}
}
?>

View File

@@ -0,0 +1,22 @@
<?php
class M_menu extends CI_Model {
function index() {
//$this->db->order_by('mm_urutan', 'ASC');
$query = $this->db->get('master_menu');
return $query->result();
}
function urutan() {
$this->db->order_by('mm_urutan', 'ASC');
$query = $this->db->get('master_menu');
return $query->result();
}
function hakakses($id) {
$this->db->where('mum_tipeuser_id', $id);
$query = $this->db->get('master_user_menu');
return $query->result();
}
}
?>

View File

@@ -0,0 +1,42 @@
<?php
class M_pasien extends CI_Model {
function index() {
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$this->db->join('proses_ruang_tunggu', 'prt_pengunjung_id = pp_id', 'LEFT');
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function edit($id) {
$this->db->where('pp_id', $id);
$this->db->join('proses_ruang_tunggu', 'prt_pengunjung_id = pp_id', 'LEFT');
$this->db->join('master_klinik', 'mk_id = pp_klinik_id');
$query = $this->db->get('proses_pengunjung');
return $query;
}
function prosesedit() {
$update_pp = array(
'pp_rekamedik' => $this->input->post('norek'),
//'pp_klinik_id' => $this->input->post('klinik'),
//'pp_shift' => $this->input->post('shift'),
//'pp_pembayaran' => $this->input->post('pembayaran'),
);
$id = $this->input->post('id');
$this->db->where('pp_id', $id);
$this->db->update('proses_pengunjung', $update_pp);
}
function view($id) {
$this->db->where('mu_id', $id);
$query = $this->db->get('master_user');
return $query;
}
function delete($id) {
$this->db->where('mu_id', $id);
$this->db->delete('master_user');
}
}
?>

View File

@@ -0,0 +1,57 @@
<?php
class M_screen extends CI_Model {
function index() {
$query = $this->db->get('master_klinik');
return $query->result();
}
function info_pp($mlscreen) {
$this->db->join('proses_ruang_tunggu', 'prt_pengunjung_id = pp_id', 'LEFT');
$this->db->join('master_klinik', 'mk_id = pp_klinik_id','LEFT');
$this->db->where('mk_screen', $mlscreen);
$this->db->where('prt_status', '5');
$this->db->where('pp_tanggal_periksa', date("Y-m-d"));
$query = $this->db->get('proses_pengunjung');
return $query->result();
}
function master_klinik($mlscreen) {
$this->db->where('mk_screen', $mlscreen);
$this->db->order_by('mk_nama', 'asc');
$query = $this->db->get('master_klinik');
return $query->result();
}
function edit($ketscr) {
$this->db->where('mk_screen', $ketscr);
$query = $this->db->get('master_klinik');
return $query;
}
function prosesedit() {
$totnum = $this->input->post('lastnumber');
for($i=1;$i<=$totnum;$i++){
$update_kl = array(
'mk_screen' => $this->input->post('sc'.$i),
);
$id = $this->input->post('idk'.$i);
$this->db->where('mk_id', $id);
$this->db->update('master_klinik', $update_kl);
}
}
function pengunjung($idloket) {
$this->db->order_by('pp_fasttrack', 'desc');
$this->db->order_by('pp_tanggal_datang', 'DESC');
$this->db->join('proses_pengunjung', 'pp_id = prt_pengunjung_id', 'left');
$this->db->join('master_klinik', 'mk_id = pp_klinik_id', 'left');
$this->db->where('pp_tanggal_periksa', date('Y-m-d'));
$this->db->where('pp_loket', $idloket);
//$this->db->where('pp_loket', $this->session->userdata('s_loket'));
$this->db->where('prt_aktif ', '0');
$this->db->where('prt_status <', '5');
$query = $this->db->get('proses_ruang_tunggu');
return $query->result();
}
}
?>

View File

@@ -0,0 +1,42 @@
<?php
class M_tipeuser extends CI_Model {
function index() {
$query = $this->db->get('master_tipeuser');
return $query->result();
}
function insert() {
$insert_tipeuser = array(
'mt_nama' => $this->input->post('namatipeuser'),
);
$insert = $this->db->insert('master_tipeuser', $insert_tipeuser);
}
function edit($id) {
$this->db->where('mt_id', $id);
$query = $this->db->get('master_tipeuser');
return $query;
}
function prosesedit() {
$update_tipeuser = array(
'mt_nama' => $this->input->post('namatipeuser'),
);
$id = $this->input->post('id');
$this->db->where('mt_id', $id);
$this->db->update('master_tipeuser', $update_tipeuser);
}
function view($id) {
$this->db->where('mt_id', $id);
$query = $this->db->get('master_tipeuser');
return $query;
}
function delete($id) {
$this->db->where('mt_id', $id);
$this->db->delete('master_tipeuser');
}
}
?>

View File

@@ -0,0 +1,69 @@
<?php
class M_userlogin extends CI_Model {
function index() {
$this->db->join('master_tipeuser', 'master_tipeuser.mt_id = master_user.mu_tipeuser_id','left');
$this->db->join('master_klinik', 'master_klinik.mk_id = master_user.mu_klinik_id','left');
$this->db->join('master_loket', 'master_loket.ml_id = master_user.mu_loket_id','left');
$query = $this->db->get('master_user');
return $query->result();
}
function insert() {
$loketdat = $this->input->post('loket');if(empty($loketdat)){$loketdat=null;}
$klinik = $this->input->post('klinik');if(empty($klinik)){$klinik=null;}
$insert_userlogin = array(
'mu_nama_lengkap' => $this->input->post('namalengkapuser'),
'mu_nama_user' => $this->input->post('namauser'),
'mu_password' => md5($this->input->post('passworduser')),
'mu_klinik_id' => $klinik,
'mu_loket_id' => $loketdat,
'mu_tipeuser_id' => $this->input->post('tipeuser'),
);
$insert = $this->db->insert('master_user', $insert_userlogin);
}
function edit($id) {
$this->db->where('mu_id', $id);
$query = $this->db->get('master_user');
return $query;
}
function prosesedit() {
$loketdat = $this->input->post('loket');if(empty($loketdat)){$loketdat=null;}
$klinik = $this->input->post('klinik');if(empty($klinik)){$klinik=null;}
$password = $this->input->post('passworduser');
if(empty($password)){
$update_userlogin = array(
'mu_nama_lengkap' => $this->input->post('namalengkapuser'),
'mu_nama_user' => $this->input->post('namauser'),
'mu_klinik_id' => $klinik,
'mu_loket_id' => $loketdat,
'mu_tipeuser_id' => $this->input->post('tipeuser'),
);
}else{
$update_userlogin = array(
'mu_nama_lengkap' => $this->input->post('namalengkapuser'),
'mu_nama_user' => $this->input->post('namauser'),
'mu_password' => md5($this->input->post('passworduser')),
'mu_klinik_id' => $klinik,
'mu_loket_id' => $loketdat,
'mu_tipeuser_id' => $this->input->post('tipeuser'),
);
}
$id = $this->input->post('id');
$this->db->where('mu_id', $id);
$this->db->update('master_user', $update_userlogin);
}
function view($id) {
$this->db->where('mu_id', $id);
$query = $this->db->get('master_user');
return $query;
}
function delete($id) {
$this->db->where('mu_id', $id);
$this->db->delete('master_user');
}
}
?>

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,81 @@
<?php
PHPExcel_Autoloader::register();
// As we always try to run the autoloader before anything else, we can use it to do a few
// simple checks and initialisations
//PHPExcel_Shared_ZipStreamWrapper::register();
// check mbstring.func_overload
if (ini_get('mbstring.func_overload') & 2) {
throw new PHPExcel_Exception('Multibyte function overloading in PHP must be disabled for string functions (2).');
}
PHPExcel_Shared_String::buildCharacterSets();
/**
* PHPExcel
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_Autoloader
{
/**
* Register the Autoloader with SPL
*
*/
public static function register()
{
if (function_exists('__autoload')) {
// Register any existing autoloader function with SPL, so we don't get any clashes
spl_autoload_register('__autoload');
}
// Register ourselves with SPL
if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
return spl_autoload_register(array('PHPExcel_Autoloader', 'load'), true, true);
} else {
return spl_autoload_register(array('PHPExcel_Autoloader', 'load'));
}
}
/**
* Autoload a class identified by name
*
* @param string $pClassName Name of the object to load
*/
public static function load($pClassName)
{
if ((class_exists($pClassName, false)) || (strpos($pClassName, 'PHPExcel') !== 0)) {
// Either already loaded, or not a PHPExcel class request
return false;
}
$pClassFilePath = PHPEXCEL_ROOT .
str_replace('_', DIRECTORY_SEPARATOR, $pClassName) .
'.php';
if ((file_exists($pClassFilePath) === false) || (is_readable($pClassFilePath) === false)) {
// Can't load
return false;
}
require($pClassFilePath);
}
}

View File

@@ -0,0 +1,290 @@
<?php
/**
* PHPExcel_CachedObjectStorage_APC
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* Prefix used to uniquely identify cache data for this worksheet
*
* @access private
* @var string
*/
private $cachePrefix = null;
/**
* Cache timeout
*
* @access private
* @var integer
*/
private $cacheTime = 600;
/**
* Store cell data in cache for the current cell object if it's "dirty",
* and the 'nullify' the current cell object
*
* @access private
* @return void
* @throws PHPExcel_Exception
*/
protected function storeData()
{
if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
if (!apc_store(
$this->cachePrefix . $this->currentObjectID . '.cache',
serialize($this->currentObject),
$this->cacheTime
)) {
$this->__destruct();
throw new PHPExcel_Exception('Failed to store cell ' . $this->currentObjectID . ' in APC');
}
$this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
}
/**
* Add or Update a cell in cache identified by coordinate address
*
* @access public
* @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public function addCacheData($pCoord, PHPExcel_Cell $cell)
{
if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
}
$this->cellCache[$pCoord] = true;
$this->currentObjectID = $pCoord;
$this->currentObject = $cell;
$this->currentCellIsDirty = true;
return $cell;
}
/**
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
*
* @access public
* @param string $pCoord Coordinate address of the cell to check
* @throws PHPExcel_Exception
* @return boolean
*/
public function isDataSet($pCoord)
{
// Check if the requested entry is the current object, or exists in the cache
if (parent::isDataSet($pCoord)) {
if ($this->currentObjectID == $pCoord) {
return true;
}
// Check if the requested entry still exists in apc
$success = apc_fetch($this->cachePrefix.$pCoord.'.cache');
if ($success === false) {
// Entry no longer exists in APC, so clear it from the cache array
parent::deleteCacheData($pCoord);
throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in APC cache');
}
return true;
}
return false;
}
/**
* Get cell at a specific coordinate
*
* @access public
* @param string $pCoord Coordinate of the cell
* @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found
*/
public function getCacheData($pCoord)
{
if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
}
$this->storeData();
// Check if the entry that has been requested actually exists
if (parent::isDataSet($pCoord)) {
$obj = apc_fetch($this->cachePrefix . $pCoord . '.cache');
if ($obj === false) {
// Entry no longer exists in APC, so clear it from the cache array
parent::deleteCacheData($pCoord);
throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in APC cache');
}
} else {
// Return null if requested entry doesn't exist in cache
return null;
}
// Set current entry to the requested entry
$this->currentObjectID = $pCoord;
$this->currentObject = unserialize($obj);
// Re-attach this as the cell's parent
$this->currentObject->attach($this);
// Return requested entry
return $this->currentObject;
}
/**
* Get a list of all cell addresses currently held in cache
*
* @return string[]
*/
public function getCellList()
{
if ($this->currentObjectID !== null) {
$this->storeData();
}
return parent::getCellList();
}
/**
* Delete a cell in cache identified by coordinate address
*
* @access public
* @param string $pCoord Coordinate address of the cell to delete
* @throws PHPExcel_Exception
*/
public function deleteCacheData($pCoord)
{
// Delete the entry from APC
apc_delete($this->cachePrefix.$pCoord.'.cache');
// Delete the entry from our cell address array
parent::deleteCacheData($pCoord);
}
/**
* Clone the cell collection
*
* @access public
* @param PHPExcel_Worksheet $parent The new worksheet
* @throws PHPExcel_Exception
* @return void
*/
public function copyCellCollection(PHPExcel_Worksheet $parent)
{
parent::copyCellCollection($parent);
// Get a new id for the new file name
$baseUnique = $this->getUniqueID();
$newCachePrefix = substr(md5($baseUnique), 0, 8) . '.';
$cacheList = $this->getCellList();
foreach ($cacheList as $cellID) {
if ($cellID != $this->currentObjectID) {
$obj = apc_fetch($this->cachePrefix . $cellID . '.cache');
if ($obj === false) {
// Entry no longer exists in APC, so clear it from the cache array
parent::deleteCacheData($cellID);
throw new PHPExcel_Exception('Cell entry ' . $cellID . ' no longer exists in APC');
}
if (!apc_store($newCachePrefix . $cellID . '.cache', $obj, $this->cacheTime)) {
$this->__destruct();
throw new PHPExcel_Exception('Failed to store cell ' . $cellID . ' in APC');
}
}
}
$this->cachePrefix = $newCachePrefix;
}
/**
* Clear the cell collection and disconnect from our parent
*
* @return void
*/
public function unsetWorksheetCells()
{
if ($this->currentObject !== null) {
$this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
}
// Flush the APC cache
$this->__destruct();
$this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully
$this->parent = null;
}
/**
* Initialise this new cell collection
*
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
* @param array of mixed $arguments Additional initialisation arguments
*/
public function __construct(PHPExcel_Worksheet $parent, $arguments)
{
$cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
if ($this->cachePrefix === null) {
$baseUnique = $this->getUniqueID();
$this->cachePrefix = substr(md5($baseUnique), 0, 8) . '.';
$this->cacheTime = $cacheTime;
parent::__construct($parent);
}
}
/**
* Destroy this cell collection
*/
public function __destruct()
{
$cacheList = $this->getCellList();
foreach ($cacheList as $cellID) {
apc_delete($this->cachePrefix . $cellID . '.cache');
}
}
/**
* Identify whether the caching method is currently available
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
*
* @return boolean
*/
public static function cacheMethodIsAvailable()
{
if (!function_exists('apc_store')) {
return false;
}
if (apc_sma_info() === false) {
return false;
}
return true;
}
}

View File

@@ -0,0 +1,368 @@
<?php
/**
* PHPExcel_CachedObjectStorage_CacheBase
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
abstract class PHPExcel_CachedObjectStorage_CacheBase
{
/**
* Parent worksheet
*
* @var PHPExcel_Worksheet
*/
protected $parent;
/**
* The currently active Cell
*
* @var PHPExcel_Cell
*/
protected $currentObject = null;
/**
* Coordinate address of the currently active Cell
*
* @var string
*/
protected $currentObjectID = null;
/**
* Flag indicating whether the currently active Cell requires saving
*
* @var boolean
*/
protected $currentCellIsDirty = true;
/**
* An array of cells or cell pointers for the worksheet cells held in this cache,
* and indexed by their coordinate address within the worksheet
*
* @var array of mixed
*/
protected $cellCache = array();
/**
* Initialise this new cell collection
*
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
*/
public function __construct(PHPExcel_Worksheet $parent)
{
// Set our parent worksheet.
// This is maintained within the cache controller to facilitate re-attaching it to PHPExcel_Cell objects when
// they are woken from a serialized state
$this->parent = $parent;
}
/**
* Return the parent worksheet for this cell collection
*
* @return PHPExcel_Worksheet
*/
public function getParent()
{
return $this->parent;
}
/**
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
*
* @param string $pCoord Coordinate address of the cell to check
* @return boolean
*/
public function isDataSet($pCoord)
{
if ($pCoord === $this->currentObjectID) {
return true;
}
// Check if the requested entry exists in the cache
return isset($this->cellCache[$pCoord]);
}
/**
* Move a cell object from one address to another
*
* @param string $fromAddress Current address of the cell to move
* @param string $toAddress Destination address of the cell to move
* @return boolean
*/
public function moveCell($fromAddress, $toAddress)
{
if ($fromAddress === $this->currentObjectID) {
$this->currentObjectID = $toAddress;
}
$this->currentCellIsDirty = true;
if (isset($this->cellCache[$fromAddress])) {
$this->cellCache[$toAddress] = &$this->cellCache[$fromAddress];
unset($this->cellCache[$fromAddress]);
}
return true;
}
/**
* Add or Update a cell in cache
*
* @param PHPExcel_Cell $cell Cell to update
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public function updateCacheData(PHPExcel_Cell $cell)
{
return $this->addCacheData($cell->getCoordinate(), $cell);
}
/**
* Delete a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to delete
* @throws PHPExcel_Exception
*/
public function deleteCacheData($pCoord)
{
if ($pCoord === $this->currentObjectID && !is_null($this->currentObject)) {
$this->currentObject->detach();
$this->currentObjectID = $this->currentObject = null;
}
if (is_object($this->cellCache[$pCoord])) {
$this->cellCache[$pCoord]->detach();
unset($this->cellCache[$pCoord]);
}
$this->currentCellIsDirty = false;
}
/**
* Get a list of all cell addresses currently held in cache
*
* @return string[]
*/
public function getCellList()
{
return array_keys($this->cellCache);
}
/**
* Sort the list of all cell addresses currently held in cache by row and column
*
* @return string[]
*/
public function getSortedCellList()
{
$sortKeys = array();
foreach ($this->getCellList() as $coord) {
sscanf($coord, '%[A-Z]%d', $column, $row);
$sortKeys[sprintf('%09d%3s', $row, $column)] = $coord;
}
ksort($sortKeys);
return array_values($sortKeys);
}
/**
* Get highest worksheet column and highest row that have cell records
*
* @return array Highest column name and highest row number
*/
public function getHighestRowAndColumn()
{
// Lookup highest column and highest row
$col = array('A' => '1A');
$row = array(1);
foreach ($this->getCellList() as $coord) {
sscanf($coord, '%[A-Z]%d', $c, $r);
$row[$r] = $r;
$col[$c] = strlen($c).$c;
}
if (!empty($row)) {
// Determine highest column and row
$highestRow = max($row);
$highestColumn = substr(max($col), 1);
}
return array(
'row' => $highestRow,
'column' => $highestColumn
);
}
/**
* Return the cell address of the currently active cell object
*
* @return string
*/
public function getCurrentAddress()
{
return $this->currentObjectID;
}
/**
* Return the column address of the currently active cell object
*
* @return string
*/
public function getCurrentColumn()
{
sscanf($this->currentObjectID, '%[A-Z]%d', $column, $row);
return $column;
}
/**
* Return the row address of the currently active cell object
*
* @return integer
*/
public function getCurrentRow()
{
sscanf($this->currentObjectID, '%[A-Z]%d', $column, $row);
return (integer) $row;
}
/**
* Get highest worksheet column
*
* @param string $row Return the highest column for the specified row,
* or the highest column of any row if no row number is passed
* @return string Highest column name
*/
public function getHighestColumn($row = null)
{
if ($row == null) {
$colRow = $this->getHighestRowAndColumn();
return $colRow['column'];
}
$columnList = array(1);
foreach ($this->getCellList() as $coord) {
sscanf($coord, '%[A-Z]%d', $c, $r);
if ($r != $row) {
continue;
}
$columnList[] = PHPExcel_Cell::columnIndexFromString($c);
}
return PHPExcel_Cell::stringFromColumnIndex(max($columnList) - 1);
}
/**
* Get highest worksheet row
*
* @param string $column Return the highest row for the specified column,
* or the highest row of any column if no column letter is passed
* @return int Highest row number
*/
public function getHighestRow($column = null)
{
if ($column == null) {
$colRow = $this->getHighestRowAndColumn();
return $colRow['row'];
}
$rowList = array(0);
foreach ($this->getCellList() as $coord) {
sscanf($coord, '%[A-Z]%d', $c, $r);
if ($c != $column) {
continue;
}
$rowList[] = $r;
}
return max($rowList);
}
/**
* Generate a unique ID for cache referencing
*
* @return string Unique Reference
*/
protected function getUniqueID()
{
if (function_exists('posix_getpid')) {
$baseUnique = posix_getpid();
} else {
$baseUnique = mt_rand();
}
return uniqid($baseUnique, true);
}
/**
* Clone the cell collection
*
* @param PHPExcel_Worksheet $parent The new worksheet
* @return void
*/
public function copyCellCollection(PHPExcel_Worksheet $parent)
{
$this->currentCellIsDirty;
$this->storeData();
$this->parent = $parent;
if (($this->currentObject !== null) && (is_object($this->currentObject))) {
$this->currentObject->attach($this);
}
} // function copyCellCollection()
/**
* Remove a row, deleting all cells in that row
*
* @param string $row Row number to remove
* @return void
*/
public function removeRow($row)
{
foreach ($this->getCellList() as $coord) {
sscanf($coord, '%[A-Z]%d', $c, $r);
if ($r == $row) {
$this->deleteCacheData($coord);
}
}
}
/**
* Remove a column, deleting all cells in that column
*
* @param string $column Column ID to remove
* @return void
*/
public function removeColumn($column)
{
foreach ($this->getCellList() as $coord) {
sscanf($coord, '%[A-Z]%d', $c, $r);
if ($c == $column) {
$this->deleteCacheData($coord);
}
}
}
/**
* Identify whether the caching method is currently available
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
*
* @return boolean
*/
public static function cacheMethodIsAvailable()
{
return true;
}
}

View File

@@ -0,0 +1,208 @@
<?php
/**
* PHPExcel_CachedObjectStorage_DiscISAM
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_CachedObjectStorage_DiscISAM extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* Name of the file for this cache
*
* @var string
*/
private $fileName = null;
/**
* File handle for this cache file
*
* @var resource
*/
private $fileHandle = null;
/**
* Directory/Folder where the cache file is located
*
* @var string
*/
private $cacheDirectory = null;
/**
* Store cell data in cache for the current cell object if it's "dirty",
* and the 'nullify' the current cell object
*
* @return void
* @throws PHPExcel_Exception
*/
protected function storeData()
{
if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
fseek($this->fileHandle, 0, SEEK_END);
$this->cellCache[$this->currentObjectID] = array(
'ptr' => ftell($this->fileHandle),
'sz' => fwrite($this->fileHandle, serialize($this->currentObject))
);
$this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
}
/**
* Add or Update a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public function addCacheData($pCoord, PHPExcel_Cell $cell)
{
if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
}
$this->currentObjectID = $pCoord;
$this->currentObject = $cell;
$this->currentCellIsDirty = true;
return $cell;
}
/**
* Get cell at a specific coordinate
*
* @param string $pCoord Coordinate of the cell
* @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found
*/
public function getCacheData($pCoord)
{
if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
}
$this->storeData();
// Check if the entry that has been requested actually exists
if (!isset($this->cellCache[$pCoord])) {
// Return null if requested entry doesn't exist in cache
return null;
}
// Set current entry to the requested entry
$this->currentObjectID = $pCoord;
fseek($this->fileHandle, $this->cellCache[$pCoord]['ptr']);
$this->currentObject = unserialize(fread($this->fileHandle, $this->cellCache[$pCoord]['sz']));
// Re-attach this as the cell's parent
$this->currentObject->attach($this);
// Return requested entry
return $this->currentObject;
}
/**
* Get a list of all cell addresses currently held in cache
*
* @return string[]
*/
public function getCellList()
{
if ($this->currentObjectID !== null) {
$this->storeData();
}
return parent::getCellList();
}
/**
* Clone the cell collection
*
* @param PHPExcel_Worksheet $parent The new worksheet
*/
public function copyCellCollection(PHPExcel_Worksheet $parent)
{
parent::copyCellCollection($parent);
// Get a new id for the new file name
$baseUnique = $this->getUniqueID();
$newFileName = $this->cacheDirectory.'/PHPExcel.'.$baseUnique.'.cache';
// Copy the existing cell cache file
copy($this->fileName, $newFileName);
$this->fileName = $newFileName;
// Open the copied cell cache file
$this->fileHandle = fopen($this->fileName, 'a+');
}
/**
* Clear the cell collection and disconnect from our parent
*
*/
public function unsetWorksheetCells()
{
if (!is_null($this->currentObject)) {
$this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
}
$this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully
$this->parent = null;
// Close down the temporary cache file
$this->__destruct();
}
/**
* Initialise this new cell collection
*
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
* @param array of mixed $arguments Additional initialisation arguments
*/
public function __construct(PHPExcel_Worksheet $parent, $arguments)
{
$this->cacheDirectory = ((isset($arguments['dir'])) && ($arguments['dir'] !== null))
? $arguments['dir']
: PHPExcel_Shared_File::sys_get_temp_dir();
parent::__construct($parent);
if (is_null($this->fileHandle)) {
$baseUnique = $this->getUniqueID();
$this->fileName = $this->cacheDirectory.'/PHPExcel.'.$baseUnique.'.cache';
$this->fileHandle = fopen($this->fileName, 'a+');
}
}
/**
* Destroy this cell collection
*/
public function __destruct()
{
if (!is_null($this->fileHandle)) {
fclose($this->fileHandle);
unlink($this->fileName);
}
$this->fileHandle = null;
}
}

View File

@@ -0,0 +1,103 @@
<?php
/**
* PHPExcel_CachedObjectStorage_ICache
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
interface PHPExcel_CachedObjectStorage_ICache
{
/**
* Add or Update a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public function addCacheData($pCoord, PHPExcel_Cell $cell);
/**
* Add or Update a cell in cache
*
* @param PHPExcel_Cell $cell Cell to update
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public function updateCacheData(PHPExcel_Cell $cell);
/**
* Fetch a cell from cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to retrieve
* @return PHPExcel_Cell Cell that was found, or null if not found
* @throws PHPExcel_Exception
*/
public function getCacheData($pCoord);
/**
* Delete a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to delete
* @throws PHPExcel_Exception
*/
public function deleteCacheData($pCoord);
/**
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
*
* @param string $pCoord Coordinate address of the cell to check
* @return boolean
*/
public function isDataSet($pCoord);
/**
* Get a list of all cell addresses currently held in cache
*
* @return string[]
*/
public function getCellList();
/**
* Get the list of all cell addresses currently held in cache sorted by column and row
*
* @return string[]
*/
public function getSortedCellList();
/**
* Clone the cell collection
*
* @param PHPExcel_Worksheet $parent The new worksheet
* @return void
*/
public function copyCellCollection(PHPExcel_Worksheet $parent);
/**
* Identify whether the caching method is currently available
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
*
* @return boolean
*/
public static function cacheMethodIsAvailable();
}

View File

@@ -0,0 +1,149 @@
<?php
/**
* PHPExcel_CachedObjectStorage_Igbinary
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_CachedObjectStorage_Igbinary extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* Store cell data in cache for the current cell object if it's "dirty",
* and the 'nullify' the current cell object
*
* @return void
* @throws PHPExcel_Exception
*/
protected function storeData()
{
if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
$this->cellCache[$this->currentObjectID] = igbinary_serialize($this->currentObject);
$this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
} // function _storeData()
/**
* Add or Update a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public function addCacheData($pCoord, PHPExcel_Cell $cell)
{
if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
}
$this->currentObjectID = $pCoord;
$this->currentObject = $cell;
$this->currentCellIsDirty = true;
return $cell;
} // function addCacheData()
/**
* Get cell at a specific coordinate
*
* @param string $pCoord Coordinate of the cell
* @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found
*/
public function getCacheData($pCoord)
{
if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
}
$this->storeData();
// Check if the entry that has been requested actually exists
if (!isset($this->cellCache[$pCoord])) {
// Return null if requested entry doesn't exist in cache
return null;
}
// Set current entry to the requested entry
$this->currentObjectID = $pCoord;
$this->currentObject = igbinary_unserialize($this->cellCache[$pCoord]);
// Re-attach this as the cell's parent
$this->currentObject->attach($this);
// Return requested entry
return $this->currentObject;
} // function getCacheData()
/**
* Get a list of all cell addresses currently held in cache
*
* @return string[]
*/
public function getCellList()
{
if ($this->currentObjectID !== null) {
$this->storeData();
}
return parent::getCellList();
}
/**
* Clear the cell collection and disconnect from our parent
*
* @return void
*/
public function unsetWorksheetCells()
{
if (!is_null($this->currentObject)) {
$this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
}
$this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully
$this->parent = null;
} // function unsetWorksheetCells()
/**
* Identify whether the caching method is currently available
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
*
* @return boolean
*/
public static function cacheMethodIsAvailable()
{
if (!function_exists('igbinary_serialize')) {
return false;
}
return true;
}
}

View File

@@ -0,0 +1,308 @@
<?php
/**
* PHPExcel_CachedObjectStorage_Memcache
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* Prefix used to uniquely identify cache data for this worksheet
*
* @var string
*/
private $cachePrefix = null;
/**
* Cache timeout
*
* @var integer
*/
private $cacheTime = 600;
/**
* Memcache interface
*
* @var resource
*/
private $memcache = null;
/**
* Store cell data in cache for the current cell object if it's "dirty",
* and the 'nullify' the current cell object
*
* @return void
* @throws PHPExcel_Exception
*/
protected function storeData()
{
if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
$obj = serialize($this->currentObject);
if (!$this->memcache->replace($this->cachePrefix . $this->currentObjectID . '.cache', $obj, null, $this->cacheTime)) {
if (!$this->memcache->add($this->cachePrefix . $this->currentObjectID . '.cache', $obj, null, $this->cacheTime)) {
$this->__destruct();
throw new PHPExcel_Exception("Failed to store cell {$this->currentObjectID} in MemCache");
}
}
$this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
} // function _storeData()
/**
* Add or Update a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public function addCacheData($pCoord, PHPExcel_Cell $cell)
{
if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
}
$this->cellCache[$pCoord] = true;
$this->currentObjectID = $pCoord;
$this->currentObject = $cell;
$this->currentCellIsDirty = true;
return $cell;
} // function addCacheData()
/**
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
*
* @param string $pCoord Coordinate address of the cell to check
* @return boolean
* @return boolean
*/
public function isDataSet($pCoord)
{
// Check if the requested entry is the current object, or exists in the cache
if (parent::isDataSet($pCoord)) {
if ($this->currentObjectID == $pCoord) {
return true;
}
// Check if the requested entry still exists in Memcache
$success = $this->memcache->get($this->cachePrefix.$pCoord.'.cache');
if ($success === false) {
// Entry no longer exists in Memcache, so clear it from the cache array
parent::deleteCacheData($pCoord);
throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in MemCache');
}
return true;
}
return false;
}
/**
* Get cell at a specific coordinate
*
* @param string $pCoord Coordinate of the cell
* @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found
*/
public function getCacheData($pCoord)
{
if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
}
$this->storeData();
// Check if the entry that has been requested actually exists
if (parent::isDataSet($pCoord)) {
$obj = $this->memcache->get($this->cachePrefix . $pCoord . '.cache');
if ($obj === false) {
// Entry no longer exists in Memcache, so clear it from the cache array
parent::deleteCacheData($pCoord);
throw new PHPExcel_Exception("Cell entry {$pCoord} no longer exists in MemCache");
}
} else {
// Return null if requested entry doesn't exist in cache
return null;
}
// Set current entry to the requested entry
$this->currentObjectID = $pCoord;
$this->currentObject = unserialize($obj);
// Re-attach this as the cell's parent
$this->currentObject->attach($this);
// Return requested entry
return $this->currentObject;
}
/**
* Get a list of all cell addresses currently held in cache
*
* @return string[]
*/
public function getCellList()
{
if ($this->currentObjectID !== null) {
$this->storeData();
}
return parent::getCellList();
}
/**
* Delete a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to delete
* @throws PHPExcel_Exception
*/
public function deleteCacheData($pCoord)
{
// Delete the entry from Memcache
$this->memcache->delete($this->cachePrefix . $pCoord . '.cache');
// Delete the entry from our cell address array
parent::deleteCacheData($pCoord);
}
/**
* Clone the cell collection
*
* @param PHPExcel_Worksheet $parent The new worksheet
* @return void
*/
public function copyCellCollection(PHPExcel_Worksheet $parent)
{
parent::copyCellCollection($parent);
// Get a new id for the new file name
$baseUnique = $this->getUniqueID();
$newCachePrefix = substr(md5($baseUnique), 0, 8) . '.';
$cacheList = $this->getCellList();
foreach ($cacheList as $cellID) {
if ($cellID != $this->currentObjectID) {
$obj = $this->memcache->get($this->cachePrefix.$cellID.'.cache');
if ($obj === false) {
// Entry no longer exists in Memcache, so clear it from the cache array
parent::deleteCacheData($cellID);
throw new PHPExcel_Exception("Cell entry {$cellID} no longer exists in MemCache");
}
if (!$this->memcache->add($newCachePrefix . $cellID . '.cache', $obj, null, $this->cacheTime)) {
$this->__destruct();
throw new PHPExcel_Exception("Failed to store cell {$cellID} in MemCache");
}
}
}
$this->cachePrefix = $newCachePrefix;
}
/**
* Clear the cell collection and disconnect from our parent
*
* @return void
*/
public function unsetWorksheetCells()
{
if (!is_null($this->currentObject)) {
$this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
}
// Flush the Memcache cache
$this->__destruct();
$this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully
$this->parent = null;
}
/**
* Initialise this new cell collection
*
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
* @param array of mixed $arguments Additional initialisation arguments
*/
public function __construct(PHPExcel_Worksheet $parent, $arguments)
{
$memcacheServer = (isset($arguments['memcacheServer'])) ? $arguments['memcacheServer'] : 'localhost';
$memcachePort = (isset($arguments['memcachePort'])) ? $arguments['memcachePort'] : 11211;
$cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
if (is_null($this->cachePrefix)) {
$baseUnique = $this->getUniqueID();
$this->cachePrefix = substr(md5($baseUnique), 0, 8) . '.';
// Set a new Memcache object and connect to the Memcache server
$this->memcache = new Memcache();
if (!$this->memcache->addServer($memcacheServer, $memcachePort, false, 50, 5, 5, true, array($this, 'failureCallback'))) {
throw new PHPExcel_Exception("Could not connect to MemCache server at {$memcacheServer}:{$memcachePort}");
}
$this->cacheTime = $cacheTime;
parent::__construct($parent);
}
}
/**
* Memcache error handler
*
* @param string $host Memcache server
* @param integer $port Memcache port
* @throws PHPExcel_Exception
*/
public function failureCallback($host, $port)
{
throw new PHPExcel_Exception("memcache {$host}:{$port} failed");
}
/**
* Destroy this cell collection
*/
public function __destruct()
{
$cacheList = $this->getCellList();
foreach ($cacheList as $cellID) {
$this->memcache->delete($this->cachePrefix.$cellID . '.cache');
}
}
/**
* Identify whether the caching method is currently available
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
*
* @return boolean
*/
public static function cacheMethodIsAvailable()
{
if (!function_exists('memcache_add')) {
return false;
}
return true;
}
}

View File

@@ -0,0 +1,118 @@
<?php
/**
* PHPExcel_CachedObjectStorage_Memory
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_CachedObjectStorage_Memory extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* Dummy method callable from CacheBase, but unused by Memory cache
*
* @return void
*/
protected function storeData()
{
}
/**
* Add or Update a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public function addCacheData($pCoord, PHPExcel_Cell $cell)
{
$this->cellCache[$pCoord] = $cell;
// Set current entry to the new/updated entry
$this->currentObjectID = $pCoord;
return $cell;
}
/**
* Get cell at a specific coordinate
*
* @param string $pCoord Coordinate of the cell
* @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found
*/
public function getCacheData($pCoord)
{
// Check if the entry that has been requested actually exists
if (!isset($this->cellCache[$pCoord])) {
$this->currentObjectID = null;
// Return null if requested entry doesn't exist in cache
return null;
}
// Set current entry to the requested entry
$this->currentObjectID = $pCoord;
// Return requested entry
return $this->cellCache[$pCoord];
}
/**
* Clone the cell collection
*
* @param PHPExcel_Worksheet $parent The new worksheet
*/
public function copyCellCollection(PHPExcel_Worksheet $parent)
{
parent::copyCellCollection($parent);
$newCollection = array();
foreach ($this->cellCache as $k => &$cell) {
$newCollection[$k] = clone $cell;
$newCollection[$k]->attach($this);
}
$this->cellCache = $newCollection;
}
/**
* Clear the cell collection and disconnect from our parent
*
*/
public function unsetWorksheetCells()
{
// Because cells are all stored as intact objects in memory, we need to detach each one from the parent
foreach ($this->cellCache as $k => &$cell) {
$cell->detach();
$this->cellCache[$k] = null;
}
unset($cell);
$this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully
$this->parent = null;
}
}

View File

@@ -0,0 +1,133 @@
<?php
/**
* PHPExcel_CachedObjectStorage_MemoryGZip
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_CachedObjectStorage_MemoryGZip extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* Store cell data in cache for the current cell object if it's "dirty",
* and the 'nullify' the current cell object
*
* @return void
* @throws PHPExcel_Exception
*/
protected function storeData()
{
if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
$this->cellCache[$this->currentObjectID] = gzdeflate(serialize($this->currentObject));
$this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
}
/**
* Add or Update a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public function addCacheData($pCoord, PHPExcel_Cell $cell)
{
if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
}
$this->currentObjectID = $pCoord;
$this->currentObject = $cell;
$this->currentCellIsDirty = true;
return $cell;
}
/**
* Get cell at a specific coordinate
*
* @param string $pCoord Coordinate of the cell
* @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found
*/
public function getCacheData($pCoord)
{
if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
}
$this->storeData();
// Check if the entry that has been requested actually exists
if (!isset($this->cellCache[$pCoord])) {
// Return null if requested entry doesn't exist in cache
return null;
}
// Set current entry to the requested entry
$this->currentObjectID = $pCoord;
$this->currentObject = unserialize(gzinflate($this->cellCache[$pCoord]));
// Re-attach this as the cell's parent
$this->currentObject->attach($this);
// Return requested entry
return $this->currentObject;
}
/**
* Get a list of all cell addresses currently held in cache
*
* @return string[]
*/
public function getCellList()
{
if ($this->currentObjectID !== null) {
$this->storeData();
}
return parent::getCellList();
}
/**
* Clear the cell collection and disconnect from our parent
*
* @return void
*/
public function unsetWorksheetCells()
{
if (!is_null($this->currentObject)) {
$this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
}
$this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully
$this->parent = null;
}
}

View File

@@ -0,0 +1,129 @@
<?php
/**
* PHPExcel_CachedObjectStorage_MemorySerialized
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_CachedObjectStorage_MemorySerialized extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* Store cell data in cache for the current cell object if it's "dirty",
* and the 'nullify' the current cell object
*
* @return void
* @throws PHPExcel_Exception
*/
protected function storeData()
{
if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
$this->cellCache[$this->currentObjectID] = serialize($this->currentObject);
$this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
}
/**
* Add or Update a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public function addCacheData($pCoord, PHPExcel_Cell $cell)
{
if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
}
$this->currentObjectID = $pCoord;
$this->currentObject = $cell;
$this->currentCellIsDirty = true;
return $cell;
}
/**
* Get cell at a specific coordinate
*
* @param string $pCoord Coordinate of the cell
* @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found
*/
public function getCacheData($pCoord)
{
if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
}
$this->storeData();
// Check if the entry that has been requested actually exists
if (!isset($this->cellCache[$pCoord])) {
// Return null if requested entry doesn't exist in cache
return null;
}
// Set current entry to the requested entry
$this->currentObjectID = $pCoord;
$this->currentObject = unserialize($this->cellCache[$pCoord]);
// Re-attach this as the cell's parent
$this->currentObject->attach($this);
// Return requested entry
return $this->currentObject;
}
/**
* Get a list of all cell addresses currently held in cache
*
* @return string[]
*/
public function getCellList()
{
if ($this->currentObjectID !== null) {
$this->storeData();
}
return parent::getCellList();
}
/**
* Clear the cell collection and disconnect from our parent
*
* @return void
*/
public function unsetWorksheetCells()
{
if (!is_null($this->currentObject)) {
$this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
}
$this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully
$this->parent = null;
}
}

View File

@@ -0,0 +1,200 @@
<?php
/**
* PHPExcel_CachedObjectStorage_PHPTemp
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* Name of the file for this cache
*
* @var string
*/
private $fileHandle = null;
/**
* Memory limit to use before reverting to file cache
*
* @var integer
*/
private $memoryCacheSize = null;
/**
* Store cell data in cache for the current cell object if it's "dirty",
* and the 'nullify' the current cell object
*
* @return void
* @throws PHPExcel_Exception
*/
protected function storeData()
{
if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
fseek($this->fileHandle, 0, SEEK_END);
$this->cellCache[$this->currentObjectID] = array(
'ptr' => ftell($this->fileHandle),
'sz' => fwrite($this->fileHandle, serialize($this->currentObject))
);
$this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
}
/**
* Add or Update a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public function addCacheData($pCoord, PHPExcel_Cell $cell)
{
if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
}
$this->currentObjectID = $pCoord;
$this->currentObject = $cell;
$this->currentCellIsDirty = true;
return $cell;
}
/**
* Get cell at a specific coordinate
*
* @param string $pCoord Coordinate of the cell
* @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found
*/
public function getCacheData($pCoord)
{
if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
}
$this->storeData();
// Check if the entry that has been requested actually exists
if (!isset($this->cellCache[$pCoord])) {
// Return null if requested entry doesn't exist in cache
return null;
}
// Set current entry to the requested entry
$this->currentObjectID = $pCoord;
fseek($this->fileHandle, $this->cellCache[$pCoord]['ptr']);
$this->currentObject = unserialize(fread($this->fileHandle, $this->cellCache[$pCoord]['sz']));
// Re-attach this as the cell's parent
$this->currentObject->attach($this);
// Return requested entry
return $this->currentObject;
}
/**
* Get a list of all cell addresses currently held in cache
*
* @return string[]
*/
public function getCellList()
{
if ($this->currentObjectID !== null) {
$this->storeData();
}
return parent::getCellList();
}
/**
* Clone the cell collection
*
* @param PHPExcel_Worksheet $parent The new worksheet
* @return void
*/
public function copyCellCollection(PHPExcel_Worksheet $parent)
{
parent::copyCellCollection($parent);
// Open a new stream for the cell cache data
$newFileHandle = fopen('php://temp/maxmemory:' . $this->memoryCacheSize, 'a+');
// Copy the existing cell cache data to the new stream
fseek($this->fileHandle, 0);
while (!feof($this->fileHandle)) {
fwrite($newFileHandle, fread($this->fileHandle, 1024));
}
$this->fileHandle = $newFileHandle;
}
/**
* Clear the cell collection and disconnect from our parent
*
* @return void
*/
public function unsetWorksheetCells()
{
if (!is_null($this->currentObject)) {
$this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
}
$this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully
$this->parent = null;
// Close down the php://temp file
$this->__destruct();
}
/**
* Initialise this new cell collection
*
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
* @param array of mixed $arguments Additional initialisation arguments
*/
public function __construct(PHPExcel_Worksheet $parent, $arguments)
{
$this->memoryCacheSize = (isset($arguments['memoryCacheSize'])) ? $arguments['memoryCacheSize'] : '1MB';
parent::__construct($parent);
if (is_null($this->fileHandle)) {
$this->fileHandle = fopen('php://temp/maxmemory:' . $this->memoryCacheSize, 'a+');
}
}
/**
* Destroy this cell collection
*/
public function __destruct()
{
if (!is_null($this->fileHandle)) {
fclose($this->fileHandle);
}
$this->fileHandle = null;
}
}

View File

@@ -0,0 +1,307 @@
<?php
/**
* PHPExcel_CachedObjectStorage_SQLite
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_CachedObjectStorage_SQLite extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* Database table name
*
* @var string
*/
private $TableName = null;
/**
* Database handle
*
* @var resource
*/
private $DBHandle = null;
/**
* Store cell data in cache for the current cell object if it's "dirty",
* and the 'nullify' the current cell object
*
* @return void
* @throws PHPExcel_Exception
*/
protected function storeData()
{
if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
if (!$this->DBHandle->queryExec("INSERT OR REPLACE INTO kvp_".$this->TableName." VALUES('".$this->currentObjectID."','".sqlite_escape_string(serialize($this->currentObject))."')")) {
throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
}
$this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
}
/**
* Add or Update a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public function addCacheData($pCoord, PHPExcel_Cell $cell)
{
if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
}
$this->currentObjectID = $pCoord;
$this->currentObject = $cell;
$this->currentCellIsDirty = true;
return $cell;
}
/**
* Get cell at a specific coordinate
*
* @param string $pCoord Coordinate of the cell
* @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found
*/
public function getCacheData($pCoord)
{
if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
}
$this->storeData();
$query = "SELECT value FROM kvp_".$this->TableName." WHERE id='".$pCoord."'";
$cellResultSet = $this->DBHandle->query($query, SQLITE_ASSOC);
if ($cellResultSet === false) {
throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
} elseif ($cellResultSet->numRows() == 0) {
// Return null if requested entry doesn't exist in cache
return null;
}
// Set current entry to the requested entry
$this->currentObjectID = $pCoord;
$cellResult = $cellResultSet->fetchSingle();
$this->currentObject = unserialize($cellResult);
// Re-attach this as the cell's parent
$this->currentObject->attach($this);
// Return requested entry
return $this->currentObject;
}
/**
* Is a value set for an indexed cell?
*
* @param string $pCoord Coordinate address of the cell to check
* @return boolean
*/
public function isDataSet($pCoord)
{
if ($pCoord === $this->currentObjectID) {
return true;
}
// Check if the requested entry exists in the cache
$query = "SELECT id FROM kvp_".$this->TableName." WHERE id='".$pCoord."'";
$cellResultSet = $this->DBHandle->query($query, SQLITE_ASSOC);
if ($cellResultSet === false) {
throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
} elseif ($cellResultSet->numRows() == 0) {
// Return null if requested entry doesn't exist in cache
return false;
}
return true;
}
/**
* Delete a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to delete
* @throws PHPExcel_Exception
*/
public function deleteCacheData($pCoord)
{
if ($pCoord === $this->currentObjectID) {
$this->currentObject->detach();
$this->currentObjectID = $this->currentObject = null;
}
// Check if the requested entry exists in the cache
$query = "DELETE FROM kvp_".$this->TableName." WHERE id='".$pCoord."'";
if (!$this->DBHandle->queryExec($query)) {
throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
}
$this->currentCellIsDirty = false;
}
/**
* Move a cell object from one address to another
*
* @param string $fromAddress Current address of the cell to move
* @param string $toAddress Destination address of the cell to move
* @return boolean
*/
public function moveCell($fromAddress, $toAddress)
{
if ($fromAddress === $this->currentObjectID) {
$this->currentObjectID = $toAddress;
}
$query = "DELETE FROM kvp_".$this->TableName." WHERE id='".$toAddress."'";
$result = $this->DBHandle->exec($query);
if ($result === false) {
throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
$query = "UPDATE kvp_".$this->TableName." SET id='".$toAddress."' WHERE id='".$fromAddress."'";
$result = $this->DBHandle->exec($query);
if ($result === false) {
throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
return true;
}
/**
* Get a list of all cell addresses currently held in cache
*
* @return string[]
*/
public function getCellList()
{
if ($this->currentObjectID !== null) {
$this->storeData();
}
$query = "SELECT id FROM kvp_".$this->TableName;
$cellIdsResult = $this->DBHandle->unbufferedQuery($query, SQLITE_ASSOC);
if ($cellIdsResult === false) {
throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
}
$cellKeys = array();
foreach ($cellIdsResult as $row) {
$cellKeys[] = $row['id'];
}
return $cellKeys;
}
/**
* Clone the cell collection
*
* @param PHPExcel_Worksheet $parent The new worksheet
* @return void
*/
public function copyCellCollection(PHPExcel_Worksheet $parent)
{
$this->currentCellIsDirty;
$this->storeData();
// Get a new id for the new table name
$tableName = str_replace('.', '_', $this->getUniqueID());
if (!$this->DBHandle->queryExec('CREATE TABLE kvp_'.$tableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)
AS SELECT * FROM kvp_'.$this->TableName)
) {
throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
}
// Copy the existing cell cache file
$this->TableName = $tableName;
}
/**
* Clear the cell collection and disconnect from our parent
*
* @return void
*/
public function unsetWorksheetCells()
{
if (!is_null($this->currentObject)) {
$this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
}
// detach ourself from the worksheet, so that it can then delete this object successfully
$this->parent = null;
// Close down the temporary cache file
$this->__destruct();
}
/**
* Initialise this new cell collection
*
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
*/
public function __construct(PHPExcel_Worksheet $parent)
{
parent::__construct($parent);
if (is_null($this->DBHandle)) {
$this->TableName = str_replace('.', '_', $this->getUniqueID());
$_DBName = ':memory:';
$this->DBHandle = new SQLiteDatabase($_DBName);
if ($this->DBHandle === false) {
throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
}
if (!$this->DBHandle->queryExec('CREATE TABLE kvp_'.$this->TableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)')) {
throw new PHPExcel_Exception(sqlite_error_string($this->DBHandle->lastError()));
}
}
}
/**
* Destroy this cell collection
*/
public function __destruct()
{
if (!is_null($this->DBHandle)) {
$this->DBHandle->queryExec('DROP TABLE kvp_'.$this->TableName);
}
$this->DBHandle = null;
}
/**
* Identify whether the caching method is currently available
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
*
* @return boolean
*/
public static function cacheMethodIsAvailable()
{
if (!function_exists('sqlite_open')) {
return false;
}
return true;
}
}

View File

@@ -0,0 +1,346 @@
<?php
/**
* PHPExcel_CachedObjectStorage_SQLite3
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* Database table name
*
* @var string
*/
private $TableName = null;
/**
* Database handle
*
* @var resource
*/
private $DBHandle = null;
/**
* Prepared statement for a SQLite3 select query
*
* @var SQLite3Stmt
*/
private $selectQuery;
/**
* Prepared statement for a SQLite3 insert query
*
* @var SQLite3Stmt
*/
private $insertQuery;
/**
* Prepared statement for a SQLite3 update query
*
* @var SQLite3Stmt
*/
private $updateQuery;
/**
* Prepared statement for a SQLite3 delete query
*
* @var SQLite3Stmt
*/
private $deleteQuery;
/**
* Store cell data in cache for the current cell object if it's "dirty",
* and the 'nullify' the current cell object
*
* @return void
* @throws PHPExcel_Exception
*/
protected function storeData()
{
if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
$this->insertQuery->bindValue('id', $this->currentObjectID, SQLITE3_TEXT);
$this->insertQuery->bindValue('data', serialize($this->currentObject), SQLITE3_BLOB);
$result = $this->insertQuery->execute();
if ($result === false) {
throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
$this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
}
/**
* Add or Update a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public function addCacheData($pCoord, PHPExcel_Cell $cell)
{
if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
}
$this->currentObjectID = $pCoord;
$this->currentObject = $cell;
$this->currentCellIsDirty = true;
return $cell;
}
/**
* Get cell at a specific coordinate
*
* @param string $pCoord Coordinate of the cell
* @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found
*/
public function getCacheData($pCoord)
{
if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
}
$this->storeData();
$this->selectQuery->bindValue('id', $pCoord, SQLITE3_TEXT);
$cellResult = $this->selectQuery->execute();
if ($cellResult === false) {
throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
$cellData = $cellResult->fetchArray(SQLITE3_ASSOC);
if ($cellData === false) {
// Return null if requested entry doesn't exist in cache
return null;
}
// Set current entry to the requested entry
$this->currentObjectID = $pCoord;
$this->currentObject = unserialize($cellData['value']);
// Re-attach this as the cell's parent
$this->currentObject->attach($this);
// Return requested entry
return $this->currentObject;
}
/**
* Is a value set for an indexed cell?
*
* @param string $pCoord Coordinate address of the cell to check
* @return boolean
*/
public function isDataSet($pCoord)
{
if ($pCoord === $this->currentObjectID) {
return true;
}
// Check if the requested entry exists in the cache
$this->selectQuery->bindValue('id', $pCoord, SQLITE3_TEXT);
$cellResult = $this->selectQuery->execute();
if ($cellResult === false) {
throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
$cellData = $cellResult->fetchArray(SQLITE3_ASSOC);
return ($cellData === false) ? false : true;
}
/**
* Delete a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to delete
* @throws PHPExcel_Exception
*/
public function deleteCacheData($pCoord)
{
if ($pCoord === $this->currentObjectID) {
$this->currentObject->detach();
$this->currentObjectID = $this->currentObject = null;
}
// Check if the requested entry exists in the cache
$this->deleteQuery->bindValue('id', $pCoord, SQLITE3_TEXT);
$result = $this->deleteQuery->execute();
if ($result === false) {
throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
$this->currentCellIsDirty = false;
}
/**
* Move a cell object from one address to another
*
* @param string $fromAddress Current address of the cell to move
* @param string $toAddress Destination address of the cell to move
* @return boolean
*/
public function moveCell($fromAddress, $toAddress)
{
if ($fromAddress === $this->currentObjectID) {
$this->currentObjectID = $toAddress;
}
$this->deleteQuery->bindValue('id', $toAddress, SQLITE3_TEXT);
$result = $this->deleteQuery->execute();
if ($result === false) {
throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
$this->updateQuery->bindValue('toid', $toAddress, SQLITE3_TEXT);
$this->updateQuery->bindValue('fromid', $fromAddress, SQLITE3_TEXT);
$result = $this->updateQuery->execute();
if ($result === false) {
throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
return true;
}
/**
* Get a list of all cell addresses currently held in cache
*
* @return string[]
*/
public function getCellList()
{
if ($this->currentObjectID !== null) {
$this->storeData();
}
$query = "SELECT id FROM kvp_".$this->TableName;
$cellIdsResult = $this->DBHandle->query($query);
if ($cellIdsResult === false) {
throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
$cellKeys = array();
while ($row = $cellIdsResult->fetchArray(SQLITE3_ASSOC)) {
$cellKeys[] = $row['id'];
}
return $cellKeys;
}
/**
* Clone the cell collection
*
* @param PHPExcel_Worksheet $parent The new worksheet
* @return void
*/
public function copyCellCollection(PHPExcel_Worksheet $parent)
{
$this->currentCellIsDirty;
$this->storeData();
// Get a new id for the new table name
$tableName = str_replace('.', '_', $this->getUniqueID());
if (!$this->DBHandle->exec('CREATE TABLE kvp_'.$tableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)
AS SELECT * FROM kvp_'.$this->TableName)
) {
throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
// Copy the existing cell cache file
$this->TableName = $tableName;
}
/**
* Clear the cell collection and disconnect from our parent
*
* @return void
*/
public function unsetWorksheetCells()
{
if (!is_null($this->currentObject)) {
$this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
}
// detach ourself from the worksheet, so that it can then delete this object successfully
$this->parent = null;
// Close down the temporary cache file
$this->__destruct();
}
/**
* Initialise this new cell collection
*
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
*/
public function __construct(PHPExcel_Worksheet $parent)
{
parent::__construct($parent);
if (is_null($this->DBHandle)) {
$this->TableName = str_replace('.', '_', $this->getUniqueID());
$_DBName = ':memory:';
$this->DBHandle = new SQLite3($_DBName);
if ($this->DBHandle === false) {
throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
if (!$this->DBHandle->exec('CREATE TABLE kvp_'.$this->TableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)')) {
throw new PHPExcel_Exception($this->DBHandle->lastErrorMsg());
}
}
$this->selectQuery = $this->DBHandle->prepare("SELECT value FROM kvp_".$this->TableName." WHERE id = :id");
$this->insertQuery = $this->DBHandle->prepare("INSERT OR REPLACE INTO kvp_".$this->TableName." VALUES(:id,:data)");
$this->updateQuery = $this->DBHandle->prepare("UPDATE kvp_".$this->TableName." SET id=:toId WHERE id=:fromId");
$this->deleteQuery = $this->DBHandle->prepare("DELETE FROM kvp_".$this->TableName." WHERE id = :id");
}
/**
* Destroy this cell collection
*/
public function __destruct()
{
if (!is_null($this->DBHandle)) {
$this->DBHandle->exec('DROP TABLE kvp_'.$this->TableName);
$this->DBHandle->close();
}
$this->DBHandle = null;
}
/**
* Identify whether the caching method is currently available
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
*
* @return boolean
*/
public static function cacheMethodIsAvailable()
{
if (!class_exists('SQLite3', false)) {
return false;
}
return true;
}
}

View File

@@ -0,0 +1,289 @@
<?php
/**
* PHPExcel_CachedObjectStorage_Wincache
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache
{
/**
* Prefix used to uniquely identify cache data for this worksheet
*
* @var string
*/
private $cachePrefix = null;
/**
* Cache timeout
*
* @var integer
*/
private $cacheTime = 600;
/**
* Store cell data in cache for the current cell object if it's "dirty",
* and the 'nullify' the current cell object
*
* @return void
* @throws PHPExcel_Exception
*/
protected function storeData()
{
if ($this->currentCellIsDirty && !empty($this->currentObjectID)) {
$this->currentObject->detach();
$obj = serialize($this->currentObject);
if (wincache_ucache_exists($this->cachePrefix.$this->currentObjectID.'.cache')) {
if (!wincache_ucache_set($this->cachePrefix.$this->currentObjectID.'.cache', $obj, $this->cacheTime)) {
$this->__destruct();
throw new PHPExcel_Exception('Failed to store cell '.$this->currentObjectID.' in WinCache');
}
} else {
if (!wincache_ucache_add($this->cachePrefix.$this->currentObjectID.'.cache', $obj, $this->cacheTime)) {
$this->__destruct();
throw new PHPExcel_Exception('Failed to store cell '.$this->currentObjectID.' in WinCache');
}
}
$this->currentCellIsDirty = false;
}
$this->currentObjectID = $this->currentObject = null;
}
/**
* Add or Update a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to update
* @param PHPExcel_Cell $cell Cell to update
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public function addCacheData($pCoord, PHPExcel_Cell $cell)
{
if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) {
$this->storeData();
}
$this->cellCache[$pCoord] = true;
$this->currentObjectID = $pCoord;
$this->currentObject = $cell;
$this->currentCellIsDirty = true;
return $cell;
}
/**
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
*
* @param string $pCoord Coordinate address of the cell to check
* @return boolean
*/
public function isDataSet($pCoord)
{
// Check if the requested entry is the current object, or exists in the cache
if (parent::isDataSet($pCoord)) {
if ($this->currentObjectID == $pCoord) {
return true;
}
// Check if the requested entry still exists in cache
$success = wincache_ucache_exists($this->cachePrefix.$pCoord.'.cache');
if ($success === false) {
// Entry no longer exists in Wincache, so clear it from the cache array
parent::deleteCacheData($pCoord);
throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in WinCache');
}
return true;
}
return false;
}
/**
* Get cell at a specific coordinate
*
* @param string $pCoord Coordinate of the cell
* @throws PHPExcel_Exception
* @return PHPExcel_Cell Cell that was found, or null if not found
*/
public function getCacheData($pCoord)
{
if ($pCoord === $this->currentObjectID) {
return $this->currentObject;
}
$this->storeData();
// Check if the entry that has been requested actually exists
$obj = null;
if (parent::isDataSet($pCoord)) {
$success = false;
$obj = wincache_ucache_get($this->cachePrefix.$pCoord.'.cache', $success);
if ($success === false) {
// Entry no longer exists in WinCache, so clear it from the cache array
parent::deleteCacheData($pCoord);
throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in WinCache');
}
} else {
// Return null if requested entry doesn't exist in cache
return null;
}
// Set current entry to the requested entry
$this->currentObjectID = $pCoord;
$this->currentObject = unserialize($obj);
// Re-attach this as the cell's parent
$this->currentObject->attach($this);
// Return requested entry
return $this->currentObject;
}
/**
* Get a list of all cell addresses currently held in cache
*
* @return string[]
*/
public function getCellList()
{
if ($this->currentObjectID !== null) {
$this->storeData();
}
return parent::getCellList();
}
/**
* Delete a cell in cache identified by coordinate address
*
* @param string $pCoord Coordinate address of the cell to delete
* @throws PHPExcel_Exception
*/
public function deleteCacheData($pCoord)
{
// Delete the entry from Wincache
wincache_ucache_delete($this->cachePrefix.$pCoord.'.cache');
// Delete the entry from our cell address array
parent::deleteCacheData($pCoord);
}
/**
* Clone the cell collection
*
* @param PHPExcel_Worksheet $parent The new worksheet
* @return void
*/
public function copyCellCollection(PHPExcel_Worksheet $parent)
{
parent::copyCellCollection($parent);
// Get a new id for the new file name
$baseUnique = $this->getUniqueID();
$newCachePrefix = substr(md5($baseUnique), 0, 8) . '.';
$cacheList = $this->getCellList();
foreach ($cacheList as $cellID) {
if ($cellID != $this->currentObjectID) {
$success = false;
$obj = wincache_ucache_get($this->cachePrefix.$cellID.'.cache', $success);
if ($success === false) {
// Entry no longer exists in WinCache, so clear it from the cache array
parent::deleteCacheData($cellID);
throw new PHPExcel_Exception('Cell entry '.$cellID.' no longer exists in Wincache');
}
if (!wincache_ucache_add($newCachePrefix.$cellID.'.cache', $obj, $this->cacheTime)) {
$this->__destruct();
throw new PHPExcel_Exception('Failed to store cell '.$cellID.' in Wincache');
}
}
}
$this->cachePrefix = $newCachePrefix;
}
/**
* Clear the cell collection and disconnect from our parent
*
* @return void
*/
public function unsetWorksheetCells()
{
if (!is_null($this->currentObject)) {
$this->currentObject->detach();
$this->currentObject = $this->currentObjectID = null;
}
// Flush the WinCache cache
$this->__destruct();
$this->cellCache = array();
// detach ourself from the worksheet, so that it can then delete this object successfully
$this->parent = null;
}
/**
* Initialise this new cell collection
*
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
* @param array of mixed $arguments Additional initialisation arguments
*/
public function __construct(PHPExcel_Worksheet $parent, $arguments)
{
$cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
if (is_null($this->cachePrefix)) {
$baseUnique = $this->getUniqueID();
$this->cachePrefix = substr(md5($baseUnique), 0, 8).'.';
$this->cacheTime = $cacheTime;
parent::__construct($parent);
}
}
/**
* Destroy this cell collection
*/
public function __destruct()
{
$cacheList = $this->getCellList();
foreach ($cacheList as $cellID) {
wincache_ucache_delete($this->cachePrefix.$cellID.'.cache');
}
}
/**
* Identify whether the caching method is currently available
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
*
* @return boolean
*/
public static function cacheMethodIsAvailable()
{
if (!function_exists('wincache_ucache_add')) {
return false;
}
return true;
}
}

View File

@@ -0,0 +1,231 @@
<?php
/**
* PHPExcel_CachedObjectStorageFactory
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_CachedObjectStorage
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_CachedObjectStorageFactory
{
const cache_in_memory = 'Memory';
const cache_in_memory_gzip = 'MemoryGZip';
const cache_in_memory_serialized = 'MemorySerialized';
const cache_igbinary = 'Igbinary';
const cache_to_discISAM = 'DiscISAM';
const cache_to_apc = 'APC';
const cache_to_memcache = 'Memcache';
const cache_to_phpTemp = 'PHPTemp';
const cache_to_wincache = 'Wincache';
const cache_to_sqlite = 'SQLite';
const cache_to_sqlite3 = 'SQLite3';
/**
* Name of the method used for cell cacheing
*
* @var string
*/
private static $cacheStorageMethod = null;
/**
* Name of the class used for cell cacheing
*
* @var string
*/
private static $cacheStorageClass = null;
/**
* List of all possible cache storage methods
*
* @var string[]
*/
private static $storageMethods = array(
self::cache_in_memory,
self::cache_in_memory_gzip,
self::cache_in_memory_serialized,
self::cache_igbinary,
self::cache_to_phpTemp,
self::cache_to_discISAM,
self::cache_to_apc,
self::cache_to_memcache,
self::cache_to_wincache,
self::cache_to_sqlite,
self::cache_to_sqlite3,
);
/**
* Default arguments for each cache storage method
*
* @var array of mixed array
*/
private static $storageMethodDefaultParameters = array(
self::cache_in_memory => array(
),
self::cache_in_memory_gzip => array(
),
self::cache_in_memory_serialized => array(
),
self::cache_igbinary => array(
),
self::cache_to_phpTemp => array( 'memoryCacheSize' => '1MB'
),
self::cache_to_discISAM => array( 'dir' => null
),
self::cache_to_apc => array( 'cacheTime' => 600
),
self::cache_to_memcache => array( 'memcacheServer' => 'localhost',
'memcachePort' => 11211,
'cacheTime' => 600
),
self::cache_to_wincache => array( 'cacheTime' => 600
),
self::cache_to_sqlite => array(
),
self::cache_to_sqlite3 => array(
),
);
/**
* Arguments for the active cache storage method
*
* @var array of mixed array
*/
private static $storageMethodParameters = array();
/**
* Return the current cache storage method
*
* @return string|null
**/
public static function getCacheStorageMethod()
{
return self::$cacheStorageMethod;
}
/**
* Return the current cache storage class
*
* @return PHPExcel_CachedObjectStorage_ICache|null
**/
public static function getCacheStorageClass()
{
return self::$cacheStorageClass;
}
/**
* Return the list of all possible cache storage methods
*
* @return string[]
**/
public static function getAllCacheStorageMethods()
{
return self::$storageMethods;
}
/**
* Return the list of all available cache storage methods
*
* @return string[]
**/
public static function getCacheStorageMethods()
{
$activeMethods = array();
foreach (self::$storageMethods as $storageMethod) {
$cacheStorageClass = 'PHPExcel_CachedObjectStorage_' . $storageMethod;
if (call_user_func(array($cacheStorageClass, 'cacheMethodIsAvailable'))) {
$activeMethods[] = $storageMethod;
}
}
return $activeMethods;
}
/**
* Identify the cache storage method to use
*
* @param string $method Name of the method to use for cell cacheing
* @param array of mixed $arguments Additional arguments to pass to the cell caching class
* when instantiating
* @return boolean
**/
public static function initialize($method = self::cache_in_memory, $arguments = array())
{
if (!in_array($method, self::$storageMethods)) {
return false;
}
$cacheStorageClass = 'PHPExcel_CachedObjectStorage_'.$method;
if (!call_user_func(array( $cacheStorageClass,
'cacheMethodIsAvailable'))) {
return false;
}
self::$storageMethodParameters[$method] = self::$storageMethodDefaultParameters[$method];
foreach ($arguments as $k => $v) {
if (array_key_exists($k, self::$storageMethodParameters[$method])) {
self::$storageMethodParameters[$method][$k] = $v;
}
}
if (self::$cacheStorageMethod === null) {
self::$cacheStorageClass = 'PHPExcel_CachedObjectStorage_' . $method;
self::$cacheStorageMethod = $method;
}
return true;
}
/**
* Initialise the cache storage
*
* @param PHPExcel_Worksheet $parent Enable cell caching for this worksheet
* @return PHPExcel_CachedObjectStorage_ICache
**/
public static function getInstance(PHPExcel_Worksheet $parent)
{
$cacheMethodIsAvailable = true;
if (self::$cacheStorageMethod === null) {
$cacheMethodIsAvailable = self::initialize();
}
if ($cacheMethodIsAvailable) {
$instance = new self::$cacheStorageClass(
$parent,
self::$storageMethodParameters[self::$cacheStorageMethod]
);
if ($instance !== null) {
return $instance;
}
}
return false;
}
/**
* Clear the cache storage
*
**/
public static function finalize()
{
self::$cacheStorageMethod = null;
self::$cacheStorageClass = null;
self::$storageMethodParameters = array();
}
}

View File

@@ -0,0 +1,94 @@
<?php
/**
* PHPExcel_CalcEngine_CyclicReferenceStack
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_CalcEngine_CyclicReferenceStack
{
/**
* The call stack for calculated cells
*
* @var mixed[]
*/
private $stack = array();
/**
* Return the number of entries on the stack
*
* @return integer
*/
public function count()
{
return count($this->stack);
}
/**
* Push a new entry onto the stack
*
* @param mixed $value
*/
public function push($value)
{
$this->stack[$value] = $value;
}
/**
* Pop the last entry from the stack
*
* @return mixed
*/
public function pop()
{
return array_pop($this->stack);
}
/**
* Test to see if a specified entry exists on the stack
*
* @param mixed $value The value to test
*/
public function onStack($value)
{
return isset($this->stack[$value]);
}
/**
* Clear the stack
*/
public function clear()
{
$this->stack = array();
}
/**
* Return an array of all entries on the stack
*
* @return mixed[]
*/
public function showStack()
{
return $this->stack;
}
}

View File

@@ -0,0 +1,151 @@
<?php
/**
* PHPExcel_CalcEngine_Logger
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_CalcEngine_Logger
{
/**
* Flag to determine whether a debug log should be generated by the calculation engine
* If true, then a debug log will be generated
* If false, then a debug log will not be generated
*
* @var boolean
*/
private $writeDebugLog = false;
/**
* Flag to determine whether a debug log should be echoed by the calculation engine
* If true, then a debug log will be echoed
* If false, then a debug log will not be echoed
* A debug log can only be echoed if it is generated
*
* @var boolean
*/
private $echoDebugLog = false;
/**
* The debug log generated by the calculation engine
*
* @var string[]
*/
private $debugLog = array();
/**
* The calculation engine cell reference stack
*
* @var PHPExcel_CalcEngine_CyclicReferenceStack
*/
private $cellStack;
/**
* Instantiate a Calculation engine logger
*
* @param PHPExcel_CalcEngine_CyclicReferenceStack $stack
*/
public function __construct(PHPExcel_CalcEngine_CyclicReferenceStack $stack)
{
$this->cellStack = $stack;
}
/**
* Enable/Disable Calculation engine logging
*
* @param boolean $pValue
*/
public function setWriteDebugLog($pValue = false)
{
$this->writeDebugLog = $pValue;
}
/**
* Return whether calculation engine logging is enabled or disabled
*
* @return boolean
*/
public function getWriteDebugLog()
{
return $this->writeDebugLog;
}
/**
* Enable/Disable echoing of debug log information
*
* @param boolean $pValue
*/
public function setEchoDebugLog($pValue = false)
{
$this->echoDebugLog = $pValue;
}
/**
* Return whether echoing of debug log information is enabled or disabled
*
* @return boolean
*/
public function getEchoDebugLog()
{
return $this->echoDebugLog;
}
/**
* Write an entry to the calculation engine debug log
*/
public function writeDebugLog()
{
// Only write the debug log if logging is enabled
if ($this->writeDebugLog) {
$message = implode(func_get_args());
$cellReference = implode(' -> ', $this->cellStack->showStack());
if ($this->echoDebugLog) {
echo $cellReference,
($this->cellStack->count() > 0 ? ' => ' : ''),
$message,
PHP_EOL;
}
$this->debugLog[] = $cellReference .
($this->cellStack->count() > 0 ? ' => ' : '') .
$message;
}
}
/**
* Clear the calculation engine debug log
*/
public function clearLog()
{
$this->debugLog = array();
}
/**
* Return the calculation engine debug log
*
* @return string[]
*/
public function getLog()
{
return $this->debugLog;
}
}

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,676 @@
<?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Calculation_Database
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_Calculation_Database
{
/**
* fieldExtract
*
* Extracts the column ID to use for the data field.
*
* @access private
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param mixed $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @return string|NULL
*
*/
private static function fieldExtract($database, $field)
{
$field = strtoupper(PHPExcel_Calculation_Functions::flattenSingleValue($field));
$fieldNames = array_map('strtoupper', array_shift($database));
if (is_numeric($field)) {
$keys = array_keys($fieldNames);
return $keys[$field-1];
}
$key = array_search($field, $fieldNames);
return ($key) ? $key : null;
}
/**
* filter
*
* Parses the selection criteria, extracts the database rows that match those criteria, and
* returns that subset of rows.
*
* @access private
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return array of mixed
*
*/
private static function filter($database, $criteria)
{
$fieldNames = array_shift($database);
$criteriaNames = array_shift($criteria);
// Convert the criteria into a set of AND/OR conditions with [:placeholders]
$testConditions = $testValues = array();
$testConditionsCount = 0;
foreach ($criteriaNames as $key => $criteriaName) {
$testCondition = array();
$testConditionCount = 0;
foreach ($criteria as $row => $criterion) {
if ($criterion[$key] > '') {
$testCondition[] = '[:'.$criteriaName.']'.PHPExcel_Calculation_Functions::ifCondition($criterion[$key]);
$testConditionCount++;
}
}
if ($testConditionCount > 1) {
$testConditions[] = 'OR(' . implode(',', $testCondition) . ')';
$testConditionsCount++;
} elseif ($testConditionCount == 1) {
$testConditions[] = $testCondition[0];
$testConditionsCount++;
}
}
if ($testConditionsCount > 1) {
$testConditionSet = 'AND(' . implode(',', $testConditions) . ')';
} elseif ($testConditionsCount == 1) {
$testConditionSet = $testConditions[0];
}
// Loop through each row of the database
foreach ($database as $dataRow => $dataValues) {
// Substitute actual values from the database row for our [:placeholders]
$testConditionList = $testConditionSet;
foreach ($criteriaNames as $key => $criteriaName) {
$k = array_search($criteriaName, $fieldNames);
if (isset($dataValues[$k])) {
$dataValue = $dataValues[$k];
$dataValue = (is_string($dataValue)) ? PHPExcel_Calculation::wrapResult(strtoupper($dataValue)) : $dataValue;
$testConditionList = str_replace('[:' . $criteriaName . ']', $dataValue, $testConditionList);
}
}
// evaluate the criteria against the row data
$result = PHPExcel_Calculation::getInstance()->_calculateFormulaValue('='.$testConditionList);
// If the row failed to meet the criteria, remove it from the database
if (!$result) {
unset($database[$dataRow]);
}
}
return $database;
}
private static function getFilteredColumn($database, $field, $criteria)
{
// reduce the database to a set of rows that match all the criteria
$database = self::filter($database, $criteria);
// extract an array of values for the requested column
$colData = array();
foreach ($database as $row) {
$colData[] = $row[$field];
}
return $colData;
}
/**
* DAVERAGE
*
* Averages the values in a column of a list or database that match conditions you specify.
*
* Excel Function:
* DAVERAGE(database,field,criteria)
*
* @access public
* @category Database Functions
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param string|integer $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return float
*
*/
public static function DAVERAGE($database, $field, $criteria)
{
$field = self::fieldExtract($database, $field);
if (is_null($field)) {
return null;
}
// Return
return PHPExcel_Calculation_Statistical::AVERAGE(
self::getFilteredColumn($database, $field, $criteria)
);
}
/**
* DCOUNT
*
* Counts the cells that contain numbers in a column of a list or database that match conditions
* that you specify.
*
* Excel Function:
* DCOUNT(database,[field],criteria)
*
* Excel Function:
* DAVERAGE(database,field,criteria)
*
* @access public
* @category Database Functions
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param string|integer $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return integer
*
* @TODO The field argument is optional. If field is omitted, DCOUNT counts all records in the
* database that match the criteria.
*
*/
public static function DCOUNT($database, $field, $criteria)
{
$field = self::fieldExtract($database, $field);
if (is_null($field)) {
return null;
}
// Return
return PHPExcel_Calculation_Statistical::COUNT(
self::getFilteredColumn($database, $field, $criteria)
);
}
/**
* DCOUNTA
*
* Counts the nonblank cells in a column of a list or database that match conditions that you specify.
*
* Excel Function:
* DCOUNTA(database,[field],criteria)
*
* @access public
* @category Database Functions
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param string|integer $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return integer
*
* @TODO The field argument is optional. If field is omitted, DCOUNTA counts all records in the
* database that match the criteria.
*
*/
public static function DCOUNTA($database, $field, $criteria)
{
$field = self::fieldExtract($database, $field);
if (is_null($field)) {
return null;
}
// reduce the database to a set of rows that match all the criteria
$database = self::filter($database, $criteria);
// extract an array of values for the requested column
$colData = array();
foreach ($database as $row) {
$colData[] = $row[$field];
}
// Return
return PHPExcel_Calculation_Statistical::COUNTA(
self::getFilteredColumn($database, $field, $criteria)
);
}
/**
* DGET
*
* Extracts a single value from a column of a list or database that matches conditions that you
* specify.
*
* Excel Function:
* DGET(database,field,criteria)
*
* @access public
* @category Database Functions
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param string|integer $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return mixed
*
*/
public static function DGET($database, $field, $criteria)
{
$field = self::fieldExtract($database, $field);
if (is_null($field)) {
return null;
}
// Return
$colData = self::getFilteredColumn($database, $field, $criteria);
if (count($colData) > 1) {
return PHPExcel_Calculation_Functions::NaN();
}
return $colData[0];
}
/**
* DMAX
*
* Returns the largest number in a column of a list or database that matches conditions you that
* specify.
*
* Excel Function:
* DMAX(database,field,criteria)
*
* @access public
* @category Database Functions
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param string|integer $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return float
*
*/
public static function DMAX($database, $field, $criteria)
{
$field = self::fieldExtract($database, $field);
if (is_null($field)) {
return null;
}
// Return
return PHPExcel_Calculation_Statistical::MAX(
self::getFilteredColumn($database, $field, $criteria)
);
}
/**
* DMIN
*
* Returns the smallest number in a column of a list or database that matches conditions you that
* specify.
*
* Excel Function:
* DMIN(database,field,criteria)
*
* @access public
* @category Database Functions
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param string|integer $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return float
*
*/
public static function DMIN($database, $field, $criteria)
{
$field = self::fieldExtract($database, $field);
if (is_null($field)) {
return null;
}
// Return
return PHPExcel_Calculation_Statistical::MIN(
self::getFilteredColumn($database, $field, $criteria)
);
}
/**
* DPRODUCT
*
* Multiplies the values in a column of a list or database that match conditions that you specify.
*
* Excel Function:
* DPRODUCT(database,field,criteria)
*
* @access public
* @category Database Functions
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param string|integer $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return float
*
*/
public static function DPRODUCT($database, $field, $criteria)
{
$field = self::fieldExtract($database, $field);
if (is_null($field)) {
return null;
}
// Return
return PHPExcel_Calculation_MathTrig::PRODUCT(
self::getFilteredColumn($database, $field, $criteria)
);
}
/**
* DSTDEV
*
* Estimates the standard deviation of a population based on a sample by using the numbers in a
* column of a list or database that match conditions that you specify.
*
* Excel Function:
* DSTDEV(database,field,criteria)
*
* @access public
* @category Database Functions
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param string|integer $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return float
*
*/
public static function DSTDEV($database, $field, $criteria)
{
$field = self::fieldExtract($database, $field);
if (is_null($field)) {
return null;
}
// Return
return PHPExcel_Calculation_Statistical::STDEV(
self::getFilteredColumn($database, $field, $criteria)
);
}
/**
* DSTDEVP
*
* Calculates the standard deviation of a population based on the entire population by using the
* numbers in a column of a list or database that match conditions that you specify.
*
* Excel Function:
* DSTDEVP(database,field,criteria)
*
* @access public
* @category Database Functions
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param string|integer $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return float
*
*/
public static function DSTDEVP($database, $field, $criteria)
{
$field = self::fieldExtract($database, $field);
if (is_null($field)) {
return null;
}
// Return
return PHPExcel_Calculation_Statistical::STDEVP(
self::getFilteredColumn($database, $field, $criteria)
);
}
/**
* DSUM
*
* Adds the numbers in a column of a list or database that match conditions that you specify.
*
* Excel Function:
* DSUM(database,field,criteria)
*
* @access public
* @category Database Functions
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param string|integer $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return float
*
*/
public static function DSUM($database, $field, $criteria)
{
$field = self::fieldExtract($database, $field);
if (is_null($field)) {
return null;
}
// Return
return PHPExcel_Calculation_MathTrig::SUM(
self::getFilteredColumn($database, $field, $criteria)
);
}
/**
* DVAR
*
* Estimates the variance of a population based on a sample by using the numbers in a column
* of a list or database that match conditions that you specify.
*
* Excel Function:
* DVAR(database,field,criteria)
*
* @access public
* @category Database Functions
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param string|integer $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return float
*
*/
public static function DVAR($database, $field, $criteria)
{
$field = self::fieldExtract($database, $field);
if (is_null($field)) {
return null;
}
// Return
return PHPExcel_Calculation_Statistical::VARFunc(
self::getFilteredColumn($database, $field, $criteria)
);
}
/**
* DVARP
*
* Calculates the variance of a population based on the entire population by using the numbers
* in a column of a list or database that match conditions that you specify.
*
* Excel Function:
* DVARP(database,field,criteria)
*
* @access public
* @category Database Functions
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param string|integer $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return float
*
*/
public static function DVARP($database, $field, $criteria)
{
$field = self::fieldExtract($database, $field);
if (is_null($field)) {
return null;
}
// Return
return PHPExcel_Calculation_Statistical::VARP(
self::getFilteredColumn($database, $field, $criteria)
);
}
}

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,46 @@
<?php
/**
* PHPExcel_Calculation_Exception
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_Calculation_Exception extends PHPExcel_Exception
{
/**
* Error handler callback
*
* @param mixed $code
* @param mixed $string
* @param mixed $file
* @param mixed $line
* @param mixed $context
*/
public static function errorHandlerCallback($code, $string, $file, $line, $context)
{
$e = new self($string, $code);
$e->line = $line;
$e->file = $file;
throw $e;
}
}

View File

@@ -0,0 +1,45 @@
<?php
/**
* PHPExcel_Calculation_ExceptionHandler
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_Calculation_ExceptionHandler
{
/**
* Register errorhandler
*/
public function __construct()
{
set_error_handler(array('PHPExcel_Calculation_Exception', 'errorHandlerCallback'), E_ALL);
}
/**
* Unregister errorhandler
*/
public function __destruct()
{
restore_error_handler();
}
}

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,622 @@
<?php
/*
PARTLY BASED ON:
Copyright (c) 2007 E. W. Bachtal, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial
portions of the Software.
The software is provided "as is", without warranty of any kind, express or implied, including but not
limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In
no event shall the authors or copyright holders be liable for any claim, damages or other liability,
whether in an action of contract, tort or otherwise, arising from, out of or in connection with the
software or the use or other dealings in the software.
http://ewbi.blogs.com/develops/2007/03/excel_formula_p.html
http://ewbi.blogs.com/develops/2004/12/excel_formula_p.html
*/
/**
* PHPExcel_Calculation_FormulaParser
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_Calculation_FormulaParser
{
/* Character constants */
const QUOTE_DOUBLE = '"';
const QUOTE_SINGLE = '\'';
const BRACKET_CLOSE = ']';
const BRACKET_OPEN = '[';
const BRACE_OPEN = '{';
const BRACE_CLOSE = '}';
const PAREN_OPEN = '(';
const PAREN_CLOSE = ')';
const SEMICOLON = ';';
const WHITESPACE = ' ';
const COMMA = ',';
const ERROR_START = '#';
const OPERATORS_SN = "+-";
const OPERATORS_INFIX = "+-*/^&=><";
const OPERATORS_POSTFIX = "%";
/**
* Formula
*
* @var string
*/
private $formula;
/**
* Tokens
*
* @var PHPExcel_Calculation_FormulaToken[]
*/
private $tokens = array();
/**
* Create a new PHPExcel_Calculation_FormulaParser
*
* @param string $pFormula Formula to parse
* @throws PHPExcel_Calculation_Exception
*/
public function __construct($pFormula = '')
{
// Check parameters
if (is_null($pFormula)) {
throw new PHPExcel_Calculation_Exception("Invalid parameter passed: formula");
}
// Initialise values
$this->formula = trim($pFormula);
// Parse!
$this->parseToTokens();
}
/**
* Get Formula
*
* @return string
*/
public function getFormula()
{
return $this->formula;
}
/**
* Get Token
*
* @param int $pId Token id
* @return string
* @throws PHPExcel_Calculation_Exception
*/
public function getToken($pId = 0)
{
if (isset($this->tokens[$pId])) {
return $this->tokens[$pId];
} else {
throw new PHPExcel_Calculation_Exception("Token with id $pId does not exist.");
}
}
/**
* Get Token count
*
* @return string
*/
public function getTokenCount()
{
return count($this->tokens);
}
/**
* Get Tokens
*
* @return PHPExcel_Calculation_FormulaToken[]
*/
public function getTokens()
{
return $this->tokens;
}
/**
* Parse to tokens
*/
private function parseToTokens()
{
// No attempt is made to verify formulas; assumes formulas are derived from Excel, where
// they can only exist if valid; stack overflows/underflows sunk as nulls without exceptions.
// Check if the formula has a valid starting =
$formulaLength = strlen($this->formula);
if ($formulaLength < 2 || $this->formula{0} != '=') {
return;
}
// Helper variables
$tokens1 = $tokens2 = $stack = array();
$inString = $inPath = $inRange = $inError = false;
$token = $previousToken = $nextToken = null;
$index = 1;
$value = '';
$ERRORS = array("#NULL!", "#DIV/0!", "#VALUE!", "#REF!", "#NAME?", "#NUM!", "#N/A");
$COMPARATORS_MULTI = array(">=", "<=", "<>");
while ($index < $formulaLength) {
// state-dependent character evaluation (order is important)
// double-quoted strings
// embeds are doubled
// end marks token
if ($inString) {
if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE) {
if ((($index + 2) <= $formulaLength) && ($this->formula{$index + 1} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE)) {
$value .= PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE;
++$index;
} else {
$inString = false;
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_TEXT);
$value = "";
}
} else {
$value .= $this->formula{$index};
}
++$index;
continue;
}
// single-quoted strings (links)
// embeds are double
// end does not mark a token
if ($inPath) {
if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE) {
if ((($index + 2) <= $formulaLength) && ($this->formula{$index + 1} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE)) {
$value .= PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE;
++$index;
} else {
$inPath = false;
}
} else {
$value .= $this->formula{$index};
}
++$index;
continue;
}
// bracked strings (R1C1 range index or linked workbook name)
// no embeds (changed to "()" by Excel)
// end does not mark a token
if ($inRange) {
if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::BRACKET_CLOSE) {
$inRange = false;
}
$value .= $this->formula{$index};
++$index;
continue;
}
// error values
// end marks a token, determined from absolute list of values
if ($inError) {
$value .= $this->formula{$index};
++$index;
if (in_array($value, $ERRORS)) {
$inError = false;
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_ERROR);
$value = "";
}
continue;
}
// scientific notation check
if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_SN, $this->formula{$index}) !== false) {
if (strlen($value) > 1) {
if (preg_match("/^[1-9]{1}(\.[0-9]+)?E{1}$/", $this->formula{$index}) != 0) {
$value .= $this->formula{$index};
++$index;
continue;
}
}
}
// independent character evaluation (order not important)
// establish state-dependent character evaluations
if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE) {
if (strlen($value > 0)) {
// unexpected
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
$value = "";
}
$inString = true;
++$index;
continue;
}
if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE) {
if (strlen($value) > 0) {
// unexpected
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
$value = "";
}
$inPath = true;
++$index;
continue;
}
if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::BRACKET_OPEN) {
$inRange = true;
$value .= PHPExcel_Calculation_FormulaParser::BRACKET_OPEN;
++$index;
continue;
}
if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::ERROR_START) {
if (strlen($value) > 0) {
// unexpected
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
$value = "";
}
$inError = true;
$value .= PHPExcel_Calculation_FormulaParser::ERROR_START;
++$index;
continue;
}
// mark start and end of arrays and array rows
if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::BRACE_OPEN) {
if (strlen($value) > 0) {
// unexpected
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
$value = "";
}
$tmp = new PHPExcel_Calculation_FormulaToken("ARRAY", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
$tokens1[] = $tmp;
$stack[] = clone $tmp;
$tmp = new PHPExcel_Calculation_FormulaToken("ARRAYROW", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
$tokens1[] = $tmp;
$stack[] = clone $tmp;
++$index;
continue;
}
if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::SEMICOLON) {
if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = "";
}
$tmp = array_pop($stack);
$tmp->setValue("");
$tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
$tokens1[] = $tmp;
$tmp = new PHPExcel_Calculation_FormulaToken(",", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_ARGUMENT);
$tokens1[] = $tmp;
$tmp = new PHPExcel_Calculation_FormulaToken("ARRAYROW", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
$tokens1[] = $tmp;
$stack[] = clone $tmp;
++$index;
continue;
}
if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::BRACE_CLOSE) {
if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = "";
}
$tmp = array_pop($stack);
$tmp->setValue("");
$tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
$tokens1[] = $tmp;
$tmp = array_pop($stack);
$tmp->setValue("");
$tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
$tokens1[] = $tmp;
++$index;
continue;
}
// trim white-space
if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::WHITESPACE) {
if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = "";
}
$tokens1[] = new PHPExcel_Calculation_FormulaToken("", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_WHITESPACE);
++$index;
while (($this->formula{$index} == PHPExcel_Calculation_FormulaParser::WHITESPACE) && ($index < $formulaLength)) {
++$index;
}
continue;
}
// multi-character comparators
if (($index + 2) <= $formulaLength) {
if (in_array(substr($this->formula, $index, 2), $COMPARATORS_MULTI)) {
if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = "";
}
$tokens1[] = new PHPExcel_Calculation_FormulaToken(substr($this->formula, $index, 2), PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL);
$index += 2;
continue;
}
}
// standard infix operators
if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_INFIX, $this->formula{$index}) !== false) {
if (strlen($value) > 0) {
$tokens1[] =new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = "";
}
$tokens1[] = new PHPExcel_Calculation_FormulaToken($this->formula{$index}, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX);
++$index;
continue;
}
// standard postfix operators (only one)
if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_POSTFIX, $this->formula{$index}) !== false) {
if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = "";
}
$tokens1[] = new PHPExcel_Calculation_FormulaToken($this->formula{$index}, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX);
++$index;
continue;
}
// start subexpression or function
if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::PAREN_OPEN) {
if (strlen($value) > 0) {
$tmp = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
$tokens1[] = $tmp;
$stack[] = clone $tmp;
$value = "";
} else {
$tmp = new PHPExcel_Calculation_FormulaToken("", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
$tokens1[] = $tmp;
$stack[] = clone $tmp;
}
++$index;
continue;
}
// function, subexpression, or array parameters, or operand unions
if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::COMMA) {
if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = "";
}
$tmp = array_pop($stack);
$tmp->setValue("");
$tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
$stack[] = $tmp;
if ($tmp->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken(",", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_UNION);
} else {
$tokens1[] = new PHPExcel_Calculation_FormulaToken(",", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_ARGUMENT);
}
++$index;
continue;
}
// stop subexpression
if ($this->formula{$index} == PHPExcel_Calculation_FormulaParser::PAREN_CLOSE) {
if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
$value = "";
}
$tmp = array_pop($stack);
$tmp->setValue("");
$tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
$tokens1[] = $tmp;
++$index;
continue;
}
// token accumulation
$value .= $this->formula{$index};
++$index;
}
// dump remaining accumulation
if (strlen($value) > 0) {
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
}
// move tokenList to new set, excluding unnecessary white-space tokens and converting necessary ones to intersections
$tokenCount = count($tokens1);
for ($i = 0; $i < $tokenCount; ++$i) {
$token = $tokens1[$i];
if (isset($tokens1[$i - 1])) {
$previousToken = $tokens1[$i - 1];
} else {
$previousToken = null;
}
if (isset($tokens1[$i + 1])) {
$nextToken = $tokens1[$i + 1];
} else {
$nextToken = null;
}
if (is_null($token)) {
continue;
}
if ($token->getTokenType() != PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_WHITESPACE) {
$tokens2[] = $token;
continue;
}
if (is_null($previousToken)) {
continue;
}
if (! (
(($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
(($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND)
) ) {
continue;
}
if (is_null($nextToken)) {
continue;
}
if (! (
(($nextToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($nextToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START)) ||
(($nextToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($nextToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START)) ||
($nextToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND)
) ) {
continue;
}
$tokens2[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_INTERSECTION);
}
// move tokens to final list, switching infix "-" operators to prefix when appropriate, switching infix "+" operators
// to noop when appropriate, identifying operand and infix-operator subtypes, and pulling "@" from function names
$this->tokens = array();
$tokenCount = count($tokens2);
for ($i = 0; $i < $tokenCount; ++$i) {
$token = $tokens2[$i];
if (isset($tokens2[$i - 1])) {
$previousToken = $tokens2[$i - 1];
} else {
$previousToken = null;
}
if (isset($tokens2[$i + 1])) {
$nextToken = $tokens2[$i + 1];
} else {
$nextToken = null;
}
if (is_null($token)) {
continue;
}
if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getValue() == "-") {
if ($i == 0) {
$token->setTokenType(PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPREFIX);
} elseif ((($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) &&
($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
(($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) &&
($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX) ||
($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND)) {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH);
} else {
$token->setTokenType(PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPREFIX);
}
$this->tokens[] = $token;
continue;
}
if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getValue() == "+") {
if ($i == 0) {
continue;
} elseif ((($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) &&
($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
(($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) &&
($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX) ||
($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND)) {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH);
} else {
continue;
}
$this->tokens[] = $token;
continue;
}
if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX &&
$token->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) {
if (strpos("<>=", substr($token->getValue(), 0, 1)) !== false) {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL);
} elseif ($token->getValue() == "&") {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_CONCATENATION);
} else {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH);
}
$this->tokens[] = $token;
continue;
}
if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND &&
$token->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) {
if (!is_numeric($token->getValue())) {
if (strtoupper($token->getValue()) == "TRUE" || strtoupper($token->getValue() == "FALSE")) {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL);
} else {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_RANGE);
}
} else {
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NUMBER);
}
$this->tokens[] = $token;
continue;
}
if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) {
if (strlen($token->getValue() > 0)) {
if (substr($token->getValue(), 0, 1) == "@") {
$token->setValue(substr($token->getValue(), 1));
}
}
}
$this->tokens[] = $token;
}
}
}

View File

@@ -0,0 +1,176 @@
<?php
/*
PARTLY BASED ON:
Copyright (c) 2007 E. W. Bachtal, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial
portions of the Software.
The software is provided "as is", without warranty of any kind, express or implied, including but not
limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In
no event shall the authors or copyright holders be liable for any claim, damages or other liability,
whether in an action of contract, tort or otherwise, arising from, out of or in connection with the
software or the use or other dealings in the software.
http://ewbi.blogs.com/develops/2007/03/excel_formula_p.html
http://ewbi.blogs.com/develops/2004/12/excel_formula_p.html
*/
/**
* PHPExcel_Calculation_FormulaToken
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_Calculation_FormulaToken
{
/* Token types */
const TOKEN_TYPE_NOOP = 'Noop';
const TOKEN_TYPE_OPERAND = 'Operand';
const TOKEN_TYPE_FUNCTION = 'Function';
const TOKEN_TYPE_SUBEXPRESSION = 'Subexpression';
const TOKEN_TYPE_ARGUMENT = 'Argument';
const TOKEN_TYPE_OPERATORPREFIX = 'OperatorPrefix';
const TOKEN_TYPE_OPERATORINFIX = 'OperatorInfix';
const TOKEN_TYPE_OPERATORPOSTFIX = 'OperatorPostfix';
const TOKEN_TYPE_WHITESPACE = 'Whitespace';
const TOKEN_TYPE_UNKNOWN = 'Unknown';
/* Token subtypes */
const TOKEN_SUBTYPE_NOTHING = 'Nothing';
const TOKEN_SUBTYPE_START = 'Start';
const TOKEN_SUBTYPE_STOP = 'Stop';
const TOKEN_SUBTYPE_TEXT = 'Text';
const TOKEN_SUBTYPE_NUMBER = 'Number';
const TOKEN_SUBTYPE_LOGICAL = 'Logical';
const TOKEN_SUBTYPE_ERROR = 'Error';
const TOKEN_SUBTYPE_RANGE = 'Range';
const TOKEN_SUBTYPE_MATH = 'Math';
const TOKEN_SUBTYPE_CONCATENATION = 'Concatenation';
const TOKEN_SUBTYPE_INTERSECTION = 'Intersection';
const TOKEN_SUBTYPE_UNION = 'Union';
/**
* Value
*
* @var string
*/
private $value;
/**
* Token Type (represented by TOKEN_TYPE_*)
*
* @var string
*/
private $tokenType;
/**
* Token SubType (represented by TOKEN_SUBTYPE_*)
*
* @var string
*/
private $tokenSubType;
/**
* Create a new PHPExcel_Calculation_FormulaToken
*
* @param string $pValue
* @param string $pTokenType Token type (represented by TOKEN_TYPE_*)
* @param string $pTokenSubType Token Subtype (represented by TOKEN_SUBTYPE_*)
*/
public function __construct($pValue, $pTokenType = PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN, $pTokenSubType = PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING)
{
// Initialise values
$this->value = $pValue;
$this->tokenType = $pTokenType;
$this->tokenSubType = $pTokenSubType;
}
/**
* Get Value
*
* @return string
*/
public function getValue()
{
return $this->value;
}
/**
* Set Value
*
* @param string $value
*/
public function setValue($value)
{
$this->value = $value;
}
/**
* Get Token Type (represented by TOKEN_TYPE_*)
*
* @return string
*/
public function getTokenType()
{
return $this->tokenType;
}
/**
* Set Token Type
*
* @param string $value
*/
public function setTokenType($value = PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN)
{
$this->tokenType = $value;
}
/**
* Get Token SubType (represented by TOKEN_SUBTYPE_*)
*
* @return string
*/
public function getTokenSubType()
{
return $this->tokenSubType;
}
/**
* Set Token SubType
*
* @param string $value
*/
public function setTokenSubType($value = PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING)
{
$this->tokenSubType = $value;
}
}

View File

@@ -0,0 +1,148 @@
<?php
/**
* PHPExcel_Calculation_Function
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_Calculation_Function
{
/* Function categories */
const CATEGORY_CUBE = 'Cube';
const CATEGORY_DATABASE = 'Database';
const CATEGORY_DATE_AND_TIME = 'Date and Time';
const CATEGORY_ENGINEERING = 'Engineering';
const CATEGORY_FINANCIAL = 'Financial';
const CATEGORY_INFORMATION = 'Information';
const CATEGORY_LOGICAL = 'Logical';
const CATEGORY_LOOKUP_AND_REFERENCE = 'Lookup and Reference';
const CATEGORY_MATH_AND_TRIG = 'Math and Trig';
const CATEGORY_STATISTICAL = 'Statistical';
const CATEGORY_TEXT_AND_DATA = 'Text and Data';
/**
* Category (represented by CATEGORY_*)
*
* @var string
*/
private $category;
/**
* Excel name
*
* @var string
*/
private $excelName;
/**
* PHPExcel name
*
* @var string
*/
private $phpExcelName;
/**
* Create a new PHPExcel_Calculation_Function
*
* @param string $pCategory Category (represented by CATEGORY_*)
* @param string $pExcelName Excel function name
* @param string $pPHPExcelName PHPExcel function mapping
* @throws PHPExcel_Calculation_Exception
*/
public function __construct($pCategory = null, $pExcelName = null, $pPHPExcelName = null)
{
if (($pCategory !== null) && ($pExcelName !== null) && ($pPHPExcelName !== null)) {
// Initialise values
$this->category = $pCategory;
$this->excelName = $pExcelName;
$this->phpExcelName = $pPHPExcelName;
} else {
throw new PHPExcel_Calculation_Exception("Invalid parameters passed.");
}
}
/**
* Get Category (represented by CATEGORY_*)
*
* @return string
*/
public function getCategory()
{
return $this->category;
}
/**
* Set Category (represented by CATEGORY_*)
*
* @param string $value
* @throws PHPExcel_Calculation_Exception
*/
public function setCategory($value = null)
{
if (!is_null($value)) {
$this->category = $value;
} else {
throw new PHPExcel_Calculation_Exception("Invalid parameter passed.");
}
}
/**
* Get Excel name
*
* @return string
*/
public function getExcelName()
{
return $this->excelName;
}
/**
* Set Excel name
*
* @param string $value
*/
public function setExcelName($value)
{
$this->excelName = $value;
}
/**
* Get PHPExcel name
*
* @return string
*/
public function getPHPExcelName()
{
return $this->phpExcelName;
}
/**
* Set PHPExcel name
*
* @param string $value
*/
public function setPHPExcelName($value)
{
$this->phpExcelName = $value;
}
}

View File

@@ -0,0 +1,760 @@
<?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/** MAX_VALUE */
define('MAX_VALUE', 1.2e308);
/** 2 / PI */
define('M_2DIVPI', 0.63661977236758134307553505349006);
/** MAX_ITERATIONS */
define('MAX_ITERATIONS', 256);
/** PRECISION */
define('PRECISION', 8.88E-016);
/**
* PHPExcel_Calculation_Functions
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_Calculation_Functions
{
/** constants */
const COMPATIBILITY_EXCEL = 'Excel';
const COMPATIBILITY_GNUMERIC = 'Gnumeric';
const COMPATIBILITY_OPENOFFICE = 'OpenOfficeCalc';
const RETURNDATE_PHP_NUMERIC = 'P';
const RETURNDATE_PHP_OBJECT = 'O';
const RETURNDATE_EXCEL = 'E';
/**
* Compatibility mode to use for error checking and responses
*
* @access private
* @var string
*/
protected static $compatibilityMode = self::COMPATIBILITY_EXCEL;
/**
* Data Type to use when returning date values
*
* @access private
* @var string
*/
protected static $returnDateType = self::RETURNDATE_EXCEL;
/**
* List of error codes
*
* @access private
* @var array
*/
protected static $errorCodes = array(
'null' => '#NULL!',
'divisionbyzero' => '#DIV/0!',
'value' => '#VALUE!',
'reference' => '#REF!',
'name' => '#NAME?',
'num' => '#NUM!',
'na' => '#N/A',
'gettingdata' => '#GETTING_DATA'
);
/**
* Set the Compatibility Mode
*
* @access public
* @category Function Configuration
* @param string $compatibilityMode Compatibility Mode
* Permitted values are:
* PHPExcel_Calculation_Functions::COMPATIBILITY_EXCEL 'Excel'
* PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC 'Gnumeric'
* PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE 'OpenOfficeCalc'
* @return boolean (Success or Failure)
*/
public static function setCompatibilityMode($compatibilityMode)
{
if (($compatibilityMode == self::COMPATIBILITY_EXCEL) ||
($compatibilityMode == self::COMPATIBILITY_GNUMERIC) ||
($compatibilityMode == self::COMPATIBILITY_OPENOFFICE)) {
self::$compatibilityMode = $compatibilityMode;
return true;
}
return false;
}
/**
* Return the current Compatibility Mode
*
* @access public
* @category Function Configuration
* @return string Compatibility Mode
* Possible Return values are:
* PHPExcel_Calculation_Functions::COMPATIBILITY_EXCEL 'Excel'
* PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC 'Gnumeric'
* PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE 'OpenOfficeCalc'
*/
public static function getCompatibilityMode()
{
return self::$compatibilityMode;
}
/**
* Set the Return Date Format used by functions that return a date/time (Excel, PHP Serialized Numeric or PHP Object)
*
* @access public
* @category Function Configuration
* @param string $returnDateType Return Date Format
* Permitted values are:
* PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC 'P'
* PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT 'O'
* PHPExcel_Calculation_Functions::RETURNDATE_EXCEL 'E'
* @return boolean Success or failure
*/
public static function setReturnDateType($returnDateType)
{
if (($returnDateType == self::RETURNDATE_PHP_NUMERIC) ||
($returnDateType == self::RETURNDATE_PHP_OBJECT) ||
($returnDateType == self::RETURNDATE_EXCEL)) {
self::$returnDateType = $returnDateType;
return true;
}
return false;
}
/**
* Return the current Return Date Format for functions that return a date/time (Excel, PHP Serialized Numeric or PHP Object)
*
* @access public
* @category Function Configuration
* @return string Return Date Format
* Possible Return values are:
* PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC 'P'
* PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT 'O'
* PHPExcel_Calculation_Functions::RETURNDATE_EXCEL 'E'
*/
public static function getReturnDateType()
{
return self::$returnDateType;
}
/**
* DUMMY
*
* @access public
* @category Error Returns
* @return string #Not Yet Implemented
*/
public static function DUMMY()
{
return '#Not Yet Implemented';
}
/**
* DIV0
*
* @access public
* @category Error Returns
* @return string #Not Yet Implemented
*/
public static function DIV0()
{
return self::$errorCodes['divisionbyzero'];
}
/**
* NA
*
* Excel Function:
* =NA()
*
* Returns the error value #N/A
* #N/A is the error value that means "no value is available."
*
* @access public
* @category Logical Functions
* @return string #N/A!
*/
public static function NA()
{
return self::$errorCodes['na'];
}
/**
* NaN
*
* Returns the error value #NUM!
*
* @access public
* @category Error Returns
* @return string #NUM!
*/
public static function NaN()
{
return self::$errorCodes['num'];
}
/**
* NAME
*
* Returns the error value #NAME?
*
* @access public
* @category Error Returns
* @return string #NAME?
*/
public static function NAME()
{
return self::$errorCodes['name'];
}
/**
* REF
*
* Returns the error value #REF!
*
* @access public
* @category Error Returns
* @return string #REF!
*/
public static function REF()
{
return self::$errorCodes['reference'];
}
/**
* NULL
*
* Returns the error value #NULL!
*
* @access public
* @category Error Returns
* @return string #NULL!
*/
public static function NULL()
{
return self::$errorCodes['null'];
}
/**
* VALUE
*
* Returns the error value #VALUE!
*
* @access public
* @category Error Returns
* @return string #VALUE!
*/
public static function VALUE()
{
return self::$errorCodes['value'];
}
public static function isMatrixValue($idx)
{
return ((substr_count($idx, '.') <= 1) || (preg_match('/\.[A-Z]/', $idx) > 0));
}
public static function isValue($idx)
{
return (substr_count($idx, '.') == 0);
}
public static function isCellValue($idx)
{
return (substr_count($idx, '.') > 1);
}
public static function ifCondition($condition)
{
$condition = PHPExcel_Calculation_Functions::flattenSingleValue($condition);
if (!isset($condition{0})) {
$condition = '=""';
}
if (!in_array($condition{0}, array('>', '<', '='))) {
if (!is_numeric($condition)) {
$condition = PHPExcel_Calculation::wrapResult(strtoupper($condition));
}
return '=' . $condition;
} else {
preg_match('/([<>=]+)(.*)/', $condition, $matches);
list(, $operator, $operand) = $matches;
if (!is_numeric($operand)) {
$operand = str_replace('"', '""', $operand);
$operand = PHPExcel_Calculation::wrapResult(strtoupper($operand));
}
return $operator.$operand;
}
}
/**
* ERROR_TYPE
*
* @param mixed $value Value to check
* @return boolean
*/
public static function ERROR_TYPE($value = '')
{
$value = self::flattenSingleValue($value);
$i = 1;
foreach (self::$errorCodes as $errorCode) {
if ($value === $errorCode) {
return $i;
}
++$i;
}
return self::NA();
}
/**
* IS_BLANK
*
* @param mixed $value Value to check
* @return boolean
*/
public static function IS_BLANK($value = null)
{
if (!is_null($value)) {
$value = self::flattenSingleValue($value);
}
return is_null($value);
}
/**
* IS_ERR
*
* @param mixed $value Value to check
* @return boolean
*/
public static function IS_ERR($value = '')
{
$value = self::flattenSingleValue($value);
return self::IS_ERROR($value) && (!self::IS_NA($value));
}
/**
* IS_ERROR
*
* @param mixed $value Value to check
* @return boolean
*/
public static function IS_ERROR($value = '')
{
$value = self::flattenSingleValue($value);
if (!is_string($value)) {
return false;
}
return in_array($value, array_values(self::$errorCodes));
}
/**
* IS_NA
*
* @param mixed $value Value to check
* @return boolean
*/
public static function IS_NA($value = '')
{
$value = self::flattenSingleValue($value);
return ($value === self::NA());
}
/**
* IS_EVEN
*
* @param mixed $value Value to check
* @return boolean
*/
public static function IS_EVEN($value = null)
{
$value = self::flattenSingleValue($value);
if ($value === null) {
return self::NAME();
} elseif ((is_bool($value)) || ((is_string($value)) && (!is_numeric($value)))) {
return self::VALUE();
}
return ($value % 2 == 0);
}
/**
* IS_ODD
*
* @param mixed $value Value to check
* @return boolean
*/
public static function IS_ODD($value = null)
{
$value = self::flattenSingleValue($value);
if ($value === null) {
return self::NAME();
} elseif ((is_bool($value)) || ((is_string($value)) && (!is_numeric($value)))) {
return self::VALUE();
}
return (abs($value) % 2 == 1);
}
/**
* IS_NUMBER
*
* @param mixed $value Value to check
* @return boolean
*/
public static function IS_NUMBER($value = null)
{
$value = self::flattenSingleValue($value);
if (is_string($value)) {
return false;
}
return is_numeric($value);
}
/**
* IS_LOGICAL
*
* @param mixed $value Value to check
* @return boolean
*/
public static function IS_LOGICAL($value = null)
{
$value = self::flattenSingleValue($value);
return is_bool($value);
}
/**
* IS_TEXT
*
* @param mixed $value Value to check
* @return boolean
*/
public static function IS_TEXT($value = null)
{
$value = self::flattenSingleValue($value);
return (is_string($value) && !self::IS_ERROR($value));
}
/**
* IS_NONTEXT
*
* @param mixed $value Value to check
* @return boolean
*/
public static function IS_NONTEXT($value = null)
{
return !self::IS_TEXT($value);
}
/**
* VERSION
*
* @return string Version information
*/
public static function VERSION()
{
return 'PHPExcel ##VERSION##, ##DATE##';
}
/**
* N
*
* Returns a value converted to a number
*
* @param value The value you want converted
* @return number N converts values listed in the following table
* If value is or refers to N returns
* A number That number
* A date The serial number of that date
* TRUE 1
* FALSE 0
* An error value The error value
* Anything else 0
*/
public static function N($value = null)
{
while (is_array($value)) {
$value = array_shift($value);
}
switch (gettype($value)) {
case 'double':
case 'float':
case 'integer':
return $value;
case 'boolean':
return (integer) $value;
case 'string':
// Errors
if ((strlen($value) > 0) && ($value{0} == '#')) {
return $value;
}
break;
}
return 0;
}
/**
* TYPE
*
* Returns a number that identifies the type of a value
*
* @param value The value you want tested
* @return number N converts values listed in the following table
* If value is or refers to N returns
* A number 1
* Text 2
* Logical Value 4
* An error value 16
* Array or Matrix 64
*/
public static function TYPE($value = null)
{
$value = self::flattenArrayIndexed($value);
if (is_array($value) && (count($value) > 1)) {
end($value);
$a = key($value);
// Range of cells is an error
if (self::isCellValue($a)) {
return 16;
// Test for Matrix
} elseif (self::isMatrixValue($a)) {
return 64;
}
} elseif (empty($value)) {
// Empty Cell
return 1;
}
$value = self::flattenSingleValue($value);
if (($value === null) || (is_float($value)) || (is_int($value))) {
return 1;
} elseif (is_bool($value)) {
return 4;
} elseif (is_array($value)) {
return 64;
} elseif (is_string($value)) {
// Errors
if ((strlen($value) > 0) && ($value{0} == '#')) {
return 16;
}
return 2;
}
return 0;
}
/**
* Convert a multi-dimensional array to a simple 1-dimensional array
*
* @param array $array Array to be flattened
* @return array Flattened array
*/
public static function flattenArray($array)
{
if (!is_array($array)) {
return (array) $array;
}
$arrayValues = array();
foreach ($array as $value) {
if (is_array($value)) {
foreach ($value as $val) {
if (is_array($val)) {
foreach ($val as $v) {
$arrayValues[] = $v;
}
} else {
$arrayValues[] = $val;
}
}
} else {
$arrayValues[] = $value;
}
}
return $arrayValues;
}
/**
* Convert a multi-dimensional array to a simple 1-dimensional array, but retain an element of indexing
*
* @param array $array Array to be flattened
* @return array Flattened array
*/
public static function flattenArrayIndexed($array)
{
if (!is_array($array)) {
return (array) $array;
}
$arrayValues = array();
foreach ($array as $k1 => $value) {
if (is_array($value)) {
foreach ($value as $k2 => $val) {
if (is_array($val)) {
foreach ($val as $k3 => $v) {
$arrayValues[$k1.'.'.$k2.'.'.$k3] = $v;
}
} else {
$arrayValues[$k1.'.'.$k2] = $val;
}
}
} else {
$arrayValues[$k1] = $value;
}
}
return $arrayValues;
}
/**
* Convert an array to a single scalar value by extracting the first element
*
* @param mixed $value Array or scalar value
* @return mixed
*/
public static function flattenSingleValue($value = '')
{
while (is_array($value)) {
$value = array_pop($value);
}
return $value;
}
}
//
// There are a few mathematical functions that aren't available on all versions of PHP for all platforms
// These functions aren't available in Windows implementations of PHP prior to version 5.3.0
// So we test if they do exist for this version of PHP/operating platform; and if not we create them
//
if (!function_exists('acosh')) {
function acosh($x)
{
return 2 * log(sqrt(($x + 1) / 2) + sqrt(($x - 1) / 2));
} // function acosh()
}
if (!function_exists('asinh')) {
function asinh($x)
{
return log($x + sqrt(1 + $x * $x));
} // function asinh()
}
if (!function_exists('atanh')) {
function atanh($x)
{
return (log(1 + $x) - log(1 - $x)) / 2;
} // function atanh()
}
//
// Strangely, PHP doesn't have a mb_str_replace multibyte function
// As we'll only ever use this function with UTF-8 characters, we can simply "hard-code" the character set
//
if ((!function_exists('mb_str_replace')) &&
(function_exists('mb_substr')) && (function_exists('mb_strlen')) && (function_exists('mb_strpos'))) {
function mb_str_replace($search, $replace, $subject)
{
if (is_array($subject)) {
$ret = array();
foreach ($subject as $key => $val) {
$ret[$key] = mb_str_replace($search, $replace, $val);
}
return $ret;
}
foreach ((array) $search as $key => $s) {
if ($s == '' && $s !== 0) {
continue;
}
$r = !is_array($replace) ? $replace : (array_key_exists($key, $replace) ? $replace[$key] : '');
$pos = mb_strpos($subject, $s, 0, 'UTF-8');
while ($pos !== false) {
$subject = mb_substr($subject, 0, $pos, 'UTF-8') . $r . mb_substr($subject, $pos + mb_strlen($s, 'UTF-8'), 65535, 'UTF-8');
$pos = mb_strpos($subject, $s, $pos + mb_strlen($r, 'UTF-8'), 'UTF-8');
}
}
return $subject;
}
}

View File

@@ -0,0 +1,285 @@
<?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Calculation_Logical
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_Calculation_Logical
{
/**
* TRUE
*
* Returns the boolean TRUE.
*
* Excel Function:
* =TRUE()
*
* @access public
* @category Logical Functions
* @return boolean True
*/
public static function TRUE()
{
return true;
}
/**
* FALSE
*
* Returns the boolean FALSE.
*
* Excel Function:
* =FALSE()
*
* @access public
* @category Logical Functions
* @return boolean False
*/
public static function FALSE()
{
return false;
}
/**
* LOGICAL_AND
*
* Returns boolean TRUE if all its arguments are TRUE; returns FALSE if one or more argument is FALSE.
*
* Excel Function:
* =AND(logical1[,logical2[, ...]])
*
* The arguments must evaluate to logical values such as TRUE or FALSE, or the arguments must be arrays
* or references that contain logical values.
*
* Boolean arguments are treated as True or False as appropriate
* Integer or floating point arguments are treated as True, except for 0 or 0.0 which are False
* If any argument value is a string, or a Null, the function returns a #VALUE! error, unless the string holds
* the value TRUE or FALSE, in which case it is evaluated as the corresponding boolean value
*
* @access public
* @category Logical Functions
* @param mixed $arg,... Data values
* @return boolean The logical AND of the arguments.
*/
public static function LOGICAL_AND()
{
// Return value
$returnValue = true;
// Loop through the arguments
$aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args());
$argCount = -1;
foreach ($aArgs as $argCount => $arg) {
// Is it a boolean value?
if (is_bool($arg)) {
$returnValue = $returnValue && $arg;
} elseif ((is_numeric($arg)) && (!is_string($arg))) {
$returnValue = $returnValue && ($arg != 0);
} elseif (is_string($arg)) {
$arg = strtoupper($arg);
if (($arg == 'TRUE') || ($arg == PHPExcel_Calculation::getTRUE())) {
$arg = true;
} elseif (($arg == 'FALSE') || ($arg == PHPExcel_Calculation::getFALSE())) {
$arg = false;
} else {
return PHPExcel_Calculation_Functions::VALUE();
}
$returnValue = $returnValue && ($arg != 0);
}
}
// Return
if ($argCount < 0) {
return PHPExcel_Calculation_Functions::VALUE();
}
return $returnValue;
}
/**
* LOGICAL_OR
*
* Returns boolean TRUE if any argument is TRUE; returns FALSE if all arguments are FALSE.
*
* Excel Function:
* =OR(logical1[,logical2[, ...]])
*
* The arguments must evaluate to logical values such as TRUE or FALSE, or the arguments must be arrays
* or references that contain logical values.
*
* Boolean arguments are treated as True or False as appropriate
* Integer or floating point arguments are treated as True, except for 0 or 0.0 which are False
* If any argument value is a string, or a Null, the function returns a #VALUE! error, unless the string holds
* the value TRUE or FALSE, in which case it is evaluated as the corresponding boolean value
*
* @access public
* @category Logical Functions
* @param mixed $arg,... Data values
* @return boolean The logical OR of the arguments.
*/
public static function LOGICAL_OR()
{
// Return value
$returnValue = false;
// Loop through the arguments
$aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args());
$argCount = -1;
foreach ($aArgs as $argCount => $arg) {
// Is it a boolean value?
if (is_bool($arg)) {
$returnValue = $returnValue || $arg;
} elseif ((is_numeric($arg)) && (!is_string($arg))) {
$returnValue = $returnValue || ($arg != 0);
} elseif (is_string($arg)) {
$arg = strtoupper($arg);
if (($arg == 'TRUE') || ($arg == PHPExcel_Calculation::getTRUE())) {
$arg = true;
} elseif (($arg == 'FALSE') || ($arg == PHPExcel_Calculation::getFALSE())) {
$arg = false;
} else {
return PHPExcel_Calculation_Functions::VALUE();
}
$returnValue = $returnValue || ($arg != 0);
}
}
// Return
if ($argCount < 0) {
return PHPExcel_Calculation_Functions::VALUE();
}
return $returnValue;
}
/**
* NOT
*
* Returns the boolean inverse of the argument.
*
* Excel Function:
* =NOT(logical)
*
* The argument must evaluate to a logical value such as TRUE or FALSE
*
* Boolean arguments are treated as True or False as appropriate
* Integer or floating point arguments are treated as True, except for 0 or 0.0 which are False
* If any argument value is a string, or a Null, the function returns a #VALUE! error, unless the string holds
* the value TRUE or FALSE, in which case it is evaluated as the corresponding boolean value
*
* @access public
* @category Logical Functions
* @param mixed $logical A value or expression that can be evaluated to TRUE or FALSE
* @return boolean The boolean inverse of the argument.
*/
public static function NOT($logical = false)
{
$logical = PHPExcel_Calculation_Functions::flattenSingleValue($logical);
if (is_string($logical)) {
$logical = strtoupper($logical);
if (($logical == 'TRUE') || ($logical == PHPExcel_Calculation::getTRUE())) {
return false;
} elseif (($logical == 'FALSE') || ($logical == PHPExcel_Calculation::getFALSE())) {
return true;
} else {
return PHPExcel_Calculation_Functions::VALUE();
}
}
return !$logical;
}
/**
* STATEMENT_IF
*
* Returns one value if a condition you specify evaluates to TRUE and another value if it evaluates to FALSE.
*
* Excel Function:
* =IF(condition[,returnIfTrue[,returnIfFalse]])
*
* Condition is any value or expression that can be evaluated to TRUE or FALSE.
* For example, A10=100 is a logical expression; if the value in cell A10 is equal to 100,
* the expression evaluates to TRUE. Otherwise, the expression evaluates to FALSE.
* This argument can use any comparison calculation operator.
* ReturnIfTrue is the value that is returned if condition evaluates to TRUE.
* For example, if this argument is the text string "Within budget" and the condition argument evaluates to TRUE,
* then the IF function returns the text "Within budget"
* If condition is TRUE and ReturnIfTrue is blank, this argument returns 0 (zero). To display the word TRUE, use
* the logical value TRUE for this argument.
* ReturnIfTrue can be another formula.
* ReturnIfFalse is the value that is returned if condition evaluates to FALSE.
* For example, if this argument is the text string "Over budget" and the condition argument evaluates to FALSE,
* then the IF function returns the text "Over budget".
* If condition is FALSE and ReturnIfFalse is omitted, then the logical value FALSE is returned.
* If condition is FALSE and ReturnIfFalse is blank, then the value 0 (zero) is returned.
* ReturnIfFalse can be another formula.
*
* @access public
* @category Logical Functions
* @param mixed $condition Condition to evaluate
* @param mixed $returnIfTrue Value to return when condition is true
* @param mixed $returnIfFalse Optional value to return when condition is false
* @return mixed The value of returnIfTrue or returnIfFalse determined by condition
*/
public static function STATEMENT_IF($condition = true, $returnIfTrue = 0, $returnIfFalse = false)
{
$condition = (is_null($condition)) ? true : (boolean) PHPExcel_Calculation_Functions::flattenSingleValue($condition);
$returnIfTrue = (is_null($returnIfTrue)) ? 0 : PHPExcel_Calculation_Functions::flattenSingleValue($returnIfTrue);
$returnIfFalse = (is_null($returnIfFalse)) ? false : PHPExcel_Calculation_Functions::flattenSingleValue($returnIfFalse);
return ($condition) ? $returnIfTrue : $returnIfFalse;
}
/**
* IFERROR
*
* Excel Function:
* =IFERROR(testValue,errorpart)
*
* @access public
* @category Logical Functions
* @param mixed $testValue Value to check, is also the value returned when no error
* @param mixed $errorpart Value to return when testValue is an error condition
* @return mixed The value of errorpart or testValue determined by error condition
*/
public static function IFERROR($testValue = '', $errorpart = '')
{
$testValue = (is_null($testValue)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($testValue);
$errorpart = (is_null($errorpart)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($errorpart);
return self::STATEMENT_IF(PHPExcel_Calculation_Functions::IS_ERROR($testValue), $errorpart, $testValue);
}
}

View File

@@ -0,0 +1,879 @@
<?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Calculation_LookupRef
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_Calculation_LookupRef
{
/**
* CELL_ADDRESS
*
* Creates a cell address as text, given specified row and column numbers.
*
* Excel Function:
* =ADDRESS(row, column, [relativity], [referenceStyle], [sheetText])
*
* @param row Row number to use in the cell reference
* @param column Column number to use in the cell reference
* @param relativity Flag indicating the type of reference to return
* 1 or omitted Absolute
* 2 Absolute row; relative column
* 3 Relative row; absolute column
* 4 Relative
* @param referenceStyle A logical value that specifies the A1 or R1C1 reference style.
* TRUE or omitted CELL_ADDRESS returns an A1-style reference
* FALSE CELL_ADDRESS returns an R1C1-style reference
* @param sheetText Optional Name of worksheet to use
* @return string
*/
public static function CELL_ADDRESS($row, $column, $relativity = 1, $referenceStyle = true, $sheetText = '')
{
$row = PHPExcel_Calculation_Functions::flattenSingleValue($row);
$column = PHPExcel_Calculation_Functions::flattenSingleValue($column);
$relativity = PHPExcel_Calculation_Functions::flattenSingleValue($relativity);
$sheetText = PHPExcel_Calculation_Functions::flattenSingleValue($sheetText);
if (($row < 1) || ($column < 1)) {
return PHPExcel_Calculation_Functions::VALUE();
}
if ($sheetText > '') {
if (strpos($sheetText, ' ') !== false) {
$sheetText = "'".$sheetText."'";
}
$sheetText .='!';
}
if ((!is_bool($referenceStyle)) || $referenceStyle) {
$rowRelative = $columnRelative = '$';
$column = PHPExcel_Cell::stringFromColumnIndex($column-1);
if (($relativity == 2) || ($relativity == 4)) {
$columnRelative = '';
}
if (($relativity == 3) || ($relativity == 4)) {
$rowRelative = '';
}
return $sheetText.$columnRelative.$column.$rowRelative.$row;
} else {
if (($relativity == 2) || ($relativity == 4)) {
$column = '['.$column.']';
}
if (($relativity == 3) || ($relativity == 4)) {
$row = '['.$row.']';
}
return $sheetText.'R'.$row.'C'.$column;
}
}
/**
* COLUMN
*
* Returns the column number of the given cell reference
* If the cell reference is a range of cells, COLUMN returns the column numbers of each column in the reference as a horizontal array.
* If cell reference is omitted, and the function is being called through the calculation engine, then it is assumed to be the
* reference of the cell in which the COLUMN function appears; otherwise this function returns 0.
*
* Excel Function:
* =COLUMN([cellAddress])
*
* @param cellAddress A reference to a range of cells for which you want the column numbers
* @return integer or array of integer
*/
public static function COLUMN($cellAddress = null)
{
if (is_null($cellAddress) || trim($cellAddress) === '') {
return 0;
}
if (is_array($cellAddress)) {
foreach ($cellAddress as $columnKey => $value) {
$columnKey = preg_replace('/[^a-z]/i', '', $columnKey);
return (integer) PHPExcel_Cell::columnIndexFromString($columnKey);
}
} else {
if (strpos($cellAddress, '!') !== false) {
list($sheet, $cellAddress) = explode('!', $cellAddress);
}
if (strpos($cellAddress, ':') !== false) {
list($startAddress, $endAddress) = explode(':', $cellAddress);
$startAddress = preg_replace('/[^a-z]/i', '', $startAddress);
$endAddress = preg_replace('/[^a-z]/i', '', $endAddress);
$returnValue = array();
do {
$returnValue[] = (integer) PHPExcel_Cell::columnIndexFromString($startAddress);
} while ($startAddress++ != $endAddress);
return $returnValue;
} else {
$cellAddress = preg_replace('/[^a-z]/i', '', $cellAddress);
return (integer) PHPExcel_Cell::columnIndexFromString($cellAddress);
}
}
}
/**
* COLUMNS
*
* Returns the number of columns in an array or reference.
*
* Excel Function:
* =COLUMNS(cellAddress)
*
* @param cellAddress An array or array formula, or a reference to a range of cells for which you want the number of columns
* @return integer The number of columns in cellAddress
*/
public static function COLUMNS($cellAddress = null)
{
if (is_null($cellAddress) || $cellAddress === '') {
return 1;
} elseif (!is_array($cellAddress)) {
return PHPExcel_Calculation_Functions::VALUE();
}
reset($cellAddress);
$isMatrix = (is_numeric(key($cellAddress)));
list($columns, $rows) = PHPExcel_Calculation::_getMatrixDimensions($cellAddress);
if ($isMatrix) {
return $rows;
} else {
return $columns;
}
}
/**
* ROW
*
* Returns the row number of the given cell reference
* If the cell reference is a range of cells, ROW returns the row numbers of each row in the reference as a vertical array.
* If cell reference is omitted, and the function is being called through the calculation engine, then it is assumed to be the
* reference of the cell in which the ROW function appears; otherwise this function returns 0.
*
* Excel Function:
* =ROW([cellAddress])
*
* @param cellAddress A reference to a range of cells for which you want the row numbers
* @return integer or array of integer
*/
public static function ROW($cellAddress = null)
{
if (is_null($cellAddress) || trim($cellAddress) === '') {
return 0;
}
if (is_array($cellAddress)) {
foreach ($cellAddress as $columnKey => $rowValue) {
foreach ($rowValue as $rowKey => $cellValue) {
return (integer) preg_replace('/[^0-9]/i', '', $rowKey);
}
}
} else {
if (strpos($cellAddress, '!') !== false) {
list($sheet, $cellAddress) = explode('!', $cellAddress);
}
if (strpos($cellAddress, ':') !== false) {
list($startAddress, $endAddress) = explode(':', $cellAddress);
$startAddress = preg_replace('/[^0-9]/', '', $startAddress);
$endAddress = preg_replace('/[^0-9]/', '', $endAddress);
$returnValue = array();
do {
$returnValue[][] = (integer) $startAddress;
} while ($startAddress++ != $endAddress);
return $returnValue;
} else {
list($cellAddress) = explode(':', $cellAddress);
return (integer) preg_replace('/[^0-9]/', '', $cellAddress);
}
}
}
/**
* ROWS
*
* Returns the number of rows in an array or reference.
*
* Excel Function:
* =ROWS(cellAddress)
*
* @param cellAddress An array or array formula, or a reference to a range of cells for which you want the number of rows
* @return integer The number of rows in cellAddress
*/
public static function ROWS($cellAddress = null)
{
if (is_null($cellAddress) || $cellAddress === '') {
return 1;
} elseif (!is_array($cellAddress)) {
return PHPExcel_Calculation_Functions::VALUE();
}
reset($cellAddress);
$isMatrix = (is_numeric(key($cellAddress)));
list($columns, $rows) = PHPExcel_Calculation::_getMatrixDimensions($cellAddress);
if ($isMatrix) {
return $columns;
} else {
return $rows;
}
}
/**
* HYPERLINK
*
* Excel Function:
* =HYPERLINK(linkURL,displayName)
*
* @access public
* @category Logical Functions
* @param string $linkURL Value to check, is also the value returned when no error
* @param string $displayName Value to return when testValue is an error condition
* @param PHPExcel_Cell $pCell The cell to set the hyperlink in
* @return mixed The value of $displayName (or $linkURL if $displayName was blank)
*/
public static function HYPERLINK($linkURL = '', $displayName = null, PHPExcel_Cell $pCell = null)
{
$args = func_get_args();
$pCell = array_pop($args);
$linkURL = (is_null($linkURL)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($linkURL);
$displayName = (is_null($displayName)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($displayName);
if ((!is_object($pCell)) || (trim($linkURL) == '')) {
return PHPExcel_Calculation_Functions::REF();
}
if ((is_object($displayName)) || trim($displayName) == '') {
$displayName = $linkURL;
}
$pCell->getHyperlink()->setUrl($linkURL);
$pCell->getHyperlink()->setTooltip($displayName);
return $displayName;
}
/**
* INDIRECT
*
* Returns the reference specified by a text string.
* References are immediately evaluated to display their contents.
*
* Excel Function:
* =INDIRECT(cellAddress)
*
* NOTE - INDIRECT() does not yet support the optional a1 parameter introduced in Excel 2010
*
* @param cellAddress $cellAddress The cell address of the current cell (containing this formula)
* @param PHPExcel_Cell $pCell The current cell (containing this formula)
* @return mixed The cells referenced by cellAddress
*
* @todo Support for the optional a1 parameter introduced in Excel 2010
*
*/
public static function INDIRECT($cellAddress = null, PHPExcel_Cell $pCell = null)
{
$cellAddress = PHPExcel_Calculation_Functions::flattenSingleValue($cellAddress);
if (is_null($cellAddress) || $cellAddress === '') {
return PHPExcel_Calculation_Functions::REF();
}
$cellAddress1 = $cellAddress;
$cellAddress2 = null;
if (strpos($cellAddress, ':') !== false) {
list($cellAddress1, $cellAddress2) = explode(':', $cellAddress);
}
if ((!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $cellAddress1, $matches)) ||
((!is_null($cellAddress2)) && (!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $cellAddress2, $matches)))) {
if (!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_NAMEDRANGE.'$/i', $cellAddress1, $matches)) {
return PHPExcel_Calculation_Functions::REF();
}
if (strpos($cellAddress, '!') !== false) {
list($sheetName, $cellAddress) = explode('!', $cellAddress);
$sheetName = trim($sheetName, "'");
$pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName);
} else {
$pSheet = $pCell->getWorksheet();
}
return PHPExcel_Calculation::getInstance()->extractNamedRange($cellAddress, $pSheet, false);
}
if (strpos($cellAddress, '!') !== false) {
list($sheetName, $cellAddress) = explode('!', $cellAddress);
$sheetName = trim($sheetName, "'");
$pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName);
} else {
$pSheet = $pCell->getWorksheet();
}
return PHPExcel_Calculation::getInstance()->extractCellRange($cellAddress, $pSheet, false);
}
/**
* OFFSET
*
* Returns a reference to a range that is a specified number of rows and columns from a cell or range of cells.
* The reference that is returned can be a single cell or a range of cells. You can specify the number of rows and
* the number of columns to be returned.
*
* Excel Function:
* =OFFSET(cellAddress, rows, cols, [height], [width])
*
* @param cellAddress The reference from which you want to base the offset. Reference must refer to a cell or
* range of adjacent cells; otherwise, OFFSET returns the #VALUE! error value.
* @param rows The number of rows, up or down, that you want the upper-left cell to refer to.
* Using 5 as the rows argument specifies that the upper-left cell in the reference is
* five rows below reference. Rows can be positive (which means below the starting reference)
* or negative (which means above the starting reference).
* @param cols The number of columns, to the left or right, that you want the upper-left cell of the result
* to refer to. Using 5 as the cols argument specifies that the upper-left cell in the
* reference is five columns to the right of reference. Cols can be positive (which means
* to the right of the starting reference) or negative (which means to the left of the
* starting reference).
* @param height The height, in number of rows, that you want the returned reference to be. Height must be a positive number.
* @param width The width, in number of columns, that you want the returned reference to be. Width must be a positive number.
* @return string A reference to a cell or range of cells
*/
public static function OFFSET($cellAddress = null, $rows = 0, $columns = 0, $height = null, $width = null)
{
$rows = PHPExcel_Calculation_Functions::flattenSingleValue($rows);
$columns = PHPExcel_Calculation_Functions::flattenSingleValue($columns);
$height = PHPExcel_Calculation_Functions::flattenSingleValue($height);
$width = PHPExcel_Calculation_Functions::flattenSingleValue($width);
if ($cellAddress == null) {
return 0;
}
$args = func_get_args();
$pCell = array_pop($args);
if (!is_object($pCell)) {
return PHPExcel_Calculation_Functions::REF();
}
$sheetName = null;
if (strpos($cellAddress, "!")) {
list($sheetName, $cellAddress) = explode("!", $cellAddress);
$sheetName = trim($sheetName, "'");
}
if (strpos($cellAddress, ":")) {
list($startCell, $endCell) = explode(":", $cellAddress);
} else {
$startCell = $endCell = $cellAddress;
}
list($startCellColumn, $startCellRow) = PHPExcel_Cell::coordinateFromString($startCell);
list($endCellColumn, $endCellRow) = PHPExcel_Cell::coordinateFromString($endCell);
$startCellRow += $rows;
$startCellColumn = PHPExcel_Cell::columnIndexFromString($startCellColumn) - 1;
$startCellColumn += $columns;
if (($startCellRow <= 0) || ($startCellColumn < 0)) {
return PHPExcel_Calculation_Functions::REF();
}
$endCellColumn = PHPExcel_Cell::columnIndexFromString($endCellColumn) - 1;
if (($width != null) && (!is_object($width))) {
$endCellColumn = $startCellColumn + $width - 1;
} else {
$endCellColumn += $columns;
}
$startCellColumn = PHPExcel_Cell::stringFromColumnIndex($startCellColumn);
if (($height != null) && (!is_object($height))) {
$endCellRow = $startCellRow + $height - 1;
} else {
$endCellRow += $rows;
}
if (($endCellRow <= 0) || ($endCellColumn < 0)) {
return PHPExcel_Calculation_Functions::REF();
}
$endCellColumn = PHPExcel_Cell::stringFromColumnIndex($endCellColumn);
$cellAddress = $startCellColumn.$startCellRow;
if (($startCellColumn != $endCellColumn) || ($startCellRow != $endCellRow)) {
$cellAddress .= ':'.$endCellColumn.$endCellRow;
}
if ($sheetName !== null) {
$pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName);
} else {
$pSheet = $pCell->getWorksheet();
}
return PHPExcel_Calculation::getInstance()->extractCellRange($cellAddress, $pSheet, false);
}
/**
* CHOOSE
*
* Uses lookup_value to return a value from the list of value arguments.
* Use CHOOSE to select one of up to 254 values based on the lookup_value.
*
* Excel Function:
* =CHOOSE(index_num, value1, [value2], ...)
*
* @param index_num Specifies which value argument is selected.
* Index_num must be a number between 1 and 254, or a formula or reference to a cell containing a number
* between 1 and 254.
* @param value1... Value1 is required, subsequent values are optional.
* Between 1 to 254 value arguments from which CHOOSE selects a value or an action to perform based on
* index_num. The arguments can be numbers, cell references, defined names, formulas, functions, or
* text.
* @return mixed The selected value
*/
public static function CHOOSE()
{
$chooseArgs = func_get_args();
$chosenEntry = PHPExcel_Calculation_Functions::flattenArray(array_shift($chooseArgs));
$entryCount = count($chooseArgs) - 1;
if (is_array($chosenEntry)) {
$chosenEntry = array_shift($chosenEntry);
}
if ((is_numeric($chosenEntry)) && (!is_bool($chosenEntry))) {
--$chosenEntry;
} else {
return PHPExcel_Calculation_Functions::VALUE();
}
$chosenEntry = floor($chosenEntry);
if (($chosenEntry < 0) || ($chosenEntry > $entryCount)) {
return PHPExcel_Calculation_Functions::VALUE();
}
if (is_array($chooseArgs[$chosenEntry])) {
return PHPExcel_Calculation_Functions::flattenArray($chooseArgs[$chosenEntry]);
} else {
return $chooseArgs[$chosenEntry];
}
}
/**
* MATCH
*
* The MATCH function searches for a specified item in a range of cells
*
* Excel Function:
* =MATCH(lookup_value, lookup_array, [match_type])
*
* @param lookup_value The value that you want to match in lookup_array
* @param lookup_array The range of cells being searched
* @param match_type The number -1, 0, or 1. -1 means above, 0 means exact match, 1 means below. If match_type is 1 or -1, the list has to be ordered.
* @return integer The relative position of the found item
*/
public static function MATCH($lookup_value, $lookup_array, $match_type = 1)
{
$lookup_array = PHPExcel_Calculation_Functions::flattenArray($lookup_array);
$lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value);
$match_type = (is_null($match_type)) ? 1 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($match_type);
// MATCH is not case sensitive
$lookup_value = strtolower($lookup_value);
// lookup_value type has to be number, text, or logical values
if ((!is_numeric($lookup_value)) && (!is_string($lookup_value)) && (!is_bool($lookup_value))) {
return PHPExcel_Calculation_Functions::NA();
}
// match_type is 0, 1 or -1
if (($match_type !== 0) && ($match_type !== -1) && ($match_type !== 1)) {
return PHPExcel_Calculation_Functions::NA();
}
// lookup_array should not be empty
$lookupArraySize = count($lookup_array);
if ($lookupArraySize <= 0) {
return PHPExcel_Calculation_Functions::NA();
}
// lookup_array should contain only number, text, or logical values, or empty (null) cells
foreach ($lookup_array as $i => $lookupArrayValue) {
// check the type of the value
if ((!is_numeric($lookupArrayValue)) && (!is_string($lookupArrayValue)) &&
(!is_bool($lookupArrayValue)) && (!is_null($lookupArrayValue))) {
return PHPExcel_Calculation_Functions::NA();
}
// convert strings to lowercase for case-insensitive testing
if (is_string($lookupArrayValue)) {
$lookup_array[$i] = strtolower($lookupArrayValue);
}
if ((is_null($lookupArrayValue)) && (($match_type == 1) || ($match_type == -1))) {
$lookup_array = array_slice($lookup_array, 0, $i-1);
}
}
// if match_type is 1 or -1, the list has to be ordered
if ($match_type == 1) {
asort($lookup_array);
$keySet = array_keys($lookup_array);
} elseif ($match_type == -1) {
arsort($lookup_array);
$keySet = array_keys($lookup_array);
}
// **
// find the match
// **
foreach ($lookup_array as $i => $lookupArrayValue) {
if (($match_type == 0) && ($lookupArrayValue == $lookup_value)) {
// exact match
return ++$i;
} elseif (($match_type == -1) && ($lookupArrayValue <= $lookup_value)) {
$i = array_search($i, $keySet);
// if match_type is -1 <=> find the smallest value that is greater than or equal to lookup_value
if ($i < 1) {
// 1st cell was already smaller than the lookup_value
break;
} else {
// the previous cell was the match
return $keySet[$i-1]+1;
}
} elseif (($match_type == 1) && ($lookupArrayValue >= $lookup_value)) {
$i = array_search($i, $keySet);
// if match_type is 1 <=> find the largest value that is less than or equal to lookup_value
if ($i < 1) {
// 1st cell was already bigger than the lookup_value
break;
} else {
// the previous cell was the match
return $keySet[$i-1]+1;
}
}
}
// unsuccessful in finding a match, return #N/A error value
return PHPExcel_Calculation_Functions::NA();
}
/**
* INDEX
*
* Uses an index to choose a value from a reference or array
*
* Excel Function:
* =INDEX(range_array, row_num, [column_num])
*
* @param range_array A range of cells or an array constant
* @param row_num The row in array from which to return a value. If row_num is omitted, column_num is required.
* @param column_num The column in array from which to return a value. If column_num is omitted, row_num is required.
* @return mixed the value of a specified cell or array of cells
*/
public static function INDEX($arrayValues, $rowNum = 0, $columnNum = 0)
{
if (($rowNum < 0) || ($columnNum < 0)) {
return PHPExcel_Calculation_Functions::VALUE();
}
if (!is_array($arrayValues)) {
return PHPExcel_Calculation_Functions::REF();
}
$rowKeys = array_keys($arrayValues);
$columnKeys = @array_keys($arrayValues[$rowKeys[0]]);
if ($columnNum > count($columnKeys)) {
return PHPExcel_Calculation_Functions::VALUE();
} elseif ($columnNum == 0) {
if ($rowNum == 0) {
return $arrayValues;
}
$rowNum = $rowKeys[--$rowNum];
$returnArray = array();
foreach ($arrayValues as $arrayColumn) {
if (is_array($arrayColumn)) {
if (isset($arrayColumn[$rowNum])) {
$returnArray[] = $arrayColumn[$rowNum];
} else {
return $arrayValues[$rowNum];
}
} else {
return $arrayValues[$rowNum];
}
}
return $returnArray;
}
$columnNum = $columnKeys[--$columnNum];
if ($rowNum > count($rowKeys)) {
return PHPExcel_Calculation_Functions::VALUE();
} elseif ($rowNum == 0) {
return $arrayValues[$columnNum];
}
$rowNum = $rowKeys[--$rowNum];
return $arrayValues[$rowNum][$columnNum];
}
/**
* TRANSPOSE
*
* @param array $matrixData A matrix of values
* @return array
*
* Unlike the Excel TRANSPOSE function, which will only work on a single row or column, this function will transpose a full matrix.
*/
public static function TRANSPOSE($matrixData)
{
$returnMatrix = array();
if (!is_array($matrixData)) {
$matrixData = array(array($matrixData));
}
$column = 0;
foreach ($matrixData as $matrixRow) {
$row = 0;
foreach ($matrixRow as $matrixCell) {
$returnMatrix[$row][$column] = $matrixCell;
++$row;
}
++$column;
}
return $returnMatrix;
}
private static function vlookupSort($a, $b)
{
reset($a);
$firstColumn = key($a);
if (($aLower = strtolower($a[$firstColumn])) == ($bLower = strtolower($b[$firstColumn]))) {
return 0;
}
return ($aLower < $bLower) ? -1 : 1;
}
/**
* VLOOKUP
* The VLOOKUP function searches for value in the left-most column of lookup_array and returns the value in the same row based on the index_number.
* @param lookup_value The value that you want to match in lookup_array
* @param lookup_array The range of cells being searched
* @param index_number The column number in table_array from which the matching value must be returned. The first column is 1.
* @param not_exact_match Determines if you are looking for an exact match based on lookup_value.
* @return mixed The value of the found cell
*/
public static function VLOOKUP($lookup_value, $lookup_array, $index_number, $not_exact_match = true)
{
$lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value);
$index_number = PHPExcel_Calculation_Functions::flattenSingleValue($index_number);
$not_exact_match = PHPExcel_Calculation_Functions::flattenSingleValue($not_exact_match);
// index_number must be greater than or equal to 1
if ($index_number < 1) {
return PHPExcel_Calculation_Functions::VALUE();
}
// index_number must be less than or equal to the number of columns in lookup_array
if ((!is_array($lookup_array)) || (empty($lookup_array))) {
return PHPExcel_Calculation_Functions::REF();
} else {
$f = array_keys($lookup_array);
$firstRow = array_pop($f);
if ((!is_array($lookup_array[$firstRow])) || ($index_number > count($lookup_array[$firstRow]))) {
return PHPExcel_Calculation_Functions::REF();
} else {
$columnKeys = array_keys($lookup_array[$firstRow]);
$returnColumn = $columnKeys[--$index_number];
$firstColumn = array_shift($columnKeys);
}
}
if (!$not_exact_match) {
uasort($lookup_array, array('self', 'vlookupSort'));
}
$rowNumber = $rowValue = false;
foreach ($lookup_array as $rowKey => $rowData) {
if ((is_numeric($lookup_value) && is_numeric($rowData[$firstColumn]) && ($rowData[$firstColumn] > $lookup_value)) ||
(!is_numeric($lookup_value) && !is_numeric($rowData[$firstColumn]) && (strtolower($rowData[$firstColumn]) > strtolower($lookup_value)))) {
break;
}
$rowNumber = $rowKey;
$rowValue = $rowData[$firstColumn];
}
if ($rowNumber !== false) {
if ((!$not_exact_match) && ($rowValue != $lookup_value)) {
// if an exact match is required, we have what we need to return an appropriate response
return PHPExcel_Calculation_Functions::NA();
} else {
// otherwise return the appropriate value
return $lookup_array[$rowNumber][$returnColumn];
}
}
return PHPExcel_Calculation_Functions::NA();
}
/**
* HLOOKUP
* The HLOOKUP function searches for value in the top-most row of lookup_array and returns the value in the same column based on the index_number.
* @param lookup_value The value that you want to match in lookup_array
* @param lookup_array The range of cells being searched
* @param index_number The row number in table_array from which the matching value must be returned. The first row is 1.
* @param not_exact_match Determines if you are looking for an exact match based on lookup_value.
* @return mixed The value of the found cell
*/
public static function HLOOKUP($lookup_value, $lookup_array, $index_number, $not_exact_match = true)
{
$lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value);
$index_number = PHPExcel_Calculation_Functions::flattenSingleValue($index_number);
$not_exact_match = PHPExcel_Calculation_Functions::flattenSingleValue($not_exact_match);
// index_number must be greater than or equal to 1
if ($index_number < 1) {
return PHPExcel_Calculation_Functions::VALUE();
}
// index_number must be less than or equal to the number of columns in lookup_array
if ((!is_array($lookup_array)) || (empty($lookup_array))) {
return PHPExcel_Calculation_Functions::REF();
} else {
$f = array_keys($lookup_array);
$firstRow = array_pop($f);
if ((!is_array($lookup_array[$firstRow])) || ($index_number > count($lookup_array[$firstRow]))) {
return PHPExcel_Calculation_Functions::REF();
} else {
$columnKeys = array_keys($lookup_array[$firstRow]);
$firstkey = $f[0] - 1;
$returnColumn = $firstkey + $index_number;
$firstColumn = array_shift($f);
}
}
if (!$not_exact_match) {
$firstRowH = asort($lookup_array[$firstColumn]);
}
$rowNumber = $rowValue = false;
foreach ($lookup_array[$firstColumn] as $rowKey => $rowData) {
if ((is_numeric($lookup_value) && is_numeric($rowData) && ($rowData > $lookup_value)) ||
(!is_numeric($lookup_value) && !is_numeric($rowData) && (strtolower($rowData) > strtolower($lookup_value)))) {
break;
}
$rowNumber = $rowKey;
$rowValue = $rowData;
}
if ($rowNumber !== false) {
if ((!$not_exact_match) && ($rowValue != $lookup_value)) {
// if an exact match is required, we have what we need to return an appropriate response
return PHPExcel_Calculation_Functions::NA();
} else {
// otherwise return the appropriate value
return $lookup_array[$returnColumn][$rowNumber];
}
}
return PHPExcel_Calculation_Functions::NA();
}
/**
* LOOKUP
* The LOOKUP function searches for value either from a one-row or one-column range or from an array.
* @param lookup_value The value that you want to match in lookup_array
* @param lookup_vector The range of cells being searched
* @param result_vector The column from which the matching value must be returned
* @return mixed The value of the found cell
*/
public static function LOOKUP($lookup_value, $lookup_vector, $result_vector = null)
{
$lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value);
if (!is_array($lookup_vector)) {
return PHPExcel_Calculation_Functions::NA();
}
$lookupRows = count($lookup_vector);
$l = array_keys($lookup_vector);
$l = array_shift($l);
$lookupColumns = count($lookup_vector[$l]);
if ((($lookupRows == 1) && ($lookupColumns > 1)) || (($lookupRows == 2) && ($lookupColumns != 2))) {
$lookup_vector = self::TRANSPOSE($lookup_vector);
$lookupRows = count($lookup_vector);
$l = array_keys($lookup_vector);
$lookupColumns = count($lookup_vector[array_shift($l)]);
}
if (is_null($result_vector)) {
$result_vector = $lookup_vector;
}
$resultRows = count($result_vector);
$l = array_keys($result_vector);
$l = array_shift($l);
$resultColumns = count($result_vector[$l]);
if ((($resultRows == 1) && ($resultColumns > 1)) || (($resultRows == 2) && ($resultColumns != 2))) {
$result_vector = self::TRANSPOSE($result_vector);
$resultRows = count($result_vector);
$r = array_keys($result_vector);
$resultColumns = count($result_vector[array_shift($r)]);
}
if ($lookupRows == 2) {
$result_vector = array_pop($lookup_vector);
$lookup_vector = array_shift($lookup_vector);
}
if ($lookupColumns != 2) {
foreach ($lookup_vector as &$value) {
if (is_array($value)) {
$k = array_keys($value);
$key1 = $key2 = array_shift($k);
$key2++;
$dataValue1 = $value[$key1];
} else {
$key1 = 0;
$key2 = 1;
$dataValue1 = $value;
}
$dataValue2 = array_shift($result_vector);
if (is_array($dataValue2)) {
$dataValue2 = array_shift($dataValue2);
}
$value = array($key1 => $dataValue1, $key2 => $dataValue2);
}
unset($value);
}
return self::VLOOKUP($lookup_value, $lookup_vector, 2);
}
}

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,651 @@
<?php
/** PHPExcel root directory */
if (!defined('PHPEXCEL_ROOT')) {
/**
* @ignore
*/
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
* PHPExcel_Calculation_TextData
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_Calculation_TextData
{
private static $invalidChars;
private static function unicodeToOrd($c)
{
if (ord($c{0}) >=0 && ord($c{0}) <= 127) {
return ord($c{0});
} elseif (ord($c{0}) >= 192 && ord($c{0}) <= 223) {
return (ord($c{0})-192)*64 + (ord($c{1})-128);
} elseif (ord($c{0}) >= 224 && ord($c{0}) <= 239) {
return (ord($c{0})-224)*4096 + (ord($c{1})-128)*64 + (ord($c{2})-128);
} elseif (ord($c{0}) >= 240 && ord($c{0}) <= 247) {
return (ord($c{0})-240)*262144 + (ord($c{1})-128)*4096 + (ord($c{2})-128)*64 + (ord($c{3})-128);
} elseif (ord($c{0}) >= 248 && ord($c{0}) <= 251) {
return (ord($c{0})-248)*16777216 + (ord($c{1})-128)*262144 + (ord($c{2})-128)*4096 + (ord($c{3})-128)*64 + (ord($c{4})-128);
} elseif (ord($c{0}) >= 252 && ord($c{0}) <= 253) {
return (ord($c{0})-252)*1073741824 + (ord($c{1})-128)*16777216 + (ord($c{2})-128)*262144 + (ord($c{3})-128)*4096 + (ord($c{4})-128)*64 + (ord($c{5})-128);
} elseif (ord($c{0}) >= 254 && ord($c{0}) <= 255) {
// error
return PHPExcel_Calculation_Functions::VALUE();
}
return 0;
}
/**
* CHARACTER
*
* @param string $character Value
* @return int
*/
public static function CHARACTER($character)
{
$character = PHPExcel_Calculation_Functions::flattenSingleValue($character);
if ((!is_numeric($character)) || ($character < 0)) {
return PHPExcel_Calculation_Functions::VALUE();
}
if (function_exists('mb_convert_encoding')) {
return mb_convert_encoding('&#'.intval($character).';', 'UTF-8', 'HTML-ENTITIES');
} else {
return chr(intval($character));
}
}
/**
* TRIMNONPRINTABLE
*
* @param mixed $stringValue Value to check
* @return string
*/
public static function TRIMNONPRINTABLE($stringValue = '')
{
$stringValue = PHPExcel_Calculation_Functions::flattenSingleValue($stringValue);
if (is_bool($stringValue)) {
return ($stringValue) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
}
if (self::$invalidChars == null) {
self::$invalidChars = range(chr(0), chr(31));
}
if (is_string($stringValue) || is_numeric($stringValue)) {
return str_replace(self::$invalidChars, '', trim($stringValue, "\x00..\x1F"));
}
return null;
}
/**
* TRIMSPACES
*
* @param mixed $stringValue Value to check
* @return string
*/
public static function TRIMSPACES($stringValue = '')
{
$stringValue = PHPExcel_Calculation_Functions::flattenSingleValue($stringValue);
if (is_bool($stringValue)) {
return ($stringValue) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
}
if (is_string($stringValue) || is_numeric($stringValue)) {
return trim(preg_replace('/ +/', ' ', trim($stringValue, ' ')), ' ');
}
return null;
}
/**
* ASCIICODE
*
* @param string $characters Value
* @return int
*/
public static function ASCIICODE($characters)
{
if (($characters === null) || ($characters === '')) {
return PHPExcel_Calculation_Functions::VALUE();
}
$characters = PHPExcel_Calculation_Functions::flattenSingleValue($characters);
if (is_bool($characters)) {
if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) {
$characters = (int) $characters;
} else {
$characters = ($characters) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
}
}
$character = $characters;
if ((function_exists('mb_strlen')) && (function_exists('mb_substr'))) {
if (mb_strlen($characters, 'UTF-8') > 1) {
$character = mb_substr($characters, 0, 1, 'UTF-8');
}
return self::unicodeToOrd($character);
} else {
if (strlen($characters) > 0) {
$character = substr($characters, 0, 1);
}
return ord($character);
}
}
/**
* CONCATENATE
*
* @return string
*/
public static function CONCATENATE()
{
$returnValue = '';
// Loop through arguments
$aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args());
foreach ($aArgs as $arg) {
if (is_bool($arg)) {
if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) {
$arg = (int) $arg;
} else {
$arg = ($arg) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
}
}
$returnValue .= $arg;
}
return $returnValue;
}
/**
* DOLLAR
*
* This function converts a number to text using currency format, with the decimals rounded to the specified place.
* The format used is $#,##0.00_);($#,##0.00)..
*
* @param float $value The value to format
* @param int $decimals The number of digits to display to the right of the decimal point.
* If decimals is negative, number is rounded to the left of the decimal point.
* If you omit decimals, it is assumed to be 2
* @return string
*/
public static function DOLLAR($value = 0, $decimals = 2)
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
$decimals = is_null($decimals) ? 0 : PHPExcel_Calculation_Functions::flattenSingleValue($decimals);
// Validate parameters
if (!is_numeric($value) || !is_numeric($decimals)) {
return PHPExcel_Calculation_Functions::NaN();
}
$decimals = floor($decimals);
$mask = '$#,##0';
if ($decimals > 0) {
$mask .= '.' . str_repeat('0', $decimals);
} else {
$round = pow(10, abs($decimals));
if ($value < 0) {
$round = 0-$round;
}
$value = PHPExcel_Calculation_MathTrig::MROUND($value, $round);
}
return PHPExcel_Style_NumberFormat::toFormattedString($value, $mask);
}
/**
* SEARCHSENSITIVE
*
* @param string $needle The string to look for
* @param string $haystack The string in which to look
* @param int $offset Offset within $haystack
* @return string
*/
public static function SEARCHSENSITIVE($needle, $haystack, $offset = 1)
{
$needle = PHPExcel_Calculation_Functions::flattenSingleValue($needle);
$haystack = PHPExcel_Calculation_Functions::flattenSingleValue($haystack);
$offset = PHPExcel_Calculation_Functions::flattenSingleValue($offset);
if (!is_bool($needle)) {
if (is_bool($haystack)) {
$haystack = ($haystack) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
}
if (($offset > 0) && (PHPExcel_Shared_String::CountCharacters($haystack) > $offset)) {
if (PHPExcel_Shared_String::CountCharacters($needle) == 0) {
return $offset;
}
if (function_exists('mb_strpos')) {
$pos = mb_strpos($haystack, $needle, --$offset, 'UTF-8');
} else {
$pos = strpos($haystack, $needle, --$offset);
}
if ($pos !== false) {
return ++$pos;
}
}
}
return PHPExcel_Calculation_Functions::VALUE();
}
/**
* SEARCHINSENSITIVE
*
* @param string $needle The string to look for
* @param string $haystack The string in which to look
* @param int $offset Offset within $haystack
* @return string
*/
public static function SEARCHINSENSITIVE($needle, $haystack, $offset = 1)
{
$needle = PHPExcel_Calculation_Functions::flattenSingleValue($needle);
$haystack = PHPExcel_Calculation_Functions::flattenSingleValue($haystack);
$offset = PHPExcel_Calculation_Functions::flattenSingleValue($offset);
if (!is_bool($needle)) {
if (is_bool($haystack)) {
$haystack = ($haystack) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
}
if (($offset > 0) && (PHPExcel_Shared_String::CountCharacters($haystack) > $offset)) {
if (PHPExcel_Shared_String::CountCharacters($needle) == 0) {
return $offset;
}
if (function_exists('mb_stripos')) {
$pos = mb_stripos($haystack, $needle, --$offset, 'UTF-8');
} else {
$pos = stripos($haystack, $needle, --$offset);
}
if ($pos !== false) {
return ++$pos;
}
}
}
return PHPExcel_Calculation_Functions::VALUE();
}
/**
* FIXEDFORMAT
*
* @param mixed $value Value to check
* @param integer $decimals
* @param boolean $no_commas
* @return boolean
*/
public static function FIXEDFORMAT($value, $decimals = 2, $no_commas = false)
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
$decimals = PHPExcel_Calculation_Functions::flattenSingleValue($decimals);
$no_commas = PHPExcel_Calculation_Functions::flattenSingleValue($no_commas);
// Validate parameters
if (!is_numeric($value) || !is_numeric($decimals)) {
return PHPExcel_Calculation_Functions::NaN();
}
$decimals = floor($decimals);
$valueResult = round($value, $decimals);
if ($decimals < 0) {
$decimals = 0;
}
if (!$no_commas) {
$valueResult = number_format($valueResult, $decimals);
}
return (string) $valueResult;
}
/**
* LEFT
*
* @param string $value Value
* @param int $chars Number of characters
* @return string
*/
public static function LEFT($value = '', $chars = 1)
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
$chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars);
if ($chars < 0) {
return PHPExcel_Calculation_Functions::VALUE();
}
if (is_bool($value)) {
$value = ($value) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
}
if (function_exists('mb_substr')) {
return mb_substr($value, 0, $chars, 'UTF-8');
} else {
return substr($value, 0, $chars);
}
}
/**
* MID
*
* @param string $value Value
* @param int $start Start character
* @param int $chars Number of characters
* @return string
*/
public static function MID($value = '', $start = 1, $chars = null)
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
$start = PHPExcel_Calculation_Functions::flattenSingleValue($start);
$chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars);
if (($start < 1) || ($chars < 0)) {
return PHPExcel_Calculation_Functions::VALUE();
}
if (is_bool($value)) {
$value = ($value) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
}
if (function_exists('mb_substr')) {
return mb_substr($value, --$start, $chars, 'UTF-8');
} else {
return substr($value, --$start, $chars);
}
}
/**
* RIGHT
*
* @param string $value Value
* @param int $chars Number of characters
* @return string
*/
public static function RIGHT($value = '', $chars = 1)
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
$chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars);
if ($chars < 0) {
return PHPExcel_Calculation_Functions::VALUE();
}
if (is_bool($value)) {
$value = ($value) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
}
if ((function_exists('mb_substr')) && (function_exists('mb_strlen'))) {
return mb_substr($value, mb_strlen($value, 'UTF-8') - $chars, $chars, 'UTF-8');
} else {
return substr($value, strlen($value) - $chars);
}
}
/**
* STRINGLENGTH
*
* @param string $value Value
* @return string
*/
public static function STRINGLENGTH($value = '')
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
if (is_bool($value)) {
$value = ($value) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
}
if (function_exists('mb_strlen')) {
return mb_strlen($value, 'UTF-8');
} else {
return strlen($value);
}
}
/**
* LOWERCASE
*
* Converts a string value to upper case.
*
* @param string $mixedCaseString
* @return string
*/
public static function LOWERCASE($mixedCaseString)
{
$mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString);
if (is_bool($mixedCaseString)) {
$mixedCaseString = ($mixedCaseString) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
}
return PHPExcel_Shared_String::StrToLower($mixedCaseString);
}
/**
* UPPERCASE
*
* Converts a string value to upper case.
*
* @param string $mixedCaseString
* @return string
*/
public static function UPPERCASE($mixedCaseString)
{
$mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString);
if (is_bool($mixedCaseString)) {
$mixedCaseString = ($mixedCaseString) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
}
return PHPExcel_Shared_String::StrToUpper($mixedCaseString);
}
/**
* PROPERCASE
*
* Converts a string value to upper case.
*
* @param string $mixedCaseString
* @return string
*/
public static function PROPERCASE($mixedCaseString)
{
$mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString);
if (is_bool($mixedCaseString)) {
$mixedCaseString = ($mixedCaseString) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
}
return PHPExcel_Shared_String::StrToTitle($mixedCaseString);
}
/**
* REPLACE
*
* @param string $oldText String to modify
* @param int $start Start character
* @param int $chars Number of characters
* @param string $newText String to replace in defined position
* @return string
*/
public static function REPLACE($oldText = '', $start = 1, $chars = null, $newText)
{
$oldText = PHPExcel_Calculation_Functions::flattenSingleValue($oldText);
$start = PHPExcel_Calculation_Functions::flattenSingleValue($start);
$chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars);
$newText = PHPExcel_Calculation_Functions::flattenSingleValue($newText);
$left = self::LEFT($oldText, $start-1);
$right = self::RIGHT($oldText, self::STRINGLENGTH($oldText)-($start+$chars)+1);
return $left.$newText.$right;
}
/**
* SUBSTITUTE
*
* @param string $text Value
* @param string $fromText From Value
* @param string $toText To Value
* @param integer $instance Instance Number
* @return string
*/
public static function SUBSTITUTE($text = '', $fromText = '', $toText = '', $instance = 0)
{
$text = PHPExcel_Calculation_Functions::flattenSingleValue($text);
$fromText = PHPExcel_Calculation_Functions::flattenSingleValue($fromText);
$toText = PHPExcel_Calculation_Functions::flattenSingleValue($toText);
$instance = floor(PHPExcel_Calculation_Functions::flattenSingleValue($instance));
if ($instance == 0) {
if (function_exists('mb_str_replace')) {
return mb_str_replace($fromText, $toText, $text);
} else {
return str_replace($fromText, $toText, $text);
}
} else {
$pos = -1;
while ($instance > 0) {
if (function_exists('mb_strpos')) {
$pos = mb_strpos($text, $fromText, $pos+1, 'UTF-8');
} else {
$pos = strpos($text, $fromText, $pos+1);
}
if ($pos === false) {
break;
}
--$instance;
}
if ($pos !== false) {
if (function_exists('mb_strlen')) {
return self::REPLACE($text, ++$pos, mb_strlen($fromText, 'UTF-8'), $toText);
} else {
return self::REPLACE($text, ++$pos, strlen($fromText), $toText);
}
}
}
return $text;
}
/**
* RETURNSTRING
*
* @param mixed $testValue Value to check
* @return boolean
*/
public static function RETURNSTRING($testValue = '')
{
$testValue = PHPExcel_Calculation_Functions::flattenSingleValue($testValue);
if (is_string($testValue)) {
return $testValue;
}
return null;
}
/**
* TEXTFORMAT
*
* @param mixed $value Value to check
* @param string $format Format mask to use
* @return boolean
*/
public static function TEXTFORMAT($value, $format)
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
$format = PHPExcel_Calculation_Functions::flattenSingleValue($format);
if ((is_string($value)) && (!is_numeric($value)) && PHPExcel_Shared_Date::isDateTimeFormatCode($format)) {
$value = PHPExcel_Calculation_DateTime::DATEVALUE($value);
}
return (string) PHPExcel_Style_NumberFormat::toFormattedString($value, $format);
}
/**
* VALUE
*
* @param mixed $value Value to check
* @return boolean
*/
public static function VALUE($value = '')
{
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
if (!is_numeric($value)) {
$numberValue = str_replace(
PHPExcel_Shared_String::getThousandsSeparator(),
'',
trim($value, " \t\n\r\0\x0B" . PHPExcel_Shared_String::getCurrencyCode())
);
if (is_numeric($numberValue)) {
return (float) $numberValue;
}
$dateSetting = PHPExcel_Calculation_Functions::getReturnDateType();
PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
if (strpos($value, ':') !== false) {
$timeValue = PHPExcel_Calculation_DateTime::TIMEVALUE($value);
if ($timeValue !== PHPExcel_Calculation_Functions::VALUE()) {
PHPExcel_Calculation_Functions::setReturnDateType($dateSetting);
return $timeValue;
}
}
$dateValue = PHPExcel_Calculation_DateTime::DATEVALUE($value);
if ($dateValue !== PHPExcel_Calculation_Functions::VALUE()) {
PHPExcel_Calculation_Functions::setReturnDateType($dateSetting);
return $dateValue;
}
PHPExcel_Calculation_Functions::setReturnDateType($dateSetting);
return PHPExcel_Calculation_Functions::VALUE();
}
return (float) $value;
}
}

View File

@@ -0,0 +1,111 @@
<?php
/**
* PHPExcel_Calculation_Token_Stack
*
* Copyright (c) 2006 - 2015 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Calculation
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version ##VERSION##, ##DATE##
*/
class PHPExcel_Calculation_Token_Stack
{
/**
* The parser stack for formulae
*
* @var mixed[]
*/
private $stack = array();
/**
* Count of entries in the parser stack
*
* @var integer
*/
private $count = 0;
/**
* Return the number of entries on the stack
*
* @return integer
*/
public function count()
{
return $this->count;
}
/**
* Push a new entry onto the stack
*
* @param mixed $type
* @param mixed $value
* @param mixed $reference
*/
public function push($type, $value, $reference = null)
{
$this->stack[$this->count++] = array(
'type' => $type,
'value' => $value,
'reference' => $reference
);
if ($type == 'Function') {
$localeFunction = PHPExcel_Calculation::localeFunc($value);
if ($localeFunction != $value) {
$this->stack[($this->count - 1)]['localeValue'] = $localeFunction;
}
}
}
/**
* Pop the last entry from the stack
*
* @return mixed
*/
public function pop()
{
if ($this->count > 0) {
return $this->stack[--$this->count];
}
return null;
}
/**
* Return an entry from the stack without removing it
*
* @param integer $n number indicating how far back in the stack we want to look
* @return mixed
*/
public function last($n = 1)
{
if ($this->count - $n < 0) {
return null;
}
return $this->stack[$this->count - $n];
}
/**
* Clear the stack
*/
public function clear()
{
$this->stack = array();
$this->count = 0;
}
}

View File

@@ -0,0 +1,351 @@
ABS
ACCRINT
ACCRINTM
ACOS
ACOSH
ADDRESS
AMORDEGRC
AMORLINC
AND
AREAS
ASC
ASIN
ASINH
ATAN
ATAN2
ATANH
AVEDEV
AVERAGE
AVERAGEA
AVERAGEIF
AVERAGEIFS
BAHTTEXT
BESSELI
BESSELJ
BESSELK
BESSELY
BETADIST
BETAINV
BIN2DEC
BIN2HEX
BIN2OCT
BINOMDIST
CEILING
CELL
CHAR
CHIDIST
CHIINV
CHITEST
CHOOSE
CLEAN
CODE
COLUMN
COLUMNS
COMBIN
COMPLEX
CONCATENATE
CONFIDENCE
CONVERT
CORREL
COS
COSH
COUNT
COUNTA
COUNTBLANK
COUNTIF
COUNTIFS
COUPDAYBS
COUPDAYBS
COUPDAYSNC
COUPNCD
COUPNUM
COUPPCD
COVAR
CRITBINOM
CUBEKPIMEMBER
CUBEMEMBER
CUBEMEMBERPROPERTY
CUBERANKEDMEMBER
CUBESET
CUBESETCOUNT
CUBEVALUE
CUMIPMT
CUMPRINC
DATE
DATEDIF
DATEVALUE
DAVERAGE
DAY
DAYS360
DB
DCOUNT
DCOUNTA
DDB
DEC2BIN
DEC2HEX
DEC2OCT
DEGREES
DELTA
DEVSQ
DGET
DISC
DMAX
DMIN
DOLLAR
DOLLARDE
DOLLARFR
DPRODUCT
DSTDEV
DSTDEVP
DSUM
DURATION
DVAR
DVARP
EDATE
EFFECT
EOMONTH
ERF
ERFC
ERROR.TYPE
EVEN
EXACT
EXP
EXPONDIST
FACT
FACTDOUBLE
FALSE
FDIST
FIND
FINDB
FINV
FISHER
FISHERINV
FIXED
FLOOR
FORECAST
FREQUENCY
FTEST
FV
FVSCHEDULE
GAMAMDIST
GAMMAINV
GAMMALN
GCD
GEOMEAN
GESTEP
GETPIVOTDATA
GROWTH
HARMEAN
HEX2BIN
HEX2OCT
HLOOKUP
HOUR
HYPERLINK
HYPGEOMDIST
IF
IFERROR
IMABS
IMAGINARY
IMARGUMENT
IMCONJUGATE
IMCOS
IMEXP
IMLN
IMLOG10
IMLOG2
IMPOWER
IMPRODUCT
IMREAL
IMSIN
IMSQRT
IMSUB
IMSUM
INDEX
INDIRECT
INFO
INT
INTERCEPT
INTRATE
IPMT
IRR
ISBLANK
ISERR
ISERROR
ISEVEN
ISLOGICAL
ISNA
ISNONTEXT
ISNUMBER
ISODD
ISPMT
ISREF
ISTEXT
JIS
KURT
LARGE
LCM
LEFT
LEFTB
LEN
LENB
LINEST
LN
LOG
LOG10
LOGEST
LOGINV
LOGNORMDIST
LOOKUP
LOWER
MATCH
MAX
MAXA
MDETERM
MDURATION
MEDIAN
MID
MIDB
MIN
MINA
MINUTE
MINVERSE
MIRR
MMULT
MOD
MODE
MONTH
MROUND
MULTINOMIAL
N
NA
NEGBINOMDIST
NETWORKDAYS
NOMINAL
NORMDIST
NORMINV
NORMSDIST
NORMSINV
NOT
NOW
NPER
NPV
OCT2BIN
OCT2DEC
OCT2HEX
ODD
ODDFPRICE
ODDFYIELD
ODDLPRICE
ODDLYIELD
OFFSET
OR
PEARSON
PERCENTILE
PERCENTRANK
PERMUT
PHONETIC
PI
PMT
POISSON
POWER
PPMT
PRICE
PRICEDISC
PRICEMAT
PROB
PRODUCT
PROPER
PV
QUARTILE
QUOTIENT
RADIANS
RAND
RANDBETWEEN
RANK
RATE
RECEIVED
REPLACE
REPLACEB
REPT
RIGHT
RIGHTB
ROMAN
ROUND
ROUNDDOWN
ROUNDUP
ROW
ROWS
RSQ
RTD
SEARCH
SEARCHB
SECOND
SERIESSUM
SIGN
SIN
SINH
SKEW
SLN
SLOPE
SMALL
SQRT
SQRTPI
STANDARDIZE
STDEV
STDEVA
STDEVP
STDEVPA
STEYX
SUBSTITUTE
SUBTOTAL
SUM
SUMIF
SUMIFS
SUMPRODUCT
SUMSQ
SUMX2MY2
SUMX2PY2
SUMXMY2
SYD
T
TAN
TANH
TBILLEQ
TBILLPRICE
TBILLYIELD
TDIST
TEXT
TIME
TIMEVALUE
TINV
TODAY
TRANSPOSE
TREND
TRIM
TRIMMEAN
TRUE
TRUNC
TTEST
TYPE
UPPER
USDOLLAR
VALUE
VAR
VARA
VARP
VARPA
VDB
VERSION
VLOOKUP
WEEKDAY
WEEKNUM
WEIBULL
WORKDAY
XIRR
XNPV
YEAR
YEARFRAC
YIELD
YIELDDISC
YIELDMAT
ZTEST

View File

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More