Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f44b9ec8dd | ||
|
|
ad4fe1cc29 | ||
|
|
8fbf8f2152 | ||
|
|
74309fc922 | ||
|
|
a042ee67ec | ||
|
|
41ebd61c8e | ||
|
|
111781b327 | ||
|
|
74e448bf5d | ||
|
|
66b3f006e6 | ||
|
|
40df433580 | ||
|
|
499c52516e | ||
|
|
e94a365d71 | ||
|
|
e88f5f8a1a | ||
|
|
c0ce41ed2f | ||
|
|
944d5f1f88 | ||
|
|
47871d9551 | ||
|
|
46e3bf439e | ||
|
|
b858a62d42 | ||
|
|
6da42b4842 | ||
|
|
b7b128f9a7 | ||
|
|
7a9f7ec36e | ||
|
|
a7218a6666 | ||
|
|
87dc692faa | ||
|
|
042180b805 | ||
|
|
49a22ebdf0 | ||
|
|
f1d4b3915e | ||
|
|
b4bec17934 | ||
|
|
24db01729d | ||
|
|
b4fc0db4de | ||
|
|
c00fb95319 | ||
|
|
142395591e | ||
|
|
235924f80b | ||
|
|
8f8034556a | ||
|
|
f12a467099 | ||
|
|
91c2c32c0c | ||
|
|
aacff040bb | ||
|
|
e889b856bc | ||
|
|
548df6f408 | ||
|
|
2ca9eaa083 |
5
.eslintrc
Normal file
5
.eslintrc
Normal file
@@ -0,0 +1,5 @@
|
||||
// Use this file as a starting point for your project's .eslintrc.
|
||||
// Copy this file, and add rule overrides as needed.
|
||||
{
|
||||
"extends": "airbnb"
|
||||
}
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -13,6 +13,8 @@ keys.dev.pub
|
||||
/app/icehrm.key
|
||||
/app/data/*.*
|
||||
/app/data/keys/*
|
||||
!/app/data/index.php
|
||||
!/app/data/.htaccess
|
||||
icehrm.key
|
||||
cache.properties
|
||||
node_modules/*
|
||||
|
||||
2
app/data/.htaccess
Normal file
2
app/data/.htaccess
Normal file
@@ -0,0 +1,2 @@
|
||||
order deny,allow
|
||||
deny from all
|
||||
1
app/data/index.php
Normal file
1
app/data/index.php
Normal file
@@ -0,0 +1 @@
|
||||
<?php
|
||||
3
app/fileupload-new.php
Normal file
3
app/fileupload-new.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
include ('config.php');
|
||||
include (APP_BASE_PATH.'fileupload-new.php');
|
||||
@@ -23,7 +23,7 @@ if($group == 'admin' || $group == 'modules'){
|
||||
$moduleName = $name;
|
||||
$moduleGroup = 'extensions';
|
||||
$extensionIndex = APP_BASE_PATH.'/../extensions/'.$name.'/web/index.php';
|
||||
include $extensionIndex;
|
||||
include APP_BASE_PATH.'extensions/wrapper.php';
|
||||
}else{
|
||||
exit();
|
||||
}
|
||||
|
||||
@@ -19,7 +19,10 @@ $isConfigFileWriteable = is_writable(CLIENT_APP_PATH."config.php");
|
||||
error_log("Config writable ".$isConfigFileWriteable);
|
||||
error_log("Config exists ".file_exists(CLIENT_APP_PATH."config.php"));
|
||||
if(!$isConfigFileWriteable){
|
||||
$errorMap[] = array("important","Configuration file [".CLIENT_APP_PATH."config.php] is not writable","Make this file writable",array("sudo touch ".CLIENT_APP_PATH."config.php","sudo chmod 777 ".CLIENT_APP_PATH."config.php"));
|
||||
$errorMap[] = array("important","Configuration file [".CLIENT_APP_PATH."config.php] is not writable","Make this file writable",array(
|
||||
"sudo touch ".CLIENT_APP_PATH."config.php","sudo chmod 755 ".CLIENT_APP_PATH."config.php",
|
||||
"sudo chown -R ".shell_exec('whoami')." ".CLIENT_APP_PATH,
|
||||
));
|
||||
}
|
||||
|
||||
$isConfigSampleFileExists = file_exists(CLIENT_APP_PATH."config.sample.php");
|
||||
@@ -48,7 +51,7 @@ if(!$isDataFolderExists){
|
||||
unlink(CLIENT_APP_PATH."data/test.txt");
|
||||
}
|
||||
if(!$isDataFolderWritable){
|
||||
$errorMap[] = array("important","Data folder is not writable","Provide wirte permission to the web server user to ".CLIENT_APP_PATH."data",array("sudo chmod 777 ".CLIENT_APP_PATH."data"));
|
||||
$errorMap[] = array("important","Data folder is not writable","Provide wirte permission to the web server user to ".CLIENT_APP_PATH."data",array("sudo chmod 755 ".CLIENT_APP_PATH."data"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
2
core/.htaccess
Normal file
2
core/.htaccess
Normal file
@@ -0,0 +1,2 @@
|
||||
order deny,allow
|
||||
deny from all
|
||||
59
core/admin/connection/index.php
Normal file
59
core/admin/connection/index.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
use Classes\StatsHelper;
|
||||
use Connection\Common\ConnectionService;
|
||||
|
||||
$moduleName = 'connection';
|
||||
$moduleGroup = 'admin';
|
||||
define('MODULE_PATH',dirname(__FILE__));
|
||||
include APP_BASE_PATH.'header.php';
|
||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
|
||||
$isIceHrmPro = false;
|
||||
if (class_exists('\\Classes\\ProVersion')) {
|
||||
$data = \Classes\ProVersion::$data;
|
||||
$isIceHrmPro = true;
|
||||
$data = json_decode($data, true);
|
||||
}
|
||||
|
||||
$employeeCount = StatsHelper::getEmployeeCount();
|
||||
$userCount = StatsHelper::getUserCount();
|
||||
$connectionService = new ConnectionService();
|
||||
?><div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
<li class="active"><a id="tabConnection" href="#tabConnection"><?=t('Connection')?></a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="tabConnection">
|
||||
<div class="reviewBlock" data-content="List">
|
||||
<div id="connectionData"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="dataGroup"></div>
|
||||
<?php
|
||||
$moduleData = [
|
||||
'user_level' => $user->user_level,
|
||||
'components' => [
|
||||
'employeeCount' => [
|
||||
'isIceHrmPro' => $isIceHrmPro,
|
||||
'count' => $employeeCount,
|
||||
'allowed' => $isIceHrmPro ? intval($data['employees']) : 'N/A',
|
||||
'validUntil' => $data['licenseActivated'],
|
||||
'licenseId' => $data['key'],
|
||||
],
|
||||
'systemData' => [
|
||||
'data' => $connectionService->getSystemReport(),
|
||||
'issues' => $connectionService->getSystemErrors(),
|
||||
],
|
||||
]
|
||||
];
|
||||
?>
|
||||
<script>
|
||||
initAdminConnection(<?=json_encode($moduleData)?>);
|
||||
</script>
|
||||
<?php include APP_BASE_PATH.'footer.php';?>
|
||||
|
||||
12
core/admin/connection/meta.json
Normal file
12
core/admin/connection/meta.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"label": "Ice Connect",
|
||||
"menu": "System",
|
||||
"order": "9",
|
||||
"icon": "fa-wifi",
|
||||
"user_levels": [
|
||||
"Admin"
|
||||
],
|
||||
"permissions": [],
|
||||
"model_namespace": "\\Connection\\Common\\Model",
|
||||
"manager": "\\Connection\\Admin\\Api\\ConnectionAdminManager"
|
||||
}
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
use Classes\ModuleBuilder\ModuleBuilder;
|
||||
use Classes\ModuleBuilder\ModuleTab;
|
||||
use Classes\UIManager;
|
||||
|
||||
$moduleName = 'settings';
|
||||
$moduleGroup = 'admin';
|
||||
@@ -32,7 +33,7 @@ if ( $notCloud ) {
|
||||
'EmailSetting', 'Setting', 'Email', 'SettingAdapter', '{"category":"Email"}', 'name', false, $options1
|
||||
));
|
||||
}
|
||||
if(!defined('LEAVE_ENABLED') || LDAP_ENABLED == true) {
|
||||
if(defined('LEAVE_ENABLED') && LEAVE_ENABLED == true) {
|
||||
$moduleBuilder->addModuleOrGroup(new ModuleTab(
|
||||
'LeaveSetting', 'Setting', 'Leave', 'SettingAdapter', '{"category":"Leave"}', 'name', false, $options1
|
||||
));
|
||||
@@ -58,7 +59,7 @@ if(!defined('SAML_ENABLED') || SAML_ENABLED == true){
|
||||
$moduleBuilder->addModuleOrGroup(new ModuleTab(
|
||||
'OtherSetting','Setting','Other','SettingAdapter','{"category":["Projects","Recruitment","Notifications","Expense","Travel","Api","Overtime"]}','name',false,$options1
|
||||
));
|
||||
echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
|
||||
echo UIManager::getInstance()->renderModule($moduleBuilder);
|
||||
?>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
@@ -6,8 +6,6 @@ include("server.includes.inc.php");
|
||||
|
||||
if(\Classes\SettingsManager::getInstance()->getSetting('Api: REST Api Enabled') == '1') {
|
||||
|
||||
\Utils\LogManager::getInstance()->info("Request: " . $_REQUEST);
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
||||
http_response_code(200);
|
||||
exit();
|
||||
|
||||
@@ -13,10 +13,10 @@ if(!defined('HOME_LINK_OTHERS')){
|
||||
}
|
||||
|
||||
//Version
|
||||
define('VERSION', '29.0.0.OS');
|
||||
define('CACHE_VALUE', '29.0.0.OS.2020-04021509');
|
||||
define('VERSION_NUMBER', '290000');
|
||||
define('VERSION_DATE', '02/04/2021');
|
||||
define('VERSION', '30.0.0.OS');
|
||||
define('CACHE_VALUE', '30.0.0.OS.2021-06261009');
|
||||
define('VERSION_NUMBER', '300000');
|
||||
define('VERSION_DATE', '26/06/2021');
|
||||
|
||||
if(!defined('CONTACT_EMAIL')){define('CONTACT_EMAIL','icehrm@gamonoid.com');}
|
||||
if(!defined('KEY_PREFIX')){define('KEY_PREFIX','IceHrm');}
|
||||
|
||||
@@ -139,7 +139,7 @@ $result = $uploader->handleUpload(CLIENT_BASE_PATH.'data/',$saveFileName);
|
||||
$uploadFilesToS3 = \Classes\SettingsManager::getInstance()->getSetting("Files: Upload Files to S3");
|
||||
$uploadFilesToS3Key = \Classes\SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload");
|
||||
$uploadFilesToS3Secret = \Classes\SettingsManager::getInstance()->getSetting(
|
||||
"Files: Amazone S3 Secret for File Upload"
|
||||
"Files: Amazon S3 Secret for File Upload"
|
||||
);
|
||||
$s3Bucket = \Classes\SettingsManager::getInstance()->getSetting("Files: S3 Bucket");
|
||||
$s3WebUrl = \Classes\SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
|
||||
@@ -188,7 +188,7 @@ if($result['success'] == 1){
|
||||
if($uploadedToS3){
|
||||
$result['data'] = $file_url;
|
||||
}else{
|
||||
$result['data'] = CLIENT_BASE_URL.'data/'.$result['filename'];
|
||||
$result['data'] = \Classes\FileService::getInstance()->getLocalSecureUrl($result['filename']);
|
||||
}
|
||||
$result['data'] .= "|".$saveFileName;
|
||||
$result['data'] .= "|".$file->id;
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
modJsList[prop].setUser(<?=json_encode(\Classes\BaseService::getInstance()->cleanUpUser($user))?>);
|
||||
modJsList[prop].initSourceMappings();
|
||||
modJsList[prop].setBaseUrl('<?=BASE_URL?>');
|
||||
modJsList[prop].setClientUrl('<?=CLIENT_BASE_URL?>');
|
||||
modJsList[prop].setCurrentProfile(<?=json_encode($activeProfile)?>);
|
||||
modJsList[prop].setInstanceId('<?=\Classes\BaseService::getInstance()->getInstanceId()?>');
|
||||
modJsList[prop].setGoogleAnalytics(ga);
|
||||
@@ -146,7 +147,9 @@
|
||||
|
||||
|
||||
</script>
|
||||
<?php include 'popups.php';?>
|
||||
<?php
|
||||
include 'popups.php';
|
||||
?>
|
||||
<script src="<?=BASE_URL?>js/bootstrap-datatable.js"></script>
|
||||
<div id="jt" t="<?=$jwtService->create(3600)?>"></div>
|
||||
</body>
|
||||
|
||||
171
core/lib/fpdf/changelog.htm
Normal file
171
core/lib/fpdf/changelog.htm
Normal file
@@ -0,0 +1,171 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Changelog</title>
|
||||
<link type="text/css" rel="stylesheet" href="fpdf.css">
|
||||
<style type="text/css">
|
||||
dd {margin:1em 0 1em 1em}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Changelog</h1>
|
||||
<dl>
|
||||
<dt><strong>v1.83</strong> (2021-04-18)</dt>
|
||||
<dd>
|
||||
- Fixed an issue related to annotations.<br>
|
||||
</dd>
|
||||
<dt><strong>v1.82</strong> (2019-12-07)</dt>
|
||||
<dd>
|
||||
- Removed a deprecation notice under PHP 7.4.<br>
|
||||
</dd>
|
||||
<dt><strong>v1.81</strong> (2015-12-20)</dt>
|
||||
<dd>
|
||||
- Added GetPageWidth() and GetPageHeight().<br>
|
||||
- Fixed a bug in SetXY().<br>
|
||||
</dd>
|
||||
<dt><strong>v1.8</strong> (2015-11-29)</dt>
|
||||
<dd>
|
||||
- PHP 5.1.0 or higher is now required.<br>
|
||||
- The MakeFont utility now subsets fonts, which can greatly reduce font sizes.<br>
|
||||
- Added ToUnicode CMaps to improve text extraction.<br>
|
||||
- Added a parameter to AddPage() to rotate the page.<br>
|
||||
- Added a parameter to SetY() to indicate whether the x position should be reset or not.<br>
|
||||
- Added a parameter to Output() to specify the encoding of the name, and special characters are now properly encoded. Additionally the order of the first two parameters was reversed to be more logical (however the old order is still supported for compatibility).<br>
|
||||
- The Error() method now throws an exception.<br>
|
||||
- Adding contents before the first AddPage() or after Close() now raises an error.<br>
|
||||
- Outputting text with no font selected now raises an error.<br>
|
||||
</dd>
|
||||
<dt><strong>v1.7</strong> (2011-06-18)</dt>
|
||||
<dd>
|
||||
- The MakeFont utility has been completely rewritten and doesn't depend on ttf2pt1 anymore.<br>
|
||||
- Alpha channel is now supported for PNGs.<br>
|
||||
- When inserting an image, it's now possible to specify its resolution.<br>
|
||||
- Default resolution for images was increased from 72 to 96 dpi.<br>
|
||||
- When inserting a GIF image, no temporary file is used anymore if the PHP version is 5.1 or higher.<br>
|
||||
- When output buffering is enabled and the PDF is about to be sent, the buffer is now cleared if it contains only a UTF-8 BOM and/or whitespace (instead of throwing an error).<br>
|
||||
- Symbol and ZapfDingbats fonts now support underline style.<br>
|
||||
- Custom page sizes are now checked to ensure that width is smaller than height.<br>
|
||||
- Standard font files were changed to use the same format as user fonts.<br>
|
||||
- A bug in the embedding of Type1 fonts was fixed.<br>
|
||||
- A bug related to SetDisplayMode() and the current locale was fixed.<br>
|
||||
- A display issue occurring with the Adobe Reader X plug-in was fixed.<br>
|
||||
- An issue related to transparency with some versions of Adobe Reader was fixed.<br>
|
||||
- The Content-Length header was removed because it caused an issue when the HTTP server applies compression.<br>
|
||||
</dd>
|
||||
<dt><strong>v1.6</strong> (2008-08-03)</dt>
|
||||
<dd>
|
||||
- PHP 4.3.10 or higher is now required.<br>
|
||||
- GIF image support.<br>
|
||||
- Images can now trigger page breaks.<br>
|
||||
- Possibility to have different page formats in a single document.<br>
|
||||
- Document properties (author, creator, keywords, subject and title) can now be specified in UTF-8.<br>
|
||||
- Fixed a bug: when a PNG was inserted through a URL, an error sometimes occurred.<br>
|
||||
- An automatic page break in Header() doesn't cause an infinite loop any more.<br>
|
||||
- Removed some warning messages appearing with recent PHP versions.<br>
|
||||
- Added HTTP headers to reduce problems with IE.<br>
|
||||
</dd>
|
||||
<dt><strong>v1.53</strong> (2004-12-31)</dt>
|
||||
<dd>
|
||||
- When the font subdirectory is in the same directory as fpdf.php, it's no longer necessary to define the FPDF_FONTPATH constant.<br>
|
||||
- The array $HTTP_SERVER_VARS is no longer used. It could cause trouble on PHP5-based configurations with the register_long_arrays option disabled.<br>
|
||||
- Fixed a problem related to Type1 font embedding which caused trouble to some PDF processors.<br>
|
||||
- The file name sent to the browser could not contain a space character.<br>
|
||||
- The Cell() method could not print the number 0 (you had to pass the string '0').<br>
|
||||
</dd>
|
||||
<dt><strong>v1.52</strong> (2003-12-30)</dt>
|
||||
<dd>
|
||||
- Image() now displays the image at 72 dpi if no dimension is given.<br>
|
||||
- Output() takes a string as second parameter to indicate destination.<br>
|
||||
- Open() is now called automatically by AddPage().<br>
|
||||
- Inserting remote JPEG images doesn't generate an error any longer.<br>
|
||||
- Decimal separator is forced to dot in the constructor.<br>
|
||||
- Added several encodings (Turkish, Thai, Hebrew, Ukrainian and Vietnamese).<br>
|
||||
- The last line of a right-aligned MultiCell() was not correctly aligned if it was terminated by a carriage return.<br>
|
||||
- No more error message about already sent headers when outputting the PDF to the standard output from the command line.<br>
|
||||
- The underlining was going too far for text containing characters \, ( or ).<br>
|
||||
- $HTTP_ENV_VARS has been replaced by $HTTP_SERVER_VARS.<br>
|
||||
</dd>
|
||||
<dt><strong>v1.51</strong> (2002-08-03)</dt>
|
||||
<dd>
|
||||
- Type1 font support.<br>
|
||||
- Added Baltic encoding.<br>
|
||||
- The class now works internally in points with the origin at the bottom in order to avoid two bugs occurring with Acrobat 5:<br> * The line thickness was too large when printed under Windows 98 SE and ME.<br> * TrueType fonts didn't appear immediately inside the plug-in (a substitution font was used), one had to cause a window refresh to make them show up.<br>
|
||||
- It's no longer necessary to set the decimal separator as dot to produce valid documents.<br>
|
||||
- The clickable area in a cell was always on the left independently from the text alignment.<br>
|
||||
- JPEG images in CMYK mode appeared in inverted colors.<br>
|
||||
- Transparent PNG images in grayscale or true color mode were incorrectly handled.<br>
|
||||
- Adding new fonts now works correctly even with the magic_quotes_runtime option set to on.<br>
|
||||
</dd>
|
||||
<dt><strong>v1.5</strong> (2002-05-28)</dt>
|
||||
<dd>
|
||||
- TrueType font (AddFont()) and encoding support (Western and Eastern Europe, Cyrillic and Greek).<br>
|
||||
- Added Write() method.<br>
|
||||
- Added underlined style.<br>
|
||||
- Internal and external link support (AddLink(), SetLink(), Link()).<br>
|
||||
- Added right margin management and methods SetRightMargin(), SetTopMargin().<br>
|
||||
- Modification of SetDisplayMode() to select page layout.<br>
|
||||
- The border parameter of MultiCell() now lets choose borders to draw as Cell().<br>
|
||||
- When a document contains no page, Close() now calls AddPage() instead of causing a fatal error.<br>
|
||||
</dd>
|
||||
<dt><strong>v1.41</strong> (2002-03-13)</dt>
|
||||
<dd>
|
||||
- Fixed SetDisplayMode() which no longer worked (the PDF viewer used its default display).<br>
|
||||
</dd>
|
||||
<dt><strong>v1.4</strong> (2002-03-02)</dt>
|
||||
<dd>
|
||||
- PHP3 is no longer supported.<br>
|
||||
- Page compression (SetCompression()).<br>
|
||||
- Choice of page format and possibility to change orientation inside document.<br>
|
||||
- Added AcceptPageBreak() method.<br>
|
||||
- Ability to print the total number of pages (AliasNbPages()).<br>
|
||||
- Choice of cell borders to draw.<br>
|
||||
- New mode for Cell(): the current position can now move under the cell.<br>
|
||||
- Ability to include an image by specifying height only (width is calculated automatically).<br>
|
||||
- Fixed a bug: when a justified line triggered a page break, the footer inherited the corresponding word spacing.<br>
|
||||
</dd>
|
||||
<dt><strong>v1.31</strong> (2002-01-12)</dt>
|
||||
<dd>
|
||||
- Fixed a bug in drawing frame with MultiCell(): the last line always started from the left margin.<br>
|
||||
- Removed Expires HTTP header (gives trouble in some situations).<br>
|
||||
- Added Content-disposition HTTP header (seems to help in some situations).<br>
|
||||
</dd>
|
||||
<dt><strong>v1.3</strong> (2001-12-03)</dt>
|
||||
<dd>
|
||||
- Line break and text justification support (MultiCell()).<br>
|
||||
- Color support (SetDrawColor(), SetFillColor(), SetTextColor()). Possibility to draw filled rectangles and paint cell background.<br>
|
||||
- A cell whose width is declared null extends up to the right margin of the page.<br>
|
||||
- Line width is now retained from page to page and defaults to 0.2 mm.<br>
|
||||
- Added SetXY() method.<br>
|
||||
- Fixed a passing by reference done in a deprecated manner for PHP4.<br>
|
||||
</dd>
|
||||
<dt><strong>v1.2</strong> (2001-11-11)</dt>
|
||||
<dd>
|
||||
- Added font metric files and GetStringWidth() method.<br>
|
||||
- Centering and right-aligning text in cells.<br>
|
||||
- Display mode control (SetDisplayMode()).<br>
|
||||
- Added methods to set document properties (SetAuthor(), SetCreator(), SetKeywords(), SetSubject(), SetTitle()).<br>
|
||||
- Possibility to force PDF download by browser.<br>
|
||||
- Added SetX() and GetX() methods.<br>
|
||||
- During automatic page break, current abscissa is now retained.<br>
|
||||
</dd>
|
||||
<dt><strong>v1.11</strong> (2001-10-20)</dt>
|
||||
<dd>
|
||||
- PNG support doesn't require PHP4/zlib any more. Data are now put directly into PDF without any decompression/recompression stage.<br>
|
||||
- Image insertion now works correctly even with magic_quotes_runtime option set to on.<br>
|
||||
</dd>
|
||||
<dt><strong>v1.1</strong> (2001-10-07)</dt>
|
||||
<dd>
|
||||
- JPEG and PNG image support.<br>
|
||||
</dd>
|
||||
<dt><strong>v1.01</strong> (2001-10-03)</dt>
|
||||
<dd>
|
||||
- Fixed a bug involving page break: in case when Header() doesn't specify a font, the one from previous page was not restored and produced an incorrect document.<br>
|
||||
</dd>
|
||||
<dt><strong>v1.0</strong> (2001-09-17)</dt>
|
||||
<dd>
|
||||
- First version.<br>
|
||||
</dd>
|
||||
</dl>
|
||||
</body>
|
||||
</html>
|
||||
10
core/lib/fpdf/font/courier.php
Normal file
10
core/lib/fpdf/font/courier.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
$type = 'Core';
|
||||
$name = 'Courier';
|
||||
$up = -100;
|
||||
$ut = 50;
|
||||
for($i=0;$i<=255;$i++)
|
||||
$cw[chr($i)] = 600;
|
||||
$enc = 'cp1252';
|
||||
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
|
||||
?>
|
||||
10
core/lib/fpdf/font/courierb.php
Normal file
10
core/lib/fpdf/font/courierb.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
$type = 'Core';
|
||||
$name = 'Courier-Bold';
|
||||
$up = -100;
|
||||
$ut = 50;
|
||||
for($i=0;$i<=255;$i++)
|
||||
$cw[chr($i)] = 600;
|
||||
$enc = 'cp1252';
|
||||
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
|
||||
?>
|
||||
10
core/lib/fpdf/font/courierbi.php
Normal file
10
core/lib/fpdf/font/courierbi.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
$type = 'Core';
|
||||
$name = 'Courier-BoldOblique';
|
||||
$up = -100;
|
||||
$ut = 50;
|
||||
for($i=0;$i<=255;$i++)
|
||||
$cw[chr($i)] = 600;
|
||||
$enc = 'cp1252';
|
||||
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
|
||||
?>
|
||||
10
core/lib/fpdf/font/courieri.php
Normal file
10
core/lib/fpdf/font/courieri.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
$type = 'Core';
|
||||
$name = 'Courier-Oblique';
|
||||
$up = -100;
|
||||
$ut = 50;
|
||||
for($i=0;$i<=255;$i++)
|
||||
$cw[chr($i)] = 600;
|
||||
$enc = 'cp1252';
|
||||
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
|
||||
?>
|
||||
21
core/lib/fpdf/font/helvetica.php
Normal file
21
core/lib/fpdf/font/helvetica.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$type = 'Core';
|
||||
$name = 'Helvetica';
|
||||
$up = -100;
|
||||
$ut = 50;
|
||||
$cw = array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
|
||||
'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
|
||||
chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
|
||||
chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
$enc = 'cp1252';
|
||||
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
|
||||
?>
|
||||
21
core/lib/fpdf/font/helveticab.php
Normal file
21
core/lib/fpdf/font/helveticab.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$type = 'Core';
|
||||
$name = 'Helvetica-Bold';
|
||||
$up = -100;
|
||||
$ut = 50;
|
||||
$cw = array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
|
||||
'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
|
||||
'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
|
||||
chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
|
||||
$enc = 'cp1252';
|
||||
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
|
||||
?>
|
||||
21
core/lib/fpdf/font/helveticabi.php
Normal file
21
core/lib/fpdf/font/helveticabi.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$type = 'Core';
|
||||
$name = 'Helvetica-BoldOblique';
|
||||
$up = -100;
|
||||
$ut = 50;
|
||||
$cw = array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
|
||||
'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
|
||||
'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
|
||||
chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
|
||||
$enc = 'cp1252';
|
||||
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
|
||||
?>
|
||||
21
core/lib/fpdf/font/helveticai.php
Normal file
21
core/lib/fpdf/font/helveticai.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$type = 'Core';
|
||||
$name = 'Helvetica-Oblique';
|
||||
$up = -100;
|
||||
$ut = 50;
|
||||
$cw = array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
|
||||
'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
|
||||
chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
|
||||
chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
$enc = 'cp1252';
|
||||
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
|
||||
?>
|
||||
20
core/lib/fpdf/font/symbol.php
Normal file
20
core/lib/fpdf/font/symbol.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
$type = 'Core';
|
||||
$name = 'Symbol';
|
||||
$up = -100;
|
||||
$ut = 50;
|
||||
$cw = array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549,
|
||||
','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722,
|
||||
'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768,
|
||||
'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576,
|
||||
'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0,
|
||||
chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
|
||||
chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603,
|
||||
chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768,
|
||||
chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042,
|
||||
chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329,
|
||||
chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0);
|
||||
$uv = array(32=>160,33=>33,34=>8704,35=>35,36=>8707,37=>array(37,2),39=>8715,40=>array(40,2),42=>8727,43=>array(43,2),45=>8722,46=>array(46,18),64=>8773,65=>array(913,2),67=>935,68=>array(916,2),70=>934,71=>915,72=>919,73=>921,74=>977,75=>array(922,4),79=>array(927,2),81=>920,82=>929,83=>array(931,3),86=>962,87=>937,88=>926,89=>936,90=>918,91=>91,92=>8756,93=>93,94=>8869,95=>95,96=>63717,97=>array(945,2),99=>967,100=>array(948,2),102=>966,103=>947,104=>951,105=>953,106=>981,107=>array(954,4),111=>array(959,2),113=>952,114=>961,115=>array(963,3),118=>982,119=>969,120=>958,121=>968,122=>950,123=>array(123,3),126=>8764,160=>8364,161=>978,162=>8242,163=>8804,164=>8725,165=>8734,166=>402,167=>9827,168=>9830,169=>9829,170=>9824,171=>8596,172=>array(8592,4),176=>array(176,2),178=>8243,179=>8805,180=>215,181=>8733,182=>8706,183=>8226,184=>247,185=>array(8800,2),187=>8776,188=>8230,189=>array(63718,2),191=>8629,192=>8501,193=>8465,194=>8476,195=>8472,196=>8855,197=>8853,198=>8709,199=>array(8745,2),201=>8835,202=>8839,203=>8836,204=>8834,205=>8838,206=>array(8712,2),208=>8736,209=>8711,210=>63194,211=>63193,212=>63195,213=>8719,214=>8730,215=>8901,216=>172,217=>array(8743,2),219=>8660,220=>array(8656,4),224=>9674,225=>9001,226=>array(63720,3),229=>8721,230=>array(63723,10),241=>9002,242=>8747,243=>8992,244=>63733,245=>8993,246=>array(63734,9));
|
||||
?>
|
||||
21
core/lib/fpdf/font/times.php
Normal file
21
core/lib/fpdf/font/times.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$type = 'Core';
|
||||
$name = 'Times-Roman';
|
||||
$up = -100;
|
||||
$ut = 50;
|
||||
$cw = array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
|
||||
'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
|
||||
'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
|
||||
'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
|
||||
$enc = 'cp1252';
|
||||
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
|
||||
?>
|
||||
21
core/lib/fpdf/font/timesb.php
Normal file
21
core/lib/fpdf/font/timesb.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$type = 'Core';
|
||||
$name = 'Times-Bold';
|
||||
$up = -100;
|
||||
$ut = 50;
|
||||
$cw = array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000,
|
||||
'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833,
|
||||
'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
$enc = 'cp1252';
|
||||
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
|
||||
?>
|
||||
21
core/lib/fpdf/font/timesbi.php
Normal file
21
core/lib/fpdf/font/timesbi.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$type = 'Core';
|
||||
$name = 'Times-BoldItalic';
|
||||
$up = -100;
|
||||
$ut = 50;
|
||||
$cw = array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667,
|
||||
'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889,
|
||||
'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
|
||||
'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444);
|
||||
$enc = 'cp1252';
|
||||
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
|
||||
?>
|
||||
21
core/lib/fpdf/font/timesi.php
Normal file
21
core/lib/fpdf/font/timesi.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$type = 'Core';
|
||||
$name = 'Times-Italic';
|
||||
$up = -100;
|
||||
$ut = 50;
|
||||
$cw = array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611,
|
||||
'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833,
|
||||
'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722,
|
||||
'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611,
|
||||
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444);
|
||||
$enc = 'cp1252';
|
||||
$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
|
||||
?>
|
||||
20
core/lib/fpdf/font/zapfdingbats.php
Normal file
20
core/lib/fpdf/font/zapfdingbats.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
$type = 'Core';
|
||||
$name = 'ZapfDingbats';
|
||||
$up = -100;
|
||||
$ut = 50;
|
||||
$cw = array(
|
||||
chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0,
|
||||
chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939,
|
||||
','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692,
|
||||
'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776,
|
||||
'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873,
|
||||
'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317,
|
||||
chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
|
||||
chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788,
|
||||
chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788,
|
||||
chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918,
|
||||
chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874,
|
||||
chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0);
|
||||
$uv = array(32=>32,33=>array(9985,4),37=>9742,38=>array(9990,4),42=>9755,43=>9758,44=>array(9996,28),72=>9733,73=>array(10025,35),108=>9679,109=>10061,110=>9632,111=>array(10063,4),115=>9650,116=>9660,117=>9670,118=>10070,119=>9687,120=>array(10072,7),128=>array(10088,14),161=>array(10081,7),168=>9827,169=>9830,170=>9829,171=>9824,172=>array(9312,10),182=>array(10102,31),213=>8594,214=>array(8596,2),216=>array(10136,24),241=>array(10161,14));
|
||||
?>
|
||||
1910
core/lib/fpdf/fpdf.php
Normal file
1910
core/lib/fpdf/fpdf.php
Normal file
File diff suppressed because it is too large
Load Diff
@@ -69,9 +69,9 @@ if (empty($user) || empty($user->email)) {
|
||||
$suser->Load("email = ?", array($ssoUserEmail));
|
||||
}
|
||||
|
||||
LogManager::getInstance()->info('SSO SAML User:'.print_r($suser, true));
|
||||
if (empty($suser)) {
|
||||
header("Location:" . CLIENT_BASE_URL . "login.php?f=1");
|
||||
LogManager::getInstance()->info('SSO SAML User:'.print_r($suser->email, true));
|
||||
if (empty($suser) || empty($suser->id)) {
|
||||
header("Location:" . CLIENT_BASE_URL . "logout.php");
|
||||
exit();
|
||||
}
|
||||
$ssoUserLoaded = true;
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
<?php
|
||||
$migrationList = [];
|
||||
$migrationList[] = 'v20210626_290004_add_s3_settings';
|
||||
$migrationList[] = 'v20210606_290003_system_meta_data';
|
||||
$migrationList[] = 'v20210606_290002_add_aws_region';
|
||||
$migrationList[] = 'v20210606_290001_update_s3_config';
|
||||
$migrationList[] = 'v20210402_280006_modify_attendance_rep';
|
||||
$migrationList[] = 'v20210327_280005_saml_settings';
|
||||
$migrationList[] = 'v20210228_280003_add_share_with_employee';
|
||||
|
||||
31
core/migrations/v20210606_290001_update_s3_config.php
Normal file
31
core/migrations/v20210606_290001_update_s3_config.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace Classes\Migration;
|
||||
|
||||
class v20210606_290001_update_s3_config extends AbstractMigration
|
||||
{
|
||||
|
||||
public function up()
|
||||
{
|
||||
|
||||
$sql = <<<'SQL'
|
||||
UPDATE `Settings`
|
||||
SET name = 'Files: Amazon S3 Secret for File Upload'
|
||||
WHERE name = 'Files: Amazone S3 Secret for File Upload';
|
||||
SQL;
|
||||
$this->executeQuery($sql);
|
||||
|
||||
$sql = <<<'SQL'
|
||||
UPDATE `Settings`
|
||||
SET category = 'System'
|
||||
WHERE name like 'Files:%';
|
||||
SQL;
|
||||
|
||||
return $this->executeQuery($sql);
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
31
core/migrations/v20210606_290002_add_aws_region.php
Normal file
31
core/migrations/v20210606_290002_add_aws_region.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
namespace Classes\Migration;
|
||||
|
||||
class v20210606_290002_add_aws_region extends AbstractMigration {
|
||||
|
||||
public function up(){
|
||||
|
||||
$sql[] = <<<'SQL'
|
||||
REPLACE INTO `Settings` (`name`, `value`, `description`, `meta`, `category`)
|
||||
VALUES (
|
||||
'System: AWS Region',
|
||||
'us-east-1',
|
||||
'Amazon SWS Region used for file storage',
|
||||
'',
|
||||
'System'
|
||||
);
|
||||
SQL;
|
||||
|
||||
$result = true;
|
||||
foreach ($sql as $query) {
|
||||
$result = $result && $this->executeQuery($query);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function down(){
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
22
core/migrations/v20210606_290003_system_meta_data.php
Normal file
22
core/migrations/v20210606_290003_system_meta_data.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
namespace Classes\Migration;
|
||||
|
||||
class v20210606_290003_system_meta_data extends AbstractMigration {
|
||||
|
||||
public function up(){
|
||||
$sql = <<<'SQL'
|
||||
create table `SystemData` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(50) not null,
|
||||
`value` text default null,
|
||||
primary key (`id`),
|
||||
unique key `name` (`name`)
|
||||
) engine=innodb default charset=utf8;
|
||||
SQL;
|
||||
return $this->executeQuery($sql);
|
||||
}
|
||||
|
||||
public function down(){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
28
core/migrations/v20210626_290004_add_s3_settings.php
Normal file
28
core/migrations/v20210626_290004_add_s3_settings.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace Classes\Migration;
|
||||
|
||||
class v20210626_290004_add_s3_settings extends AbstractMigration
|
||||
{
|
||||
|
||||
public function up()
|
||||
{
|
||||
|
||||
$sql = <<<'SQL'
|
||||
REPLACE INTO `Settings` (`name`, `value`, `description`, `meta`, `category`) VALUES
|
||||
('Files: Upload Files to S3', '0', '','["value", {"label":"Value","type":"select","source":[["1","Yes"],["0","No"]]}]', 'System'),
|
||||
('Files: Amazon S3 Key for File Upload', '', 'Please provide S3 Key for uploading files','', 'System'),
|
||||
('Files: Amazon S3 Secret for File Upload', '', 'Please provide S3 Secret for uploading files','', 'System'),
|
||||
('Files: S3 Bucket', '', 'Please provide S3 Bucket name for uploading files','', 'System'),
|
||||
('Files: S3 Web Url', '', 'Please provide Url to the s3 bucket','', 'System'),
|
||||
('System: AWS Region', 'us-east-1', 'Amazon AWS Region used for file storage','', 'System');
|
||||
SQL;
|
||||
|
||||
return $this->executeQuery($sql);
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -3,20 +3,28 @@
|
||||
use Classes\BaseService;
|
||||
use Classes\CustomFieldManager;
|
||||
use Classes\JwtTokenService;
|
||||
use Classes\MemoryCacheService;
|
||||
use Classes\Migration\MigrationManager;
|
||||
use Classes\NotificationManager;
|
||||
use Classes\RedisCacheService;
|
||||
use Classes\ReportHandler;
|
||||
use Classes\SettingsManager;
|
||||
use Model\Audit;
|
||||
use Model\BaseModel;
|
||||
use Model\DataEntryBackup;
|
||||
use Model\File;
|
||||
use Model\Notification;
|
||||
use Model\Report;
|
||||
use Model\RestAccessToken;
|
||||
use Model\Setting;
|
||||
use Utils\LogManager;
|
||||
|
||||
if (!defined("AWS_REGION")) {
|
||||
define('AWS_REGION', 'us-east-1');
|
||||
}
|
||||
include(APP_BASE_PATH.'lib/adodb512/adodb.inc.php');
|
||||
include(APP_BASE_PATH.'lib/adodb512/adodb-active-record.inc.php');
|
||||
$ADODB_ASSOC_CASE = 2;
|
||||
|
||||
include(APP_BASE_PATH.'lib/fpdf/fpdf.php');
|
||||
|
||||
//detect admin and user modules
|
||||
if (defined("MODULE_PATH")) {
|
||||
$tArr = explode("/", MODULE_PATH);
|
||||
@@ -38,13 +46,13 @@ $dbLocal = NewADOConnection('mysqli');
|
||||
$res = $dbLocal->Connect(APP_HOST, APP_USERNAME, APP_PASSWORD, APP_DB);
|
||||
|
||||
|
||||
\Model\File::SetDatabaseAdapter($dbLocal);
|
||||
\Model\Setting::SetDatabaseAdapter($dbLocal);
|
||||
\Model\Report::SetDatabaseAdapter($dbLocal);
|
||||
\Model\DataEntryBackup::SetDatabaseAdapter($dbLocal);
|
||||
\Model\Audit::SetDatabaseAdapter($dbLocal);
|
||||
\Model\Notification::SetDatabaseAdapter($dbLocal);
|
||||
\Model\RestAccessToken::SetDatabaseAdapter($dbLocal);
|
||||
File::SetDatabaseAdapter($dbLocal);
|
||||
Setting::SetDatabaseAdapter($dbLocal);
|
||||
Report::SetDatabaseAdapter($dbLocal);
|
||||
DataEntryBackup::SetDatabaseAdapter($dbLocal);
|
||||
Audit::SetDatabaseAdapter($dbLocal);
|
||||
Notification::SetDatabaseAdapter($dbLocal);
|
||||
RestAccessToken::SetDatabaseAdapter($dbLocal);
|
||||
|
||||
|
||||
$baseService = BaseService::getInstance();
|
||||
@@ -72,14 +80,19 @@ if (defined('REDIS_SERVER_URI')
|
||||
&& QUERY_CACHE_TYPE === 'redis'
|
||||
) {
|
||||
BaseService::getInstance()->setCacheService(
|
||||
new \Classes\RedisCacheService(REDIS_SERVER_URI, CLIENT_NAME)
|
||||
new RedisCacheService(REDIS_SERVER_URI, CLIENT_NAME)
|
||||
);
|
||||
} else {
|
||||
BaseService::getInstance()->setCacheService(
|
||||
new \Classes\MemoryCacheService(CLIENT_NAME)
|
||||
new MemoryCacheService(CLIENT_NAME)
|
||||
);
|
||||
}
|
||||
|
||||
$awsRegion = SettingsManager::getInstance()->getSetting("System: AWS Region");
|
||||
if (!defined("AWS_REGION")) {
|
||||
define('AWS_REGION', empty($awsRegion) ? 'us-east-1' : $awsRegion);
|
||||
}
|
||||
|
||||
$samlEnabled = SettingsManager::getInstance()->getSetting("SAML: Enabled");
|
||||
if ($samlEnabled === '1') {
|
||||
include APP_BASE_PATH . 'lib/saml2/Utilities.php';
|
||||
|
||||
@@ -3,7 +3,10 @@
|
||||
use Classes\BaseService;
|
||||
use Classes\IceResponse;
|
||||
use Classes\PasswordManager;
|
||||
use Classes\Pdf\PDFRegister;
|
||||
use Classes\SettingsManager;
|
||||
use Metadata\Common\Model\SupportedLanguage;
|
||||
use Model\File;
|
||||
use Users\Common\Model\User;
|
||||
use Utils\LogManager;
|
||||
use Classes\Exception\IceHttpException;
|
||||
@@ -173,19 +176,20 @@ try {// Domain aware input cleanup
|
||||
$type = strtolower(substr($file->filename, strrpos($file->filename, ".") + 1));
|
||||
if ($file->name == $name) {
|
||||
$ret['status'] = "SUCCESS";
|
||||
if (\Classes\SettingsManager::getInstance()->getSetting("Files: Upload Files to S3") == '1') {
|
||||
$uploadFilesToS3Key = \Classes\SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload");
|
||||
$uploadFilesToS3Secret = \Classes\SettingsManager::getInstance()->getSetting("Files: Amazone S3 Secret for File Upload");
|
||||
$file->ext = explode('.', $file->filename)[1];
|
||||
if (SettingsManager::getInstance()->getSetting("Files: Upload Files to S3") == '1') {
|
||||
$uploadFilesToS3Key = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload");
|
||||
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Secret for File Upload");
|
||||
$s3FileSys = new \Classes\S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret);
|
||||
$s3WebUrl = \Classes\SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
|
||||
$s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
|
||||
$fileUrl = $s3WebUrl . CLIENT_NAME . "/" . $file->filename;
|
||||
$fileUrl = $s3FileSys->generateExpiringURL($fileUrl);
|
||||
$file->filename = $fileUrl;
|
||||
|
||||
} else {
|
||||
$file->filename = CLIENT_BASE_URL . 'data/' . $file->filename;
|
||||
$file->filename = \Classes\FileService::getInstance()->getLocalSecureUrl($file->filename);
|
||||
}
|
||||
$ret['data'] = $file;
|
||||
$ret['data'] = BaseService::getInstance()->cleanUpAll($file);
|
||||
} else {
|
||||
$ret['status'] = "ERROR";
|
||||
}
|
||||
@@ -193,21 +197,49 @@ try {// Domain aware input cleanup
|
||||
$fileName = $_REQUEST['file'];
|
||||
$fileName = str_replace("..", "", $fileName);
|
||||
$fileName = str_replace("/", "", $fileName);
|
||||
$fileName = CLIENT_BASE_PATH . 'data/' . $fileName;
|
||||
if (!file_exists($fileName)) {
|
||||
|
||||
$file = new File();
|
||||
$file->Load('name = ?', array($fileName));
|
||||
|
||||
if ($fileName !== $file->name) {
|
||||
$file->Load('filename = ?', array($fileName));
|
||||
}
|
||||
|
||||
if (empty($file->id)) {
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!file_exists(CLIENT_BASE_PATH . 'data/' . $file->filename)) {
|
||||
exit;
|
||||
}
|
||||
|
||||
$extension = explode('.', $file->filename)[1];
|
||||
|
||||
header('Content-Description: File Transfer');
|
||||
if ('png' === $extension) {
|
||||
header('Content-Type: image/png');
|
||||
} elseif ('gif' === $extension) {
|
||||
header('Content-Type: image/png');
|
||||
} elseif ('jpg' === $extension || 'jpeg' === $extension) {
|
||||
header('Content-Type: image/jpeg');
|
||||
} elseif ('pdf' === $extension) {
|
||||
header('Content-Type: application/pdf');
|
||||
} elseif ('xml' === $extension) {
|
||||
header('Content-Type: application/xml');
|
||||
} else {
|
||||
header('Content-Type: application/octet-stream');
|
||||
header('Content-Disposition: attachment; filename=' . basename($fileName));
|
||||
header('Content-Transfer-Encoding: binary');
|
||||
header('Expires: 0');
|
||||
header('Cache-Control: must-revalidate');
|
||||
header('Pragma: public');
|
||||
header('Content-Length: ' . filesize($fileName));
|
||||
}
|
||||
|
||||
header('Content-Disposition: attachment; filename=' . basename($file->filename));
|
||||
|
||||
header('Content-Length: ' . filesize(CLIENT_BASE_PATH . 'data/' . $file->filename));
|
||||
ob_clean();
|
||||
flush();
|
||||
readfile($fileName);
|
||||
readfile(CLIENT_BASE_PATH . 'data/' . $file->filename);
|
||||
exit;
|
||||
|
||||
} else if ($action == 'rsp') { // linked clicked from password change email
|
||||
@@ -305,6 +337,22 @@ try {// Domain aware input cleanup
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($action == 'pdf') {
|
||||
$data = $_REQUEST['data'];
|
||||
$hash = $_REQUEST['h'];
|
||||
PDFRegister::init();
|
||||
$callback = PDFRegister::get($hash);
|
||||
if (empty($callback) || !$callback($data)->granted()) {
|
||||
$ret['status'] = "ERROR";
|
||||
$ret['message'] = "Invalid request";
|
||||
} else {
|
||||
$pdfBuilder = $callback($data);
|
||||
$pdf = $pdfBuilder->createPdf();
|
||||
$pdf->SetAuthor(SettingsManager::getInstance()->getSetting('Company: Name'));
|
||||
$pdf->Output();
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
echo BaseService::getInstance()->safeJsonEncode($ret);
|
||||
} catch (Exception $e) {
|
||||
@@ -312,6 +360,8 @@ try {// Domain aware input cleanup
|
||||
LogManager::getInstance()->notifyException($e);
|
||||
echo json_encode(['status' => 'Error']);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (IceHttpException $e) {
|
||||
http_response_code($e->getCode());
|
||||
echo json_encode(['message' => $e->getMessage()]);
|
||||
|
||||
@@ -109,11 +109,10 @@ class AttendanceStatus extends BaseModel
|
||||
$data[] = $entry;
|
||||
}
|
||||
|
||||
function cmp($a, $b)
|
||||
{
|
||||
|
||||
usort($data, function ($a, $b) {
|
||||
return $a->statusId - $b->statusId;
|
||||
}
|
||||
usort($data, "cmp");
|
||||
});
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
8
core/src/Classes/Authorizable.php
Normal file
8
core/src/Classes/Authorizable.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace Classes;
|
||||
|
||||
interface Authorizable
|
||||
{
|
||||
public function granted() : bool;
|
||||
}
|
||||
@@ -22,6 +22,7 @@ use Metadata\Common\Model\CalculationHook;
|
||||
use Model\BaseModel;
|
||||
use Model\DataEntryBackup;
|
||||
use Model\Setting;
|
||||
use Model\SystemData;
|
||||
use Modules\Common\Model\Module;
|
||||
use Permissions\Common\Model\Permission;
|
||||
use Users\Common\Model\User;
|
||||
@@ -1978,4 +1979,38 @@ END;
|
||||
$dbUser = $this->getCurrentDBUser();
|
||||
return RestApiManager::getInstance()->getAccessTokenForUser($dbUser);
|
||||
}
|
||||
|
||||
public function isSubordinateEmployee($supervisorId, $subordinateId)
|
||||
{
|
||||
$employee = new Employee();
|
||||
$employee->Load('id = ? and supervisor = ?', [$subordinateId, $supervisorId]);
|
||||
|
||||
return ($supervisorId == $employee->supervisor && $subordinateId == $employee->id);
|
||||
}
|
||||
|
||||
public function setSystemData($name, $value)
|
||||
{
|
||||
$sysData = new SystemData();
|
||||
$sysData->Load('name = ?', [$name]);
|
||||
|
||||
if (!empty($sysData->id)) {
|
||||
$sysData->value = $value;
|
||||
} else {
|
||||
$sysData->name = $name;
|
||||
$sysData->value = $value;
|
||||
}
|
||||
|
||||
return $sysData->Save();
|
||||
}
|
||||
|
||||
public function getSystemData($name)
|
||||
{
|
||||
$sysData = new SystemData();
|
||||
$sysData->Load('name = ?', [$name]);
|
||||
if (!empty($sysData->id) && $sysData->name === $name) {
|
||||
return $sysData->value;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,15 +76,20 @@ class FileService
|
||||
if (file_exists("/tmp/".$file->filename."_orig")) {
|
||||
//Resize image to 100
|
||||
|
||||
$img = new \Classes\SimpleImage("/tmp/".$file->filename."_orig");
|
||||
try {
|
||||
$img = new \Classes\SimpleImage("/tmp/" . $file->filename . "_orig");
|
||||
$img->fitToWidth(140);
|
||||
$img->save("/tmp/".$file->filename);
|
||||
$img->save("/tmp/" . $file->filename);
|
||||
} catch (\Exception $e) {
|
||||
LogManager::getInstance()->error($e->getTraceAsString());
|
||||
return null;
|
||||
}
|
||||
|
||||
$uploadFilesToS3Key = SettingsManager::getInstance()->getSetting(
|
||||
"Files: Amazon S3 Key for File Upload"
|
||||
);
|
||||
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting(
|
||||
"Files: Amazone S3 Secret for File Upload"
|
||||
"Files: Amazon S3 Secret for File Upload"
|
||||
);
|
||||
$s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket");
|
||||
|
||||
@@ -132,11 +137,7 @@ class FileService
|
||||
if (empty($file->id)) {
|
||||
LogManager::getInstance()->info("Small profile image ".$profileImage->name."_small not found");
|
||||
|
||||
$largeFileUrl = $this->getFileUrl($profileImage->name);
|
||||
|
||||
file_put_contents("/tmp/".$profileImage->filename."_orig", file_get_contents($largeFileUrl));
|
||||
|
||||
if (file_exists("/tmp/".$profileImage->filename."_orig")) {
|
||||
if (file_exists(CLIENT_BASE_PATH.'data/'.$profileImage->filename)) {
|
||||
//Resize image to 100
|
||||
|
||||
$file->name = $profileImage->name."_small";
|
||||
@@ -144,16 +145,19 @@ class FileService
|
||||
$file->$signInMappingField = $profileImage->$signInMappingField;
|
||||
$file->filename = $file->name.str_replace($profileImage->name, "", $profileImage->filename);
|
||||
|
||||
$img = new \Classes\SimpleImage("/tmp/".$profileImage->filename."_orig");
|
||||
try {
|
||||
$img = new \Classes\SimpleImage(CLIENT_BASE_PATH . 'data/' . $profileImage->filename);
|
||||
$img->fitToWidth(140);
|
||||
|
||||
$img->save(CLIENT_BASE_PATH.'data/'.$file->filename);
|
||||
$img->save(CLIENT_BASE_PATH . 'data/' . $file->filename);
|
||||
$file->employee = $profileImage->employee;
|
||||
$file->file_group = 'profile_image_small';
|
||||
$file->size = filesize(CLIENT_BASE_PATH.'data/'.$file->filename);
|
||||
$file->size = filesize(CLIENT_BASE_PATH . 'data/' . $file->filename);
|
||||
$file->size_text = $this->getReadableSize($file->size);
|
||||
$file->Save();
|
||||
unlink("/tmp/".$file->filename."_orig");
|
||||
} catch (\Exception $e) {
|
||||
LogManager::getInstance()->error($e->getTraceAsString());
|
||||
return null;
|
||||
}
|
||||
|
||||
return $file;
|
||||
}
|
||||
@@ -182,7 +186,7 @@ class FileService
|
||||
"Files: Amazon S3 Key for File Upload"
|
||||
);
|
||||
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting(
|
||||
"Files: Amazone S3 Secret for File Upload"
|
||||
"Files: Amazon S3 Secret for File Upload"
|
||||
);
|
||||
$s3FileSys = new S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret);
|
||||
$s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
|
||||
@@ -204,7 +208,7 @@ class FileService
|
||||
$profile->image = $file->filename;
|
||||
} else {
|
||||
$fileNew = $this->checkAddSmallProfileImage($file);
|
||||
$profile->image = CLIENT_BASE_URL.'data/'.$fileNew->filename;
|
||||
$profile->image = $this->getFileUrl($fileNew->filename);
|
||||
}
|
||||
} else {
|
||||
$profile->image = $this->generateProfileImage($profile->first_name, $profile->last_name);
|
||||
@@ -225,7 +229,7 @@ class FileService
|
||||
"Files: Amazon S3 Key for File Upload"
|
||||
);
|
||||
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting(
|
||||
"Files: Amazone S3 Secret for File Upload"
|
||||
"Files: Amazon S3 Secret for File Upload"
|
||||
);
|
||||
$s3FileSys = new S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret);
|
||||
$s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
|
||||
@@ -241,7 +245,7 @@ class FileService
|
||||
} elseif (substr($file->filename, 0, 8) === 'https://') {
|
||||
$profile->image = $file->filename;
|
||||
} else {
|
||||
$profile->image = CLIENT_BASE_URL.'data/'.$file->filename;
|
||||
$profile->image = $this->getLocalSecureUrl($file->filename);
|
||||
}
|
||||
} else {
|
||||
$profile->image = $this->generateProfileImage($profile->first_name, $profile->last_name);
|
||||
@@ -255,6 +259,10 @@ class FileService
|
||||
$file = new File();
|
||||
$file->Load('name = ?', array($fileName));
|
||||
|
||||
if ($fileName !== $file->name) {
|
||||
$file->Load('filename = ?', array($fileName));
|
||||
}
|
||||
|
||||
$uploadFilesToS3 = SettingsManager::getInstance()->getSetting("Files: Upload Files to S3");
|
||||
|
||||
if ($uploadFilesToS3 == "1") {
|
||||
@@ -262,7 +270,7 @@ class FileService
|
||||
"Files: Amazon S3 Key for File Upload"
|
||||
);
|
||||
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting(
|
||||
"Files: Amazone S3 Secret for File Upload"
|
||||
"Files: Amazon S3 Secret for File Upload"
|
||||
);
|
||||
$s3FileSys = new S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret);
|
||||
$s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
|
||||
@@ -282,10 +290,22 @@ class FileService
|
||||
|
||||
return $expireUrl;
|
||||
} else {
|
||||
return CLIENT_BASE_URL.'data/'.$file->filename;
|
||||
return CLIENT_BASE_URL.'service.php?a=download&file='.$file->filename;
|
||||
}
|
||||
}
|
||||
|
||||
public function getLocalSecureUrl($fileName)
|
||||
{
|
||||
$file = new File();
|
||||
$file->Load('name = ?', array($fileName));
|
||||
|
||||
if ($fileName !== $file->name) {
|
||||
$file->Load('filename = ?', array($fileName));
|
||||
}
|
||||
|
||||
return CLIENT_BASE_URL.'service.php?a=download&file='.$file->filename;
|
||||
}
|
||||
|
||||
public function deleteProfileImage($profileId)
|
||||
{
|
||||
$file = new File();
|
||||
@@ -325,7 +345,7 @@ class FileService
|
||||
"Files: Amazon S3 Key for File Upload"
|
||||
);
|
||||
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting(
|
||||
"Files: Amazone S3 Secret for File Upload"
|
||||
"Files: Amazon S3 Secret for File Upload"
|
||||
);
|
||||
$s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket");
|
||||
|
||||
@@ -355,7 +375,7 @@ class FileService
|
||||
"Files: Amazon S3 Key for File Upload"
|
||||
);
|
||||
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting(
|
||||
"Files: Amazone S3 Secret for File Upload"
|
||||
"Files: Amazon S3 Secret for File Upload"
|
||||
);
|
||||
$s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket");
|
||||
|
||||
@@ -400,15 +420,34 @@ class FileService
|
||||
{
|
||||
$seed = substr($first, 0, 1);
|
||||
if (empty($last)) {
|
||||
$seed .= substr($first, -1);
|
||||
$seed .= utf8_encode(substr($first, -1));
|
||||
} else {
|
||||
$seed .= substr($last, 0, 1);
|
||||
$seed .= utf8_encode(substr($last, 0, 1));
|
||||
}
|
||||
md5($seed . $last);
|
||||
// TODO - remove code after chinese character issue is resolved
|
||||
// if(strlen($seed) != mb_strlen($seed, 'utf-8')) {
|
||||
// $char1 = substr($first, 0, 1);
|
||||
// $char1 = chr($this->uniord($char1) % 26 + 65);
|
||||
// if (empty($last)) {
|
||||
// $char2 = substr($first, -1);
|
||||
// } else {
|
||||
// $char2 = substr($last, 0, 1);
|
||||
// }
|
||||
// $char2 = chr($this->uniord($char2) % 26 + 65);
|
||||
// $seed = $char1.$char2;
|
||||
// }
|
||||
|
||||
return sprintf(
|
||||
'https://avatars.dicebear.com/api/initials/:%s.svg',
|
||||
$seed . substr(md5($first . $last), -5)
|
||||
);
|
||||
}
|
||||
|
||||
private function uniord($u)
|
||||
{
|
||||
$k = mb_convert_encoding($u, 'UCS-2LE', 'UTF-8');
|
||||
$k1 = ord(substr($k, 0, 1));
|
||||
$k2 = ord(substr($k, 1, 1));
|
||||
return $k2 * 256 + $k1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
namespace Classes\ModuleBuilderV2;
|
||||
|
||||
use Classes\BaseService;
|
||||
use Classes\PermissionManager;
|
||||
|
||||
class ModuleBuilder
|
||||
@@ -17,7 +18,7 @@ class ModuleBuilder
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->user = \Classes\BaseService::getInstance()->getCurrentUser();
|
||||
$this->user = BaseService::getInstance()->getCurrentUser();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
162
core/src/Classes/Pdf/BasePdfTemplate.php
Normal file
162
core/src/Classes/Pdf/BasePdfTemplate.php
Normal file
@@ -0,0 +1,162 @@
|
||||
<?php
|
||||
namespace Classes\Pdf;
|
||||
|
||||
use Classes\SettingsManager;
|
||||
|
||||
class BasePdfTemplate extends \FPDF
|
||||
{
|
||||
protected $title;
|
||||
protected $date;
|
||||
|
||||
const WIDTH = 210;
|
||||
|
||||
public function initialize($title)
|
||||
{
|
||||
$this->AliasNbPages();
|
||||
$this->AddPage();
|
||||
$this->SetTitle($title);
|
||||
$this->date = $date = date('c');
|
||||
}
|
||||
|
||||
// @codingStandardsIgnoreStart
|
||||
function Header()
|
||||
{
|
||||
// Logo
|
||||
try {
|
||||
$this->Image(\Classes\UIManager::getInstance()->getCompanyLogoUrl(), 10, 10, 0, 10);
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
|
||||
PdfColour::setTextColor($this, PdfColour::GREY_100);
|
||||
// Arial bold 15
|
||||
$this->SetFont('Arial', '', 9);
|
||||
// Company name
|
||||
$companyName = SettingsManager::getInstance()->getSetting('Company: Name');
|
||||
$this->Cell(30, 23, $companyName, 0, 0, 'L');
|
||||
PdfColour::setDrawColor($this, PdfColour::GREY_100);
|
||||
$this->Line(10, 26, self::WIDTH - 10, 26);
|
||||
// Line break
|
||||
$this->Ln(20);
|
||||
}
|
||||
|
||||
function Footer()
|
||||
{
|
||||
PdfColour::setTextColor($this, PdfColour::GREY_100);
|
||||
// Position at 1.5 cm from bottom
|
||||
$this->SetY(-15);
|
||||
// Arial italic 8
|
||||
$this->SetFont('Arial', 'I', 8);
|
||||
// Page number
|
||||
$this->Cell(0, 10, 'Page '.$this->PageNo().'/{nb}, Date:'.$this->date, 0, 0, 'C');
|
||||
}
|
||||
// @codingStandardsIgnoreEnd
|
||||
|
||||
public function addH1($title, $style = 'B', $textAlignment = 'C')
|
||||
{
|
||||
$this->addH($title, $style, $textAlignment, 21);
|
||||
}
|
||||
|
||||
public function addH2($title, $style = 'B', $textAlignment = 'C')
|
||||
{
|
||||
$this->addH($title, $style, $textAlignment, 17);
|
||||
}
|
||||
|
||||
public function addH3($title, $style = 'B', $textAlignment = 'C')
|
||||
{
|
||||
$this->addH($title, $style, $textAlignment, 14);
|
||||
}
|
||||
|
||||
public function addH($title, $style = 'B', $textAlignment = 'C', $fontSize = 16)
|
||||
{
|
||||
PdfColour::setTextColor($this, PdfColour::BLACK_LIGHT);
|
||||
$this->SetFont('Arial', $style, $fontSize);
|
||||
$this->Cell(0, 10, $title, 0, 1, $textAlignment);
|
||||
}
|
||||
|
||||
public function addBorderedText($text)
|
||||
{
|
||||
$this->addText($text, '', 'L', 10, PdfColour::BLACK_LIGHT, 1, PdfColour::GREY_DARK);
|
||||
}
|
||||
|
||||
public function addText(
|
||||
$text,
|
||||
$style = '',
|
||||
$textAlignment = 'L',
|
||||
$fontSize = 10,
|
||||
$color = PdfColour::BLACK_LIGHT,
|
||||
$cellBorder = 0,
|
||||
$cellBorderColor = PdfColour::GREY_DARK
|
||||
) {
|
||||
PdfColour::setTextColor($this, $color);
|
||||
$this->SetFont('Arial', $style, $fontSize);
|
||||
if ($cellBorder === 1) {
|
||||
PdfColour::setDrawColor($this, $cellBorderColor);
|
||||
}
|
||||
PdfColour::setFillColor($this, PdfColour::WHITE);
|
||||
$this->MultiCell(0, 5, $text, $cellBorder, 1, $textAlignment);
|
||||
}
|
||||
|
||||
public function addKeyValue($key, $value, $type = 'text')
|
||||
{
|
||||
PdfColour::setDrawColor($this, PdfColour::GREY_DARK);
|
||||
PdfColour::setFillColor($this, PdfColour::GREY);
|
||||
|
||||
|
||||
if ($type === 'textarea') {
|
||||
$this->Cell(0, 10, $key, 1, 1, 'L', true);
|
||||
} else {
|
||||
$this->Cell(80, 10, $key, 1, 0, 'L', true);
|
||||
}
|
||||
|
||||
PdfColour::setFillColor($this, PdfColour::WHITE);
|
||||
|
||||
if ($type === 'textarea') {
|
||||
$this->MultiCell(0, 5, $value, 1, 1, 'L');
|
||||
} elseif ($type === 'date') {
|
||||
$value = date('Y-m-d', strtotime($value));
|
||||
$this->Cell(110, 10, $value, 1, 1, 'L', true);
|
||||
} elseif ($type === 'select2multi') {
|
||||
$value = json_decode($value, true);
|
||||
$value = !empty($value) ? join(',', $value) : '';
|
||||
$this->Cell(110, 10, $value, 1, 1, 'L', true);
|
||||
} else {
|
||||
$this->Cell(110, 10, $value, 1, 1, 'L', true);
|
||||
}
|
||||
}
|
||||
|
||||
public function addKeyValueObject($key, $value)
|
||||
{
|
||||
PdfColour::setDrawColor($this, PdfColour::GREY_DARK);
|
||||
PdfColour::setFillColor($this, PdfColour::GREY);
|
||||
$this->Cell(80, 10, $key, 1, 0, 'L', true);
|
||||
|
||||
PdfColour::setFillColor($this, PdfColour::WHITE);
|
||||
$this->MultiCell(110, 10, $value, 1, 1, true);
|
||||
}
|
||||
|
||||
public function addHR($width = 0)
|
||||
{
|
||||
$this->Ln(2);
|
||||
PdfColour::setDrawColor($this, PdfColour::GREY_DARK);
|
||||
PdfColour::setFillColor($this, PdfColour::GREY_DARK);
|
||||
$this->Cell($width, 0.2, '', 0, 0, '', true);
|
||||
// Line break
|
||||
$this->Ln(3);
|
||||
}
|
||||
|
||||
public function getImageFromDataURI($dataURI)
|
||||
{
|
||||
$img = explode(',', $dataURI, 2)[1];
|
||||
return 'data://text/plain;base64,'. $img;
|
||||
}
|
||||
|
||||
public function addSignature($name, $data)
|
||||
{
|
||||
$image = $this->getImageFromDataURI($data);
|
||||
$this->Ln(10);
|
||||
$this->Image($image, $this->GetX(), $this->GetY(), 30, 0, 'png');
|
||||
$this->Ln(30);
|
||||
$this->addHR(30);
|
||||
$this->addText($name);
|
||||
}
|
||||
}
|
||||
27
core/src/Classes/Pdf/PDFRegister.php
Normal file
27
core/src/Classes/Pdf/PDFRegister.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace Classes\Pdf;
|
||||
|
||||
use Forms\Common\EmployeeFormPDFBuilder;
|
||||
|
||||
class PDFRegister
|
||||
{
|
||||
protected static $register = [];
|
||||
|
||||
public static function init()
|
||||
{
|
||||
self::put('empf', function ($data) {
|
||||
return new EmployeeFormPDFBuilder($data);
|
||||
});
|
||||
}
|
||||
|
||||
public static function put($key, $callback)
|
||||
{
|
||||
self::$register[$key] = $callback;
|
||||
}
|
||||
|
||||
public static function get($key)
|
||||
{
|
||||
return self::$register[$key];
|
||||
}
|
||||
}
|
||||
8
core/src/Classes/Pdf/PdfBuilder.php
Normal file
8
core/src/Classes/Pdf/PdfBuilder.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace Classes\Pdf;
|
||||
|
||||
interface PdfBuilder
|
||||
{
|
||||
public function createPdf();
|
||||
}
|
||||
27
core/src/Classes/Pdf/PdfColour.php
Normal file
27
core/src/Classes/Pdf/PdfColour.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace Classes\Pdf;
|
||||
|
||||
class PdfColour
|
||||
{
|
||||
const GREY = [224, 224, 224];
|
||||
const GREY_DARK = [160, 160, 160];
|
||||
const WHITE = [255, 255, 255];
|
||||
const BLACK_LIGHT = [84, 84, 84];
|
||||
const GREY_100 = [100, 100, 100];
|
||||
|
||||
public static function setFillColor(\FPDF $pdf, $color)
|
||||
{
|
||||
$pdf->SetFillColor($color[0], $color[1], $color[2]);
|
||||
}
|
||||
|
||||
public static function setTextColor(\FPDF $pdf, $color)
|
||||
{
|
||||
$pdf->SetTextColor($color[0], $color[1], $color[2]);
|
||||
}
|
||||
|
||||
public static function setDrawColor(\FPDF $pdf, $color)
|
||||
{
|
||||
$pdf->SetDrawColor($color[0], $color[1], $color[2]);
|
||||
}
|
||||
}
|
||||
33
core/src/Classes/StatsHelper.php
Normal file
33
core/src/Classes/StatsHelper.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace Classes;
|
||||
|
||||
use Employees\Common\Model\Employee;
|
||||
use Users\Common\Model\User;
|
||||
|
||||
class StatsHelper
|
||||
{
|
||||
public static function getEmployeeCount()
|
||||
{
|
||||
$employee = new Employee();
|
||||
$employeeCount = $employee->DB()->Execute("select count(id) from Employees");
|
||||
if ($employeeCount) {
|
||||
$employeeCount = intval($employeeCount->fields[0]);
|
||||
return $employeeCount;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static function getUserCount()
|
||||
{
|
||||
$user = new User();
|
||||
$userCount = $user->DB()->Execute("select count(id) from Users");
|
||||
if ($userCount) {
|
||||
$userCount = intval($userCount->fields[0]);
|
||||
return $userCount;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -121,7 +121,7 @@ class Uploader
|
||||
$uploadFilesToS3 = SettingsManager::getInstance()->getSetting("Files: Upload Files to S3");
|
||||
$uploadFilesToS3Key = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload");
|
||||
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting(
|
||||
"Files: Amazone S3 Secret for File Upload"
|
||||
"Files: Amazon S3 Secret for File Upload"
|
||||
);
|
||||
$s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket");
|
||||
$s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
namespace Connection\Admin\Api;
|
||||
|
||||
use Classes\SubActionManager;
|
||||
|
||||
class ConnectionActionManager extends SubActionManager
|
||||
{
|
||||
|
||||
}
|
||||
38
core/src/Connection/Admin/Api/ConnectionAdminManager.php
Normal file
38
core/src/Connection/Admin/Api/ConnectionAdminManager.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace Connection\Admin\Api;
|
||||
|
||||
use Classes\AbstractModuleManager;
|
||||
use Connection\Common\ConnectionService;
|
||||
|
||||
class ConnectionAdminManager extends AbstractModuleManager
|
||||
{
|
||||
|
||||
public function initialize()
|
||||
{
|
||||
$iceConnect = new ConnectionService();
|
||||
if ($iceConnect->dispatchInstallationRequest()) {
|
||||
$iceConnect->reportInstallationData();
|
||||
}
|
||||
}
|
||||
|
||||
public function initializeUserClasses()
|
||||
{
|
||||
// TODO: Implement initializeUserClasses() method.
|
||||
}
|
||||
|
||||
public function initializeFieldMappings()
|
||||
{
|
||||
// TODO: Implement initializeFieldMappings() method.
|
||||
}
|
||||
|
||||
public function initializeDatabaseErrorMappings()
|
||||
{
|
||||
// TODO: Implement initializeDatabaseErrorMappings() method.
|
||||
}
|
||||
|
||||
public function setupModuleClassDefinitions()
|
||||
{
|
||||
// TODO: Implement setupModuleClassDefinitions() method.
|
||||
}
|
||||
}
|
||||
135
core/src/Connection/Common/ConnectionService.php
Normal file
135
core/src/Connection/Common/ConnectionService.php
Normal file
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
namespace Connection\Common;
|
||||
|
||||
use Classes\BaseService;
|
||||
use Classes\SettingsManager;
|
||||
use Classes\StatsHelper;
|
||||
use GuzzleHttp\Client;
|
||||
use Users\Common\Model\User;
|
||||
|
||||
class ConnectionService
|
||||
{
|
||||
public function getInstallationData()
|
||||
{
|
||||
$proKey = '';
|
||||
if (class_exists('\\Classes\\ProVersion')) {
|
||||
$data = \Classes\ProVersion::$data;
|
||||
$data = json_decode($data, true);
|
||||
$proKey = $data['key'];
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => BaseService::getInstance()->getInstanceId(),
|
||||
'secret' => md5(BaseService::getInstance()->getInstanceKey()),
|
||||
'external_ip' => $this->getExternalIP(),
|
||||
'internal_ip' => $_SERVER['SERVER_ADDR'],
|
||||
'employees' => StatsHelper::getEmployeeCount(),
|
||||
'users' => StatsHelper::getUserCount(),
|
||||
'version' => VERSION,
|
||||
'company' => SettingsManager::getInstance()->getSetting('Company: Name'),
|
||||
'pro_key' => $proKey,
|
||||
];
|
||||
}
|
||||
|
||||
public function getSystemReport()
|
||||
{
|
||||
return [
|
||||
[
|
||||
'name' => 'Installation ID',
|
||||
'value' => BaseService::getInstance()->getInstanceId(),
|
||||
],
|
||||
[
|
||||
'name' => 'PHP Version',
|
||||
'value' => phpversion(),
|
||||
],
|
||||
[
|
||||
'name' => 'PHP Extensions',
|
||||
'value' => join(', ', get_loaded_extensions()),
|
||||
],
|
||||
[
|
||||
'name' => 'Web Server',
|
||||
'value' => $_SERVER['SERVER_SOFTWARE'],
|
||||
],
|
||||
[
|
||||
'name' => 'MySQL Server',
|
||||
'value' => mysqli_get_server_info((new User())->DB()->_connectionID),
|
||||
],
|
||||
[
|
||||
'name' => 'Modules Loaded',
|
||||
'value' => join(', ', array_keys(BaseService::getInstance()->getModuleManagerNames())),
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public function getSystemErrors()
|
||||
{
|
||||
$errors = [];
|
||||
$res = fopen(CLIENT_BASE_PATH.'data/connection_test.txt', "w");
|
||||
|
||||
if (false === $res) {
|
||||
$errors[] = [
|
||||
'type' => 'error',
|
||||
'message' =>
|
||||
'Data directory is not writable. Please make sure php can has write access to <icehrm>/app/data',
|
||||
];
|
||||
} else {
|
||||
fwrite($res, date('Y-m-d'));
|
||||
$file = CLIENT_BASE_URL.'data/connection_test.txt';
|
||||
$file_headers = @get_headers($file);
|
||||
if ($file_headers && $file_headers[0] !== 'HTTP/1.1 404 Not Found') {
|
||||
$errors[] = [
|
||||
'type' => 'error',
|
||||
'link' => 'https://icehrm.gitbook.io/icehrm/getting-started/securing-icehrm-installation',
|
||||
'linkText' => 'Learn how to fix',
|
||||
'message' => 'Data directory is accessible from outside.',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
||||
public function dispatchInstallationRequest()
|
||||
{
|
||||
$timeNow = time();
|
||||
$time = BaseService::getInstance()->getSystemData('sysDataTime');
|
||||
if (null === $time) {
|
||||
BaseService::getInstance()->setSystemData('sysDataTime', $timeNow);
|
||||
return true;
|
||||
}
|
||||
|
||||
$time = intval($time);
|
||||
if ($timeNow > $time + 3600) {
|
||||
BaseService::getInstance()->setSystemData('sysDataTime', $timeNow);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getExternalIP()
|
||||
{
|
||||
try {
|
||||
$externalContent = file_get_contents('http://checkip.dyndns.com/');
|
||||
preg_match('/Current IP Address: \[?([:.0-9a-fA-F]+)\]?/', $externalContent, $m);
|
||||
return $m[1];
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function reportInstallationData()
|
||||
{
|
||||
try {
|
||||
$client = new Client();
|
||||
$response = $client->request('POST', APP_WEB_URL . '/sapi/installtion-data', [
|
||||
'json' => $this->getInstallationData(),
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -45,8 +45,9 @@ class DocumentTaskCreator implements TaskCreator
|
||||
return 0;
|
||||
}
|
||||
|
||||
$query
|
||||
= "select count(id) as c from EmployeeDocuments where employee = ? and valid_until < ? and visible_to = ?";
|
||||
$query = "select count(id) as c
|
||||
from EmployeeDocuments
|
||||
where employee = ? and valid_until < ? and visible_to = ?";
|
||||
|
||||
$user->DB()->SetFetchMode(ADODB_FETCH_ASSOC);
|
||||
// TODO - sending notifications only for Owner documents, this need to be extended later
|
||||
|
||||
@@ -86,7 +86,7 @@ class BaseModel extends \ADOdb_Active_Record
|
||||
}
|
||||
|
||||
$permissions = $allowedAccessMatrix === null ? $this->getDefaultAccessLevel() : $allowedAccessMatrix;
|
||||
;
|
||||
|
||||
foreach ($userRoles as $role) {
|
||||
$userRole = new UserRole();
|
||||
$userRole->Load('id = ?', [$role]);
|
||||
|
||||
8
core/src/Model/SystemData.php
Normal file
8
core/src/Model/SystemData.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace Model;
|
||||
|
||||
class SystemData extends BaseModel
|
||||
{
|
||||
public $table = 'SystemData';
|
||||
}
|
||||
@@ -81,7 +81,7 @@ abstract class ReportBuilder
|
||||
|
||||
$uploadFilesToS3 = SettingsManager::getInstance()->getSetting("Files: Upload Files to S3");
|
||||
$uploadFilesToS3Key = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload");
|
||||
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting("Files: Amazone S3 Secret for File Upload");
|
||||
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Secret for File Upload");
|
||||
$s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket");
|
||||
$s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
|
||||
|
||||
|
||||
@@ -95,7 +95,6 @@ class EmployeeTimeTrackReport extends ClassBasedReportBuilder implements ReportB
|
||||
$reportData[] = ["Department:",$company->title,"","",""];
|
||||
$reportData[] = ["Total Days:","","","",""];
|
||||
|
||||
|
||||
//Iterate date range
|
||||
|
||||
$interval = \DateInterval::createFromDateString('1 day');
|
||||
|
||||
@@ -22,6 +22,11 @@ server {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
location /app/data/ {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
|
||||
location /core/ {
|
||||
deny all;
|
||||
}
|
||||
|
||||
@@ -3165,3 +3165,9 @@ INSERT INTO `PayrollEmployees` VALUES
|
||||
|
||||
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -243,6 +243,7 @@ gulp.task('admin-js', (done) => {
|
||||
const files = [
|
||||
'attendance',
|
||||
'company_structure',
|
||||
'connection',
|
||||
'custom_fields',
|
||||
'clients',
|
||||
'charts',
|
||||
|
||||
19
release.md
19
release.md
@@ -1,5 +1,24 @@
|
||||
# Release Notes IceHrm Open Source
|
||||
|
||||
## Release note v30.0.0.OS
|
||||
|
||||
### 🛡️ Security improvements
|
||||
|
||||
* This release is fixing some critical security issues related to file storage. All IceHrm installations should be upgraded to this version immediately.
|
||||
Please review instructions provided under [this link](https://icehrm.gitbook.io/icehrm/getting-started/securing-icehrm-installation) to make sure your IceHrm installation is secure.
|
||||
|
||||
### 🧲 New features
|
||||
|
||||
* Ability to use Amazon S3 as a secure file storage for IceHrm [find instructions here](https://icehrm.gitbook.io/icehrm/getting-started/using-aws-s3-for-icehrm-file-storage)
|
||||
* Secure local file storage
|
||||
* Connection module for showing critical errors in installation and sending extracting system information
|
||||
* Ability to change AWS region via settings
|
||||
|
||||
### 🐛 Bug fixes
|
||||
* Displaying employees list with non-UTF employee names
|
||||
* Fix extension loading issue. This fixes the issue with loading new extension created following the [documentation](https://icehrm.gitbook.io/icehrm/developer-guide/creating-first-extension).
|
||||
* Fix the issue with editing employee fields
|
||||
|
||||
## Release note v29.0.0.OS
|
||||
|
||||
### 🧲 New features
|
||||
|
||||
29
web/admin/src/connection/components/ConnectionTab.js
Normal file
29
web/admin/src/connection/components/ConnectionTab.js
Normal file
@@ -0,0 +1,29 @@
|
||||
import React from 'react';
|
||||
import {
|
||||
Row,
|
||||
Col,
|
||||
Space,
|
||||
} from 'antd';
|
||||
import IceHrmProData from './IceHrmProData';
|
||||
import SystemData from './SystemData';
|
||||
|
||||
function ConnectionTab(props) {
|
||||
const { employeeCount, systemData } = props;
|
||||
return (
|
||||
<Space direction="vertical" style={{ width: '100%' }}>
|
||||
{employeeCount.isIceHrmPro
|
||||
&&
|
||||
<Row>
|
||||
<Col span={8}>
|
||||
<IceHrmProData {...employeeCount}/>
|
||||
</Col>
|
||||
<Col span={8}/>
|
||||
<Col span={8}/>
|
||||
</Row>
|
||||
}
|
||||
<SystemData {...systemData}/>
|
||||
</Space>
|
||||
);
|
||||
}
|
||||
|
||||
export default ConnectionTab;
|
||||
35
web/admin/src/connection/components/IceHrmProData.js
Normal file
35
web/admin/src/connection/components/IceHrmProData.js
Normal file
@@ -0,0 +1,35 @@
|
||||
import React from 'react';
|
||||
import {
|
||||
Statistic,
|
||||
Row,
|
||||
Col,
|
||||
Button,
|
||||
Progress, Space,
|
||||
} from 'antd';
|
||||
|
||||
const dayjs = require('dayjs');
|
||||
|
||||
function IceHrmProData(props) {
|
||||
const { count, allowed, validUntil, licenseId } = props;
|
||||
return (
|
||||
<>
|
||||
<Row gutter={16}>
|
||||
<Col span={12}>
|
||||
<Statistic title="Number of Employees" value={`${count} / ${allowed}`} />
|
||||
<Space />
|
||||
<Progress type="circle" percent={parseInt((count * 100) / allowed, 10)} width={80} />
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Statistic title="License Valid Until" value={dayjs(validUntil).format('MMM D, YYYY')}/>
|
||||
<Button style={{ marginTop: 16 }} type="primary" onClick={() => {
|
||||
window.open(`https://icehrm.com/renew-icehrmpro-license/${licenseId}`, '_blank');
|
||||
}}>
|
||||
Renew
|
||||
</Button>
|
||||
</Col>
|
||||
</Row>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default IceHrmProData;
|
||||
80
web/admin/src/connection/components/SystemData.js
Normal file
80
web/admin/src/connection/components/SystemData.js
Normal file
@@ -0,0 +1,80 @@
|
||||
import React, { useState } from 'react';
|
||||
import {
|
||||
Table,
|
||||
Typography,
|
||||
Button,
|
||||
Modal,
|
||||
Alert, Space,Card,
|
||||
} from 'antd';
|
||||
import { CopyOutlined } from "@ant-design/icons";
|
||||
const { Link } = Typography;
|
||||
|
||||
function SystemData(props) {
|
||||
const [isModalVisible, setIsModalVisible] = useState(false);
|
||||
const { data, issues } = props;
|
||||
const columns = [
|
||||
{
|
||||
title: 'Name',
|
||||
dataIndex: 'name',
|
||||
key: 'name',
|
||||
},
|
||||
{
|
||||
title: 'Value',
|
||||
dataIndex: 'value',
|
||||
key: 'value',
|
||||
},
|
||||
];
|
||||
|
||||
const showModal = () => {
|
||||
setIsModalVisible(true);
|
||||
};
|
||||
|
||||
const handleOk = () => {
|
||||
setIsModalVisible(false);
|
||||
};
|
||||
|
||||
const handleCancel = () => {
|
||||
setIsModalVisible(false);
|
||||
};
|
||||
|
||||
return (
|
||||
<Space direction="vertical" style={{ width: '100%' }}>
|
||||
{ issues.length > 0 &&
|
||||
<Card title="System Issues">
|
||||
<Space direction="vertical" style={{width: '100%'}}>
|
||||
{issues.map((item) => {
|
||||
return (<Space>
|
||||
<Alert
|
||||
message={item.message}
|
||||
type={item.type}
|
||||
showIcon
|
||||
>
|
||||
</Alert>
|
||||
{item.link &&
|
||||
<Button onClick={() => {
|
||||
window.open(item.link, '_blank');
|
||||
}}>
|
||||
{item.linkText}
|
||||
</Button>
|
||||
}
|
||||
|
||||
</Space>
|
||||
);
|
||||
})}
|
||||
</Space>
|
||||
</Card>
|
||||
}
|
||||
<Card title="System Report">
|
||||
<Table columns={columns} dataSource={data} />
|
||||
<Button type="primary" icon={<CopyOutlined />} onClick={showModal}>
|
||||
Copy System Report
|
||||
</Button>
|
||||
</Card>
|
||||
<Modal title="System Data" visible={isModalVisible} onOk={handleOk} onCancel={handleCancel}>
|
||||
{data.map((item) => (<p>{`${item.name}:${item.value}`}</p>))}
|
||||
</Modal>
|
||||
</Space>
|
||||
);
|
||||
}
|
||||
|
||||
export default SystemData;
|
||||
11
web/admin/src/connection/index.js
Normal file
11
web/admin/src/connection/index.js
Normal file
@@ -0,0 +1,11 @@
|
||||
import { ConnectionAdapter } from './lib';
|
||||
|
||||
function init(data) {
|
||||
const modJsList = {};
|
||||
modJsList.tabConnection = new ConnectionAdapter(data);
|
||||
window.modJs = modJsList.tabConnection;
|
||||
window.modJsList = modJsList;
|
||||
|
||||
}
|
||||
|
||||
window.initAdminConnection = init;
|
||||
32
web/admin/src/connection/lib.js
Normal file
32
web/admin/src/connection/lib.js
Normal file
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* Author: Thilina Hasantha
|
||||
*/
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import ReactModalAdapterBase from '../../../api/ReactModalAdapterBase';
|
||||
import ConnectionTab from './components/ConnectionTab';
|
||||
|
||||
/**
|
||||
* AssetTypeAdapter
|
||||
*/
|
||||
|
||||
class ConnectionAdapter extends ReactModalAdapterBase {
|
||||
constructor(data) {
|
||||
super('', '', '', '');
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
get(callBackData) {
|
||||
const { components } = this.data;
|
||||
ReactDOM.render(
|
||||
<ConnectionTab {...components}/>,
|
||||
document.getElementById('connectionData'),
|
||||
);
|
||||
}
|
||||
|
||||
initSourceMappings() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { ConnectionAdapter };
|
||||
@@ -81,12 +81,13 @@ function download(name, closeCallback, closeCallbackData) {
|
||||
fileParts = data.filename.split('?');
|
||||
fileParts = fileParts[0].split('.');
|
||||
|
||||
if (jQuery.inArray(fileParts[fileParts.length - 1], viewableFiles) >= 0) {
|
||||
|
||||
if (jQuery.inArray(data.ext, viewableFiles) >= 0) {
|
||||
const win = window.open(data.filename, '_blank');
|
||||
win.focus();
|
||||
} else {
|
||||
link = `<a href="${data.filename}" target="_blank">Download File <i class="icon-download-alt"></i> </a>`;
|
||||
if (jQuery.inArray(fileParts[fileParts.length - 1], viewableImages) >= 0) {
|
||||
if (jQuery.inArray(data.ext, viewableImages) >= 0) {
|
||||
link += `<br/><br/><img style="max-width:545px;max-height:350px;" src="${data.filename}"/>`;
|
||||
}
|
||||
modJs.showMessage('Download File Attachment', link, closeCallback, closeCallbackData);
|
||||
|
||||
@@ -37,7 +37,7 @@ class CustomFieldAdapter extends AdapterBase {
|
||||
['id', { label: 'ID', type: 'hidden' }],
|
||||
['name', { label: 'Name', type: 'text', validation: '' }],
|
||||
['display', { label: 'Display Status', type: 'select', source: [['Form', 'Show'], ['Hidden', 'Hidden']] }],
|
||||
['field_type', { label: 'Field Type', type: 'select', source: [['text', 'Text Field'], ['textarea', 'Text Area'], ['select', 'Select'], ['select2', 'Select2'], ['select2multi', 'Multi Select'], ['fileupload', 'File Upload'], ['date', 'Date'], ['datetime', 'Date Time'], ['time', 'Time'], ['signature', 'Signature']] }],
|
||||
['field_type', { label: 'Field Type', type: 'select', source: [['text', 'Text Field'], ['textarea', 'Multiline Text'], ['select', 'Dropdown'], ['select2', 'Searchable DropDown'], ['select2multi', 'Multi Select'], ['fileupload', 'File Upload'], ['date', 'Date'], ['datetime', 'Date Time'], ['time', 'Time'], ['signature', 'Signature']] }],
|
||||
['field_label', { label: 'Field Label', type: 'text', validation: '' }],
|
||||
['field_validation', {
|
||||
label: 'Validation', type: 'select2', validation: 'none', sort: 'none', 'null-label': 'Required', 'allow-null': true, source: [['none', 'None'], ['number', 'Number'], ['numberOrEmpty', 'Number or Empty'], ['float', 'Decimal'], ['email', 'Email'], ['emailOrEmpty', 'Email or Empty']],
|
||||
|
||||
@@ -44,6 +44,7 @@ class ModuleBase {
|
||||
this.currentProfile = null;
|
||||
this.permissions = {};
|
||||
this.baseUrl = null;
|
||||
this.clientUrl = null;
|
||||
this.that = this;
|
||||
}
|
||||
|
||||
@@ -96,6 +97,10 @@ class ModuleBase {
|
||||
this.baseUrl = url;
|
||||
}
|
||||
|
||||
setClientUrl(url) {
|
||||
this.clientUrl = url;
|
||||
}
|
||||
|
||||
setUser(user) {
|
||||
this.user = user;
|
||||
}
|
||||
@@ -143,7 +148,7 @@ class ModuleBase {
|
||||
|
||||
gt(key) {
|
||||
if (this.translations[key] === undefined || this.translations[key] === null) {
|
||||
console.log("Tr:" + key);
|
||||
console.log(`Tr:${key}`);
|
||||
return key;
|
||||
}
|
||||
return this.translations[key][0];
|
||||
@@ -1183,7 +1188,7 @@ class ModuleBase {
|
||||
if (rmf.length > 3) {
|
||||
key = `${key}_${rmf[3]}`;
|
||||
}
|
||||
//value = this.fieldMasterData[`${rmf[0]}_${rmf[1]}_${rmf[2]}`][filters[prop]];
|
||||
// value = this.fieldMasterData[`${rmf[0]}_${rmf[1]}_${rmf[2]}`][filters[prop]];
|
||||
value = this.fieldMasterData[key][filters[prop]];
|
||||
valueOrig = value;
|
||||
}
|
||||
@@ -2102,7 +2107,7 @@ class ModuleBase {
|
||||
$(`${formId} #${fields[i][0]}`).html(object[fields[i][0]]);
|
||||
} else if (fields[i][1].type === 'placeholder') {
|
||||
if (fields[i][1]['remote-source'] !== undefined && fields[i][1]['remote-source'] != null) {
|
||||
//const key = `${fields[i][1]['remote-source'][0]}_${fields[i][1]['remote-source'][1]}_${fields[i][1]['remote-source'][2]}`;
|
||||
// const key = `${fields[i][1]['remote-source'][0]}_${fields[i][1]['remote-source'][1]}_${fields[i][1]['remote-source'][2]}`;
|
||||
const key = this.getRemoteSourceKey(fields[i]);
|
||||
placeHolderVal = this.fieldMasterData[key][object[fields[i][0]]];
|
||||
} else {
|
||||
@@ -2683,6 +2688,11 @@ class ModuleBase {
|
||||
|
||||
return `https://avatars.dicebear.com/api/initials/:${seed}.svg`;
|
||||
}
|
||||
|
||||
downloadPdf(type, data) {
|
||||
const url = `${this.clientUrl}service.php?a=pdf&h=${type}&data=${data}`;
|
||||
window.open(url,'_blank');
|
||||
}
|
||||
}
|
||||
|
||||
export default ModuleBase;
|
||||
|
||||
@@ -70,7 +70,7 @@ class ReactCustomFieldAdapter extends AdapterBase {
|
||||
return [
|
||||
['id', { label: 'ID', type: 'hidden' }],
|
||||
['field_label', { label: 'Field Label', type: 'text', validation: '' }],
|
||||
['field_type', { label: 'Field Type', type: 'select', source: [['text', 'Text Field'], ['textarea', 'Text Area'], ['select', 'Select'], ['select2', 'Select2'], ['select2multi', 'Multi Select'], ['fileupload', 'File Upload'], ['date', 'Date'], ['datetime', 'Date Time'], ['time', 'Time'], ['signature', 'Signature']] }],
|
||||
['field_type', { label: 'Field Type', type: 'select', source: [['text', 'Text Field'], ['textarea', 'Multiline Text'], ['select', 'Dropdown'], ['select2', 'Searchable DropDown'], ['select2multi', 'Multi Select'], ['fileupload', 'File Upload'], ['date', 'Date'], ['datetime', 'Date Time'], ['time', 'Time'], ['signature', 'Signature']] }],
|
||||
['field_validation', {
|
||||
label: 'Validation', type: 'select2', validation: 'none', sort: 'none', 'null-label': 'Required', 'allow-null': true, source: [['none', 'None'], ['number', 'Number'], ['numberOrEmpty', 'Number or Empty'], ['float', 'Decimal'], ['email', 'Email'], ['emailOrEmpty', 'Email or Empty']],
|
||||
}],
|
||||
|
||||
8
web/dist/admin-bundle.js
vendored
8
web/dist/admin-bundle.js
vendored
File diff suppressed because one or more lines are too long
2
web/dist/common.js
vendored
2
web/dist/common.js
vendored
File diff suppressed because one or more lines are too long
10
web/dist/modules-bundle.js
vendored
10
web/dist/modules-bundle.js
vendored
File diff suppressed because one or more lines are too long
5
web/dist/third-party.js
vendored
5
web/dist/third-party.js
vendored
@@ -34737,12 +34737,13 @@ function download(name, closeCallback, closeCallbackData) {
|
||||
fileParts = data.filename.split('?');
|
||||
fileParts = fileParts[0].split('.');
|
||||
|
||||
if (jQuery.inArray(fileParts[fileParts.length - 1], viewableFiles) >= 0) {
|
||||
|
||||
if (jQuery.inArray(data.ext, viewableFiles) >= 0) {
|
||||
const win = window.open(data.filename, '_blank');
|
||||
win.focus();
|
||||
} else {
|
||||
link = `<a href="${data.filename}" target="_blank">Download File <i class="icon-download-alt"></i> </a>`;
|
||||
if (jQuery.inArray(fileParts[fileParts.length - 1], viewableImages) >= 0) {
|
||||
if (jQuery.inArray(data.ext, viewableImages) >= 0) {
|
||||
link += `<br/><br/><img style="max-width:545px;max-height:350px;" src="${data.filename}"/>`;
|
||||
}
|
||||
modJs.showMessage('Download File Attachment', link, closeCallback, closeCallbackData);
|
||||
|
||||
4
web/dist/vendorAntd.js
vendored
4
web/dist/vendorAntd.js
vendored
File diff suppressed because one or more lines are too long
4
web/dist/vendorOther.js
vendored
4
web/dist/vendorOther.js
vendored
File diff suppressed because one or more lines are too long
12
web/package-lock.json
generated
12
web/package-lock.json
generated
@@ -436,9 +436,9 @@
|
||||
"integrity": "sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ=="
|
||||
},
|
||||
"dayjs": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.9.1.tgz",
|
||||
"integrity": "sha512-01NCTBg8cuMJG1OQc6PR7T66+AFYiPwgDvdJmvJBn29NGzIG+DIFxPLNjHzwz3cpFIvG+NcwIjP9hSaPVoOaDg=="
|
||||
"version": "1.10.5",
|
||||
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.5.tgz",
|
||||
"integrity": "sha512-BUFis41ikLz+65iH6LHQCDm4YPMj5r1YFLdupPIyM4SGcXMmtiLQ7U37i+hGS8urIuqe7I/ou3IS1jVc4nbN4g=="
|
||||
},
|
||||
"detect-browser": {
|
||||
"version": "5.1.1",
|
||||
@@ -524,9 +524,9 @@
|
||||
}
|
||||
},
|
||||
"moment": {
|
||||
"version": "2.29.0",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.0.tgz",
|
||||
"integrity": "sha512-z6IJ5HXYiuxvFTI6eiQ9dm77uE0gyy1yXNApVHqTcnIKfY9tIwEjlzsZ6u1LQXvVgKeTnv9Xm7NDvJ7lso3MtA=="
|
||||
"version": "2.29.1",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
|
||||
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
"antd": "^4.1.4",
|
||||
"axios": "^0.20.0",
|
||||
"codemirror": "^5.49.2",
|
||||
"dayjs": "^1.10.5",
|
||||
"react": "^16.13.1",
|
||||
"react-color": "^2.19.3",
|
||||
"react-dom": "^16.13.1",
|
||||
|
||||
Reference in New Issue
Block a user