Compare commits

..

1 Commits

Author SHA1 Message Date
dependabot[bot]
07a5ca4ffb Bump hosted-git-info from 2.8.8 to 2.8.9
Bumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.8.8 to 2.8.9.
- [Release notes](https://github.com/npm/hosted-git-info/releases)
- [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md)
- [Commits](https://github.com/npm/hosted-git-info/compare/v2.8.8...v2.8.9)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-09 22:16:32 +00:00
151 changed files with 37829 additions and 430495 deletions

View File

@@ -1,5 +0,0 @@
// 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
View File

@@ -13,8 +13,6 @@ keys.dev.pub
/app/icehrm.key /app/icehrm.key
/app/data/*.* /app/data/*.*
/app/data/keys/* /app/data/keys/*
!/app/data/index.php
!/app/data/.htaccess
icehrm.key icehrm.key
cache.properties cache.properties
node_modules/* node_modules/*

49
.vscode/launch.json vendored
View File

@@ -1,49 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 0,
"runtimeArgs": [
"-dxdebug.start_with_request=yes"
],
"env": {
"XDEBUG_MODE": "debug,develop",
"XDEBUG_CONFIG": "client_port=${port}"
}
},
{
"name": "Launch Built-in web server",
"type": "php",
"request": "launch",
"runtimeArgs": [
"-dxdebug.mode=debug",
"-dxdebug.start_with_request=yes",
"-S",
"localhost:0"
],
"program": "",
"cwd": "${workspaceRoot}",
"port": 9003,
"serverReadyAction": {
"pattern": "Development Server \\(http://localhost:([0-9]+)\\) started",
"uriFormat": "http://localhost:%s",
"action": "openExternally"
}
}
]
}

View File

@@ -1,2 +0,0 @@
order deny,allow
deny from all

View File

@@ -1 +0,0 @@
<?php

View File

@@ -1,3 +0,0 @@
<?php
include ('config.php');
include (APP_BASE_PATH.'fileupload-new.php');

View File

@@ -23,7 +23,7 @@ if($group == 'admin' || $group == 'modules'){
$moduleName = $name; $moduleName = $name;
$moduleGroup = 'extensions'; $moduleGroup = 'extensions';
$extensionIndex = APP_BASE_PATH.'/../extensions/'.$name.'/web/index.php'; $extensionIndex = APP_BASE_PATH.'/../extensions/'.$name.'/web/index.php';
include APP_BASE_PATH.'extensions/wrapper.php'; include $extensionIndex;
}else{ }else{
exit(); exit();
} }

View File

@@ -19,10 +19,7 @@ $isConfigFileWriteable = is_writable(CLIENT_APP_PATH."config.php");
error_log("Config writable ".$isConfigFileWriteable); error_log("Config writable ".$isConfigFileWriteable);
error_log("Config exists ".file_exists(CLIENT_APP_PATH."config.php")); error_log("Config exists ".file_exists(CLIENT_APP_PATH."config.php"));
if(!$isConfigFileWriteable){ if(!$isConfigFileWriteable){
$errorMap[] = array("important","Configuration file [".CLIENT_APP_PATH."config.php] is not writable","Make this file writable",array( $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"));
"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"); $isConfigSampleFileExists = file_exists(CLIENT_APP_PATH."config.sample.php");
@@ -51,7 +48,7 @@ if(!$isDataFolderExists){
unlink(CLIENT_APP_PATH."data/test.txt"); unlink(CLIENT_APP_PATH."data/test.txt");
} }
if(!$isDataFolderWritable){ 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 755 ".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 777 ".CLIENT_APP_PATH."data"));
} }
} }

View File

@@ -1,2 +0,0 @@
order deny,allow
deny from all

View File

@@ -1,59 +0,0 @@
<?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';?>

View File

@@ -1,12 +0,0 @@
{
"label": "Ice Connect",
"menu": "System",
"order": "9",
"icon": "fa-wifi",
"user_levels": [
"Admin"
],
"permissions": [],
"model_namespace": "\\Connection\\Common\\Model",
"manager": "\\Connection\\Admin\\Api\\ConnectionAdminManager"
}

View File

@@ -19,9 +19,6 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
<div class="tab-pane active" id="tabPageEmployeeFieldName"> <div class="tab-pane active" id="tabPageEmployeeFieldName">
<div id="EmployeeFieldName" class="reviewBlock" data-content="List" style="padding-left:5px;"> <div id="EmployeeFieldName" class="reviewBlock" data-content="List" style="padding-left:5px;">
</div>
<div id="EmployeeFieldNameForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
</div> </div>
</div> </div>
</div> </div>

View File

@@ -6,7 +6,6 @@
use Classes\ModuleBuilder\ModuleBuilder; use Classes\ModuleBuilder\ModuleBuilder;
use Classes\ModuleBuilder\ModuleTab; use Classes\ModuleBuilder\ModuleTab;
use Classes\UIManager;
$moduleName = 'settings'; $moduleName = 'settings';
$moduleGroup = 'admin'; $moduleGroup = 'admin';
@@ -33,7 +32,7 @@ if ( $notCloud ) {
'EmailSetting', 'Setting', 'Email', 'SettingAdapter', '{"category":"Email"}', 'name', false, $options1 'EmailSetting', 'Setting', 'Email', 'SettingAdapter', '{"category":"Email"}', 'name', false, $options1
)); ));
} }
if(defined('LEAVE_ENABLED') && LEAVE_ENABLED == true) { if(!defined('LEAVE_ENABLED') || LDAP_ENABLED == true) {
$moduleBuilder->addModuleOrGroup(new ModuleTab( $moduleBuilder->addModuleOrGroup(new ModuleTab(
'LeaveSetting', 'Setting', 'Leave', 'SettingAdapter', '{"category":"Leave"}', 'name', false, $options1 'LeaveSetting', 'Setting', 'Leave', 'SettingAdapter', '{"category":"Leave"}', 'name', false, $options1
)); ));
@@ -59,7 +58,7 @@ if(!defined('SAML_ENABLED') || SAML_ENABLED == true){
$moduleBuilder->addModuleOrGroup(new ModuleTab( $moduleBuilder->addModuleOrGroup(new ModuleTab(
'OtherSetting','Setting','Other','SettingAdapter','{"category":["Projects","Recruitment","Notifications","Expense","Travel","Api","Overtime"]}','name',false,$options1 'OtherSetting','Setting','Other','SettingAdapter','{"category":["Projects","Recruitment","Notifications","Expense","Travel","Api","Overtime"]}','name',false,$options1
)); ));
echo UIManager::getInstance()->renderModule($moduleBuilder); echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
?> ?>
</div> </div>
<script> <script>

View File

@@ -6,6 +6,8 @@ include("server.includes.inc.php");
if(\Classes\SettingsManager::getInstance()->getSetting('Api: REST Api Enabled') == '1') { if(\Classes\SettingsManager::getInstance()->getSetting('Api: REST Api Enabled') == '1') {
\Utils\LogManager::getInstance()->info("Request: " . $_REQUEST);
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
http_response_code(200); http_response_code(200);
exit(); exit();

View File

@@ -13,10 +13,10 @@ if(!defined('HOME_LINK_OTHERS')){
} }
//Version //Version
define('VERSION', '30.0.0.OS'); define('VERSION', '29.0.0.OS');
define('CACHE_VALUE', '30.0.0.OS.2021-06261009'); define('CACHE_VALUE', '29.0.0.OS.2020-04021509');
define('VERSION_NUMBER', '300000'); define('VERSION_NUMBER', '290000');
define('VERSION_DATE', '26/06/2021'); define('VERSION_DATE', '02/04/2021');
if(!defined('CONTACT_EMAIL')){define('CONTACT_EMAIL','icehrm@gamonoid.com');} if(!defined('CONTACT_EMAIL')){define('CONTACT_EMAIL','icehrm@gamonoid.com');}
if(!defined('KEY_PREFIX')){define('KEY_PREFIX','IceHrm');} if(!defined('KEY_PREFIX')){define('KEY_PREFIX','IceHrm');}

View File

@@ -1,31 +0,0 @@
<?php
use Classes\ExtensionManager;
use Utils\LogManager;
if (!isset($extensionIndex)) {
exit();
}
define('MODULE_PATH',APP_BASE_PATH.'extensions/'.$moduleName);
include APP_BASE_PATH.'header.php';
$extensionManager = new ExtensionManager();
$meta = $extensionManager->getExtensionMetaData($moduleName);
if (!$meta) {
LogManager::getInstance()->error("Extension metadata.json not found for $moduleName");
exit();
}
if ($meta->headless) {
LogManager::getInstance()->error("Extension running in headless mode for $moduleName");
exit();
}
?>
<script type="text/javascript" src="<?=BASE_URL.'dist/vendorReact.js'?>?v=<?=$jsVersion?>"></script>
<script type="text/javascript" src="<?=BASE_URL.'dist/vendorAntd.js'?>?v=<?=$jsVersion?>"></script>
<script type="text/javascript" src="<?=BASE_URL.'dist/vendorAntdIcons.js'?>?v=<?=$jsVersion?>"></script>
<script type="text/javascript" src="<?=BASE_URL.'dist/vendorAntv.js'?>?v=<?=$jsVersion?>"></script>
<script type="text/javascript" src="<?=BASE_URL.'dist/vendorOther.js'?>?v=<?=$jsVersion?>"></script>
<script type="text/javascript" src="<?=EXTENSIONS_URL.$moduleName.'/dist/'.$moduleName.'.js'?>?v=<?=$jsVersion?>"></script>
<?php
include $extensionIndex;
include APP_BASE_PATH.'footer.php';
?>

View File

@@ -139,7 +139,7 @@ $result = $uploader->handleUpload(CLIENT_BASE_PATH.'data/',$saveFileName);
$uploadFilesToS3 = \Classes\SettingsManager::getInstance()->getSetting("Files: Upload Files to S3"); $uploadFilesToS3 = \Classes\SettingsManager::getInstance()->getSetting("Files: Upload Files to S3");
$uploadFilesToS3Key = \Classes\SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload"); $uploadFilesToS3Key = \Classes\SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload");
$uploadFilesToS3Secret = \Classes\SettingsManager::getInstance()->getSetting( $uploadFilesToS3Secret = \Classes\SettingsManager::getInstance()->getSetting(
"Files: Amazon S3 Secret for File Upload" "Files: Amazone S3 Secret for File Upload"
); );
$s3Bucket = \Classes\SettingsManager::getInstance()->getSetting("Files: S3 Bucket"); $s3Bucket = \Classes\SettingsManager::getInstance()->getSetting("Files: S3 Bucket");
$s3WebUrl = \Classes\SettingsManager::getInstance()->getSetting("Files: S3 Web Url"); $s3WebUrl = \Classes\SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
@@ -188,7 +188,7 @@ if($result['success'] == 1){
if($uploadedToS3){ if($uploadedToS3){
$result['data'] = $file_url; $result['data'] = $file_url;
}else{ }else{
$result['data'] = \Classes\FileService::getInstance()->getLocalSecureUrl($result['filename']); $result['data'] = CLIENT_BASE_URL.'data/'.$result['filename'];
} }
$result['data'] .= "|".$saveFileName; $result['data'] .= "|".$saveFileName;
$result['data'] .= "|".$file->id; $result['data'] .= "|".$file->id;

View File

@@ -18,7 +18,6 @@
modJsList[prop].setUser(<?=json_encode(\Classes\BaseService::getInstance()->cleanUpUser($user))?>); modJsList[prop].setUser(<?=json_encode(\Classes\BaseService::getInstance()->cleanUpUser($user))?>);
modJsList[prop].initSourceMappings(); modJsList[prop].initSourceMappings();
modJsList[prop].setBaseUrl('<?=BASE_URL?>'); modJsList[prop].setBaseUrl('<?=BASE_URL?>');
modJsList[prop].setClientUrl('<?=CLIENT_BASE_URL?>');
modJsList[prop].setCurrentProfile(<?=json_encode($activeProfile)?>); modJsList[prop].setCurrentProfile(<?=json_encode($activeProfile)?>);
modJsList[prop].setInstanceId('<?=\Classes\BaseService::getInstance()->getInstanceId()?>'); modJsList[prop].setInstanceId('<?=\Classes\BaseService::getInstance()->getInstanceId()?>');
modJsList[prop].setGoogleAnalytics(ga); modJsList[prop].setGoogleAnalytics(ga);
@@ -147,9 +146,7 @@
</script> </script>
<?php <?php include 'popups.php';?>
include 'popups.php';
?>
<script src="<?=BASE_URL?>js/bootstrap-datatable.js"></script> <script src="<?=BASE_URL?>js/bootstrap-datatable.js"></script>
<div id="jt" t="<?=$jwtService->create(3600)?>"></div> <div id="jt" t="<?=$jwtService->create(3600)?>"></div>
</body> </body>

View File

@@ -1,171 +0,0 @@
<!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>&nbsp;&nbsp;* The line thickness was too large when printed under Windows 98 SE and ME.<br>&nbsp;&nbsp;* 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>

View File

@@ -1,10 +0,0 @@
<?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));
?>

View File

@@ -1,10 +0,0 @@
<?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));
?>

View File

@@ -1,10 +0,0 @@
<?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));
?>

View File

@@ -1,10 +0,0 @@
<?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));
?>

View File

@@ -1,21 +0,0 @@
<?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));
?>

View File

@@ -1,21 +0,0 @@
<?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));
?>

View File

@@ -1,21 +0,0 @@
<?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));
?>

View File

@@ -1,21 +0,0 @@
<?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));
?>

View File

@@ -1,20 +0,0 @@
<?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));
?>

View File

@@ -1,21 +0,0 @@
<?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));
?>

View File

@@ -1,21 +0,0 @@
<?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));
?>

View File

@@ -1,21 +0,0 @@
<?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));
?>

View File

@@ -1,21 +0,0 @@
<?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));
?>

View File

@@ -1,20 +0,0 @@
<?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));
?>

File diff suppressed because it is too large Load Diff

View File

@@ -69,9 +69,9 @@ if (empty($user) || empty($user->email)) {
$suser->Load("email = ?", array($ssoUserEmail)); $suser->Load("email = ?", array($ssoUserEmail));
} }
LogManager::getInstance()->info('SSO SAML User:'.print_r($suser->email, true)); LogManager::getInstance()->info('SSO SAML User:'.print_r($suser, true));
if (empty($suser) || empty($suser->id)) { if (empty($suser)) {
header("Location:" . CLIENT_BASE_URL . "logout.php"); header("Location:" . CLIENT_BASE_URL . "login.php?f=1");
exit(); exit();
} }
$ssoUserLoaded = true; $ssoUserLoaded = true;

View File

@@ -1,9 +1,5 @@
<?php <?php
$migrationList = []; $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[] = 'v20210402_280006_modify_attendance_rep';
$migrationList[] = 'v20210327_280005_saml_settings'; $migrationList[] = 'v20210327_280005_saml_settings';
$migrationList[] = 'v20210228_280003_add_share_with_employee'; $migrationList[] = 'v20210228_280003_add_share_with_employee';

View File

@@ -1,31 +0,0 @@
<?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;
}
}

View File

@@ -1,31 +0,0 @@
<?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;
}
}

View File

@@ -1,22 +0,0 @@
<?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;
}
}

View File

@@ -1,28 +0,0 @@
<?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;
}
}

View File

@@ -3,28 +3,20 @@
use Classes\BaseService; use Classes\BaseService;
use Classes\CustomFieldManager; use Classes\CustomFieldManager;
use Classes\JwtTokenService; use Classes\JwtTokenService;
use Classes\MemoryCacheService;
use Classes\Migration\MigrationManager; use Classes\Migration\MigrationManager;
use Classes\NotificationManager; use Classes\NotificationManager;
use Classes\RedisCacheService;
use Classes\ReportHandler; use Classes\ReportHandler;
use Classes\SettingsManager; use Classes\SettingsManager;
use Model\Audit;
use Model\BaseModel; use Model\BaseModel;
use Model\DataEntryBackup;
use Model\File;
use Model\Notification;
use Model\Report;
use Model\RestAccessToken;
use Model\Setting;
use Utils\LogManager; 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.inc.php');
include(APP_BASE_PATH.'lib/adodb512/adodb-active-record.inc.php'); include(APP_BASE_PATH.'lib/adodb512/adodb-active-record.inc.php');
$ADODB_ASSOC_CASE = 2; $ADODB_ASSOC_CASE = 2;
include(APP_BASE_PATH.'lib/fpdf/fpdf.php');
//detect admin and user modules //detect admin and user modules
if (defined("MODULE_PATH")) { if (defined("MODULE_PATH")) {
$tArr = explode("/", MODULE_PATH); $tArr = explode("/", MODULE_PATH);
@@ -46,13 +38,13 @@ $dbLocal = NewADOConnection('mysqli');
$res = $dbLocal->Connect(APP_HOST, APP_USERNAME, APP_PASSWORD, APP_DB); $res = $dbLocal->Connect(APP_HOST, APP_USERNAME, APP_PASSWORD, APP_DB);
File::SetDatabaseAdapter($dbLocal); \Model\File::SetDatabaseAdapter($dbLocal);
Setting::SetDatabaseAdapter($dbLocal); \Model\Setting::SetDatabaseAdapter($dbLocal);
Report::SetDatabaseAdapter($dbLocal); \Model\Report::SetDatabaseAdapter($dbLocal);
DataEntryBackup::SetDatabaseAdapter($dbLocal); \Model\DataEntryBackup::SetDatabaseAdapter($dbLocal);
Audit::SetDatabaseAdapter($dbLocal); \Model\Audit::SetDatabaseAdapter($dbLocal);
Notification::SetDatabaseAdapter($dbLocal); \Model\Notification::SetDatabaseAdapter($dbLocal);
RestAccessToken::SetDatabaseAdapter($dbLocal); \Model\RestAccessToken::SetDatabaseAdapter($dbLocal);
$baseService = BaseService::getInstance(); $baseService = BaseService::getInstance();
@@ -80,19 +72,14 @@ if (defined('REDIS_SERVER_URI')
&& QUERY_CACHE_TYPE === 'redis' && QUERY_CACHE_TYPE === 'redis'
) { ) {
BaseService::getInstance()->setCacheService( BaseService::getInstance()->setCacheService(
new RedisCacheService(REDIS_SERVER_URI, CLIENT_NAME) new \Classes\RedisCacheService(REDIS_SERVER_URI, CLIENT_NAME)
); );
} else { } else {
BaseService::getInstance()->setCacheService( BaseService::getInstance()->setCacheService(
new MemoryCacheService(CLIENT_NAME) new \Classes\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"); $samlEnabled = SettingsManager::getInstance()->getSetting("SAML: Enabled");
if ($samlEnabled === '1') { if ($samlEnabled === '1') {
include APP_BASE_PATH . 'lib/saml2/Utilities.php'; include APP_BASE_PATH . 'lib/saml2/Utilities.php';

View File

@@ -3,10 +3,7 @@
use Classes\BaseService; use Classes\BaseService;
use Classes\IceResponse; use Classes\IceResponse;
use Classes\PasswordManager; use Classes\PasswordManager;
use Classes\Pdf\PDFRegister;
use Classes\SettingsManager;
use Metadata\Common\Model\SupportedLanguage; use Metadata\Common\Model\SupportedLanguage;
use Model\File;
use Users\Common\Model\User; use Users\Common\Model\User;
use Utils\LogManager; use Utils\LogManager;
use Classes\Exception\IceHttpException; use Classes\Exception\IceHttpException;
@@ -176,20 +173,19 @@ try {// Domain aware input cleanup
$type = strtolower(substr($file->filename, strrpos($file->filename, ".") + 1)); $type = strtolower(substr($file->filename, strrpos($file->filename, ".") + 1));
if ($file->name == $name) { if ($file->name == $name) {
$ret['status'] = "SUCCESS"; $ret['status'] = "SUCCESS";
$file->ext = explode('.', $file->filename)[1]; if (\Classes\SettingsManager::getInstance()->getSetting("Files: Upload Files to S3") == '1') {
if (SettingsManager::getInstance()->getSetting("Files: Upload Files to S3") == '1') { $uploadFilesToS3Key = \Classes\SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload");
$uploadFilesToS3Key = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload"); $uploadFilesToS3Secret = \Classes\SettingsManager::getInstance()->getSetting("Files: Amazone S3 Secret for File Upload");
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Secret for File Upload");
$s3FileSys = new \Classes\S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret); $s3FileSys = new \Classes\S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret);
$s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url"); $s3WebUrl = \Classes\SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
$fileUrl = $s3WebUrl . CLIENT_NAME . "/" . $file->filename; $fileUrl = $s3WebUrl . CLIENT_NAME . "/" . $file->filename;
$fileUrl = $s3FileSys->generateExpiringURL($fileUrl); $fileUrl = $s3FileSys->generateExpiringURL($fileUrl);
$file->filename = $fileUrl; $file->filename = $fileUrl;
} else { } else {
$file->filename = \Classes\FileService::getInstance()->getLocalSecureUrl($file->filename); $file->filename = CLIENT_BASE_URL . 'data/' . $file->filename;
} }
$ret['data'] = BaseService::getInstance()->cleanUpAll($file); $ret['data'] = $file;
} else { } else {
$ret['status'] = "ERROR"; $ret['status'] = "ERROR";
} }
@@ -197,49 +193,21 @@ try {// Domain aware input cleanup
$fileName = $_REQUEST['file']; $fileName = $_REQUEST['file'];
$fileName = str_replace("..", "", $fileName); $fileName = str_replace("..", "", $fileName);
$fileName = str_replace("/", "", $fileName); $fileName = str_replace("/", "", $fileName);
$fileName = CLIENT_BASE_PATH . 'data/' . $fileName;
$file = new File(); if (!file_exists($fileName)) {
$file->Load('name = ?', array($fileName));
if ($fileName !== $file->name) {
$file->Load('filename = ?', array($fileName));
}
if (empty($file->id)) {
exit; exit;
} }
if (!file_exists(CLIENT_BASE_PATH . 'data/' . $file->filename)) {
exit;
}
$extension = explode('.', $file->filename)[1];
header('Content-Description: File Transfer'); header('Content-Description: File Transfer');
if ('png' === $extension) { header('Content-Type: application/octet-stream');
header('Content-Type: image/png'); header('Content-Disposition: attachment; filename=' . basename($fileName));
} elseif ('gif' === $extension) { header('Content-Transfer-Encoding: binary');
header('Content-Type: image/png'); header('Expires: 0');
} elseif ('jpg' === $extension || 'jpeg' === $extension) { header('Cache-Control: must-revalidate');
header('Content-Type: image/jpeg'); header('Pragma: public');
} elseif ('pdf' === $extension) { header('Content-Length: ' . filesize($fileName));
header('Content-Type: application/pdf');
} elseif ('xml' === $extension) {
header('Content-Type: application/xml');
} else {
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
}
header('Content-Disposition: attachment; filename=' . basename($file->filename));
header('Content-Length: ' . filesize(CLIENT_BASE_PATH . 'data/' . $file->filename));
ob_clean(); ob_clean();
flush(); flush();
readfile(CLIENT_BASE_PATH . 'data/' . $file->filename); readfile($fileName);
exit; exit;
} else if ($action == 'rsp') { // linked clicked from password change email } else if ($action == 'rsp') { // linked clicked from password change email
@@ -337,31 +305,13 @@ try {// Domain aware input cleanup
} }
} }
} }
try {
if ($action == 'pdf') { echo BaseService::getInstance()->safeJsonEncode($ret);
$data = $_REQUEST['data']; } catch (Exception $e) {
$hash = $_REQUEST['h']; LogManager::getInstance()->error($e->getMessage());
PDFRegister::init(); LogManager::getInstance()->notifyException($e);
$callback = PDFRegister::get($hash); echo json_encode(['status' => 'Error']);
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) {
LogManager::getInstance()->error($e->getMessage());
LogManager::getInstance()->notifyException($e);
echo json_encode(['status' => 'Error']);
}
} }
} catch (IceHttpException $e) { } catch (IceHttpException $e) {
http_response_code($e->getCode()); http_response_code($e->getCode());
echo json_encode(['message' => $e->getMessage()]); echo json_encode(['message' => $e->getMessage()]);

View File

@@ -109,10 +109,11 @@ class AttendanceStatus extends BaseModel
$data[] = $entry; $data[] = $entry;
} }
function cmp($a, $b)
usort($data, function ($a, $b) { {
return $a->statusId - $b->statusId; return $a->statusId - $b->statusId;
}); }
usort($data, "cmp");
return $data; return $data;
} }

View File

@@ -1,8 +0,0 @@
<?php
namespace Classes;
interface Authorizable
{
public function granted() : bool;
}

View File

@@ -22,7 +22,6 @@ use Metadata\Common\Model\CalculationHook;
use Model\BaseModel; use Model\BaseModel;
use Model\DataEntryBackup; use Model\DataEntryBackup;
use Model\Setting; use Model\Setting;
use Model\SystemData;
use Modules\Common\Model\Module; use Modules\Common\Model\Module;
use Permissions\Common\Model\Permission; use Permissions\Common\Model\Permission;
use Users\Common\Model\User; use Users\Common\Model\User;
@@ -1979,38 +1978,4 @@ END;
$dbUser = $this->getCurrentDBUser(); $dbUser = $this->getCurrentDBUser();
return RestApiManager::getInstance()->getAccessTokenForUser($dbUser); 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;
}
} }

View File

@@ -76,20 +76,15 @@ class FileService
if (file_exists("/tmp/".$file->filename."_orig")) { if (file_exists("/tmp/".$file->filename."_orig")) {
//Resize image to 100 //Resize image to 100
try { $img = new \Classes\SimpleImage("/tmp/".$file->filename."_orig");
$img = new \Classes\SimpleImage("/tmp/" . $file->filename . "_orig"); $img->fitToWidth(140);
$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( $uploadFilesToS3Key = SettingsManager::getInstance()->getSetting(
"Files: Amazon S3 Key for File Upload" "Files: Amazon S3 Key for File Upload"
); );
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting( $uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting(
"Files: Amazon S3 Secret for File Upload" "Files: Amazone S3 Secret for File Upload"
); );
$s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket"); $s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket");
@@ -137,7 +132,11 @@ class FileService
if (empty($file->id)) { if (empty($file->id)) {
LogManager::getInstance()->info("Small profile image ".$profileImage->name."_small not found"); LogManager::getInstance()->info("Small profile image ".$profileImage->name."_small not found");
if (file_exists(CLIENT_BASE_PATH.'data/'.$profileImage->filename)) { $largeFileUrl = $this->getFileUrl($profileImage->name);
file_put_contents("/tmp/".$profileImage->filename."_orig", file_get_contents($largeFileUrl));
if (file_exists("/tmp/".$profileImage->filename."_orig")) {
//Resize image to 100 //Resize image to 100
$file->name = $profileImage->name."_small"; $file->name = $profileImage->name."_small";
@@ -145,19 +144,16 @@ class FileService
$file->$signInMappingField = $profileImage->$signInMappingField; $file->$signInMappingField = $profileImage->$signInMappingField;
$file->filename = $file->name.str_replace($profileImage->name, "", $profileImage->filename); $file->filename = $file->name.str_replace($profileImage->name, "", $profileImage->filename);
try { $img = new \Classes\SimpleImage("/tmp/".$profileImage->filename."_orig");
$img = new \Classes\SimpleImage(CLIENT_BASE_PATH . 'data/' . $profileImage->filename); $img->fitToWidth(140);
$img->fitToWidth(140);
$img->save(CLIENT_BASE_PATH . 'data/' . $file->filename); $img->save(CLIENT_BASE_PATH.'data/'.$file->filename);
$file->employee = $profileImage->employee; $file->employee = $profileImage->employee;
$file->file_group = 'profile_image_small'; $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->size_text = $this->getReadableSize($file->size);
$file->Save(); $file->Save();
} catch (\Exception $e) { unlink("/tmp/".$file->filename."_orig");
LogManager::getInstance()->error($e->getTraceAsString());
return null;
}
return $file; return $file;
} }
@@ -186,7 +182,7 @@ class FileService
"Files: Amazon S3 Key for File Upload" "Files: Amazon S3 Key for File Upload"
); );
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting( $uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting(
"Files: Amazon S3 Secret for File Upload" "Files: Amazone S3 Secret for File Upload"
); );
$s3FileSys = new S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret); $s3FileSys = new S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret);
$s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url"); $s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
@@ -208,7 +204,7 @@ class FileService
$profile->image = $file->filename; $profile->image = $file->filename;
} else { } else {
$fileNew = $this->checkAddSmallProfileImage($file); $fileNew = $this->checkAddSmallProfileImage($file);
$profile->image = $this->getFileUrl($fileNew->filename); $profile->image = CLIENT_BASE_URL.'data/'.$fileNew->filename;
} }
} else { } else {
$profile->image = $this->generateProfileImage($profile->first_name, $profile->last_name); $profile->image = $this->generateProfileImage($profile->first_name, $profile->last_name);
@@ -229,7 +225,7 @@ class FileService
"Files: Amazon S3 Key for File Upload" "Files: Amazon S3 Key for File Upload"
); );
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting( $uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting(
"Files: Amazon S3 Secret for File Upload" "Files: Amazone S3 Secret for File Upload"
); );
$s3FileSys = new S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret); $s3FileSys = new S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret);
$s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url"); $s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
@@ -245,7 +241,7 @@ class FileService
} elseif (substr($file->filename, 0, 8) === 'https://') { } elseif (substr($file->filename, 0, 8) === 'https://') {
$profile->image = $file->filename; $profile->image = $file->filename;
} else { } else {
$profile->image = $this->getLocalSecureUrl($file->filename); $profile->image = CLIENT_BASE_URL.'data/'.$file->filename;
} }
} else { } else {
$profile->image = $this->generateProfileImage($profile->first_name, $profile->last_name); $profile->image = $this->generateProfileImage($profile->first_name, $profile->last_name);
@@ -259,10 +255,6 @@ class FileService
$file = new File(); $file = new File();
$file->Load('name = ?', array($fileName)); $file->Load('name = ?', array($fileName));
if ($fileName !== $file->name) {
$file->Load('filename = ?', array($fileName));
}
$uploadFilesToS3 = SettingsManager::getInstance()->getSetting("Files: Upload Files to S3"); $uploadFilesToS3 = SettingsManager::getInstance()->getSetting("Files: Upload Files to S3");
if ($uploadFilesToS3 == "1") { if ($uploadFilesToS3 == "1") {
@@ -270,7 +262,7 @@ class FileService
"Files: Amazon S3 Key for File Upload" "Files: Amazon S3 Key for File Upload"
); );
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting( $uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting(
"Files: Amazon S3 Secret for File Upload" "Files: Amazone S3 Secret for File Upload"
); );
$s3FileSys = new S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret); $s3FileSys = new S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret);
$s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url"); $s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
@@ -290,22 +282,10 @@ class FileService
return $expireUrl; return $expireUrl;
} else { } else {
return CLIENT_BASE_URL.'service.php?a=download&file='.$file->filename; return CLIENT_BASE_URL.'data/'.$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) public function deleteProfileImage($profileId)
{ {
$file = new File(); $file = new File();
@@ -345,7 +325,7 @@ class FileService
"Files: Amazon S3 Key for File Upload" "Files: Amazon S3 Key for File Upload"
); );
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting( $uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting(
"Files: Amazon S3 Secret for File Upload" "Files: Amazone S3 Secret for File Upload"
); );
$s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket"); $s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket");
@@ -375,7 +355,7 @@ class FileService
"Files: Amazon S3 Key for File Upload" "Files: Amazon S3 Key for File Upload"
); );
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting( $uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting(
"Files: Amazon S3 Secret for File Upload" "Files: Amazone S3 Secret for File Upload"
); );
$s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket"); $s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket");
@@ -420,34 +400,15 @@ class FileService
{ {
$seed = substr($first, 0, 1); $seed = substr($first, 0, 1);
if (empty($last)) { if (empty($last)) {
$seed .= utf8_encode(substr($first, -1)); $seed .= substr($first, -1);
} else { } else {
$seed .= utf8_encode(substr($last, 0, 1)); $seed .= substr($last, 0, 1);
} }
// TODO - remove code after chinese character issue is resolved md5($seed . $last);
// 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( return sprintf(
'https://avatars.dicebear.com/api/initials/:%s.svg', 'https://avatars.dicebear.com/api/initials/:%s.svg',
$seed . substr(md5($first . $last), -5) $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;
}
} }

View File

@@ -8,7 +8,6 @@
namespace Classes\ModuleBuilderV2; namespace Classes\ModuleBuilderV2;
use Classes\BaseService;
use Classes\PermissionManager; use Classes\PermissionManager;
class ModuleBuilder class ModuleBuilder
@@ -18,7 +17,7 @@ class ModuleBuilder
public function __construct() public function __construct()
{ {
$this->user = BaseService::getInstance()->getCurrentUser(); $this->user = \Classes\BaseService::getInstance()->getCurrentUser();
} }
/** /**

View File

@@ -1,162 +0,0 @@
<?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);
}
}

View File

@@ -1,27 +0,0 @@
<?php
namespace Classes\Pdf;
use Invoices\InvoicePDFBuilder;
class PDFRegister
{
protected static $register = [];
public static function init()
{
self::put('invoice', function ($data) {
return new InvoicePDFBuilder($data);
});
}
public static function put($key, $callback)
{
self::$register[$key] = $callback;
}
public static function get($key)
{
return self::$register[$key];
}
}

View File

@@ -1,8 +0,0 @@
<?php
namespace Classes\Pdf;
interface PdfBuilder
{
public function createPdf();
}

View File

@@ -1,27 +0,0 @@
<?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]);
}
}

View File

@@ -1,33 +0,0 @@
<?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;
}
}

View File

@@ -121,7 +121,7 @@ class Uploader
$uploadFilesToS3 = SettingsManager::getInstance()->getSetting("Files: Upload Files to S3"); $uploadFilesToS3 = SettingsManager::getInstance()->getSetting("Files: Upload Files to S3");
$uploadFilesToS3Key = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload"); $uploadFilesToS3Key = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload");
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting( $uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting(
"Files: Amazon S3 Secret for File Upload" "Files: Amazone S3 Secret for File Upload"
); );
$s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket"); $s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket");
$s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url"); $s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url");

View File

@@ -1,9 +0,0 @@
<?php
namespace Connection\Admin\Api;
use Classes\SubActionManager;
class ConnectionActionManager extends SubActionManager
{
}

View File

@@ -1,38 +0,0 @@
<?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.
}
}

View File

@@ -1,135 +0,0 @@
<?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;
}
}

View File

@@ -45,9 +45,8 @@ class DocumentTaskCreator implements TaskCreator
return 0; return 0;
} }
$query = "select count(id) as c $query
from EmployeeDocuments = "select count(id) as c from EmployeeDocuments where employee = ? and valid_until < ? and visible_to = ?";
where employee = ? and valid_until < ? and visible_to = ?";
$user->DB()->SetFetchMode(ADODB_FETCH_ASSOC); $user->DB()->SetFetchMode(ADODB_FETCH_ASSOC);
// TODO - sending notifications only for Owner documents, this need to be extended later // TODO - sending notifications only for Owner documents, this need to be extended later

View File

@@ -86,7 +86,7 @@ class BaseModel extends \ADOdb_Active_Record
} }
$permissions = $allowedAccessMatrix === null ? $this->getDefaultAccessLevel() : $allowedAccessMatrix; $permissions = $allowedAccessMatrix === null ? $this->getDefaultAccessLevel() : $allowedAccessMatrix;
;
foreach ($userRoles as $role) { foreach ($userRoles as $role) {
$userRole = new UserRole(); $userRole = new UserRole();
$userRole->Load('id = ?', [$role]); $userRole->Load('id = ?', [$role]);

View File

@@ -1,8 +0,0 @@
<?php
namespace Model;
class SystemData extends BaseModel
{
public $table = 'SystemData';
}

View File

@@ -81,7 +81,7 @@ abstract class ReportBuilder
$uploadFilesToS3 = SettingsManager::getInstance()->getSetting("Files: Upload Files to S3"); $uploadFilesToS3 = SettingsManager::getInstance()->getSetting("Files: Upload Files to S3");
$uploadFilesToS3Key = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload"); $uploadFilesToS3Key = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload");
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Secret for File Upload"); $uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting("Files: Amazone S3 Secret for File Upload");
$s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket"); $s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket");
$s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url"); $s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url");

View File

@@ -90,11 +90,12 @@ class EmployeeTimeTrackReport extends ClassBasedReportBuilder implements ReportB
"Last Punch-Out Time", "Last Punch-Out Time",
"Time in Attendance (Hours)", "Time in Attendance (Hours)",
"Time in Time-sheets (Hours)", "Time in Time-sheets (Hours)",
]; ];
$reportData[] = ["Employee:",$employeeObject->first_name." ".$employeeObject->last_name,"","",""]; $reportData[] = ["Employee:",$employeeObject->first_name." ".$employeeObject->last_name,"","",""];
$reportData[] = ["Department:",$company->title,"","",""]; $reportData[] = ["Department:",$company->title,"","",""];
$reportData[] = ["Total Days:","","","",""]; $reportData[] = ["Total Days:","","","",""];
//Iterate date range //Iterate date range
$interval = \DateInterval::createFromDateString('1 day'); $interval = \DateInterval::createFromDateString('1 day');

View File

@@ -22,11 +22,6 @@ server {
try_files $uri $uri/ =404; try_files $uri $uri/ =404;
} }
location /app/data/ {
deny all;
return 404;
}
location /core/ { location /core/ {
deny all; deny all;
} }

View File

@@ -3165,9 +3165,3 @@ INSERT INTO `PayrollEmployees` VALUES
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

View File

@@ -1 +0,0 @@
git keep

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +0,0 @@
<?php
require_once __DIR__.'/src/Invoices/Extension.php';
require_once __DIR__.'/src/Invoices/Manager.php';
require_once __DIR__.'/src/Invoices/Migration.php';
require_once __DIR__.'/src/Invoices/Model/Invoice.php';

View File

@@ -1,14 +0,0 @@
{
"label": "Invoices",
"menu": ["Invoices", "fa-file"],
"icon": "fa-file-invoice",
"user_levels": [
"Admin",
"Manager",
"User"
],
"model_namespace": "\\Invoices\\Model",
"manager": "\\Invoices\\Extension",
"action": "\\Invoices\\Manager",
"headless": false
}

View File

@@ -1,30 +0,0 @@
<?php
namespace Invoices;
use Classes\IceExtension;
class Extension extends IceExtension
{
public function install() {
$migration = new Migration();
return $migration->up();
}
public function uninstall() {
$migration = new Migration();
return $migration->down();
}
public function setupModuleClassDefinitions()
{
$this->addModelClass('Invoice');
}
public function setupRestEndPoints()
{
}
}

View File

@@ -1,55 +0,0 @@
<?php
namespace Invoices;
use Classes\Authorizable;
use Classes\BaseService;
use Classes\IceResponse;
use Classes\Pdf\PdfBuilder;
use Invoices\Model\Invoice;
use Invoices\Pdf\InvoicePdf;
class InvoicePDFBuilder implements Authorizable, PdfBuilder
{
protected $formId;
public function __construct($formId)
{
$this->formId = $formId;
}
public function granted(): bool
{
$empForm = new EmployeeForm();
$empForm->Load("id = ?", array($this->formId));
$currentEmployeeId = BaseService::getInstance()->getCurrentProfileId();
$user = BaseService::getInstance()->getCurrentUser();
return ($currentEmployeeId == $empForm->employee
|| $user->user_level === 'Admin'
|| BaseService::getInstance()->isSubordinateEmployee($currentEmployeeId, $empForm->employee)
);
}
public function createPdf()
{
$response = FormsActionManager::getFormDataById($this->formId);
if ($response->getStatus() === IceResponse::ERROR) {
return null;
}
$form = $response->getData()['form'];
$invoiceForm = $response->getData()['data'];
$invoice = new Invoice();
$invoice->Load('id = ?', [$invoiceForm->invoice]);
//$employee = FileService::getInstance()->updateSmallProfileImage($employee);
$pdf = new InvoicePdf($invoice);
$pdf->initialize($form->name);
$pdf->process();
return $pdf;
}
}

View File

@@ -1,15 +0,0 @@
<?php
namespace Invoices;
use Classes\IceResponse;
use Classes\SubActionManager;
class Manager extends SubActionManager
{
public function printInvoice($req)
{
$id = $req->id;
return new IceResponse(IceResponse::SUCCESS, true);
}
}

View File

@@ -1,53 +0,0 @@
<?php
namespace Invoices;
use Classes\Migration\AbstractMigration;
class Migration extends AbstractMigration
{
public function up()
{
$sql = <<<'SQL'
create table Invoices
(
id bigint auto_increment primary key,
paymentId bigint not null,
invoiceId bigint not null,
description varchar(500) charset utf8 not null,
buyerName varchar(200) charset utf8 not null,
buyerAddress varchar(200) charset utf8 not null,
buyerPostalCode varchar(200) charset utf8 not null,
buyerCountry varchar(200) charset utf8 not null,
buyerVatId varchar(50) charset utf8 not null,
sellerName varchar(200) charset utf8 not null,
sellerAddress varchar(200) null,
sellerCountry varchar(200) charset utf8 not null,
sellerVatId varchar(50) charset utf8 not null,
amount decimal(10,2) default 0.00 null,
vat decimal(10,2) default 0.00 null,
vatRate decimal(10,2) default 0.00 null,
issuedDate datetime null,
dueDate datetime null,
paidDate datetime null,
created datetime null,
updated datetime null,
status enum('Pending', 'Paid', 'Processing', 'Draft', 'Sent', 'Canceled') collate utf8_unicode_ci default 'Pending' null,
acceptPayments tinyint default 0 null,
buyerEmail varchar(125) charset utf8 null,
items text charset utf8 null,
constraint invoiceId
unique (invoiceId)
)
collate=utf8mb4_unicode_ci;
SQL;
return $this->executeQuery($sql);
}
public function down()
{
$sql = <<<'SQL'
DROP TABLE IF EXISTS `Invoices`;
SQL;
return $this->executeQuery($sql);
}
}

View File

@@ -1,23 +0,0 @@
<?php
namespace Invoices\Model;
use Classes\ModuleAccess;
use Model\BaseModel;
class Invoice extends BaseModel
{
public $table = 'Invoices';
public function getAdminAccess()
{
return array("get","element","save","delete");
}
public function getModuleAccess()
{
return [
new ModuleAccess('employees', 'admin'),
];
}
}

View File

@@ -1,42 +0,0 @@
<?php
namespace Invoices\Pdf;
use Classes\Pdf\BasePdfTemplate;
use Invoices\Model\Invoice;
class InvoicePdf extends BasePdfTemplate
{
protected $invoice;
public function __construct(Invoice $invoice)
{
parent::__construct();
$this->invoice = $invoice;
}
public function process()
{
$this->addH3($this->form->name, 'B', 'L');
$this->addBorderedText($this->invoice->description);
}
// protected function addFormItems()
// {
// $signatures = [];
// $fields = json_decode($this->form->items);
// foreach ($fields as $field) {
// if ($field->field_type === 'signature') {
// $signatures[$field->field_label] = $this->employeeForm->{$field->name};
// } elseif ($field->field_type === 'fileupload') {
// // ignore
// } else {
// $this->addKeyValue($field->field_label, $this->employeeForm->{$field->name}, $field->field_type);
// }
// }
//
// foreach ($signatures as $name => $data) {
// $this->addSignature($name, $data);
// }
// }
}

View File

@@ -1,38 +0,0 @@
<?php
/*$user = \Classes\BaseService::getInstance()->getCurrentUser();
echo "Welcome ".$user->username."<br/>";
echo "Invoices <br/>";
*/
use Classes\PermissionManager;
use Invoices\Model\Invoice;
?><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="tabInvoices" href="#tabPageInvoices"><?=t('Invoices')?></a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tabPageInvoices">
<div id="InvoicesTable" class="reviewBlock" data-content="List" style="padding-left:5px;"></div>
<div id="InvoicesForm"></div>
<div id="InvoicesFilterForm"></div>
</div>
</div>
</div>
<div id="dataGroup"></div>
<?php
$moduleData = [
'user_level' => $user->user_level,
'permissions' => [
'Invoice' => PermissionManager::checkGeneralAccess(new Invoice()),
]
];
?>
<script>
initAdminInvoices(<?=json_encode($moduleData)?>);
</script>

View File

@@ -1,17 +0,0 @@
import {InvoiceAdapter} from './lib';
import IceDataPipe from '../../../../web/api/IceDataPipe';
function init(data) {
const modJsList = [];
modJsList.tabInvoices =new InvoiceAdapter('Invoice', 'Invoices','','');
modJsList.tabInvoices.setObjectTypeName('Invoice');
modJsList.tabInvoices.setDataPipe(new IceDataPipe(modJsList.tabInvoices));
modJsList.tabInvoices.setAccess(data.permissions.Invoice);
window.modJs = modJsList.tabInvoices;
window.modJsList = modJsList;
}
window.initAdminInvoices = init;

View File

@@ -1,236 +0,0 @@
import React from 'react';
import ReactDOM from 'react-dom';
import { Space, Tag } from 'antd';
import ReactModalAdapterBase from '../../../../web/api/ReactModalAdapterBase';
import {
EditOutlined, DeleteOutlined, CopyOutlined, MonitorOutlined, PrinterOutlined,
} from '@ant-design/icons';
/**
* VatInvoiceAdapter
*/
class InvoiceAdapter extends ReactModalAdapterBase {
getDataMapping() {
return [
'id',
'paymentId',
'invoiceId',
'description',
'buyerName',
'buyerAddress',
'buyerPostalAddress',
'buyerVatId',
'buyerEmail',
'sellerName',
'sellerAddress',
'sellerVatId',
'amount',
'vat',
'vatRate',
'issuedDate',
'dueDate',
'paidDate',
'status',
'acceptPayments',
'created',
'updated',
'link',
'paymentLink'
];
}
getHeaders() {
return [
{ sTitle: 'ID', bVisible: false },
{ sTitle: 'Payment Id' },
{ sTitle: 'Invoice ID' },
{ sTitle: 'Description' },
{ sTitle: 'Buyer Name' },
{ sTitle: 'Buyer Address' },
{ sTitle: 'Buyer Postal Code' },
{ sTitle: 'Buyer Country' },
{ sTitle: 'Buyer Vat Id' },
{ sTitle: 'Buyer Email' },
{ sTitle: 'Seller Name' },
{ sTitle: 'Seller Country' },
{ sTitle: 'Seller Vat Id' },
{ sTitle: 'Amount' },
{ sTitle: 'Vat' },
{ sTitle: 'Vat Rate' },
{ sTitle: 'Issued Date' },
{ sTitle: 'Paid Date' },
{ sTitle: 'Status' },
{ sTitle: 'Accept Payments' },
{ sTitle: 'Created' },
{ sTitle: 'Updated' },
{ sTitle: 'Link' },
{ sTitle: 'Payment Link' },
];
}
getCountryList() {
return [
['DE', 'Germany'],
['LK', 'Sri Lanka'],
];
}
getFormFields() {
return [
[ 'id', {"label":"ID","type":"hidden"}],
[ 'paymentId', {"label":"Payment Id","type":"text","validation":"int"}],
[ 'invoiceId', {"label":"Invoice Id","type":"text","validation":"int"}],
[ 'description', {"label":"Description","type":"textarea","validation":"none"}],
[ 'buyerName', {"label":"Buyer Name","type":"text"}],
[ 'buyerAddress', {"label":"Buyer Address","type":"textarea"}],
[ 'buyerPostalCode', {"label":"Buyer Postal Code","type":"text"}],
[ 'buyerCountry', {"label":"Buyer Country","type":"select2", "remote-source": ["Country", "code", "name"]}],
[ 'buyerVatId', {"label":"Buyer Vat Id","type":"text","validation":"none"}],
[ 'buyerEmail', {"label":"Buyer Email","type":"text","validation":"email"}],
[ 'sellerName', {"label":"Seller Name","type":"text"}],
[ 'sellerAddress', {"label":"Seller Address","type":"text"}],
[ 'sellerCountry', {"label":"Seller Country","type":"select2", "remote-source": ["Country", "code", "name"]}],
[ 'sellerVatId', {"label":"Seller Vat Id","type":"text"}],
[ 'amount', {"label":"Amount with VAT","type":"text", "validation":"float"}],
[ 'vat', {"label":"Vat","type":"text", "validation":"float"}],
[ 'vatRate', {"label":"Vat Rate","type":"text", "validation":"float"}],
[ 'issuedDate', {"label":"Issued Date","type":"datetime", "validation":""}],
[ 'dueDate', {"label":"Due Date","type":"datetime", "validation":""}],
[ 'paidDate', {"label":"Paid Date","type":"datetime", "validation":""}],
[ 'status', {"label":"Status","type":"select","source":[["Pending","Pending"],["Paid","Paid"],["Processing","Processing"],["Draft","Draft"],["Sent","Sent"],["Canceled","Canceled"]]}],
[ 'acceptPayments', {"label":"Accept Payments","type":"select","source":[["0","No"],["1","Yes"]]}],
[ 'created', {"label":"Created","type":"datetime", "validation":""}],
[ 'updated', {"label":"Updated","type":"datetime", "validation":""}],
[ 'link', {"label":"Link","type":"placeholder"}],
[ 'paymentLink', {"label":"Payment Link","type":"placeholder"}],
['items', {
label: 'Items',
type: 'datagroup',
form: [
['description', { label: 'Description', type: 'textarea', validation: '' }],
['rate', { label: 'Rate', type: 'text', validation: '' }],
['qty', { label: 'Quantity', type: 'text', validation: '' }],
['lineTotal', { label: 'Line Total', type: 'text', validation: '' }],
],
html: '<div id="#_id_#" class="panel panel-default"><div class="panel-body">#_delete_##_edit_#<span style="color:#999;font-size:13px;font-weight:bold">Date: #_date_#</span><hr/>#_note_#</div></div>',
validation: 'none',
columns: [
{
title: 'Description',
dataIndex: 'description',
key: 'description',
},
{
title: 'Rate',
dataIndex: 'rate',
key: 'rate',
},
{
title: 'Quantity',
dataIndex: 'qty',
key: 'qty',
},
{
title: 'Line Total',
dataIndex: 'lineTotal',
key: 'lineTotal',
},
],
'sort-function': function (a, b) {
const t1 = Date.parse(a.date).getTime();
const t2 = Date.parse(b.date).getTime();
return (t1 < t2);
},
'custom-validate-function': function (data) {
const res = {};
res.valid = true;
data.date = new Date().toString('d-MMM-yyyy hh:mm tt');
res.params = data;
return res;
},
}],
];
}
getTableColumns() {
return [
{
title: 'Invoice Id',
dataIndex: 'invoiceId',
sorter: true,
},
{
title: 'Description',
dataIndex: 'description',
sorter: true,
},
];
}
getTableActionButtonJsx(adapter) {
return (text, record) => (
<Space size="middle">
{adapter.hasAccess('save') && adapter.showEdit
&& (
<Tag color="green" onClick={() => modJs.edit(record.id)} style={{ cursor: 'pointer' }}>
<EditOutlined />
{` ${adapter.gt('Edit')}`}
</Tag>
)}
{adapter.hasAccess('element')
&& (
<Tag color="blue" onClick={() => modJs.viewElement(record.id)} style={{ cursor: 'pointer' }}>
<MonitorOutlined />
{` ${adapter.gt('View')}`}
</Tag>
)}
{adapter.hasAccess('delete') && adapter.showDelete
&& (
<Tag color="volcano" onClick={() => modJs.deleteRow(record.id)} style={{ cursor: 'pointer' }}>
<DeleteOutlined />
{` ${adapter.gt('Delete')}`}
</Tag>
)}
{adapter.hasAccess('save')
&& (
<Tag color="cyan" onClick={() => modJs.copyRow(record.id)} style={{ cursor: 'pointer' }}>
<CopyOutlined />
{` ${adapter.gt('Copy')}`}
</Tag>
)}
<Tag color="green" onClick={() => modJs.printInvoice(record.id)} style={{ cursor: 'pointer' }}>
<PrinterOutlined />
{` ${adapter.gt('Print')}`}
</Tag>
</Space>
);
}
printInvoice(id) {
const params = {};
params.id = id;
const reqJson = JSON.stringify(params);
const callBackData = [];
callBackData.callBackData = [];
callBackData.callBackSuccess = 'printInvoiceSuccessCallback';
callBackData.callBackFail = 'printInvoiceFailCallback';
this.customAction('printInvoice', 'extension=invoices', reqJson, callBackData);
}
printInvoiceSuccessCallback(callBackData) {
this.showMessage('Success', 'Printing Done');
this.get([]);
}
printInvoiceFailCallback(callBackData) {
this.showMessage('Error', callBackData);
}
}
module.exports ={InvoiceAdapter};

View File

@@ -243,7 +243,6 @@ gulp.task('admin-js', (done) => {
const files = [ const files = [
'attendance', 'attendance',
'company_structure', 'company_structure',
'connection',
'custom_fields', 'custom_fields',
'clients', 'clients',
'charts', 'charts',
@@ -361,47 +360,6 @@ gulp.task('modules-js', (done) => {
.pipe(gulp.dest('./web/dist')); .pipe(gulp.dest('./web/dist'));
}); });
gulp.task('extension-js', (done) => {
let extension = process.argv.filter((item) => item.substr(0, 3) === '--x');
if (extension.length === 1) {
extension = extension[0].substr(3);
}
// map them to our stream function
return browserify({
entries: [`extensions/${extension}/web/js/index.js`],
basedir: '.',
debug: true,
cache: {},
packageCache: {},
})
.external(vendorsFlat)
.transform('babelify', {
plugins: [
['@babel/plugin-proposal-class-properties', { loose: true }],
],
presets: ['@babel/preset-env', '@babel/preset-react'],
extensions: ['.js', '.jsx'],
})
.transform(require('browserify-css'))
.bundle()
.pipe(source(`${extension}.js`))
.pipe(buffer())
.pipe(ifElse(!isProduction, () => sourcemaps.init({ loadMaps: true })))
.pipe(ifElse(isProduction, () => uglifyes(
{
compress: true,
mangle: {
reserved: [],
},
},
)))
.pipe(ifElse(isProduction, () => javascriptObfuscator({
compact: true,
})))
.pipe(ifElse(!isProduction, () => sourcemaps.write('./')))
.pipe(gulp.dest(`./extensions/${extension}/dist`));
});
gulp.task('watch', () => { gulp.task('watch', () => {
gulp.watch('web/admin/src/*/*.js', gulp.series('admin-js')); gulp.watch('web/admin/src/*/*.js', gulp.series('admin-js'));

12
package-lock.json generated
View File

@@ -3824,7 +3824,7 @@
}, },
"doctrine": { "doctrine": {
"version": "1.5.0", "version": "1.5.0",
"resolved": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
"integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
"dev": true, "dev": true,
"requires": { "requires": {
@@ -6681,9 +6681,9 @@
} }
}, },
"hosted-git-info": { "hosted-git-info": {
"version": "2.8.8", "version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
"integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true "dev": true
}, },
"htmlescape": { "htmlescape": {
@@ -6988,7 +6988,7 @@
}, },
"is-accessor-descriptor": { "is-accessor-descriptor": {
"version": "0.1.6", "version": "0.1.6",
"resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true, "dev": true,
"requires": { "requires": {
@@ -7034,7 +7034,7 @@
}, },
"is-data-descriptor": { "is-data-descriptor": {
"version": "0.1.4", "version": "0.1.4",
"resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true, "dev": true,
"requires": { "requires": {

View File

@@ -1,25 +1,6 @@
# Release Notes IceHrm Open Source # Release Notes IceHrm Open Source
## Release note v30.0.0.OS ##Release note v29.0.0.PRO
### 🛡️ 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 ### 🧲 New features

View File

@@ -1,29 +0,0 @@
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;

View File

@@ -1,35 +0,0 @@
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;

View File

@@ -1,80 +0,0 @@
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;

View File

@@ -1,11 +0,0 @@
import { ConnectionAdapter } from './lib';
function init(data) {
const modJsList = {};
modJsList.tabConnection = new ConnectionAdapter(data);
window.modJs = modJsList.tabConnection;
window.modJsList = modJsList;
}
window.initAdminConnection = init;

View File

@@ -1,32 +0,0 @@
/**
* 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 };

View File

@@ -1,3 +1,4 @@
import { FieldNameAdapter } from './lib'; import { FieldNameAdapter, CustomFieldAdapter } from './lib';
window.FieldNameAdapter = FieldNameAdapter; window.FieldNameAdapter = FieldNameAdapter;
window.CustomFieldAdapter = CustomFieldAdapter;

View File

@@ -4,6 +4,7 @@
*/ */
import AdapterBase from '../../../api/AdapterBase'; import AdapterBase from '../../../api/AdapterBase';
import CustomFieldAdapter from '../../../api/CustomFieldAdapter';
/** /**
* FieldNameAdapter * FieldNameAdapter
@@ -43,4 +44,4 @@ class FieldNameAdapter extends AdapterBase {
} }
module.exports = { FieldNameAdapter }; module.exports = { FieldNameAdapter, CustomFieldAdapter };

View File

@@ -105,7 +105,6 @@ class UserAdapter extends AdapterBase {
if (msg == null) { if (msg == null) {
const id = $(`#${this.getTableName()}_submit #id`).val(); const id = $(`#${this.getTableName()}_submit #id`).val();
params.csrf = $(`#${this.getTableName()}Form`).data('csrf'); params.csrf = $(`#${this.getTableName()}Form`).data('csrf');
if (id != null && id !== undefined && id !== '') { if (id != null && id !== undefined && id !== '') {
params.id = id; params.id = id;
this.add(params, []); this.add(params, []);

View File

@@ -81,13 +81,12 @@ function download(name, closeCallback, closeCallbackData) {
fileParts = data.filename.split('?'); fileParts = data.filename.split('?');
fileParts = fileParts[0].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'); const win = window.open(data.filename, '_blank');
win.focus(); win.focus();
} else { } else {
link = `<a href="${data.filename}" target="_blank">Download File <i class="icon-download-alt"></i> </a>`; link = `<a href="${data.filename}" target="_blank">Download File <i class="icon-download-alt"></i> </a>`;
if (jQuery.inArray(data.ext, viewableImages) >= 0) { if (jQuery.inArray(fileParts[fileParts.length - 1], viewableImages) >= 0) {
link += `<br/><br/><img style="max-width:545px;max-height:350px;" src="${data.filename}"/>`; link += `<br/><br/><img style="max-width:545px;max-height:350px;" src="${data.filename}"/>`;
} }
modJs.showMessage('Download File Attachment', link, closeCallback, closeCallbackData); modJs.showMessage('Download File Attachment', link, closeCallback, closeCallbackData);

View File

@@ -37,7 +37,7 @@ class CustomFieldAdapter extends AdapterBase {
['id', { label: 'ID', type: 'hidden' }], ['id', { label: 'ID', type: 'hidden' }],
['name', { label: 'Name', type: 'text', validation: '' }], ['name', { label: 'Name', type: 'text', validation: '' }],
['display', { label: 'Display Status', type: 'select', source: [['Form', 'Show'], ['Hidden', 'Hidden']] }], ['display', { label: 'Display Status', type: 'select', source: [['Form', 'Show'], ['Hidden', 'Hidden']] }],
['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_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_label', { label: 'Field Label', type: 'text', validation: '' }], ['field_label', { label: 'Field Label', type: 'text', validation: '' }],
['field_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']], 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']],

View File

@@ -44,7 +44,6 @@ class ModuleBase {
this.currentProfile = null; this.currentProfile = null;
this.permissions = {}; this.permissions = {};
this.baseUrl = null; this.baseUrl = null;
this.clientUrl = null;
this.that = this; this.that = this;
} }
@@ -97,10 +96,6 @@ class ModuleBase {
this.baseUrl = url; this.baseUrl = url;
} }
setClientUrl(url) {
this.clientUrl = url;
}
setUser(user) { setUser(user) {
this.user = user; this.user = user;
} }
@@ -148,7 +143,7 @@ class ModuleBase {
gt(key) { gt(key) {
if (this.translations[key] === undefined || this.translations[key] === null) { if (this.translations[key] === undefined || this.translations[key] === null) {
console.log(`Tr:${key}`); console.log("Tr:" + key);
return key; return key;
} }
return this.translations[key][0]; return this.translations[key][0];
@@ -1188,7 +1183,7 @@ class ModuleBase {
if (rmf.length > 3) { if (rmf.length > 3) {
key = `${key}_${rmf[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]]; value = this.fieldMasterData[key][filters[prop]];
valueOrig = value; valueOrig = value;
} }
@@ -2107,7 +2102,7 @@ class ModuleBase {
$(`${formId} #${fields[i][0]}`).html(object[fields[i][0]]); $(`${formId} #${fields[i][0]}`).html(object[fields[i][0]]);
} else if (fields[i][1].type === 'placeholder') { } else if (fields[i][1].type === 'placeholder') {
if (fields[i][1]['remote-source'] !== undefined && fields[i][1]['remote-source'] != null) { 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]); const key = this.getRemoteSourceKey(fields[i]);
placeHolderVal = this.fieldMasterData[key][object[fields[i][0]]]; placeHolderVal = this.fieldMasterData[key][object[fields[i][0]]];
} else { } else {
@@ -2688,11 +2683,6 @@ class ModuleBase {
return `https://avatars.dicebear.com/api/initials/:${seed}.svg`; 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; export default ModuleBase;

View File

@@ -70,7 +70,7 @@ class ReactCustomFieldAdapter extends AdapterBase {
return [ return [
['id', { label: 'ID', type: 'hidden' }], ['id', { label: 'ID', type: 'hidden' }],
['field_label', { label: 'Field Label', type: 'text', validation: '' }], ['field_label', { label: 'Field Label', type: 'text', validation: '' }],
['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_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_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']], 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']],
}], }],

47037
web/dist/admin-bundle.js vendored

File diff suppressed because one or more lines are too long

532
web/dist/common.js vendored

File diff suppressed because one or more lines are too long

10483
web/dist/login.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -34737,13 +34737,12 @@ function download(name, closeCallback, closeCallbackData) {
fileParts = data.filename.split('?'); fileParts = data.filename.split('?');
fileParts = fileParts[0].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'); const win = window.open(data.filename, '_blank');
win.focus(); win.focus();
} else { } else {
link = `<a href="${data.filename}" target="_blank">Download File <i class="icon-download-alt"></i> </a>`; link = `<a href="${data.filename}" target="_blank">Download File <i class="icon-download-alt"></i> </a>`;
if (jQuery.inArray(data.ext, viewableImages) >= 0) { if (jQuery.inArray(fileParts[fileParts.length - 1], viewableImages) >= 0) {
link += `<br/><br/><img style="max-width:545px;max-height:350px;" src="${data.filename}"/>`; link += `<br/><br/><img style="max-width:545px;max-height:350px;" src="${data.filename}"/>`;
} }
modJs.showMessage('Download File Attachment', link, closeCallback, closeCallbackData); modJs.showMessage('Download File Attachment', link, closeCallback, closeCallbackData);

91755
web/dist/vendorAntd.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

92738
web/dist/vendorAntv.js vendored

File diff suppressed because one or more lines are too long

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