mirror of
https://bitbucket.org/jsuto/piler.git
synced 2024-12-24 04:20:12 +01:00
added the webui to the tarball
This commit is contained in:
parent
79cdeed1b6
commit
1211e9a39c
@ -38,6 +38,7 @@
|
||||
#define MSG_CONTENT_TRANSFER_ENCODING 7
|
||||
#define MSG_CONTENT_DISPOSITION 8
|
||||
#define MSG_MESSAGE_ID 9
|
||||
#define MSG_REFERENCES 10
|
||||
|
||||
#define MAXHASH 8171
|
||||
|
||||
@ -144,6 +145,8 @@ struct _state {
|
||||
int n_attachments;
|
||||
struct attachment attachments[MAX_ATTACHMENTS];
|
||||
|
||||
char reference[SMALLBUFSIZE];
|
||||
|
||||
char b_from[SMALLBUFSIZE], b_from_domain[SMALLBUFSIZE], b_to[MAXBUFSIZE], b_to_domain[SMALLBUFSIZE], b_subject[MAXBUFSIZE], b_body[BIGBUFSIZE];
|
||||
};
|
||||
|
||||
|
@ -252,10 +252,6 @@ int store_recipients(struct session_data *sdata, char *to, uint64 id, struct __c
|
||||
syslog(LOG_PRIORITY, "%s: %s.mysql_stmt_execute error: *%s*", sdata->ttmpfile, SQL_RECIPIENT_TABLE, mysql_error(&(sdata->mysql)));
|
||||
ret = ERR;
|
||||
}
|
||||
|
||||
} else {
|
||||
syslog(LOG_PRIORITY, "%s: invalid email address: %s", sdata->ttmpfile, puf);
|
||||
continue;
|
||||
}
|
||||
|
||||
} while(p);
|
||||
@ -273,8 +269,8 @@ int store_meta_data(struct session_data *sdata, struct _state *state, struct __c
|
||||
char *subj, *p, s[MAXBUFSIZE], s2[SMALLBUFSIZE], vcode[2*DIGEST_LENGTH+1];
|
||||
|
||||
MYSQL_STMT *stmt;
|
||||
MYSQL_BIND bind[4];
|
||||
unsigned long len[4];
|
||||
MYSQL_BIND bind[5];
|
||||
unsigned long len[5];
|
||||
|
||||
my_ulonglong id=0;
|
||||
|
||||
@ -286,7 +282,7 @@ int store_meta_data(struct session_data *sdata, struct _state *state, struct __c
|
||||
digest_string(s, &vcode[0]);
|
||||
|
||||
|
||||
snprintf(s, MAXBUFSIZE-1, "INSERT INTO %s (`from`,`fromdomain`,`subject`,`spam`,`arrived`,`sent`,`size`,`hlen`,`direction`,`attachments`,`piler_id`,`message_id`,`digest`,`bodydigest`,`vcode`) VALUES(?,?,?,%d,%ld,%ld,%d,%d,%d,%d,'%s',?,'%s','%s','%s')", SQL_METADATA_TABLE, sdata->spam_message, sdata->now, sdata->sent, sdata->tot_len, sdata->hdr_len, sdata->direction, state->n_attachments, sdata->ttmpfile, sdata->digest, sdata->bodydigest, vcode);
|
||||
snprintf(s, MAXBUFSIZE-1, "INSERT INTO %s (`from`,`fromdomain`,`subject`,`spam`,`arrived`,`sent`,`size`,`hlen`,`direction`,`attachments`,`piler_id`,`message_id`,`reference`,`digest`,`bodydigest`,`vcode`) VALUES(?,?,?,%d,%ld,%ld,%d,%d,%d,%d,'%s',?,?,'%s','%s','%s')", SQL_METADATA_TABLE, sdata->spam_message, sdata->now, sdata->sent, sdata->tot_len, sdata->hdr_len, sdata->direction, state->n_attachments, sdata->ttmpfile, sdata->digest, sdata->bodydigest, vcode);
|
||||
|
||||
if(cfg->verbosity >= _LOG_DEBUG) syslog(LOG_PRIORITY, "%s: meta sql: *%s*", sdata->ttmpfile, s);
|
||||
|
||||
@ -335,6 +331,11 @@ int store_meta_data(struct session_data *sdata, struct _state *state, struct __c
|
||||
bind[3].is_null = 0;
|
||||
len[3] = strlen(state->message_id); bind[3].length = &len[3];
|
||||
|
||||
bind[4].buffer_type = MYSQL_TYPE_STRING;
|
||||
bind[4].buffer = state->reference;
|
||||
bind[4].is_null = 0;
|
||||
len[4] = strlen(state->reference); bind[4].length = &len[4];
|
||||
|
||||
if(mysql_stmt_bind_param(stmt, bind)){
|
||||
syslog(LOG_PRIORITY, "%s: %s.mysql_stmt_bind_param() error: %s", sdata->ttmpfile, SQL_METADATA_TABLE, mysql_stmt_error(stmt));
|
||||
goto CLOSE;
|
||||
|
@ -90,7 +90,7 @@ void post_parse(struct session_data *sdata, struct _state *state, struct __confi
|
||||
len = strlen(state->b_to);
|
||||
if(state->b_to[len-1] == ' ') state->b_to[len-1] = '\0';
|
||||
|
||||
syslog(LOG_PRIORITY, "%s: from=%s, to=%s, subj=%s, message-id=%s", sdata->ttmpfile, state->b_from, state->b_to, state->b_subject, state->message_id);
|
||||
syslog(LOG_PRIORITY, "%s: from=%s, to=%s, subj=%s, message-id=%s, reference=%s", sdata->ttmpfile, state->b_from, state->b_to, state->b_subject, state->message_id, state->reference);
|
||||
}
|
||||
|
||||
|
||||
@ -210,6 +210,7 @@ int parse_line(char *buf, struct _state *state, struct session_data *sdata, stru
|
||||
else if(strncasecmp(buf, "To:", 3) == 0) state->message_state = MSG_TO;
|
||||
else if(strncasecmp(buf, "Cc:", 3) == 0) state->message_state = MSG_CC;
|
||||
else if(strncasecmp(buf, "Message-Id:", 11) == 0) state->message_state = MSG_MESSAGE_ID;
|
||||
else if(strncasecmp(buf, "References:", 11) == 0) state->message_state = MSG_REFERENCES;
|
||||
else if(strncasecmp(buf, "Subject:", strlen("Subject:")) == 0) state->message_state = MSG_SUBJECT;
|
||||
else if(strncasecmp(buf, "Date:", strlen("Date:")) == 0 && sdata->sent == 0) sdata->sent = parse_date_header(buf);
|
||||
|
||||
@ -231,6 +232,12 @@ int parse_line(char *buf, struct _state *state, struct session_data *sdata, stru
|
||||
}
|
||||
|
||||
|
||||
if(state->is_1st_header == 1 && state->message_state == MSG_REFERENCES){
|
||||
if(strncasecmp(buf, "References:", 11) == 0) parse_reference(state, buf+11);
|
||||
else parse_reference(state, buf);
|
||||
}
|
||||
|
||||
|
||||
if(state->is_1st_header == 1 && state->message_state == MSG_SUBJECT && strlen(state->b_subject) + strlen(buf) < MAXBUFSIZE-1){
|
||||
|
||||
if(state->b_subject[0] == '\0'){
|
||||
|
@ -31,5 +31,6 @@ void degenerateToken(unsigned char *p);
|
||||
void fixURL(char *url);
|
||||
int extractNameFromHeaderLine(char *s, char *name, char *resultbuf);
|
||||
char *determine_attachment_type(char *filename, char *type);
|
||||
void parse_reference(struct _state *state, char *s);
|
||||
|
||||
#endif /* _PARSER_H */
|
||||
|
@ -74,6 +74,8 @@ void init_state(struct _state *state){
|
||||
memset(state->attachments[i].digest, 0, 2*DIGEST_LENGTH+1);
|
||||
}
|
||||
|
||||
memset(state->reference, 0, SMALLBUFSIZE);
|
||||
|
||||
memset(state->b_from, 0, SMALLBUFSIZE);
|
||||
memset(state->b_from_domain, 0, SMALLBUFSIZE);
|
||||
memset(state->b_to, 0, MAXBUFSIZE);
|
||||
@ -679,3 +681,22 @@ char *determine_attachment_type(char *filename, char *type){
|
||||
return "other,";
|
||||
}
|
||||
|
||||
|
||||
void parse_reference(struct _state *state, char *s){
|
||||
int len;
|
||||
char puf[SMALLBUFSIZE];
|
||||
|
||||
if(strlen(state->reference) > 10) return;
|
||||
|
||||
do {
|
||||
s = split_str(s, " ", puf, sizeof(puf)-1);
|
||||
len = strlen(puf);
|
||||
|
||||
if(len > 10 && len < SMALLBUFSIZE-1){
|
||||
memcpy(&(state->reference[strlen(state->reference)]), puf, len);
|
||||
return;
|
||||
}
|
||||
} while(s);
|
||||
|
||||
}
|
||||
|
||||
|
@ -72,6 +72,7 @@ int main(int argc, char **argv){
|
||||
printf("message-id: %s\n", state.message_id);
|
||||
printf("from: *%s (%s)*\n", state.b_from, state.b_from_domain);
|
||||
printf("to: *%s (%s)*\n", state.b_to, state.b_to_domain);
|
||||
printf("reference: *%s*\n", state.reference);
|
||||
printf("subject: *%s*\n", state.b_subject);
|
||||
//printf("body: *%s*\n", state.b_body);
|
||||
|
||||
|
@ -45,6 +45,7 @@ create table if not exists `metadata` (
|
||||
`attachments` int default 0,
|
||||
`piler_id` char(36) not null,
|
||||
`message_id` char(128) character set 'latin1' not null,
|
||||
`reference` char(128) character set 'latin1' not null,
|
||||
`digest` char(64) not null,
|
||||
`bodydigest` char(64) not null,
|
||||
`vcode` char(64) default null,
|
||||
@ -53,9 +54,10 @@ create table if not exists `metadata` (
|
||||
|
||||
create index metadata_idx on metadata(`piler_id`);
|
||||
create index metadata_idx2 on metadata(`message_id`);
|
||||
create index metadata_idx3 on metadata(`bodydigest`);
|
||||
create index metadata_idx4 on metadata(`deleted`);
|
||||
create index metadata_idx5 on metadata(`arrived`);
|
||||
create index metadata_idx3 on metadata(`reference`);
|
||||
create index metadata_idx4 on metadata(`bodydigest`);
|
||||
create index metadata_idx5 on metadata(`deleted`);
|
||||
create index metadata_idx6 on metadata(`arrived`);
|
||||
|
||||
|
||||
drop table if exists `rcpt`;
|
||||
|
9
webui/.htaccess
Normal file
9
webui/.htaccess
Normal file
@ -0,0 +1,9 @@
|
||||
RewriteEngine On
|
||||
RewriteRule ^search.php /index.php?route=search/search&type=simple [L]
|
||||
RewriteRule ^advanced.php /index.php?route=search/search&type=advanced [L]
|
||||
RewriteRule ^expert.php /index.php?route=search/search&type=expert [L]
|
||||
RewriteRule ^search-helper.php /index.php?route=search/helper [L]
|
||||
RewriteRule ^audit-helper.php /index.php?route=audit/helper [L]
|
||||
RewriteRule ^message.php /index.php?route=message/view [L]
|
||||
RewriteRule ^settings.php /index.php?route=user/settings [L]
|
||||
|
197
webui/config.php
Normal file
197
webui/config.php
Normal file
@ -0,0 +1,197 @@
|
||||
<?php
|
||||
|
||||
define('LANG', 'en');
|
||||
define('THEME', 'default');
|
||||
|
||||
define('SITE_NAME', 'demo.mailpiler.org');
|
||||
define('SITE_URL', 'http://demo.mailpiler.org/');
|
||||
|
||||
define('ENABLE_AUDIT', 1);
|
||||
define('MEMCACHED_ENABLED', 0);
|
||||
define('PASSWORD_CHANGE_ENABLED', 0);
|
||||
define('ENABLE_STATISTICS', 1);
|
||||
define('ENABLE_HISTORY', 1);
|
||||
define('ENABLE_REMOTE_IMAGES', '0');
|
||||
define('ENABLE_ON_THE_FLY_VERIFICATION', 1);
|
||||
define('ENABLE_LDAP_IMPORT_FEATURE', 0);
|
||||
|
||||
define('HOLD_EMAIL', 0);
|
||||
|
||||
define('DEMO', 0);
|
||||
|
||||
define('REMOTE_IMAGE_REPLACEMENT', '/view/theme/default/images/remote.gif');
|
||||
define('ICON_ARROW_UP', '/view/theme/default/images/arrowup.gif');
|
||||
define('ICON_ARROW_DOWN', '/view/theme/default/images/arrowdown.gif');
|
||||
define('ICON_ATTACHMENT', '/view/theme/default/images/attachment_icon.png');
|
||||
define('ICON_TAG', '/view/theme/default/images/tag_blue.png');
|
||||
define('ICON_GREEN_OK', '/view/theme/default/images/green_ok.png');
|
||||
define('ICON_RED_X', '/view/theme/default/images/red_x.png');
|
||||
|
||||
define('MAX_CGI_FROM_SUBJ_LEN', 45);
|
||||
define('PAGE_LEN', 20);
|
||||
define('MAX_NUMBER_OF_FROM_ITEMS', 5);
|
||||
define('MAX_SEARCH_HITS', 1000);
|
||||
|
||||
define('LOCALHOST', '127.0.0.1');
|
||||
define('PILER_HOST', '1.2.3.4');
|
||||
define('PILER_PORT', 25);
|
||||
define('SMARTHOST', '127.0.0.1');
|
||||
define('SMARTHOST_PORT', 10026);
|
||||
define('SMTP_DOMAIN', 'mailpiler.org');
|
||||
define('SMTP_FROMADDR', 'no-reply@mailpiler.org');
|
||||
|
||||
define('EOL', "\n");
|
||||
|
||||
define('PILER_HEADER_FIELD', 'X-piler-id: ');
|
||||
|
||||
define('DEFAULT_POLICY', 'default_policy');
|
||||
|
||||
define('DIR_BASE', '/var/www/demo.mailpiler.org/');
|
||||
define('DIR_SYSTEM', DIR_BASE . 'system/');
|
||||
define('DIR_MODEL', DIR_BASE . 'model/');
|
||||
define('DIR_DATABASE', DIR_BASE . 'system/database/');
|
||||
define('DIR_IMAGE', DIR_BASE . 'image/');
|
||||
define('DIR_LANGUAGE', DIR_BASE . 'language/');
|
||||
define('DIR_APPLICATION', DIR_BASE . 'controller/');
|
||||
define('DIR_THEME', DIR_BASE . 'view/theme/');
|
||||
define('DIR_REPORT', DIR_BASE . 'reports/');
|
||||
define('DIR_LOG', DIR_BASE . 'log/');
|
||||
|
||||
define('DIR_STORE', '/var/piler/store');
|
||||
define('DIR_STAT', '/var/piler/stat');
|
||||
|
||||
define('DECRYPT_BINARY', '/usr/local/bin/pilerget');
|
||||
define('DECRYPT_BUFFER_LENGTH', 65536);
|
||||
|
||||
define('QSHAPE_ACTIVE_INCOMING', DIR_STAT . '/active+incoming');
|
||||
define('QSHAPE_ACTIVE_INCOMING_SENDER', DIR_STAT . '/active+incoming-sender');
|
||||
define('QSHAPE_DEFERRED', DIR_STAT . '/deferred');
|
||||
define('QSHAPE_DEFERRED_SENDER', DIR_STAT . '/deferred-sender');
|
||||
|
||||
define('CPUSTAT', DIR_STAT . '/cpu.stat');
|
||||
define('AD_SYNC_STAT', DIR_STAT . '/adsync.stat');
|
||||
define('ARCHIVE_SIZE', DIR_STAT . '/archive.size');
|
||||
define('LOCK_FILE', DIR_LOG . 'lock');
|
||||
|
||||
define('DB_DRIVER', 'mysql');
|
||||
define('DB_PREFIX', '');
|
||||
define('DB_HOSTNAME', 'localhost');
|
||||
define('DB_USERNAME', 'piler');
|
||||
define('DB_PASSWORD', 'q57tPYem');
|
||||
define('DB_DATABASE', 'piler');
|
||||
|
||||
define('TABLE_USER', 'user');
|
||||
define('TABLE_EMAIL', 'email');
|
||||
define('TABLE_META', 'metadata');
|
||||
define('TABLE_ATTACHMENT', 'attachment');
|
||||
define('TABLE_SEARCH', 'search');
|
||||
define('TABLE_EMAIL_LIST', 'email_groups');
|
||||
define('TABLE_TAG', 'tag');
|
||||
define('TABLE_USER_SETTINGS', 'user_settings');
|
||||
define('TABLE_REMOTE', 'remote');
|
||||
define('TABLE_DOMAIN', 'domain');
|
||||
define('TABLE_COUNTER', 'counter');
|
||||
define('TABLE_AUDIT', 'audit');
|
||||
define('TABLE_ARCHIVING_RULE', 'archiving_rule');
|
||||
define('VIEW_MESSAGES', 'messages');
|
||||
|
||||
define('SPHINX_DRIVER', 'sphinx');
|
||||
define('SPHINX_DATABASE', 'sphinx');
|
||||
define('SPHINX_HOSTNAME', '127.0.0.1:9306');
|
||||
define('SPHINX_MAIN_INDEX', 'main1');
|
||||
define('SPHINX_TAG_INDEX', 'tag1');
|
||||
|
||||
|
||||
define('LDAP_IMPORT_CONFIG_FILE', '/usr/local/etc/ldap-import.cfg');
|
||||
|
||||
define('DN_MAX_LEN', 255);
|
||||
define('USE_EMAIL_AS_USERNAME', 1);
|
||||
define('LDAP_IMPORT_MINIMUM_NUMBER_OF_USERS_TO_HEALTH_OK', 100);
|
||||
|
||||
define('PREVIEW_WIDTH', 1024);
|
||||
define('PREVIEW_HEIGTH', 700);
|
||||
|
||||
define('SIZE_X', 430);
|
||||
define('SIZE_Y', 250);
|
||||
|
||||
define('HELPURL', '');
|
||||
|
||||
define('AUDIT_DATE_FORMAT', 'Y.m.d H:i');
|
||||
define('SEARCH_HIT_DATE_FORMAT', 'Y.m.d');
|
||||
|
||||
define('DATE_FORMAT', '(Y.m.d.)');
|
||||
define('TIMEZONE', 'Europe/Budapest');
|
||||
|
||||
define('HISTORY_REFRESH', 60);
|
||||
|
||||
define('FROM_LENGTH_TO_SHOW', 28);
|
||||
|
||||
define('SEARCH_HELPER_URL', SITE_URL . 'search-helper.php');
|
||||
define('AUDIT_HELPER_URL', SITE_URL . 'audit-helper.php');
|
||||
|
||||
define('SAVE_SEARCH_URL', SITE_URL . 'index.php?route=search/save');
|
||||
|
||||
define('HEALTH_WORKER_URL', SITE_URL . 'index.php?route=health/worker');
|
||||
define('HEALTH_REFRESH', 60);
|
||||
define('HEALTH_RATIO', 80);
|
||||
|
||||
define('LOG_FILE', DIR_LOG . 'webui.log');
|
||||
define('LOG_DATE_FORMAT', 'd-M-Y H:i:s');
|
||||
|
||||
define('MAX_AUDIT_HITS', 1000);
|
||||
|
||||
define('MIN_PASSWORD_LENGTH', 6);
|
||||
|
||||
define('CGI_INPUT_FIELD_WIDTH', 50);
|
||||
define('CGI_INPUT_FIELD_HEIGHT', 7);
|
||||
|
||||
define('MEMCACHED_PREFIX', '_piler_webui:');
|
||||
define('MEMCACHED_TTL', 3600);
|
||||
|
||||
$memcached_servers = array(
|
||||
array('127.0.0.1', 11211)
|
||||
);
|
||||
|
||||
$counters = array('_piler:rcvd', '_piler:virus', '_piler:duplicate', '_piler:ignore', '_piler:counters_last_update');
|
||||
|
||||
$health_smtp_servers = array( array(PILER_HOST, PILER_PORT, "piler"), array(SMARTHOST, SMARTHOST_PORT, "smarthost") );
|
||||
|
||||
$partitions_to_monitor = array('/', '/home', '/var', '/tmp');
|
||||
|
||||
|
||||
$langs = array(
|
||||
'hu',
|
||||
'en'
|
||||
);
|
||||
|
||||
|
||||
$themes = array(
|
||||
'default'
|
||||
);
|
||||
|
||||
|
||||
define('ACTION_ALL', 0);
|
||||
define('ACTION_UNKNOWN', 1);
|
||||
define('ACTION_LOGIN', 2);
|
||||
define('ACTION_LOGIN_FAILED', 3);
|
||||
define('ACTION_LOGOUT', 4);
|
||||
define('ACTION_VIEW_MESSAGE', 5);
|
||||
define('ACTION_VIEW_HEADER', 6);
|
||||
define('ACTION_UNAUTHORIZED_VIEW_MESSAGE', 7);
|
||||
define('ACTION_RESTORE_MESSAGE', 8);
|
||||
define('ACTION_DOWNLOAD_MESSAGE', 9);
|
||||
define('ACTION_SEARCH', 10);
|
||||
define('ACTION_SAVE_SEARCH', 11);
|
||||
define('ACTION_CHANGE_USER_SETTINGS', 12);
|
||||
|
||||
define('ACTION_REMOVE_MESSAGE', 13);
|
||||
define('ACTION_UNAUTHORIZED_REMOVE_MESSAGE', 14);
|
||||
|
||||
|
||||
define('NOW', time());
|
||||
|
||||
define('SIMPLE_SEARCH', 0);
|
||||
define('ADVANCED_SEARCH', 1);
|
||||
define('EXPERT_SEARCH', 2);
|
||||
|
||||
?>
|
70
webui/controller/audit/audit.php
Normal file
70
webui/controller/audit/audit.php
Normal file
@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerAuditAudit extends Controller {
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "audit/audit.tpl";
|
||||
$this->layout = "common/layout-search";
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('audit/audit');
|
||||
|
||||
|
||||
/*if(isset($this->request->post['searchterm'])) {
|
||||
$this->fixup_post_request();
|
||||
|
||||
$a = preg_replace("/\&loaded=1$/", "", $this->request->post['searchterm']);
|
||||
}*/
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
private function fixup_post_request() {
|
||||
$i = 0;
|
||||
$a = array();
|
||||
|
||||
$this->data['blocks'] = array();
|
||||
|
||||
$this->data['searchterm'] = $this->request->post['searchterm'];
|
||||
|
||||
parse_str($this->request->post['searchterm'], $a);
|
||||
|
||||
foreach($a['f'] as $f) {
|
||||
$val = array_shift($a['v']);
|
||||
|
||||
if($val == '') { continue; }
|
||||
|
||||
if($i == 0) {
|
||||
$this->data['key0'] = 0;
|
||||
|
||||
if($f == 'user') { $this->data['key0'] = 0; }
|
||||
else if($f == 'ipaddr') { $this->data['key0'] = 1; }
|
||||
else if($f == 'ref') { $this->data['key0'] = 2; }
|
||||
|
||||
$this->data['val0'] = $val;
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
|
||||
if(isset($a['date1'])) { $this->data['date1'] = $a['date1']; }
|
||||
if(isset($a['date2'])) { $this->data['date2'] = $a['date2']; }
|
||||
|
||||
if(isset($a['action'])) { $this->data['action'] = $a['action']; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
103
webui/controller/audit/helper.php
Normal file
103
webui/controller/audit/helper.php
Normal file
@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerAuditHelper extends Controller {
|
||||
private $error = array();
|
||||
private $search_args = 0;
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "audit/helper.tpl";
|
||||
$this->layout = "common/layout-empty";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('audit/audit');
|
||||
|
||||
|
||||
$this->data['page'] = 0;
|
||||
if(isset($this->request->post['page'])) { $this->data['page'] = $this->request->post['page']; }
|
||||
|
||||
$this->data['page_len'] = get_page_length();
|
||||
|
||||
$this->data['n'] = -1;
|
||||
|
||||
|
||||
|
||||
if(isset($this->request->post)) {
|
||||
$a = $this->fixup_request($this->request->post);
|
||||
list($this->data['n'], $this->data['messages']) = $this->model_audit_audit->search_audit($a);
|
||||
}
|
||||
|
||||
$this->data['actions'][ACTION_UNKNOWN] = '??';
|
||||
$this->data['actions'][ACTION_LOGIN] = $this->data['text_login2'];
|
||||
$this->data['actions'][ACTION_LOGIN_FAILED] = $this->data['text_login_failed'];
|
||||
$this->data['actions'][ACTION_LOGOUT] = $this->data['text_logout2'];
|
||||
$this->data['actions'][ACTION_VIEW_MESSAGE] = $this->data['text_view_message2'];
|
||||
$this->data['actions'][ACTION_VIEW_HEADER] = $this->data['text_view_header'];
|
||||
$this->data['actions'][ACTION_UNAUTHORIZED_VIEW_MESSAGE] = $this->data['text_unauthorized_view_message'];
|
||||
$this->data['actions'][ACTION_RESTORE_MESSAGE] = $this->data['text_restore_message'];
|
||||
$this->data['actions'][ACTION_DOWNLOAD_MESSAGE] = $this->data['text_download_message2'];
|
||||
$this->data['actions'][ACTION_SEARCH] = $this->data['text_search2'];
|
||||
$this->data['actions'][ACTION_SAVE_SEARCH] = $this->data['text_save_search'];
|
||||
$this->data['actions'][ACTION_CHANGE_USER_SETTINGS] = $this->data['text_change_user_settings'];
|
||||
$this->data['actions'][ACTION_REMOVE_MESSAGE] = $this->data['text_remove_message2'];
|
||||
$this->data['actions'][ACTION_UNAUTHORIZED_REMOVE_MESSAGE] = $this->data['text_unauthorized_remove_message'];
|
||||
|
||||
|
||||
|
||||
|
||||
/* paging info */
|
||||
|
||||
$this->data['prev_page'] = $this->data['page'] - 1;
|
||||
$this->data['next_page'] = $this->data['page'] + 1;
|
||||
|
||||
$this->data['total_pages'] = ceil($this->data['n'] / $this->data['page_len'])-1;
|
||||
|
||||
$this->data['hits_from'] = $this->data['page'] * $this->data['page_len'] + 1;
|
||||
$this->data['hits_to'] = ($this->data['page']+1) * $this->data['page_len'];
|
||||
|
||||
if($this->data['hits_to'] > $this->data['n']) { $this->data['hits_to'] = $this->data['n']; }
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
private function fixup_request($data = array()) {
|
||||
$arr = array();
|
||||
|
||||
if(isset($data['f'])) {
|
||||
foreach($data['f'] as $f) {
|
||||
$val = array_shift($data['v']);
|
||||
|
||||
|
||||
if($val == '') { continue; }
|
||||
|
||||
if($f == 'user') { if(isset($arr['user'])) { $arr['user'] .= '*' . $val; } else { $arr['user'] = $val; } }
|
||||
if($f == 'ipaddr') { if(isset($arr['ipaddr'])) { $arr['ipaddr'] .= '*' . $val; } else { $arr['ipaddr'] = $val; } }
|
||||
if($f == 'ref') { if(isset($arr['ref'])) { $arr['ref'] .= '*' . $val; } else { $arr['ref'] = $val; } }
|
||||
}
|
||||
}
|
||||
|
||||
if(isset($data['action'])) { $arr['action'] = $data['action']; }
|
||||
|
||||
if(isset($data['date1'])) { $arr['date1'] = $data['date1']; }
|
||||
if(isset($data['date2'])) { $arr['date2'] = $data['date2']; }
|
||||
|
||||
if(isset($data['sort'])) { $arr['sort'] = $data['sort']; }
|
||||
if(isset($data['order'])) { $arr['order'] = $data['order']; }
|
||||
|
||||
$arr['page'] = $this->data['page'];
|
||||
$arr['page_len'] = $this->data['page_len'];
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
33
webui/controller/common/error.php
Normal file
33
webui/controller/common/error.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerCommonError extends Controller {
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "common/error.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
$this->document->title = $this->data['text_error'];
|
||||
|
||||
$this->data['errortitle'] = $this->data['text_error'];
|
||||
|
||||
if(isset($_SESSION['error'])){
|
||||
$this->data['errorstring'] = $_SESSION['error'];
|
||||
unset($_SESSION['error']);
|
||||
}
|
||||
else {
|
||||
$this->data['errorstring'] = "this is the errorstring";
|
||||
}
|
||||
|
||||
|
||||
$this->render();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
18
webui/controller/common/footer.php
Normal file
18
webui/controller/common/footer.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerCommonFooter extends Controller {
|
||||
|
||||
protected function index() {
|
||||
|
||||
$this->id = "footer";
|
||||
$this->template = "common/footer.tpl";
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
16
webui/controller/common/layout-empty.php
Normal file
16
webui/controller/common/layout-empty.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
class ControllerCommonLayoutempty extends Controller {
|
||||
|
||||
protected function index() {
|
||||
|
||||
$this->template = "common/layout-empty.tpl";
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
26
webui/controller/common/layout-health.php
Normal file
26
webui/controller/common/layout-health.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
class ControllerCommonLayoutHealth extends Controller {
|
||||
|
||||
protected function index() {
|
||||
|
||||
|
||||
$this->data['title'] = $this->document->title;
|
||||
|
||||
$this->template = "common/layout-health.tpl";
|
||||
|
||||
|
||||
$this->children = array(
|
||||
"common/menu",
|
||||
"common/footer"
|
||||
);
|
||||
|
||||
$this->render();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
37
webui/controller/common/layout-search.php
Normal file
37
webui/controller/common/layout-search.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
class ControllerCommonLayoutSearch extends Controller {
|
||||
|
||||
protected function index() {
|
||||
|
||||
|
||||
$this->data['title'] = $this->document->title;
|
||||
|
||||
$this->template = "common/layout-search.tpl";
|
||||
|
||||
$this->data['search_args'] = '';
|
||||
|
||||
$this->data['open_saved_search_box'] = 0;
|
||||
|
||||
|
||||
if(isset($_SERVER['REQUEST_URI'])) {
|
||||
$this->data['search_args'] = preg_replace("/\/([\w]+)\.php\?{0,1}/", "", $_SERVER['REQUEST_URI']);
|
||||
|
||||
if(preg_match("/\&a\=1/", $this->data['search_args'])) { $this->data['open_saved_search_box'] = 1; }
|
||||
}
|
||||
|
||||
|
||||
$this->children = array(
|
||||
"common/menu",
|
||||
"common/footer"
|
||||
);
|
||||
|
||||
$this->render();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
26
webui/controller/common/layout.php
Normal file
26
webui/controller/common/layout.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
class ControllerCommonLayout extends Controller {
|
||||
|
||||
protected function index() {
|
||||
|
||||
|
||||
$this->data['title'] = $this->document->title;
|
||||
|
||||
$this->template = "common/layout.tpl";
|
||||
|
||||
|
||||
$this->children = array(
|
||||
"common/menu",
|
||||
"common/footer"
|
||||
);
|
||||
|
||||
$this->render();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
30
webui/controller/common/menu.php
Normal file
30
webui/controller/common/menu.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerCommonMenu extends Controller {
|
||||
|
||||
protected function index() {
|
||||
|
||||
$this->id = "menu";
|
||||
$this->template = "common/menu.tpl";
|
||||
|
||||
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->data['admin_user'] = Registry::get('admin_user');
|
||||
$this->data['auditor_user'] = Registry::get('auditor_user');
|
||||
$this->data['readonly_admin'] = Registry::get('readonly_admin');
|
||||
|
||||
if($this->data['admin_user'] == 1) { $this->template = "common/menu-admin.tpl"; }
|
||||
|
||||
$this->render();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
?>
|
23
webui/controller/common/not_found.php
Normal file
23
webui/controller/common/not_found.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerCommonNotfound extends Controller {
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "common/not_found.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
$this->document->title = $this->data['title_not_found'];
|
||||
|
||||
|
||||
$this->render();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
122
webui/controller/domain/domain.php
Normal file
122
webui/controller/domain/domain.php
Normal file
@ -0,0 +1,122 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerDomainDomain extends Controller {
|
||||
private $error = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "domain/list.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('domain/domain');
|
||||
|
||||
$this->document->title = $this->data['text_domain'];
|
||||
|
||||
|
||||
$this->data['username'] = Registry::get('username');
|
||||
|
||||
|
||||
$this->data['page'] = 0;
|
||||
$this->data['page_len'] = get_page_length();
|
||||
|
||||
$this->data['total'] = 0;
|
||||
|
||||
$this->data['domains'] = array();
|
||||
|
||||
/* get search term if there's any */
|
||||
|
||||
if($this->request->server['REQUEST_METHOD'] == 'POST'){
|
||||
$this->data['search'] = @$this->request->post['search'];
|
||||
}
|
||||
else {
|
||||
$this->data['search'] = @$this->request->get['search'];
|
||||
}
|
||||
|
||||
|
||||
/* get page */
|
||||
|
||||
if(isset($this->request->get['page']) && is_numeric($this->request->get['page']) && $this->request->get['page'] > 0) {
|
||||
$this->data['page'] = $this->request->get['page'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* check if we are admin */
|
||||
|
||||
if(Registry::get('admin_user') == 1) {
|
||||
|
||||
if($this->request->server['REQUEST_METHOD'] == 'POST') {
|
||||
if($this->validate() == true) {
|
||||
|
||||
if($this->model_domain_domain->addDomain($this->request->post['domain'], $this->request->post['mapped']) == 1) {
|
||||
$this->data['x'] = $this->data['text_successfully_added'];
|
||||
} else {
|
||||
$this->template = "common/error.tpl";
|
||||
$this->data['errorstring'] = $this->data['text_failed_to_add'];
|
||||
}
|
||||
}
|
||||
else {
|
||||
$this->template = "common/error.tpl";
|
||||
$this->data['errorstring'] = array_pop($this->error);
|
||||
}
|
||||
}
|
||||
|
||||
/* get list of current policies */
|
||||
|
||||
$this->data['domains'] = $this->model_domain_domain->getDomains();
|
||||
|
||||
}
|
||||
else {
|
||||
$this->template = "common/error.tpl";
|
||||
$this->data['errorstring'] = $this->data['text_you_are_not_admin'];
|
||||
}
|
||||
|
||||
|
||||
$this->data['prev_page'] = $this->data['page'] - 1;
|
||||
$this->data['next_page'] = $this->data['page'] + 1;
|
||||
|
||||
$this->data['total'] = floor(count($this->data['domains']) / $this->data['page_len']);
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
private function validate() {
|
||||
|
||||
if(!isset($this->request->post['domain']) || strlen($this->request->post['domain']) < 3) {
|
||||
$this->error['email'] = $this->data['text_invalid_data'];
|
||||
}
|
||||
else {
|
||||
$domains = explode("\n", $this->request->post['domain']);
|
||||
foreach ($domains as $domain) {
|
||||
$domain = rtrim($domain);
|
||||
if(!preg_match('/^[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,5})$/', $domain) ) {
|
||||
$this->error['email'] = $this->data['text_invalid_data'] . ": $domain";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!isset($this->request->post['mapped']) || strlen($this->request->post['mapped']) < 3 || !preg_match('/^[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,5})$/', $this->request->post['mapped']) ) {
|
||||
$this->error['domain'] = $this->data['text_invalid_data'] . ": " . $this->request->post['mapped'];
|
||||
}
|
||||
|
||||
if (!$this->error) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
75
webui/controller/domain/remove.php
Normal file
75
webui/controller/domain/remove.php
Normal file
@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerDomainRemove extends Controller {
|
||||
private $error = array();
|
||||
private $domains = array();
|
||||
private $d = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "domain/remove.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('domain/domain');
|
||||
|
||||
$this->document->title = $this->data['text_domain'];
|
||||
|
||||
|
||||
$this->data['username'] = Registry::get('username');
|
||||
|
||||
$this->data['domain'] = @$this->request->get['domain'];
|
||||
$this->data['confirmed'] = (int)@$this->request->get['confirmed'];
|
||||
|
||||
|
||||
if($this->validate() == true) {
|
||||
|
||||
if($this->data['confirmed'] == 1) {
|
||||
$ret = $this->model_domain_domain->deleteDomain($this->data['domain']);
|
||||
if($ret == 1){
|
||||
$this->data['x'] = $this->data['text_successfully_removed'];
|
||||
}
|
||||
else {
|
||||
$this->data['x'] = $this->data['text_failed_to_remove'];
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$this->template = "common/error.tpl";
|
||||
$this->data['errorstring'] = array_pop($this->error);
|
||||
}
|
||||
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
private function validate() {
|
||||
|
||||
if(Registry::get('admin_user') == 0) {
|
||||
$this->error['admin'] = $this->data['text_you_are_not_admin'];
|
||||
}
|
||||
|
||||
if(!isset($this->request->get['domain']) || strlen($this->request->get['domain']) < 3 || ($this->request->get['domain'] != "local" && !preg_match('/^[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,5})$/', $this->request->get['domain'])) ) {
|
||||
$this->error['domain'] = $this->data['text_invalid_data'];
|
||||
}
|
||||
|
||||
|
||||
if (!$this->error) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
32
webui/controller/health/health.php
Normal file
32
webui/controller/health/health.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerHealthHealth extends Controller {
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "health/health.tpl";
|
||||
$this->layout = "common/layout-health";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
$language = Registry::get('language');
|
||||
|
||||
$this->document->title = $language->get('text_health_monitor');
|
||||
|
||||
|
||||
/* check if we are admin */
|
||||
|
||||
if(Registry::get('admin_user') != 1 && Registry::get('readonly_admin') != 1 && Registry::get('auditor_admin') != 1) {
|
||||
$this->template = "common/error.tpl";
|
||||
$this->data['errorstring'] = $this->data['text_you_are_not_admin'];
|
||||
}
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
101
webui/controller/health/worker.php
Normal file
101
webui/controller/health/worker.php
Normal file
@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerHealthWorker extends Controller {
|
||||
private $error = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "health/worker.tpl";
|
||||
$this->layout = "common/layout-empty";
|
||||
|
||||
$db_history = Registry::get('db_history');
|
||||
|
||||
$this->load->model('health/health');
|
||||
$this->load->model('stat/counter');
|
||||
|
||||
$request = Registry::get('request');
|
||||
|
||||
$lang = Registry::get('language');
|
||||
|
||||
|
||||
$this->data['health'] = array();
|
||||
|
||||
if(Registry::get('admin_user') != 1 && Registry::get('readonly_admin') != 1) {
|
||||
die("go away");
|
||||
}
|
||||
|
||||
foreach (Registry::get('health_smtp_servers') as $smtp) {
|
||||
$this->data['health'][] = $this->model_health_health->checksmtp($smtp, $lang->data['text_error']);
|
||||
}
|
||||
|
||||
|
||||
/*$this->data['queues'][] = format_qshape($lang->data['text_active_incoming_queue'], QSHAPE_ACTIVE_INCOMING);
|
||||
$this->data['queues'][] = format_qshape($lang->data['text_deferred_queue'], QSHAPE_DEFERRED);*/
|
||||
|
||||
/*if(file_exists(QSHAPE_ACTIVE_INCOMING_OUT)) {
|
||||
$this->data['queues_out'][] = format_qshape($lang->data['text_active_incoming_queue'], QSHAPE_ACTIVE_INCOMING_OUT);
|
||||
$this->data['queues_out'][] = format_qshape($lang->data['text_deferred_queue'], QSHAPE_DEFERRED_OUT);
|
||||
}*/
|
||||
|
||||
$this->data['processed_emails'] = $this->model_health_health->count_processed_emails();
|
||||
|
||||
list ($this->data['uptime'], $this->data['cpuload']) = $this->model_health_health->uptime();
|
||||
|
||||
$this->data['cpuinfo'] = 100 - (int)file_get_contents(CPUSTAT);
|
||||
$this->data['archive_size'] = (int)file_get_contents(ARCHIVE_SIZE);
|
||||
|
||||
$this->data['quarantinereportinfo'] = @file_get_contents(DAILY_QUARANTINE_REPORT_STAT);
|
||||
|
||||
list($this->data['totalmem'], $this->data['meminfo'], $this->data['totalswap'], $this->data['swapinfo']) = $this->model_health_health->meminfo();
|
||||
$this->data['shortdiskinfo'] = $this->model_health_health->diskinfo();
|
||||
|
||||
/*if(file_exists(MAILLOG_PID_FILE)) {
|
||||
$this->data['maillog_status'] = $lang->data['text_running'];
|
||||
} else {
|
||||
$this->data['maillog_status'] = $lang->data['text_not_running'];
|
||||
}*/
|
||||
|
||||
|
||||
if(ENABLE_LDAP_IMPORT_FEATURE == 1) {
|
||||
$this->data['adsyncinfo'] = @file_get_contents(AD_SYNC_STAT);
|
||||
|
||||
$this->data['total_emails_in_database'] = 0;
|
||||
|
||||
$a = preg_split("/ /", $this->data['adsyncinfo']);
|
||||
list ($this->data['totalusers'], $this->data['totalnewusers'], $this->data['totaldeletedusers'], $this->data['total_emails_in_database']) = preg_split("/\//", $a[count($a)-1]);
|
||||
$this->data['adsyncinfo'] = $a[0] . " " . $a[1] . " " . $this->data['total_emails_in_database'];
|
||||
}
|
||||
|
||||
|
||||
/* counter related stuff */
|
||||
|
||||
$db = Registry::get('db');
|
||||
$db->select_db($db->database);
|
||||
|
||||
if($this->request->server['REQUEST_METHOD'] == 'POST' && isset($this->request->post['resetcounters']) && $this->request->post['resetcounters'] == 1) {
|
||||
if(isset($this->request->post['confirmed']) && $this->request->post['confirmed'] == 1 && Registry::get('admin_user') == 1) {
|
||||
$this->model_stat_counter->resetCounters();
|
||||
header("Location: index.php?route=health/health");
|
||||
exit;
|
||||
}
|
||||
else {
|
||||
$this->template = "health/counter-reset-confirm.tpl";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$this->data['counters'] = $this->model_stat_counter->getCounters();
|
||||
$this->data['prefix'] = '';
|
||||
if(isset($this->data['counters']['_c:rcvd'])) { $this->data['prefix'] = '_c:'; }
|
||||
|
||||
$this->data['sysinfo'] = $this->model_health_health->sysinfo();
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
70
webui/controller/login/login.php
Normal file
70
webui/controller/login/login.php
Normal file
@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerLoginLogin extends Controller {
|
||||
private $error = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "login/login.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('user/auth');
|
||||
$this->load->model('user/user');
|
||||
$this->load->model('user/prefs');
|
||||
|
||||
$this->document->title = $this->data['text_login'];
|
||||
|
||||
if($this->request->server['REQUEST_METHOD'] == 'POST' && $this->validate() == true) {
|
||||
|
||||
if($this->model_user_auth->checkLogin($this->request->post['username'], $_POST['password']) == 1) {
|
||||
|
||||
$this->model_user_prefs->get_user_preferences($_SESSION['username']);
|
||||
|
||||
LOGGER('logged in');
|
||||
|
||||
/*if(isset($_POST['relocation']) && $_POST['relocation']) {
|
||||
header("Location: " . SITE_URL . "index.php?" . $_POST['relocation']);
|
||||
} else {
|
||||
header("Location: " . SITE_URL . "search.php");
|
||||
}*/
|
||||
|
||||
header("Location: " . SITE_URL . "search.php");
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
$this->data['x'] = $this->data['text_invalid_email_or_password'];
|
||||
|
||||
}
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
private function validate() {
|
||||
|
||||
if(strlen($this->request->post['username']) < 2){
|
||||
$this->error['username'] = $this->data['text_invalid_username'];
|
||||
}
|
||||
|
||||
|
||||
if (!$this->error) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
29
webui/controller/login/logout.php
Normal file
29
webui/controller/login/logout.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerLoginLogout extends Controller {
|
||||
private $error = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "login/logout.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
$request = Registry::get('request');
|
||||
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('user/auth');
|
||||
|
||||
$this->document->title = $this->data['text_logout'];
|
||||
|
||||
logout();
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
50
webui/controller/message/download.php
Normal file
50
webui/controller/message/download.php
Normal file
@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerMessageDownload extends Controller {
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "message/headers.tpl";
|
||||
$this->layout = "common/layout-empty";
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('search/search');
|
||||
$this->load->model('search/message');
|
||||
|
||||
$this->document->title = $this->data['text_message'];
|
||||
|
||||
$this->data['id'] = @$this->request->get['id'];
|
||||
|
||||
if(!verify_piler_id($this->data['id'])) {
|
||||
AUDIT(ACTION_UNKNOWN, '', '', $this->data['id'], 'unknown piler id: ' . $this->data['id']);
|
||||
die("invalid id: " . $this->data['id']);
|
||||
}
|
||||
|
||||
if(!$this->model_search_search->check_your_permission_by_piler_id($this->data['id'])) {
|
||||
AUDIT(ACTION_UNAUTHORIZED_VIEW_MESSAGE, '', '', $this->data['id'], '');
|
||||
die("no permission for " . $this->data['id']);
|
||||
}
|
||||
|
||||
|
||||
AUDIT(ACTION_DOWNLOAD_MESSAGE, '', '', $this->data['id'], '');
|
||||
|
||||
header("Cache-Control: public, must-revalidate");
|
||||
header("Pragma: no-cache");
|
||||
header("Content-Type: application/octet-stream");
|
||||
header("Content-Disposition: attachment; filename=" . $this->data['id'] . ".eml");
|
||||
header("Content-Transfer-Encoding: binary\n");
|
||||
|
||||
print $this->model_search_message->get_raw_message($this->data['id']);
|
||||
exit;
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
44
webui/controller/message/headers.php
Normal file
44
webui/controller/message/headers.php
Normal file
@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerMessageHeaders extends Controller {
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "message/headers.tpl";
|
||||
$this->layout = "common/layout-empty";
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('search/search');
|
||||
$this->load->model('search/message');
|
||||
|
||||
$this->load->model('user/user');
|
||||
|
||||
$this->document->title = $this->data['text_message'];
|
||||
|
||||
$this->data['id'] = @$this->request->get['id'];
|
||||
|
||||
if(!verify_piler_id($this->data['id'])) {
|
||||
AUDIT(ACTION_UNKNOWN, '', '', $this->data['id'], 'unknown piler id: ' . $this->data['id']);
|
||||
die("invalid id: " . $this->data['id']);
|
||||
}
|
||||
|
||||
if(!$this->model_search_search->check_your_permission_by_piler_id($this->data['id'])) {
|
||||
AUDIT(ACTION_UNAUTHORIZED_VIEW_MESSAGE, '', '', $this->data['id'], '');
|
||||
die("no permission for " . $this->data['id']);
|
||||
}
|
||||
|
||||
AUDIT(ACTION_VIEW_HEADER, '', '', $this->data['id'], '');
|
||||
|
||||
$this->data['data'] = $this->model_search_message->get_message_headers($this->data['id']);
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
57
webui/controller/message/remove.php
Normal file
57
webui/controller/message/remove.php
Normal file
@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerMessageRemove extends Controller {
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "message/remove.tpl";
|
||||
$this->layout = "common/layout-empty";
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('search/search');
|
||||
$this->load->model('search/message');
|
||||
|
||||
$this->load->model('user/user');
|
||||
|
||||
$this->document->title = $this->data['text_message'];
|
||||
|
||||
$this->data['id'] = @$this->request->get['id'];
|
||||
|
||||
if(HOLD_EMAIL == 1) {
|
||||
AUDIT(ACTION_UNAUTHORIZED_REMOVE_MESSAGE, '', '', $this->data['id'], '');
|
||||
die("not authorized to remove id: " . $this->data['id']);
|
||||
}
|
||||
|
||||
|
||||
if(!verify_piler_id($this->data['id'])) {
|
||||
AUDIT(ACTION_UNKNOWN, '', '', $this->data['id'], 'unknown piler id: ' . $this->data['id']);
|
||||
die("invalid id: " . $this->data['id']);
|
||||
}
|
||||
|
||||
if(Registry::get('admin_user') == 0) {
|
||||
AUDIT(ACTION_UNAUTHORIZED_REMOVE_MESSAGE, '', '', $this->data['id'], '');
|
||||
die("no permission for " . $this->data['id']);
|
||||
}
|
||||
|
||||
|
||||
AUDIT(ACTION_REMOVE_MESSAGE, '', '', $this->data['id'], '');
|
||||
|
||||
|
||||
if($this->model_search_search->remove_message($this->data['id']) == 1) {
|
||||
$this->data['data'] = $this->data['text_marked_for_removal'];
|
||||
} else {
|
||||
$this->data['data'] = $this->data['text_failed_to_mark_for_removal'];
|
||||
AUDIT(ACTION_REMOVE_MESSAGE, '', '', $this->data['id'], 'failed');
|
||||
}
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
65
webui/controller/message/restore.php
Normal file
65
webui/controller/message/restore.php
Normal file
@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerMessageRestore extends Controller {
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "message/restore.tpl";
|
||||
$this->layout = "common/layout-empty";
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('search/search');
|
||||
$this->load->model('search/message');
|
||||
|
||||
$this->load->model('user/user');
|
||||
$this->load->model('mail/mail');
|
||||
|
||||
$this->document->title = $this->data['text_message'];
|
||||
|
||||
$this->data['id'] = @$this->request->get['id'];
|
||||
|
||||
if(!verify_piler_id($this->data['id'])) {
|
||||
AUDIT(ACTION_UNKNOWN, '', '', $this->data['id'], 'unknown piler id: ' . $this->data['id']);
|
||||
die("invalid id: " . $this->data['id']);
|
||||
}
|
||||
|
||||
if(!$this->model_search_search->check_your_permission_by_piler_id($this->data['id'])) {
|
||||
AUDIT(ACTION_UNAUTHORIZED_VIEW_MESSAGE, '', '', $this->data['id'], '');
|
||||
die("no permission for " . $this->data['id']);
|
||||
}
|
||||
|
||||
AUDIT(ACTION_RESTORE_MESSAGE, '', '', $this->data['id'], '');
|
||||
|
||||
|
||||
$this->data['username'] = Registry::get('username');
|
||||
|
||||
$rcpt = array();
|
||||
|
||||
|
||||
/* send the email to all the recipients of the original email if we are admin or auditor users */
|
||||
|
||||
if(Registry::get('admin_user') == 1 || Registry::get('auditor_user') == 1) {
|
||||
$rcpt = $this->model_search_search->get_message_recipients($this->data['id']);
|
||||
}
|
||||
else {
|
||||
array_push($rcpt, $_SESSION['email']);
|
||||
}
|
||||
|
||||
|
||||
$x = $this->model_mail_mail->send_smtp_email(SMARTHOST, SMARTHOST_PORT, SMTP_DOMAIN, SMTP_FROMADDR, $rcpt,
|
||||
"Received: by piler" . EOL . PILER_HEADER_FIELD . $this->data['id'] . EOL . $this->model_search_message->get_raw_message($this->data['id']) );
|
||||
|
||||
if($x == 1) { $this->data['data'] = $this->data['text_restored']; }
|
||||
else { $this->data['data'] = $this->data['text_failed_to_restore']; }
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
70
webui/controller/message/view.php
Normal file
70
webui/controller/message/view.php
Normal file
@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerMessageView extends Controller {
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "message/view.tpl";
|
||||
$this->layout = "common/layout-empty";
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('search/search');
|
||||
$this->load->model('search/message');
|
||||
$this->load->model('audit/audit');
|
||||
|
||||
$this->load->model('user/user');
|
||||
|
||||
$this->document->title = $this->data['text_message'];
|
||||
|
||||
$this->data['id'] = '';
|
||||
|
||||
if(isset($_SERVER['REQUEST_URI'])) { $this->data['id'] = preg_replace("/\/message.php\//", "", $_SERVER['REQUEST_URI']); }
|
||||
|
||||
if($this->request->server['REQUEST_METHOD'] == 'POST') {
|
||||
$this->data['id'] = $this->request->post['id'];
|
||||
}
|
||||
|
||||
|
||||
if(!verify_piler_id($this->data['id'])) {
|
||||
AUDIT(ACTION_UNKNOWN, '', '', $this->data['id'], 'unknown piler id: ' . $this->data['id']);
|
||||
die("invalid id: " . $this->data['id']);
|
||||
}
|
||||
|
||||
if(!$this->model_search_search->check_your_permission_by_piler_id($this->data['id'])) {
|
||||
AUDIT(ACTION_UNAUTHORIZED_VIEW_MESSAGE, '', '', $this->data['id'], '');
|
||||
die("no permission for " . $this->data['id']);
|
||||
}
|
||||
|
||||
|
||||
AUDIT(ACTION_VIEW_MESSAGE, '', '', $this->data['id'], '');
|
||||
|
||||
$this->data['username'] = Registry::get('username');
|
||||
|
||||
/* fix username if we are admin */
|
||||
|
||||
if(isset($this->request->get['user']) && strlen($this->request->get['user']) > 1 && (Registry::get('admin_user') == 1 || $this->model_user_user->isUserInMyDomain($this->request->get['user']) == 1) ) {
|
||||
$this->data['username'] = $this->request->get['user'];
|
||||
}
|
||||
|
||||
|
||||
if($this->request->server['REQUEST_METHOD'] == 'POST') {
|
||||
$this->model_search_message->add_message_tag($this->data['id'], $_SESSION['uid'], $this->request->post['tag']);
|
||||
header("Location: " . $_SERVER['HTTP_REFERER']);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
$this->data['message'] = $this->model_search_message->extract_message($this->data['id']);
|
||||
$this->data['message']['tag'] = $this->model_search_message->get_message_tag($this->data['id'], $_SESSION['uid']);
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
41
webui/controller/policy/archiving.php
Normal file
41
webui/controller/policy/archiving.php
Normal file
@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerPolicyArchiving extends Controller {
|
||||
private $error = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "policy/archiving.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('policy/archiving');
|
||||
|
||||
$this->document->title = $this->data['text_archiving_rules'];
|
||||
|
||||
$this->data['rules'] = array();
|
||||
|
||||
|
||||
if($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||
$rc = $this->model_policy_archiving->add_new_rule($this->request->post);
|
||||
|
||||
}
|
||||
|
||||
$this->data['rules'] = $this->model_policy_archiving->get_rules();
|
||||
|
||||
//print_r($this->data['rules']);
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
76
webui/controller/policy/removearchiving.php
Normal file
76
webui/controller/policy/removearchiving.php
Normal file
@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerPolicyRemovearchiving extends Controller {
|
||||
private $error = array();
|
||||
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "policy/removearchiving.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('policy/archiving');
|
||||
|
||||
$this->document->title = $this->data['text_archiving_rules'];
|
||||
|
||||
|
||||
$this->data['username'] = Registry::get('username');
|
||||
|
||||
$this->data['id'] = @$this->request->get['id'];
|
||||
$this->data['confirmed'] = (int)@$this->request->get['confirmed'];
|
||||
|
||||
|
||||
$this->data['rule'] = $this->model_policy_archiving->get_rule($this->data['id']);
|
||||
|
||||
if($this->validate() == true) {
|
||||
|
||||
if($this->data['confirmed'] == 1) {
|
||||
$ret = $this->model_policy_archiving->remove_rule($this->data['id']);
|
||||
if($ret == 1){
|
||||
$this->data['x'] = $this->data['text_successfully_removed'];
|
||||
}
|
||||
else {
|
||||
$this->data['x'] = $this->data['text_failed_to_remove'];
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$this->template = "common/error.tpl";
|
||||
$this->data['errorstring'] = array_pop($this->error);
|
||||
}
|
||||
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
private function validate() {
|
||||
|
||||
if(Registry::get('admin_user') == 0) {
|
||||
$this->error['admin'] = $this->data['text_you_are_not_admin'];
|
||||
}
|
||||
|
||||
if(!isset($this->request->get['id']) || $this->request->get['id'] < 1 ) {
|
||||
$this->error['rule'] = $this->data['text_invalid_data'];
|
||||
}
|
||||
|
||||
|
||||
if (!$this->error) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
202
webui/controller/search/helper.php
Normal file
202
webui/controller/search/helper.php
Normal file
@ -0,0 +1,202 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerSearchHelper extends Controller {
|
||||
private $error = array();
|
||||
private $a = array(
|
||||
'o_from' => '',
|
||||
'f_from' => '',
|
||||
'o_to' => '',
|
||||
'f_to' => '',
|
||||
'from' => '',
|
||||
'to' => '',
|
||||
'from_domain' => '',
|
||||
'to_domain' => '',
|
||||
'subject' => '',
|
||||
'body' => '',
|
||||
'date1' => '',
|
||||
'date2' => '',
|
||||
'direction' => '',
|
||||
'size' => '',
|
||||
'attachment_type' => '',
|
||||
'tag' => ''
|
||||
);
|
||||
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "search/helper.tpl";
|
||||
$this->layout = "common/layout-empty";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$sphx = Registry::get('sphx');
|
||||
|
||||
$this->load->model('search/search');
|
||||
$this->load->model('search/message');
|
||||
$this->load->model('user/user');
|
||||
|
||||
|
||||
$this->data['page'] = 0;
|
||||
if(isset($this->request->post['page'])) { $this->data['page'] = $this->request->post['page']; }
|
||||
|
||||
$this->data['page_len'] = get_page_length();
|
||||
|
||||
$this->data['n'] = -1;
|
||||
|
||||
if($this->request->post['searchtype'] == 'advanced') {
|
||||
$this->preprocess_post_advanced_request($this->request->post);
|
||||
$this->fixup_post_request();
|
||||
list ($this->data['n'], $this->data['messages']) = $this->model_search_search->search_messages($this->a, ADVANCED_SEARCH, $this->data['page']);
|
||||
} else if($this->request->post['searchtype'] == 'expert'){
|
||||
$this->preprocess_post_expert_request($this->request->post);
|
||||
$this->fixup_post_request();
|
||||
list ($this->data['n'], $this->data['messages']) = $this->model_search_search->search_messages($this->a, ADVANCED_SEARCH, $this->data['page']);
|
||||
} else {
|
||||
$this->fixup_post_simple_request();
|
||||
list ($this->data['n'], $this->data['messages']) = $this->model_search_search->search_messages($this->request->post, SIMPLE_SEARCH, $this->data['page']);
|
||||
}
|
||||
|
||||
|
||||
/* paging info */
|
||||
|
||||
$this->data['prev_page'] = $this->data['page'] - 1;
|
||||
$this->data['next_page'] = $this->data['page'] + 1;
|
||||
|
||||
$this->data['total_pages'] = ceil($this->data['n'] / $this->data['page_len'])-1;
|
||||
|
||||
$this->data['hits_from'] = $this->data['page'] * $this->data['page_len'] + 1;
|
||||
$this->data['hits_to'] = ($this->data['page']+1) * $this->data['page_len'];
|
||||
|
||||
if($this->data['hits_to'] > $this->data['n']) { $this->data['hits_to'] = $this->data['n']; }
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
private function fixup_post_simple_request() {
|
||||
if(!isset($this->request->post['date1'])) { $this->request->post['date1'] = ''; }
|
||||
if(!isset($this->request->post['date2'])) { $this->request->post['date2'] = ''; }
|
||||
}
|
||||
|
||||
|
||||
private function fixup_post_request() {
|
||||
while(list($k, $v) = each($this->a)) {
|
||||
if($this->a[$k]) { $this->a[$k] = substr($this->a[$k], 1, strlen($this->a[$k])); }
|
||||
}
|
||||
|
||||
$this->a['sort'] = $this->request->post['sort'];
|
||||
$this->a['order'] = $this->request->post['order'];
|
||||
}
|
||||
|
||||
|
||||
private function preprocess_post_expert_request($data = array()) {
|
||||
$token = '';
|
||||
|
||||
//print_r($data);
|
||||
|
||||
$s = preg_replace("/:/", ": ", $data['search']);
|
||||
$s = preg_replace("/,/", " ", $s);
|
||||
$s = preg_replace("/\s{1,}/", " ", $s);
|
||||
$b = explode(" ", $s);
|
||||
|
||||
while(list($k, $v) = each($b)) {
|
||||
if($v == 'from:') { $token = 'from'; continue; }
|
||||
else if($v == 'to:') { $token = 'to'; continue; }
|
||||
else if($v == 'subject:') { $token = 'subject'; continue; }
|
||||
else if($v == 'body:') { $token = 'body'; continue; }
|
||||
else if($v == 'direction:' || $v == 'd:') { $token = 'direction'; continue; }
|
||||
else if($v == 'size:') { $token = 'size'; continue; }
|
||||
else if($v == 'date1:') { $token = 'date1'; continue; }
|
||||
else if($v == 'date2:') { $token = 'date2'; continue; }
|
||||
else if($v == 'attachment:' || $v == 'a:') { $token = 'attachment_type'; continue; }
|
||||
else if($v == 'size') { $token = 'size'; continue; }
|
||||
else if($v == 'tag:') { $token = 'tag'; continue; }
|
||||
|
||||
if($token == 'from') {
|
||||
$v = fix_email_address($v);
|
||||
|
||||
if(!strstr($v, '@')) { $this->a['from_domain'] .= "|$v"; }
|
||||
else {
|
||||
$this->a['from'] .= "|$v";
|
||||
if(in_array($v, $_SESSION['emails'])) { $this->a['o_from'] .= "|$v"; } else { $this->a['f_from'] .= "|$v"; }
|
||||
}
|
||||
}
|
||||
else if($token == 'to') {
|
||||
$v = fix_email_address($v);
|
||||
|
||||
if(!strstr($v, '@')) { $this->a['to_domain'] .= "|$v"; }
|
||||
else {
|
||||
$this->a['to'] .= "|$v";
|
||||
if(in_array($v, $_SESSION['emails'])) { $this->a['o_to'] .= "|$v"; } else { $this->a['f_to'] .= "|$v"; }
|
||||
}
|
||||
}
|
||||
else if($token == 'subject') { $this->a['subject'] .= ' ' . $v; }
|
||||
else if($token == 'body') { $this->a['body'] .= ' ' . $v; }
|
||||
else if($token == 'date1') { $this->a['date1'] = $v; }
|
||||
else if($token == 'date2') { $this->a['date2'] = $v; }
|
||||
else if($token == 'direction') { $this->a['direction'] = $v; }
|
||||
else if($token == 'size') { $this->a['size'] .= ' ' . $v; }
|
||||
else if($token == 'attachment_type') { $this->a['attachment_type'] .= ' ' . $v; }
|
||||
else if($token == 'tag') { $this->a['tag'] .= ' ' . $v; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private function preprocess_post_advanced_request($data = array()) {
|
||||
|
||||
if(isset($data['f'])) {
|
||||
foreach($data['f'] as $f) {
|
||||
$v = array_shift($data['v']);
|
||||
|
||||
if($v == '') { continue; }
|
||||
|
||||
if($f == 'from') {
|
||||
$v = fix_email_address($v);
|
||||
|
||||
if(!strstr($v, '@')) { $this->a['from_domain'] .= "|$v"; }
|
||||
else {
|
||||
$this->a['from'] .= "|$v";
|
||||
if(in_array($v, $_SESSION['emails'])) { $this->a['o_from'] .= "|$v"; } else { $this->a['f_from'] .= "|$v"; }
|
||||
}
|
||||
}
|
||||
|
||||
if($f == 'to') {
|
||||
$v = fix_email_address($v);
|
||||
|
||||
if(!strstr($v, '@')) { $this->a['to_domain'] .= "|$v"; }
|
||||
else {
|
||||
$this->a['to'] .= "|$v";
|
||||
if(in_array($v, $_SESSION['emails'])) { $this->a['o_to'] .= "|$v"; } else { $this->a['f_to'] .= "|$v"; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if($f == 'subject') {
|
||||
$this->a['subject'] .= "|$v";
|
||||
}
|
||||
|
||||
|
||||
if($f == 'body') {
|
||||
$this->a['body'] .= "|$v";
|
||||
}
|
||||
|
||||
if($f == 'tag') {
|
||||
$this->a['tag'] .= "|$v";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
41
webui/controller/search/save.php
Normal file
41
webui/controller/search/save.php
Normal file
@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerSearchSave extends Controller {
|
||||
private $error = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "search/save.tpl";
|
||||
$this->layout = "common/layout-empty";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('search/search');
|
||||
|
||||
//print_r($this->request->post); exit;
|
||||
|
||||
if(isset($this->request->post['save'])) {
|
||||
$a = preg_replace("/\&save=1$/", "", http_build_query($this->request->post));
|
||||
|
||||
$this->model_search_search->add_search_term($a);
|
||||
}
|
||||
|
||||
|
||||
$this->data['searchterms'] = $this->model_search_search->get_search_terms();
|
||||
//print_r($this->data['searchterms']); exit;
|
||||
|
||||
$this->data['n'] = count($this->data['searchterms']);
|
||||
|
||||
$this->data['select_size'] = $this->data['n'] + 1;
|
||||
if($this->data['select_size'] > 7) { $this->data['select_size'] = 7; }
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
95
webui/controller/search/search.php
Normal file
95
webui/controller/search/search.php
Normal file
@ -0,0 +1,95 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerSearchSearch extends Controller {
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "search/search.tpl";
|
||||
$this->layout = "common/layout-search";
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('search/search');
|
||||
|
||||
$this->data['searchtype'] = 'simple';
|
||||
|
||||
if(isset($this->request->get['type'])) {
|
||||
if($this->request->get['type'] == 'advanced') {
|
||||
$this->template = "search/advanced.tpl";
|
||||
$this->data['searchtype'] = 'advanced';
|
||||
}
|
||||
|
||||
if($this->request->get['type'] == 'expert') {
|
||||
$this->template = "search/expert.tpl";
|
||||
$this->data['searchtype'] = 'expert';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(isset($this->request->post['searchterm'])) {
|
||||
$this->fixup_post_request();
|
||||
|
||||
$a = preg_replace("/\&loaded=1$/", "", $this->request->post['searchterm']);
|
||||
$this->model_search_search->update_search_term($a);
|
||||
}
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
private function fixup_post_request() {
|
||||
$i = 0;
|
||||
$a = array();
|
||||
|
||||
$this->data['blocks'] = array();
|
||||
|
||||
$this->data['searchterm'] = $this->request->post['searchterm'];
|
||||
|
||||
parse_str($this->request->post['searchterm'], $a);
|
||||
|
||||
if(isset($a['from'])) { $this->data['from'] = $a['from']; }
|
||||
if(isset($a['to'])) { $this->data['to'] = $a['to']; }
|
||||
if(isset($a['subject'])) { $this->data['subject'] = $a['subject']; }
|
||||
|
||||
if(isset($a['search'])) { $this->data['_search'] = $a['search']; }
|
||||
|
||||
if(isset($a['sort'])) { $this->data['sort'] = $a['sort']; }
|
||||
if(isset($a['order'])) { $this->data['order'] = $a['order']; }
|
||||
|
||||
if(isset($a['f'])) {
|
||||
foreach($a['f'] as $f) {
|
||||
$val = array_shift($a['v']);
|
||||
|
||||
if($val == '') { continue; }
|
||||
|
||||
if($i == 0) {
|
||||
$this->data['key0'] = 0;
|
||||
|
||||
if($f == 'from') { $this->data['key0'] = 0; }
|
||||
else if($f == 'to') { $this->data['key0'] = 1; }
|
||||
else if($f == 'subject') { $this->data['key0'] = 2; }
|
||||
else if($f == 'body') { $this->data['key0'] = 3; }
|
||||
|
||||
$this->data['val0'] = $val;
|
||||
}
|
||||
else {
|
||||
array_push($this->data['blocks'], array('key' => $f, 'val' => $val));
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
if(isset($a['date1'])) { $this->data['date1'] = $a['date1']; }
|
||||
if(isset($a['date2'])) { $this->data['date2'] = $a['date2']; }
|
||||
|
||||
if(isset($a['direction'])) { $this->data['direction'] = $a['direction']; }
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
45
webui/controller/stat/chart.php
Normal file
45
webui/controller/stat/chart.php
Normal file
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerStatChart extends Controller {
|
||||
private $error = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
$db_history = Registry::get('db_history');
|
||||
|
||||
$this->load->model('user/user');
|
||||
|
||||
$this->load->model('stat/chart');
|
||||
|
||||
$this->load->helper('libchart/classes/libchart');
|
||||
|
||||
$this->data['username'] = Registry::get('username');
|
||||
|
||||
$timespan = @$this->request->get['timespan'];
|
||||
|
||||
$db->select_db($db->database);
|
||||
|
||||
$emails = "";
|
||||
|
||||
/* let the admin users see the whole statistics */
|
||||
|
||||
if(Registry::get('admin_user') == 0 && Registry::get('readonly_admin') == 0) {
|
||||
$uid = $this->model_user_user->getUidByName($this->data['username']);
|
||||
$emails = "AND rcpt IN ('" . preg_replace("/\n/", "','", $this->model_user_user->getEmailsByUid((int)$uid)) . "')";
|
||||
}
|
||||
else if(isset($this->request->get['uid']) && is_numeric($this->request->get['uid']) && $this->request->get['uid'] > 0){
|
||||
$emails = "AND rcpt IN ('" . preg_replace("/\n/", "','", $this->model_user_user->getEmailsByUid((int)$this->request->get['uid'])) . "')";
|
||||
}
|
||||
|
||||
$aa = new ModelStatChart();
|
||||
$aa->pieChartHamSpam($emails, $timespan, $this->data['text_ham_and_spam_messages'], "");
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
51
webui/controller/stat/counter.php
Normal file
51
webui/controller/stat/counter.php
Normal file
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerStatCounter extends Controller {
|
||||
private $error = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "stat/counter.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
|
||||
$db = Registry::get('db');
|
||||
$db->select_db($db->database);
|
||||
|
||||
$this->load->model('stat/counter');
|
||||
|
||||
$this->document->title = $this->data['text_counters'];
|
||||
|
||||
|
||||
if(Registry::get('admin_user') == 1) {
|
||||
|
||||
if($this->request->server['REQUEST_METHOD'] == 'POST' && @$this->request->post['reset'] == 1) {
|
||||
$this->model_stat_counter->resetCounters();
|
||||
header("Location: index.php?route=stat/counter");
|
||||
exit;
|
||||
}
|
||||
|
||||
$this->data['counters'] = $this->model_stat_counter->getCounters();
|
||||
|
||||
$this->data['prefix'] = '';
|
||||
|
||||
if(isset($this->data['counters']['_c:rcvd'])) { $this->data['prefix'] = '_c:'; }
|
||||
|
||||
}
|
||||
else {
|
||||
$this->template = "common/error.tpl";
|
||||
$this->data['errorstring'] = $this->data['text_you_are_not_admin'];
|
||||
}
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
47
webui/controller/stat/graph.php
Normal file
47
webui/controller/stat/graph.php
Normal file
@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerStatGraph extends Controller {
|
||||
private $error = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
$db_history = Registry::get('db_history');
|
||||
|
||||
$this->load->model('user/user');
|
||||
|
||||
|
||||
$this->load->model('stat/chart');
|
||||
|
||||
$this->load->helper('libchart/classes/libchart');
|
||||
|
||||
$this->data['username'] = Registry::get('username');
|
||||
|
||||
$timespan = @$this->request->get['timespan'];
|
||||
|
||||
$db->select_db($db->database);
|
||||
|
||||
$emails = "";
|
||||
|
||||
/* let the admin users see the whole statistics */
|
||||
|
||||
if(Registry::get('admin_user') == 0 && Registry::get('readonly_admin') == 0) {
|
||||
$uid = $this->model_user_user->getUidByName($this->data['username']);
|
||||
$emails = "AND rcpt IN ('" . preg_replace("/\n/", "','", $this->model_user_user->getEmailsByUid((int)$uid)) . "')";
|
||||
}
|
||||
else if(isset($this->request->get['uid']) && is_numeric($this->request->get['uid']) && $this->request->get['uid'] > 0){
|
||||
$emails = "AND rcpt IN ('" . preg_replace("/\n/", "','", $this->model_user_user->getEmailsByUid((int)$this->request->get['uid'])) . "')";
|
||||
}
|
||||
|
||||
|
||||
$aa = new ModelStatChart();
|
||||
|
||||
$aa->lineChartHamSpam($emails, $timespan, $this->data['text_archived_messages'], SIZE_X, SIZE_Y, "");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
33
webui/controller/stat/stat.php
Normal file
33
webui/controller/stat/stat.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerStatStat extends Controller {
|
||||
private $error = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "stat/stat.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('user/user');
|
||||
|
||||
$this->document->title = $this->data['text_statistics'];
|
||||
|
||||
$this->data['timespan'] = @$this->request->get['timespan'];
|
||||
$this->data['uid'] = @$this->request->get['uid'];
|
||||
|
||||
$this->data['admin_user'] = Registry::get('admin_user');
|
||||
$this->data['readonly_admin'] = Registry::get('readonly_admin');
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
136
webui/controller/user/add.php
Normal file
136
webui/controller/user/add.php
Normal file
@ -0,0 +1,136 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerUserAdd extends Controller {
|
||||
private $error = array();
|
||||
private $domains = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "user/add.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('user/user');
|
||||
|
||||
$this->document->title = $this->data['text_user_management'];
|
||||
|
||||
$this->data['domains'] = array();
|
||||
|
||||
/* check if we are admin */
|
||||
|
||||
if(Registry::get('admin_user') == 1) {
|
||||
|
||||
/* query available domains */
|
||||
|
||||
$this->data['domains'] = $this->model_user_user->get_domains();
|
||||
|
||||
$this->domains = $this->model_user_user->get_email_domains();
|
||||
|
||||
|
||||
if($this->request->server['REQUEST_METHOD'] == 'POST') {
|
||||
$ret = 0;
|
||||
|
||||
if($this->validate() == true){
|
||||
$ret = $this->model_user_user->addUser($this->request->post);
|
||||
|
||||
$_SESSION['last_domain'] = $this->request->post['domain'];
|
||||
|
||||
if($ret == 1){
|
||||
$this->data['x'] = $this->data['text_successfully_added'];
|
||||
} else {
|
||||
$this->data['errorstring'] = $this->data['text_failed_to_add'] . ": " . $ret;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$this->data['errorstring'] = array_pop($this->error);
|
||||
}
|
||||
|
||||
if($ret == 0) {
|
||||
|
||||
$this->data['post'] = $this->request->post;
|
||||
$this->data['next_user_id'] = $this->model_user_user->getNextUid();
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
$this->data['next_user_id'] = $this->model_user_user->getNextUid();
|
||||
}
|
||||
}
|
||||
else {
|
||||
$this->template = "common/error.tpl";
|
||||
$this->data['errorstring'] = $this->data['text_you_are_not_admin'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
private function validate() {
|
||||
|
||||
if(!isset($this->request->post['password']) || !isset($this->request->post['password2']) ) {
|
||||
$this->error['password'] = $this->data['text_missing_password'];
|
||||
}
|
||||
|
||||
if(strlen(@$this->request->post['password']) < MIN_PASSWORD_LENGTH || strlen(@$this->request->post['password2']) < MIN_PASSWORD_LENGTH) {
|
||||
$this->error['password'] = $this->data['text_too_short_password'];
|
||||
}
|
||||
|
||||
if($this->request->post['password'] != $this->request->post['password2']) {
|
||||
$this->error['password'] = $this->data['text_password_mismatch'];
|
||||
}
|
||||
|
||||
if(!isset($this->request->post['uid']) || !is_numeric($this->request->post['uid']) || $this->request->post['uid'] < 0) {
|
||||
$this->error['uid'] = $this->data['text_invalid_uid'];
|
||||
}
|
||||
|
||||
if(!isset($this->request->post['email']) || strlen($this->request->post['email']) < 3) {
|
||||
$this->error['email'] = $this->data['text_invalid_email'];
|
||||
}
|
||||
else {
|
||||
$emails = explode("\n", $this->request->post['email']);
|
||||
foreach ($emails as $email) {
|
||||
$email = rtrim($email);
|
||||
$ret = checkemail($email, $this->domains);
|
||||
if($ret == 0) {
|
||||
$this->error['email'] = $this->data['text_invalid_email'] . ": $email";
|
||||
}
|
||||
else if($ret == -1) {
|
||||
$this->error['email'] = $this->data['text_email_in_unknown_domain'] . ": $email";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!isset($this->request->post['username']) || strlen($this->request->post['username']) < 2) {
|
||||
$this->error['username'] = $this->data['text_invalid_username'];
|
||||
}
|
||||
|
||||
if(isset($this->request->post['username']) && $this->model_user_user->getUidByName($this->request->post['username']) > 0) {
|
||||
$this->error['username'] = $this->data['text_existing_user'];
|
||||
}
|
||||
|
||||
if(!isset($this->request->post['domain'])) {
|
||||
$this->error['domain'] = $this->data['text_missing_data'];
|
||||
}
|
||||
|
||||
|
||||
if (!$this->error) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
142
webui/controller/user/edit.php
Normal file
142
webui/controller/user/edit.php
Normal file
@ -0,0 +1,142 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerUserEdit extends Controller {
|
||||
private $error = array();
|
||||
private $domains = array();
|
||||
|
||||
public function index(){
|
||||
$this->data['uid'] = 0;
|
||||
$this->data['email'] = "";
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "user/edit.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
$language = Registry::get('language');
|
||||
|
||||
$this->load->model('user/user');
|
||||
|
||||
|
||||
$this->document->title = $language->get('text_user_management');
|
||||
|
||||
$this->data['domains'] = array();
|
||||
|
||||
|
||||
if(isset($this->request->get['uid']) && is_numeric($this->request->get['uid']) && $this->request->get['uid'] > 0) {
|
||||
$this->data['uid'] = $this->request->get['uid'];
|
||||
}
|
||||
|
||||
if(isset($this->request->post['uid']) && is_numeric($this->request->post['uid']) && $this->request->post['uid'] > 0) {
|
||||
$this->data['uid'] = $this->request->post['uid'];
|
||||
}
|
||||
|
||||
|
||||
$this->domains = $this->model_user_user->get_email_domains();
|
||||
|
||||
|
||||
if(isset($this->request->get['email']) && checkemail($this->request->get['email'], $this->domains) == 1) {
|
||||
$this->data['email'] = $this->request->get['email'];
|
||||
}
|
||||
|
||||
|
||||
/* check if we are admin */
|
||||
|
||||
if(Registry::get('admin_user') == 1) {
|
||||
|
||||
$this->data['domains'] = $this->model_user_user->get_domains();
|
||||
|
||||
if($this->request->server['REQUEST_METHOD'] == 'POST') {
|
||||
if($this->validate() == true){
|
||||
|
||||
$ret = $this->model_user_user->updateUser($this->request->post);
|
||||
|
||||
if($ret == 1){
|
||||
$this->data['x'] = $this->data['text_successfully_modified'];
|
||||
} else {
|
||||
$this->template = "common/error.tpl";
|
||||
$this->data['errorstring'] = $this->data['text_failed_to_modify'] . ": " . $ret;
|
||||
}
|
||||
|
||||
$__username = $this->request->post['username'];
|
||||
}
|
||||
else {
|
||||
$this->template = "common/error.tpl";
|
||||
$this->data['errorstring'] = array_pop($this->error);
|
||||
}
|
||||
}
|
||||
else {
|
||||
$this->data['user'] = $this->model_user_user->getUserByUid($this->data['uid']);
|
||||
|
||||
$this->data['user']['group_membership'] = $this->model_user_user->get_additional_uids($this->data['uid']);
|
||||
|
||||
$this->data['emails'] = $this->model_user_user->getEmails($this->data['user']['username']);
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
$this->template = "common/error.tpl";
|
||||
$this->data['errorstring'] = $this->data['text_you_are_not_admin'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
private function validate() {
|
||||
|
||||
if(isset($this->request->post['password']) && strlen(@$this->request->post['password']) > 1) {
|
||||
|
||||
if(strlen(@$this->request->post['password']) < MIN_PASSWORD_LENGTH || strlen(@$this->request->post['password2']) < MIN_PASSWORD_LENGTH) {
|
||||
$this->error['password'] = $this->data['text_invalid_password'];
|
||||
}
|
||||
|
||||
if($this->request->post['password'] != $this->request->post['password2']) {
|
||||
$this->error['password'] = $this->data['text_password_mismatch'];
|
||||
}
|
||||
}
|
||||
|
||||
if(!isset($this->request->post['uid']) || !is_numeric($this->request->post['uid']) || (int)$this->request->post['uid'] < 0) {
|
||||
$this->error['uid'] = $this->data['text_invalid_uid'];
|
||||
}
|
||||
|
||||
if(strlen(@$this->request->post['email']) < 4) {
|
||||
$this->error['email'] = $this->data['text_invalid_email'];
|
||||
} else {
|
||||
$emails = explode("\n", $this->request->post['email']);
|
||||
foreach ($emails as $email) {
|
||||
$email = rtrim($email);
|
||||
$ret = checkemail($email, $this->domains);
|
||||
if($ret == 0) {
|
||||
$this->error['email'] = $this->data['text_invalid_email'] . ": $email";
|
||||
}
|
||||
else if($ret == -1) {
|
||||
$this->error['email'] = $this->data['text_email_in_unknown_domain'] . ": $email";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!isset($this->request->post['username']) || strlen($this->request->post['username']) < 2 ) {
|
||||
$this->error['username'] = $this->data['text_invalid_username'];
|
||||
}
|
||||
|
||||
|
||||
if (!$this->error) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
101
webui/controller/user/list.php
Normal file
101
webui/controller/user/list.php
Normal file
@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerUserList extends Controller {
|
||||
private $error = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "user/list.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
$language = Registry::get('language');
|
||||
|
||||
$this->load->model('user/user');
|
||||
|
||||
$this->document->title = $language->get('text_user_management');
|
||||
|
||||
|
||||
$this->data['page'] = 0;
|
||||
$this->data['page_len'] = get_page_length();
|
||||
|
||||
$this->data['total_users'] = 0;
|
||||
|
||||
$users = array();
|
||||
|
||||
|
||||
/* get search term if there's any */
|
||||
|
||||
if($this->request->server['REQUEST_METHOD'] == 'POST'){
|
||||
$this->data['search'] = @$this->request->post['search'];
|
||||
}
|
||||
else {
|
||||
$this->data['search'] = @$this->request->get['search'];
|
||||
}
|
||||
|
||||
/* get page */
|
||||
|
||||
if(isset($this->request->get['page']) && is_numeric($this->request->get['page']) && $this->request->get['page'] > 0) {
|
||||
$this->data['page'] = $this->request->get['page'];
|
||||
}
|
||||
|
||||
|
||||
$this->data['sort'] = 'username';
|
||||
|
||||
$this->data['order'] = (int)@$this->request->get['order'];
|
||||
|
||||
if(@$this->request->get['sort'] == "uid") { $this->data['sort'] = "uid"; }
|
||||
if(@$this->request->get['sort'] == "realname") { $this->data['sort'] = "realname"; }
|
||||
if(@$this->request->get['sort'] == "email") { $this->data['sort'] = "email"; }
|
||||
if(@$this->request->get['sort'] == "domain") { $this->data['sort'] = "domain"; }
|
||||
if(@$this->request->get['sort'] == "policy") { $this->data['sort'] = "policy_group"; }
|
||||
|
||||
|
||||
/* check if we are admin */
|
||||
|
||||
if(Registry::get('admin_user') == 1) {
|
||||
|
||||
$users = $this->model_user_user->getUsers($this->data['search'], $this->data['page'], $this->data['page_len'],
|
||||
$this->data['sort'], $this->data['order']);
|
||||
|
||||
$this->data['total_users'] = $this->model_user_user->howManyUsers($this->data['search']);
|
||||
|
||||
foreach ($users as $user) {
|
||||
$policy_group = DEFAULT_POLICY;
|
||||
|
||||
$this->data['users'][] = array(
|
||||
'uid' => $user['uid'],
|
||||
'username' => $user['username'],
|
||||
'realname' => $user['realname'],
|
||||
'email' => $user['email'],
|
||||
'shortemail' => short_email($user['email']),
|
||||
'domain' => $user['domain'],
|
||||
'policy_group' => $policy_group,
|
||||
'isadmin' => $user['isadmin']
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
$this->template = "common/error.tpl";
|
||||
$this->data['errorstring'] = $this->data['text_you_are_not_admin'];
|
||||
}
|
||||
|
||||
|
||||
$this->data['prev_page'] = $this->data['page'] - 1;
|
||||
$this->data['next_page'] = $this->data['page'] + 1;
|
||||
|
||||
$this->data['total_pages'] = floor($this->data['total_users'] / $this->data['page_len']);
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
76
webui/controller/user/remove.php
Normal file
76
webui/controller/user/remove.php
Normal file
@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerUserRemove extends Controller {
|
||||
private $error = array();
|
||||
private $domains = array();
|
||||
private $d = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "user/remove.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('user/user');
|
||||
|
||||
$this->document->title = $this->data['text_user_management'];
|
||||
|
||||
|
||||
$this->data['username'] = Registry::get('username');
|
||||
|
||||
$this->data['uid'] = (int)@$this->request->get['uid'];
|
||||
$this->data['user'] = @$this->request->get['user'];
|
||||
$this->data['confirmed'] = (int)@$this->request->get['confirmed'];
|
||||
|
||||
|
||||
if($this->validate() == true) {
|
||||
|
||||
if($this->data['confirmed'] == 1) {
|
||||
$ret = $this->model_user_user->deleteUser($this->data['uid']);
|
||||
if($ret == 1){
|
||||
$this->data['x'] = $this->data['text_successfully_removed'];
|
||||
}
|
||||
else {
|
||||
$this->data['x'] = $this->data['text_failed_to_remove'];
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$this->template = "common/error.tpl";
|
||||
$this->data['errorstring'] = array_pop($this->error);
|
||||
}
|
||||
|
||||
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
private function validate() {
|
||||
|
||||
if(Registry::get('admin_user') == 0) {
|
||||
$this->error['admin'] = $this->data['text_you_are_not_admin'];
|
||||
}
|
||||
|
||||
if(!isset($this->request->get['uid']) || !is_numeric($this->request->get['uid']) || $this->request->get['uid'] < 1 ) {
|
||||
$this->error['username'] = $this->data['text_invalid_uid'];
|
||||
}
|
||||
|
||||
|
||||
if (!$this->error) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
78
webui/controller/user/settings.php
Normal file
78
webui/controller/user/settings.php
Normal file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ControllerUserSettings extends Controller {
|
||||
private $error = array();
|
||||
|
||||
public function index(){
|
||||
|
||||
$this->id = "content";
|
||||
$this->template = "user/settings.tpl";
|
||||
$this->layout = "common/layout";
|
||||
|
||||
|
||||
$request = Registry::get('request');
|
||||
$db = Registry::get('db');
|
||||
|
||||
$this->load->model('user/auth');
|
||||
$this->load->model('user/prefs');
|
||||
|
||||
|
||||
$this->document->title = $this->data['text_home'];
|
||||
|
||||
|
||||
if(isset($this->request->post['pagelen']) && isset($this->request->post['lang']) && isset($this->request->post['theme'])) {
|
||||
$this->model_user_prefs->set_user_preferences(Registry::get('username'), $this->request->post);
|
||||
|
||||
AUDIT(ACTION_CHANGE_USER_SETTINGS, '', '', '', 'lang:' . $this->request->post['lang'] . ', pagelen:' . $this->request->post['pagelen'] . ', theme:' . $this->request->post['theme']);
|
||||
|
||||
Header("Location: settings.php");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if($this->request->server['REQUEST_METHOD'] == 'POST' && PASSWORD_CHANGE_ENABLED == 1 && $this->validate() == true) {
|
||||
|
||||
if($this->model_user_auth->changePassword(Registry::get('username'), $this->request->post['password']) == 1) {
|
||||
$this->data['x'] = $this->data['text_password_changed'];
|
||||
}
|
||||
else {
|
||||
$this->data['x'] = $this->data['text_failed_to_change_password'];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$this->data['page_len'] = get_page_length();
|
||||
|
||||
$this->render();
|
||||
}
|
||||
|
||||
|
||||
private function validate() {
|
||||
|
||||
if(!isset($this->request->post['password']) || !isset($this->request->post['password2']) ) {
|
||||
$this->error['password'] = $this->data['text_missing_password'];
|
||||
}
|
||||
|
||||
if(strlen(@$this->request->post['password']) < MIN_PASSWORD_LENGTH || strlen(@$this->request->post['password2']) < MIN_PASSWORD_LENGTH) {
|
||||
$this->error['password'] = $this->data['text_invalid_password'];
|
||||
}
|
||||
|
||||
if($this->request->post['password'] != $this->request->post['password2']) {
|
||||
$this->error['password'] = $this->data['text_password_mismatch'];
|
||||
}
|
||||
|
||||
|
||||
if (!$this->error) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
89
webui/index.php
Normal file
89
webui/index.php
Normal file
@ -0,0 +1,89 @@
|
||||
<?php
|
||||
|
||||
function go_to_setup() {
|
||||
Header("Location: setup/setup.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
$stat = stat("config.php") or go_to_setup();
|
||||
if($stat[7] < 15){ go_to_setup(); }
|
||||
|
||||
|
||||
require_once("config.php");
|
||||
|
||||
require(DIR_SYSTEM . "/startup.php");
|
||||
|
||||
|
||||
$request = new Request();
|
||||
Registry::set("request", $request);
|
||||
|
||||
|
||||
session_start();
|
||||
|
||||
|
||||
Registry::set('document', new Document());
|
||||
|
||||
|
||||
$loader = new Loader();
|
||||
Registry::set('load', $loader);
|
||||
|
||||
|
||||
$language = new Language();
|
||||
Registry::set('language', $language);
|
||||
|
||||
|
||||
/* check if user has authenticated himself. If not, we send him to login */
|
||||
|
||||
Registry::set('username', getAuthenticatedUsername());
|
||||
Registry::set('admin_user', isAdminUser());
|
||||
Registry::set('auditor_user', isAuditorUser());
|
||||
Registry::set('readonly_admin', isReadonlyAdmin());
|
||||
|
||||
|
||||
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PREFIX);
|
||||
Registry::set('DB_DATABASE', DB_DATABASE);
|
||||
|
||||
Registry::set('db', $db);
|
||||
|
||||
Registry::set('DB_DRIVER', DB_DRIVER);
|
||||
|
||||
$sphx = new DB(SPHINX_DRIVER, SPHINX_HOSTNAME, "", "", SPHINX_DATABASE, "");
|
||||
Registry::set('sphx', $sphx);
|
||||
|
||||
|
||||
if(MEMCACHED_ENABLED) {
|
||||
$memcache = new Memcache();
|
||||
foreach ($memcached_servers as $m){
|
||||
$memcache->addServer($m[0], $m[1]);
|
||||
}
|
||||
|
||||
Registry::set('memcache', $memcache);
|
||||
}
|
||||
|
||||
Registry::set('counters', $counters);
|
||||
Registry::set('langs', $langs);
|
||||
Registry::set('themes', $themes);
|
||||
|
||||
Registry::set('health_smtp_servers', $health_smtp_servers);
|
||||
Registry::set('partitions_to_monitor', $partitions_to_monitor);
|
||||
|
||||
|
||||
if(Registry::get('username')) {
|
||||
|
||||
if(isset($request->get['route'])){
|
||||
$action = new Router($request->get['route']);
|
||||
}
|
||||
else {
|
||||
$action = new Router('search/search');
|
||||
}
|
||||
}
|
||||
else {
|
||||
$action = new Router('login/login');
|
||||
}
|
||||
|
||||
|
||||
$controller = new Front();
|
||||
$controller->dispatch($action, new Router('common/not_found'));
|
||||
|
||||
|
||||
?>
|
308
webui/language/en/messages.php
Normal file
308
webui/language/en/messages.php
Normal file
@ -0,0 +1,308 @@
|
||||
<?php
|
||||
|
||||
$_['text_action'] = "Action";
|
||||
$_['text_active_incoming_queue'] = "active + incoming queue";
|
||||
$_['text_active_incoming_queue_sender'] = "active + incoming queue vs. sender";
|
||||
$_['text_ad_sync_status'] = "AD synchronisation status";
|
||||
$_['text_add'] = "Add";
|
||||
$_['text_add_new_email_address'] = "New email address";
|
||||
$_['text_add_new_domain'] = "New domain";
|
||||
$_['text_add_new_rule'] = "Add rule";
|
||||
$_['text_add_new_user_alias'] = "Add new user";
|
||||
$_['text_add_policy'] = "Add new policy";
|
||||
$_['text_administration'] = "Administration";
|
||||
$_['text_admin_user'] = "Admin user";
|
||||
$_['text_advanced_search'] = "Advanced search";
|
||||
$_['text_all'] = "all";
|
||||
$_['text_any'] = "any";
|
||||
$_['text_archive_size'] = "Archive size";
|
||||
$_['text_archived_messages'] = "Archived messages";
|
||||
$_['text_archiving_rules'] = "Archiving rules";
|
||||
$_['text_attachment_size'] = "Attachment size";
|
||||
$_['text_attachment_type'] = "Attachment type";
|
||||
$_['text_audit'] = "Audit";
|
||||
|
||||
$_['text_back'] = "Back";
|
||||
$_['text_body'] = "Body";
|
||||
$_['text_bulk_edit_selected_uids'] = "Bulk edit selected uids";
|
||||
$_['text_bulk_update_selected_uids'] = "Bulk update selected uids";
|
||||
|
||||
$_['text_cancel'] = "Cancel";
|
||||
$_['text_change_user_settings'] = "change user settings";
|
||||
$_['text_clienthost'] = "Client host";
|
||||
$_['text_close'] = "Close";
|
||||
$_['text_compressed'] = "compressed";
|
||||
$_['text_confirm_to_reset_counters'] = "Confirm to reset counters";
|
||||
$_['text_content_filter'] = "Content filter";
|
||||
$_['text_counters'] = "Counters";
|
||||
$_['text_cpu_load'] = "CPU load";
|
||||
$_['text_cpu_usage'] = "CPU usage";
|
||||
|
||||
$_['text_daily_quarantine_report'] = "Daily quarantine report";
|
||||
$_['text_daily_quarantine_report_status'] = "Daily quarantine report status";
|
||||
$_['text_daily_report'] = "Daily report";
|
||||
$_['text_database_emails'] = "email addresses in piler database";
|
||||
$_['text_date'] = "Date";
|
||||
$_['text_date_from'] = "Date from";
|
||||
$_['text_date_to'] = "Date to";
|
||||
$_['text_deferred_queue'] = "deferred queue";
|
||||
$_['text_deferred_queue_sender'] = "deferred queue vs. sender";
|
||||
$_['text_delay'] = "Delay";
|
||||
$_['text_deleted_users'] = "deleted";
|
||||
$_['text_deliver'] = "Deliver";
|
||||
$_['text_delivered'] = "Delivered";
|
||||
$_['text_deliver_and_train_selected_messages'] = "Deliver and train selected messages";
|
||||
$_['text_deliver_and_train_selected_messages_as_ham'] = "Deliver and train selected messages AS HAM";
|
||||
$_['text_deliver_selected_messages'] = "Deliver selected messages";
|
||||
$_['text_description'] = "Description";
|
||||
$_['text_disk_usage'] = "Disk usage";
|
||||
$_['text_direction'] = "Direction";
|
||||
$_['text_dn_asterisk_means_skip_sync'] = "Asterisk (*) means this user entry will be not part of AD synchronisation";
|
||||
$_['text_domain'] = "Domain";
|
||||
$_['text_domains'] = "Domain(s)";
|
||||
$_['text_domainname'] = "Domain name";
|
||||
$_['text_download_message'] = "Download message (EML)";
|
||||
$_['text_download_message2'] = "download message";
|
||||
|
||||
$_['text_edit'] = "Edit";
|
||||
$_['text_edit_or_view'] = "Edit/view";
|
||||
$_['text_email'] = "Email address";
|
||||
$_['text_email_addresses'] = "Email address(es)";
|
||||
$_['text_email_aliases'] = "Email aliases";
|
||||
$_['text_email_in_unknown_domain'] = "Email address is in an unknown domain";
|
||||
$_['text_empty_search_criteria'] = "'Empty criteria'";
|
||||
$_['text_empty_search_result'] = "Empty search result";
|
||||
$_['text_error'] = "Error";
|
||||
$_['text_exact_domain_name_or_email_address'] = "exact domain name or email address";
|
||||
$_['text_exclude'] = "Exclude";
|
||||
$_['text_existing_domains'] = "Existing domains";
|
||||
$_['text_existing_email'] = "Existing email";
|
||||
$_['text_existing_policies'] = "Existing policies";
|
||||
$_['text_existing_rules'] = "Existing rules";
|
||||
$_['text_existing_user'] = "Existing user";
|
||||
$_['text_existing_users'] = "Existing users";
|
||||
|
||||
$_['text_failed'] = "failed";
|
||||
$_['text_failed_to_add'] = "Failed to add";
|
||||
$_['text_failed_to_change_password'] = "Failed to change password";
|
||||
$_['text_failed_to_deliver'] = "Failed to deliver";
|
||||
$_['text_failed_to_mark_for_removal'] = "Failed to mark for removal";
|
||||
$_['text_failed_to_modify'] = "Failed to modify";
|
||||
$_['text_failed_to_remove'] = "Failed to remove";
|
||||
$_['text_failed_to_restore'] = "Failed to restore";
|
||||
$_['text_failed_to_update'] = "Failed to update";
|
||||
$_['text_first'] = "First";
|
||||
$_['text_from'] = "From";
|
||||
$_['text_from_domain'] = "From domain";
|
||||
|
||||
$_['text_group_id'] = "Group id";
|
||||
$_['text_group_membership'] = "Group membership";
|
||||
|
||||
$_['text_health'] = "Health";
|
||||
$_['text_health_monitor'] = "Health monitor";
|
||||
$_['text_help'] = "Help";
|
||||
$_['text_history'] = "History";
|
||||
$_['text_home'] = "Home";
|
||||
|
||||
$_['text_image'] = "image";
|
||||
$_['text_import'] = "Import";
|
||||
$_['text_import_users'] = "Import users";
|
||||
$_['text_import_users_from_LDAP'] = "Import users from LDAP";
|
||||
$_['text_inbound'] = "inbound";
|
||||
$_['text_internal'] = "internal";
|
||||
$_['text_invalid_data'] = "Invalid data";
|
||||
$_['text_invalid_email'] = "Invalid email";
|
||||
$_['text_invalid_email_or_password'] = "Invalid email or password";
|
||||
$_['text_invalid_gid'] = "Invalid gid";
|
||||
$_['text_invalid_password'] = "Invalid password";
|
||||
$_['text_invalid_policy_group'] = "Invalid policy group";
|
||||
$_['text_invalid_policy_name'] = "Invalid policy name";
|
||||
$_['text_invalid_policy_setting'] = "Invalid policy setting";
|
||||
$_['text_invalid_uid'] = "Invalid uid";
|
||||
$_['text_invalid_username'] = "Invalid username";
|
||||
$_['text_ipaddr'] = "IP address";
|
||||
$_['text_language'] = "Language";
|
||||
$_['text_last'] = "Last";
|
||||
$_['text_last_update'] = "Last update";
|
||||
$_['text_latest_emails'] = "Latest emails";
|
||||
$_['text_ldap_basedn'] = "LDAP base DN";
|
||||
$_['text_ldap_binddn'] = "LDAP bind DN";
|
||||
$_['text_ldap_bindpw'] = "LDAP bind password";
|
||||
$_['text_ldap_host'] = "LDAP host";
|
||||
$_['text_ldap_type'] = "LDAP type";
|
||||
$_['text_load'] = "Load";
|
||||
$_['text_loading'] = "loading";
|
||||
$_['text_logged_out'] = "You are logged out";
|
||||
$_['text_login'] = "Login";
|
||||
$_['text_login2'] = "login";
|
||||
$_['text_login_failed'] = "login failed";
|
||||
$_['text_logout'] = "Logout";
|
||||
$_['text_logout2'] = "logout";
|
||||
|
||||
$_['text_maillog_status'] = "maillog collector status";
|
||||
$_['text_main_title'] = "clapf web UI";
|
||||
$_['text_mapped_domain'] = "Mapped domain";
|
||||
$_['text_marked_for_removal'] = "Message marked for removal";
|
||||
$_['text_memory_usage'] = "Memory usage";
|
||||
$_['text_message'] = "message";
|
||||
$_['text_messages'] = "messages";
|
||||
$_['text_message_text'] = "Message text";
|
||||
$_['text_missing_data'] = "Missing data";
|
||||
$_['text_missing_password'] = "Missing password";
|
||||
$_['text_modify'] = "Modify";
|
||||
$_['text_monitor'] = "Monitor";
|
||||
$_['text_monthly_report'] = "Monthly report";
|
||||
|
||||
$_['text_new_users'] = "new";
|
||||
$_['text_next'] = "Next";
|
||||
$_['text_no_message_in_the_quarantine'] = "No message in the quarantine matching the search criteria";
|
||||
$_['text_no_records'] = "No records";
|
||||
$_['text_no_sender'] = "no sender";
|
||||
$_['text_no_spam_message_in_the_quarantine_yet'] = "No spam message in the quarantine yet";
|
||||
$_['text_no_subject'] = "no subject";
|
||||
$_['text_no_such_policy'] = "No such policy";
|
||||
$_['text_non_existent_queue_directory'] = "The queue directory you have specified does not exist";
|
||||
$_['text_non_existing_user'] = "Non existing user";
|
||||
$_['text_not_found'] = "Not found";
|
||||
$_['text_not_running'] = "not running";
|
||||
$_['title_not_found'] = "Page not found";
|
||||
$_['text_number_of_messages_in_quarantine'] = "Number of messages in the quarantine matching your search criteria";
|
||||
$_['text_number_of_spam_messages_in_quarantine'] = "Number of spam messages in the quarantine matching your search criteria";
|
||||
|
||||
$_['text_off'] = "off";
|
||||
$_['text_on'] = "on";
|
||||
$_['text_other'] = "other";
|
||||
$_['text_outbound'] = "outbound";
|
||||
|
||||
$_['text_password'] = "Password";
|
||||
$_['text_password_again'] = "Password again";
|
||||
$_['text_password_changed'] = "Password changed";
|
||||
$_['text_password_mismatch'] = "Password mismatch";
|
||||
$_['text_page_length'] = "Page length";
|
||||
$_['text_policy'] = "Policy";
|
||||
$_['text_policy_group'] = "Policy group";
|
||||
$_['text_policy_name'] = "Policy name";
|
||||
$_['text_previous'] = "Previous";
|
||||
$_['text_processed_emails'] = "Processed emails";
|
||||
$_['text_purge_all_messages_from_quarantine'] = "Purge all your own messages from quarantine";
|
||||
$_['text_purge_selected_messages'] = "Purge selected messages";
|
||||
$_['text_purged'] = "Purged";
|
||||
|
||||
$_['text_queue_status'] = "Queue status";
|
||||
$_['text_quick_search'] = "Quick search";
|
||||
|
||||
$_['text_realname'] = "Realname";
|
||||
$_['text_recipient'] = "Recipient";
|
||||
$_['text_ref'] = "Reference";
|
||||
$_['text_refresh_period'] = "Refresh period";
|
||||
$_['text_relay_details'] = "Relay details";
|
||||
$_['text_relay_status'] = "Relay status";
|
||||
$_['text_remove'] = "Remove";
|
||||
$_['text_remove_domain'] = "Remove domain";
|
||||
$_['text_remove_message'] = "Remove message";
|
||||
$_['text_remove_message2'] = "remove message";
|
||||
$_['text_remove_selected_uids'] = "Remove selected uids";
|
||||
$_['text_remove_policy'] = "Remove policy";
|
||||
$_['text_remove_rule'] = "Remove rule";
|
||||
$_['text_remove_this_policy'] = "Remove this policy";
|
||||
$_['text_remove_this_user'] = "Remove this user";
|
||||
$_['text_reset_counters'] = "Reset counters";
|
||||
$_['text_restore_message'] = "restore message";
|
||||
$_['text_restore_to_mailbox'] = "Restore message to mailbox";
|
||||
$_['text_restored'] = "Restored";
|
||||
$_['text_result'] = "Result";
|
||||
$_['text_retention_rules'] = "Retention rules";
|
||||
$_['text_role'] = "Role";
|
||||
$_['text_running'] = "running";
|
||||
|
||||
$_['text_save'] = "Save";
|
||||
$_['text_save_search'] = "save search";
|
||||
$_['text_save_search_terms'] = "Save search terms";
|
||||
$_['text_saved_search_terms'] = "Saved search terms";
|
||||
$_['text_search'] = "Search";
|
||||
$_['text_search2'] = "search";
|
||||
$_['text_search_terms'] = "Search terms";
|
||||
$_['text_select_action'] = "Select action";
|
||||
$_['text_select_all'] = "Select all";
|
||||
$_['text_sender'] = "Sender";
|
||||
$_['text_sending_domains'] = "sending domains";
|
||||
$_['text_server_name'] = "Server name";
|
||||
$_['text_server_operating_system'] = "Operating System";
|
||||
$_['text_set'] = "Set";
|
||||
$_['text_settings'] = "Settings";
|
||||
$_['text_size'] = "Size";
|
||||
$_['text_smtp_status'] = "SMTP status";
|
||||
$_['text_statistics'] = "Statistics";
|
||||
$_['text_status'] = "Status";
|
||||
$_['text_subject'] = "Subject";
|
||||
$_['text_submit'] = "Submit";
|
||||
$_['text_successful'] = "Successful";
|
||||
$_['text_successfully_added'] = "Successfully added";
|
||||
$_['text_successfully_delivered'] = "Successfully delivered";
|
||||
$_['text_successfully_modified'] = "Successfully modified";
|
||||
$_['text_successfully_removed'] = "Successfully removed";
|
||||
$_['text_successfully_trained'] = "Successfully trained";
|
||||
$_['text_successfully_updated'] = "Successfully modified";
|
||||
$_['text_swap_usage'] = "Swap usage";
|
||||
|
||||
$_['text_tags'] = "Tags";
|
||||
$_['text_text'] = "Text";
|
||||
$_['text_text2'] = "text";
|
||||
$_['text_theme'] = "Theme";
|
||||
$_['text_time'] = "Time";
|
||||
$_['text_to'] = "To";
|
||||
$_['text_to_domain'] = "To domain";
|
||||
$_['text_too_short_password'] = "Too short password";
|
||||
$_['text_total'] = "total";
|
||||
$_['text_total_ratio'] = "total ratio";
|
||||
$_['text_total_query_time'] = "Total SQL query time";
|
||||
$_['text_total_users'] = "total";
|
||||
|
||||
$_['text_uids'] = "uids";
|
||||
$_['text_unauthorized_domain'] = "Unauthorized domain";
|
||||
$_['text_unauthorized_remove_message'] = "unauthorized message removal";
|
||||
$_['text_unauthorized_view_message'] = "unathorized message view";
|
||||
$_['text_unknown'] = "unknown";
|
||||
$_['text_update_selected_uids'] = "Update selected uids";
|
||||
$_['text_uptime'] = "Uptime";
|
||||
$_['text_user'] = "User";
|
||||
$_['text_user_id'] = "User id";
|
||||
$_['text_user_auditor'] = "Auditor";
|
||||
$_['text_user_domainadmin'] = "Domain admin";
|
||||
$_['text_user_management'] = "User";
|
||||
$_['text_user_masteradmin'] = "Master admin";
|
||||
$_['text_user_read_only_admin'] = "Read-only admin";
|
||||
$_['text_user_regular'] = "Regular user";
|
||||
$_['text_userlist'] = "Userlist";
|
||||
$_['text_username'] = "Username";
|
||||
$_['text_users_quarantine'] = "User's quarantine";
|
||||
|
||||
$_['text_view_formatted_email'] = "View formatted email";
|
||||
$_['text_view_header'] = "view header";
|
||||
$_['text_view_headers'] = "View headers";
|
||||
$_['text_view_message'] = "View message";
|
||||
$_['text_view_message2'] = "view message";
|
||||
$_['text_view_raw_email'] = "View raw email";
|
||||
$_['text_view_user_quarantine'] = "View user's quarantine";
|
||||
|
||||
$_['text_warning_about_default_policy'] = "The default policy can be set in clapf.conf";
|
||||
$_['text_whitelist'] = "Whitelist";
|
||||
$_['text_whitelist_settings'] = "Whitelist settings";
|
||||
$_['text_with_attachment'] = "with attachment(s)";
|
||||
$_['text_without_attachment'] = "without attachment";
|
||||
|
||||
$_['text_you_are'] = "You are";
|
||||
$_['text_you_are_not_admin'] = "You are not an admin user";
|
||||
|
||||
|
||||
$_['rcvd'] = "received messages";
|
||||
$_['virus'] = "infected messages";
|
||||
$_['duplicate'] = "duplicated messages";
|
||||
$_['ignore'] = "ignored messages";
|
||||
$_['counters_last_update'] = "counters updated";
|
||||
|
||||
$_['text_24_hours'] = "24 hours";
|
||||
$_['text_1_week'] = "1 week";
|
||||
$_['text_30_days'] = "30 days";
|
||||
|
||||
?>
|
309
webui/language/hu/messages.iso-8859-2.php
Normal file
309
webui/language/hu/messages.iso-8859-2.php
Normal file
@ -0,0 +1,309 @@
|
||||
<?php
|
||||
|
||||
$_['text_action'] = "Művelet";
|
||||
$_['text_active_incoming_queue'] = "aktív + bejövő üzenetsor";
|
||||
$_['text_active_incoming_queue_sender'] = "aktív + bejövő üzenetsor (feladó szerint)";
|
||||
$_['text_ad_sync_status'] = "AD szinkronizáció státusz";
|
||||
$_['text_add'] = "Felvesz";
|
||||
$_['text_add_new_email_address'] = "Új email cím";
|
||||
$_['text_add_new_domain'] = "Új domain";
|
||||
$_['text_add_new_rule'] = "Új szabály";
|
||||
$_['text_add_new_user_alias'] = "Új felhasználó";
|
||||
$_['text_add_policy'] = "Új házirend";
|
||||
$_['text_administration'] = "Adminisztráció";
|
||||
$_['text_admin_user'] = "Admin felhasználó";
|
||||
$_['text_advanced_search'] = "Összetett keresés";
|
||||
$_['text_all'] = "összes";
|
||||
$_['text_any'] = "mindegy";
|
||||
$_['text_archive_size'] = "Archívum méret";
|
||||
$_['text_archived_messages'] = "Archivált levelek";
|
||||
$_['text_archiving_rules'] = "Archiválási szabályok";
|
||||
$_['text_attachment_size'] = "Melléklet méret";
|
||||
$_['text_attachment_type'] = "Melléklet típus";
|
||||
$_['text_audit'] = "Audit";
|
||||
|
||||
$_['text_back'] = "Vissza";
|
||||
$_['text_body'] = "Szöveg";
|
||||
$_['text_bulk_edit_selected_uids'] = "Kiválasztott azonosítók szerkesztése";
|
||||
$_['text_bulk_update_selected_uids'] = "Kiválasztott azonosítók szerkesztése";
|
||||
|
||||
$_['text_cancel'] = "Mégse";
|
||||
$_['text_change_user_settings'] = "beállítások mentése";
|
||||
$_['text_clienthost'] = "Kliens gép";
|
||||
$_['text_close'] = "Bezár";
|
||||
$_['text_compressed'] = "tömörített";
|
||||
$_['text_confirm_to_reset_counters'] = "Számlálók nullázásának megerősítése";
|
||||
$_['text_content_filter'] = "Tartalomszűrő";
|
||||
$_['text_counters'] = "Számlálók";
|
||||
$_['text_cpu_load'] = "CPU terhelés";
|
||||
$_['text_cpu_usage'] = "CPU használat";
|
||||
|
||||
$_['text_daily_quarantine_report'] = "Napi karantén riport";
|
||||
$_['text_daily_quarantine_report_status'] = "Napi karantén értesítés";
|
||||
$_['text_daily_report'] = "Napi jelentés";
|
||||
$_['text_database_emails'] = "email cím a piler adatbázisban";
|
||||
$_['text_date'] = "Dátum";
|
||||
$_['text_date_from'] = "Dátumtól";
|
||||
$_['text_date_to'] = "Dátumig";
|
||||
$_['text_deferred_queue'] = "későbbi kiküldésre váró üzenetsor";
|
||||
$_['text_deferred_queue_sender'] = "későbbi kiküldésre váró üzenetsor (feladó szerint)";
|
||||
$_['text_delay'] = "Késleltetés";
|
||||
$_['text_deleted_users'] = "törölt";
|
||||
$_['text_deliver'] = "Kézbesítés";
|
||||
$_['text_delivered'] = "Kézbesített";
|
||||
$_['text_deliver_and_train_selected_messages'] = "Kiválasztott üzenetek tanítása és kézbesítése";
|
||||
$_['text_deliver_and_train_selected_messages_as_ham'] = "Kiválasztott üzenetek tanítása JÓ LEVÉLKÉNT, és kézbesítése";
|
||||
$_['text_deliver_selected_messages'] = "Kiválasztott üzenetek kézbesítése";
|
||||
$_['text_description'] = "Leírás";
|
||||
$_['text_disk_usage'] = "Diszk használat";
|
||||
$_['text_direction'] = "Irány";
|
||||
$_['text_dn_asterisk_means_skip_sync'] = "A csillag (*) azt jelenti, hogy ez a felhasználó nem része az AD szerverről szinkronizálásnak";
|
||||
$_['text_domain'] = "Domain";
|
||||
$_['text_domains'] = "Domain(ek)";
|
||||
$_['text_domainname'] = "Domainnév";
|
||||
$_['text_download_message'] = "Levél letöltése (EML)";
|
||||
$_['text_download_message2'] = "levél letöltése";
|
||||
|
||||
$_['text_edit'] = "Szerkeszt";
|
||||
$_['text_edit_or_view'] = "Szerkeszt/Megnéz";
|
||||
$_['text_email'] = "Email cím";
|
||||
$_['text_email_addresses'] = "Email cím(ek)";
|
||||
$_['text_email_aliases'] = "Email álcímek";
|
||||
$_['text_email_in_unknown_domain'] = "Az email cím ismeretlen domainben van";
|
||||
$_['text_empty_search_criteria'] = "'Üres feltétel'";
|
||||
$_['text_empty_search_result'] = "Nincs találat a keresésre";
|
||||
$_['text_error'] = "Hiba";
|
||||
$_['text_exact_domain_name_or_email_address'] = "pontos domainnév vagy email cím";
|
||||
$_['text_exclude'] = "Kihagy";
|
||||
$_['text_existing_domains'] = "Létező domainek";
|
||||
$_['text_existing_email'] = "Létező email";
|
||||
$_['text_existing_policies'] = "Létező házirendek";
|
||||
$_['text_existing_rules'] = "Létező szabályok";
|
||||
$_['text_existing_user'] = "Létező felhasználó";
|
||||
$_['text_existing_users'] = "Létező felhasználók";
|
||||
|
||||
$_['text_failed'] = "sikertelen";
|
||||
$_['text_failed_to_add'] = "Hiba a hozzáadás során";
|
||||
$_['text_failed_to_change_password'] = "Nem sikerült jelszót váltani";
|
||||
$_['text_failed_to_deliver'] = "Nem sikerült kézbesíteni";
|
||||
$_['text_failed_to_mark_for_removal'] = "Nem sikerült törlésre jelölni";
|
||||
$_['text_failed_to_modify'] = "Nem sikerült módosítani";
|
||||
$_['text_failed_to_remove'] = "Hiba az eltávolításkor";
|
||||
$_['text_failed_to_restore'] = "Hiba a visszaállítás során";
|
||||
$_['text_failed_to_update'] = "Nem sikerült módosítani";
|
||||
$_['text_first'] = "Első";
|
||||
$_['text_from'] = "Feladó";
|
||||
$_['text_from_domain'] = "Feladó domain";
|
||||
|
||||
$_['text_health'] = "Rendszerállapot";
|
||||
$_['text_health_monitor'] = "Rendszerállapot";
|
||||
$_['text_help'] = "Segítség";
|
||||
$_['text_history'] = "Történet";
|
||||
$_['text_home'] = "Kezdőlap";
|
||||
|
||||
$_['text_group_id'] = "Csoport azonosító";
|
||||
$_['text_group_membership'] = "Csoport tagság";
|
||||
|
||||
$_['text_image'] = "kép";
|
||||
$_['text_import'] = "Import";
|
||||
$_['text_import_users'] = "Felhasználók importálása";
|
||||
$_['text_import_users_from_LDAP'] = "Felhasználók importálása LDAP-ból";
|
||||
$_['text_inbound'] = "bejövő";
|
||||
$_['text_internal'] = "belső";
|
||||
$_['text_invalid_data'] = "Érvénytelen adat(ok)";
|
||||
$_['text_invalid_email'] = "Érvénytelen email cím";
|
||||
$_['text_invalid_email_or_password'] = "Érvénytelen email cím vagy jelszó";
|
||||
$_['text_invalid_gid'] = "Érvénytelen csoportazonosító";
|
||||
$_['text_invalid_password'] = "Érvénytelen jelszó";
|
||||
$_['text_invalid_policy_group'] = "Érvénytelen házirend szonosító";
|
||||
$_['text_invalid_policy_name'] = "Érvénytelen házirend név";
|
||||
$_['text_invalid_policy_setting'] = "Érvénytelen beállítás(ok)";
|
||||
$_['text_invalid_uid'] = "Érvénytelen felhasználóazonosító";
|
||||
$_['text_invalid_username'] = "Érvénytelen felhasználónév";
|
||||
$_['text_ipaddr'] = "IP cím";
|
||||
|
||||
$_['text_language'] = "Nyelv";
|
||||
$_['text_last'] = "Utolsó";
|
||||
$_['text_latest_emails'] = "Legfrissebb emailek";
|
||||
$_['text_last_update'] = "Utolsó frissítés";
|
||||
$_['text_ldap_basedn'] = "LDAP alapértelmezett DN";
|
||||
$_['text_ldap_binddn'] = "LDAP csatlakozási DN";
|
||||
$_['text_ldap_bindpw'] = "LDAP csatlakozási jelszó";
|
||||
$_['text_ldap_host'] = "LDAP kiszolgáló";
|
||||
$_['text_ldap_type'] = "LDAP típus";
|
||||
$_['text_load'] = "Betöltés";
|
||||
$_['text_loading'] = "töltődik";
|
||||
$_['text_logged_out'] = "Ön kijelentkezett";
|
||||
$_['text_login'] = "Bejelentkezés";
|
||||
$_['text_login2'] = "bejelentkezés";
|
||||
$_['text_login_failed'] = "sikertelen bejelentkezés";
|
||||
$_['text_logout'] = "Kijelentkezés";
|
||||
$_['text_logout2'] = "kijelentkezés";
|
||||
|
||||
$_['text_maillog_status'] = "maillog gyűjtő státusz";
|
||||
$_['text_main_title'] = "clapf web UI";
|
||||
$_['text_mapped_domain'] = "Hozzárendelt domain";
|
||||
$_['text_marked_for_removal'] = "Levél törlésre jelölve";
|
||||
$_['text_memory_usage'] = "Memória használat";
|
||||
$_['text_message'] = "üzenet";
|
||||
$_['text_messages'] = "üzenet";
|
||||
$_['text_message_text'] = "Levél szöveg";
|
||||
$_['text_missing_data'] = "Hiányzó adat";
|
||||
$_['text_missing_password'] = "Hiányzó jelszó";
|
||||
$_['text_modify'] = "Módosítás";
|
||||
$_['text_monitor'] = "Monitor";
|
||||
$_['text_monthly_report'] = "Havi jelentés";
|
||||
|
||||
$_['text_new_users'] = "új";
|
||||
$_['text_next'] = "Következő";
|
||||
$_['text_no_message_in_the_quarantine'] = "Nincs a keresési feltételnek megfelelő üzenet a karanténban";
|
||||
$_['text_no_records'] = "nincs találat";
|
||||
$_['text_no_sender'] = "nincs feladó";
|
||||
$_['text_no_spam_message_in_the_quarantine_yet'] = "Nincs spam a karanténban";
|
||||
$_['text_no_subject'] = "nincs tárgy";
|
||||
$_['text_no_such_policy'] = "Nincs ilyen házirend";
|
||||
$_['text_non_existent_queue_directory'] = "A megadott queue könyvtár nem létezik";
|
||||
$_['text_non_existing_user'] = "Nem létező felhasználó";
|
||||
$_['text_not_found'] = "Nincs találat";
|
||||
$_['text_not_running'] = "nem fut";
|
||||
$_['title_not_found'] = "Az oldal nem található";
|
||||
$_['text_number_of_messages_in_quarantine'] = "A keresési feltételnek megfelelő üzenetek száma a karanténban";
|
||||
$_['text_number_of_spam_messages_in_quarantine'] = "A keresési feltételnek megfelelő spam üzenetek száma a karanténban";
|
||||
|
||||
$_['text_off'] = "ki";
|
||||
$_['text_on'] = "be";
|
||||
$_['text_other'] = "egyéb";
|
||||
$_['text_outbound'] = "kimenő";
|
||||
|
||||
$_['text_password'] = "Jelszó";
|
||||
$_['text_password_again'] = "Jelszó ismét";
|
||||
$_['text_password_changed'] = "Jelszó megváltozott";
|
||||
$_['text_password_mismatch'] = "A két jelszó nem egyezik meg";
|
||||
$_['text_page_length'] = "Lap méret";
|
||||
$_['text_policy'] = "Házirend";
|
||||
$_['text_policy_group'] = "Házirend azonosító";
|
||||
$_['text_policy_name'] = "Házirend neve";
|
||||
$_['text_previous'] = "Előző";
|
||||
$_['text_processed_emails'] = "Feldolgozott levelek";
|
||||
$_['text_purge_all_messages_from_quarantine'] = "Összes saját üzenet törlése a karanténból";
|
||||
$_['text_purge_selected_messages'] = "Kiválasztott üzenetek eltávolítása";
|
||||
$_['text_purged'] = "Eltávolítva";
|
||||
|
||||
$_['text_queue_status'] = "Queue státusz";
|
||||
$_['text_quick_search'] = "Gyorskeresés";
|
||||
|
||||
$_['text_realname'] = "Név";
|
||||
$_['text_recipient'] = "Címzett";
|
||||
$_['text_ref'] = "Hivatkozás";
|
||||
$_['text_refresh_period'] = "Frissítési periódus";
|
||||
$_['text_relay_details'] = "Relay részletek";
|
||||
$_['text_relay_status'] = "Relay státusz";
|
||||
$_['text_remove'] = "Törlés";
|
||||
$_['text_remove_domain'] = "Domain törlése";
|
||||
$_['text_remove_message'] = "Levél törlése";
|
||||
$_['text_remove_message2'] = "levél törlése";
|
||||
$_['text_remove_selected_uids'] = "Kijelölt azonosítók törlése";
|
||||
$_['text_remove_policy'] = "Házirend törlése";
|
||||
$_['text_remove_rule'] = "Szabály törlése";
|
||||
$_['text_remove_this_policy'] = "Házirend törlése";
|
||||
$_['text_remove_this_user'] = "Felhasználó törlése";
|
||||
$_['text_reset_counters'] = "Számlálók nullázása";
|
||||
$_['text_restore_message'] = "levél visszaállítása";
|
||||
$_['text_restore_to_mailbox'] = "Levél visszaállítása postafiókba";
|
||||
$_['text_restored'] = "Visszaállítva";
|
||||
$_['text_result'] = "Eredmény";
|
||||
$_['text_retention_rules'] = "Megtartási szabályok";
|
||||
$_['text_role'] = "Felhasználótípus";
|
||||
$_['text_running'] = "fut";
|
||||
|
||||
$_['text_save'] = "Mentés";
|
||||
$_['text_save_search'] = "keresés mentése";
|
||||
$_['text_save_search_terms'] = "Keresési feltétel mentése";
|
||||
$_['text_saved_search_terms'] = "Elmentett keresések";
|
||||
$_['text_search'] = "Keresés";
|
||||
$_['text_search2'] = "keresés";
|
||||
$_['text_search_terms'] = "Keresési feltételek";
|
||||
$_['text_select_action'] = "Művelet választás";
|
||||
$_['text_select_all'] = "Mindegyik kijelölése";
|
||||
$_['text_sender'] = "Feladó";
|
||||
$_['text_sending_domains'] = "küldő domain";
|
||||
$_['text_server_name'] = "Szerver név";
|
||||
$_['text_server_operating_system'] = "Operációs rendszer";
|
||||
$_['text_set'] = "Beállít";
|
||||
$_['text_settings'] = "Beállítások";
|
||||
$_['text_size'] = "Méret";
|
||||
$_['text_smtp_status'] = "SMTP státusz";
|
||||
$_['text_statistics'] = "Statisztika";
|
||||
$_['text_status'] = "Státusz";
|
||||
$_['text_subject'] = "Tárgy";
|
||||
$_['text_submit'] = "Mehet";
|
||||
$_['text_successful'] = "Sikeres";
|
||||
$_['text_successfully_added'] = "Sikeresen felvéve";
|
||||
$_['text_successfully_delivered'] = "Sikeresen kézbesítve";
|
||||
$_['text_successfully_modified'] = "Sikeresen módosítva";
|
||||
$_['text_successfully_removed'] = "Sikeresen eltávolítva";
|
||||
$_['text_successfully_trained'] = "Sikeresen tanítva";
|
||||
$_['text_successfully_updated'] = "Sikeresen módosítva";
|
||||
$_['text_swap_usage'] = "Swap használat";
|
||||
|
||||
$_['text_tags'] = "Címkék";
|
||||
$_['text_text'] = "Szöveg";
|
||||
$_['text_text2'] = "szöveg";
|
||||
$_['text_theme'] = "Stílus";
|
||||
$_['text_time'] = "Időpont";
|
||||
$_['text_to'] = "Címzett";
|
||||
$_['text_to_domain'] = "Címzett domain";
|
||||
$_['text_too_short_password'] = "Túl rövid jelszó";
|
||||
$_['text_total'] = "összes";
|
||||
$_['text_total_ratio'] = "összes arány";
|
||||
$_['text_total_query_time'] = "SQL lekérdezések összideje";
|
||||
$_['text_total_users'] = "összes";
|
||||
|
||||
$_['text_uids'] = "Felhasználó azonosítók";
|
||||
$_['text_unknown'] = "ismeretlen";
|
||||
$_['text_unauthorized_domain'] = "Nem megengedett domain";
|
||||
$_['text_unauthorized_remove_message'] = "jogosulatlan üzenet törlés";
|
||||
$_['text_unauthorized_view_message'] = "jogosulatlan üzenet megtekintés";
|
||||
$_['text_update_selected_uids'] = "Kijelölt azonosítók módosítása";
|
||||
$_['text_uptime'] = "Uptime";
|
||||
$_['text_user'] = "Felhasználó";
|
||||
$_['text_user_id'] = "Felhasználó azonosító";
|
||||
$_['text_user_auditor'] = "Auditor";
|
||||
$_['text_user_domainadmin'] = "Domain admin";
|
||||
$_['text_user_management'] = "Felhasználó";
|
||||
$_['text_user_masteradmin'] = "Mester admin";
|
||||
$_['text_user_read_only_admin'] = "Read-only admin";
|
||||
$_['text_user_regular'] = "Sima felhasználó";
|
||||
$_['text_userlist'] = "Felhasználók listája";
|
||||
$_['text_username'] = "Felhasználónév";
|
||||
$_['text_users_quarantine'] = "Felhasználók karanténja";
|
||||
|
||||
$_['text_view_formatted_email'] = "Formázott levél megtekintése";
|
||||
$_['text_view_header'] = "fejléc megtekintése";
|
||||
$_['text_view_headers'] = "Levél fejléce";
|
||||
$_['text_view_message'] = "Levél megtekintése";
|
||||
$_['text_view_message2'] = "levél megtekintése";
|
||||
$_['text_view_raw_email'] = "Formázatlan levél megtekintése";
|
||||
$_['text_view_user_quarantine'] = "Felhasználó karantén megtekintése";
|
||||
|
||||
$_['text_warning_about_default_policy'] = "Az alapértelmezett házirend a clapf.conf fájlban van";
|
||||
$_['text_whitelist'] = "Fehérlista";
|
||||
$_['text_whitelist_settings'] = "Fehérlista beállítások";
|
||||
$_['text_with_attachment'] = "mellékletekkel";
|
||||
$_['text_without_attachment'] = "mellékletek nélkül";
|
||||
|
||||
$_['text_you_are'] = "Ön";
|
||||
$_['text_you_are_not_admin'] = "Önnek nincs jogosultsága a művelethez";
|
||||
|
||||
|
||||
$_['rcvd'] = "fogadott levél";
|
||||
$_['virus'] = "vírusos levél";
|
||||
$_['duplicate'] = "duplikált levél";
|
||||
$_['ignore'] = "ignorált levél";
|
||||
$_['counters_last_update'] = "számlálók frissítve";
|
||||
|
||||
$_['text_24_hours'] = "24 óra";
|
||||
$_['text_1_week'] = "1 hét";
|
||||
$_['text_30_days'] = "30 nap";
|
||||
|
||||
?>
|
309
webui/language/hu/messages.php
Normal file
309
webui/language/hu/messages.php
Normal file
@ -0,0 +1,309 @@
|
||||
<?php
|
||||
|
||||
$_['text_action'] = "Művelet";
|
||||
$_['text_active_incoming_queue'] = "aktív + bejövő üzenetsor";
|
||||
$_['text_active_incoming_queue_sender'] = "aktív + bejövő üzenetsor (feladó szerint)";
|
||||
$_['text_ad_sync_status'] = "AD szinkronizáció státusz";
|
||||
$_['text_add'] = "Felvesz";
|
||||
$_['text_add_new_email_address'] = "Új email cím";
|
||||
$_['text_add_new_domain'] = "Új domain";
|
||||
$_['text_add_new_rule'] = "Új szabály";
|
||||
$_['text_add_new_user_alias'] = "Új felhasználó";
|
||||
$_['text_add_policy'] = "Új házirend";
|
||||
$_['text_administration'] = "Adminisztráció";
|
||||
$_['text_admin_user'] = "Admin felhasználó";
|
||||
$_['text_advanced_search'] = "Összetett keresés";
|
||||
$_['text_all'] = "összes";
|
||||
$_['text_any'] = "mindegy";
|
||||
$_['text_archive_size'] = "Archívum méret";
|
||||
$_['text_archived_messages'] = "Archivált levelek";
|
||||
$_['text_archiving_rules'] = "Archiválási szabályok";
|
||||
$_['text_attachment_size'] = "Melléklet méret";
|
||||
$_['text_attachment_type'] = "Melléklet típus";
|
||||
$_['text_audit'] = "Audit";
|
||||
|
||||
$_['text_back'] = "Vissza";
|
||||
$_['text_body'] = "Szöveg";
|
||||
$_['text_bulk_edit_selected_uids'] = "Kiválasztott azonosítók szerkesztése";
|
||||
$_['text_bulk_update_selected_uids'] = "Kiválasztott azonosítók szerkesztése";
|
||||
|
||||
$_['text_cancel'] = "Mégse";
|
||||
$_['text_change_user_settings'] = "beállítások mentése";
|
||||
$_['text_clienthost'] = "Kliens gép";
|
||||
$_['text_close'] = "Bezár";
|
||||
$_['text_compressed'] = "tömörített";
|
||||
$_['text_confirm_to_reset_counters'] = "Számlálók nullázásának megerősítése";
|
||||
$_['text_content_filter'] = "Tartalomszűrő";
|
||||
$_['text_counters'] = "Számlálók";
|
||||
$_['text_cpu_load'] = "CPU terhelés";
|
||||
$_['text_cpu_usage'] = "CPU használat";
|
||||
|
||||
$_['text_daily_quarantine_report'] = "Napi karantén riport";
|
||||
$_['text_daily_quarantine_report_status'] = "Napi karantén értesítés";
|
||||
$_['text_daily_report'] = "Napi jelentés";
|
||||
$_['text_database_emails'] = "email cím a piler adatbázisban";
|
||||
$_['text_date'] = "Dátum";
|
||||
$_['text_date_from'] = "Dátumtól";
|
||||
$_['text_date_to'] = "Dátumig";
|
||||
$_['text_deferred_queue'] = "későbbi kiküldésre váró üzenetsor";
|
||||
$_['text_deferred_queue_sender'] = "későbbi kiküldésre váró üzenetsor (feladó szerint)";
|
||||
$_['text_delay'] = "Késleltetés";
|
||||
$_['text_deleted_users'] = "törölt";
|
||||
$_['text_deliver'] = "Kézbesítés";
|
||||
$_['text_delivered'] = "Kézbesített";
|
||||
$_['text_deliver_and_train_selected_messages'] = "Kiválasztott üzenetek tanítása és kézbesítése";
|
||||
$_['text_deliver_and_train_selected_messages_as_ham'] = "Kiválasztott üzenetek tanítása JÓ LEVÉLKÉNT, és kézbesítése";
|
||||
$_['text_deliver_selected_messages'] = "Kiválasztott üzenetek kézbesítése";
|
||||
$_['text_description'] = "Leírás";
|
||||
$_['text_disk_usage'] = "Diszk használat";
|
||||
$_['text_direction'] = "Irány";
|
||||
$_['text_dn_asterisk_means_skip_sync'] = "A csillag (*) azt jelenti, hogy ez a felhasználó nem része az AD szerverről szinkronizálásnak";
|
||||
$_['text_domain'] = "Domain";
|
||||
$_['text_domains'] = "Domain(ek)";
|
||||
$_['text_domainname'] = "Domainnév";
|
||||
$_['text_download_message'] = "Levél letöltése (EML)";
|
||||
$_['text_download_message2'] = "levél letöltése";
|
||||
|
||||
$_['text_edit'] = "Szerkeszt";
|
||||
$_['text_edit_or_view'] = "Szerkeszt/Megnéz";
|
||||
$_['text_email'] = "Email cím";
|
||||
$_['text_email_addresses'] = "Email cím(ek)";
|
||||
$_['text_email_aliases'] = "Email álcímek";
|
||||
$_['text_email_in_unknown_domain'] = "Az email cím ismeretlen domainben van";
|
||||
$_['text_empty_search_criteria'] = "'Üres feltétel'";
|
||||
$_['text_empty_search_result'] = "Nincs találat a keresésre";
|
||||
$_['text_error'] = "Hiba";
|
||||
$_['text_exact_domain_name_or_email_address'] = "pontos domainnév vagy email cím";
|
||||
$_['text_exclude'] = "Kihagy";
|
||||
$_['text_existing_domains'] = "Létező domainek";
|
||||
$_['text_existing_email'] = "Létező email";
|
||||
$_['text_existing_policies'] = "Létező házirendek";
|
||||
$_['text_existing_rules'] = "Létező szabályok";
|
||||
$_['text_existing_user'] = "Létező felhasználó";
|
||||
$_['text_existing_users'] = "Létező felhasználók";
|
||||
|
||||
$_['text_failed'] = "sikertelen";
|
||||
$_['text_failed_to_add'] = "Hiba a hozzáadás során";
|
||||
$_['text_failed_to_change_password'] = "Nem sikerült jelszót váltani";
|
||||
$_['text_failed_to_deliver'] = "Nem sikerült kézbesíteni";
|
||||
$_['text_failed_to_mark_for_removal'] = "Nem sikerült törlésre jelölni";
|
||||
$_['text_failed_to_modify'] = "Nem sikerült módosítani";
|
||||
$_['text_failed_to_remove'] = "Hiba az eltávolításkor";
|
||||
$_['text_failed_to_restore'] = "Hiba a visszaállítás során";
|
||||
$_['text_failed_to_update'] = "Nem sikerült módosítani";
|
||||
$_['text_first'] = "Első";
|
||||
$_['text_from'] = "Feladó";
|
||||
$_['text_from_domain'] = "Feladó domain";
|
||||
|
||||
$_['text_health'] = "Rendszerállapot";
|
||||
$_['text_health_monitor'] = "Rendszerállapot";
|
||||
$_['text_help'] = "Segítség";
|
||||
$_['text_history'] = "Történet";
|
||||
$_['text_home'] = "Kezdőlap";
|
||||
|
||||
$_['text_group_id'] = "Csoport azonosító";
|
||||
$_['text_group_membership'] = "Csoport tagság";
|
||||
|
||||
$_['text_image'] = "kép";
|
||||
$_['text_import'] = "Import";
|
||||
$_['text_import_users'] = "Felhasználók importálása";
|
||||
$_['text_import_users_from_LDAP'] = "Felhasználók importálása LDAP-ból";
|
||||
$_['text_inbound'] = "bejövő";
|
||||
$_['text_internal'] = "belső";
|
||||
$_['text_invalid_data'] = "Érvénytelen adat(ok)";
|
||||
$_['text_invalid_email'] = "Érvénytelen email cím";
|
||||
$_['text_invalid_email_or_password'] = "Érvénytelen email cím vagy jelszó";
|
||||
$_['text_invalid_gid'] = "Érvénytelen csoportazonosító";
|
||||
$_['text_invalid_password'] = "Érvénytelen jelszó";
|
||||
$_['text_invalid_policy_group'] = "Érvénytelen házirend szonosító";
|
||||
$_['text_invalid_policy_name'] = "Érvénytelen házirend név";
|
||||
$_['text_invalid_policy_setting'] = "Érvénytelen beállítás(ok)";
|
||||
$_['text_invalid_uid'] = "Érvénytelen felhasználóazonosító";
|
||||
$_['text_invalid_username'] = "Érvénytelen felhasználónév";
|
||||
$_['text_ipaddr'] = "IP cím";
|
||||
|
||||
$_['text_language'] = "Nyelv";
|
||||
$_['text_last'] = "Utolsó";
|
||||
$_['text_latest_emails'] = "Legfrissebb emailek";
|
||||
$_['text_last_update'] = "Utolsó frissítés";
|
||||
$_['text_ldap_basedn'] = "LDAP alapértelmezett DN";
|
||||
$_['text_ldap_binddn'] = "LDAP csatlakozási DN";
|
||||
$_['text_ldap_bindpw'] = "LDAP csatlakozási jelszó";
|
||||
$_['text_ldap_host'] = "LDAP kiszolgáló";
|
||||
$_['text_ldap_type'] = "LDAP típus";
|
||||
$_['text_load'] = "Betöltés";
|
||||
$_['text_loading'] = "töltődik";
|
||||
$_['text_logged_out'] = "Ön kijelentkezett";
|
||||
$_['text_login'] = "Bejelentkezés";
|
||||
$_['text_login2'] = "bejelentkezés";
|
||||
$_['text_login_failed'] = "sikertelen bejelentkezés";
|
||||
$_['text_logout'] = "Kijelentkezés";
|
||||
$_['text_logout2'] = "kijelentkezés";
|
||||
|
||||
$_['text_maillog_status'] = "maillog gyűjtő státusz";
|
||||
$_['text_main_title'] = "clapf web UI";
|
||||
$_['text_mapped_domain'] = "Hozzárendelt domain";
|
||||
$_['text_marked_for_removal'] = "Levél törlésre jelölve";
|
||||
$_['text_memory_usage'] = "Memória használat";
|
||||
$_['text_message'] = "üzenet";
|
||||
$_['text_messages'] = "üzenet";
|
||||
$_['text_message_text'] = "Levél szöveg";
|
||||
$_['text_missing_data'] = "Hiányzó adat";
|
||||
$_['text_missing_password'] = "Hiányzó jelszó";
|
||||
$_['text_modify'] = "Módosítás";
|
||||
$_['text_monitor'] = "Monitor";
|
||||
$_['text_monthly_report'] = "Havi jelentés";
|
||||
|
||||
$_['text_new_users'] = "új";
|
||||
$_['text_next'] = "Következő";
|
||||
$_['text_no_message_in_the_quarantine'] = "Nincs a keresési feltételnek megfelelő üzenet a karanténban";
|
||||
$_['text_no_records'] = "nincs találat";
|
||||
$_['text_no_sender'] = "nincs feladó";
|
||||
$_['text_no_spam_message_in_the_quarantine_yet'] = "Nincs spam a karanténban";
|
||||
$_['text_no_subject'] = "nincs tárgy";
|
||||
$_['text_no_such_policy'] = "Nincs ilyen házirend";
|
||||
$_['text_non_existent_queue_directory'] = "A megadott queue könyvtár nem létezik";
|
||||
$_['text_non_existing_user'] = "Nem létező felhasználó";
|
||||
$_['text_not_found'] = "Nincs találat";
|
||||
$_['text_not_running'] = "nem fut";
|
||||
$_['title_not_found'] = "Az oldal nem található";
|
||||
$_['text_number_of_messages_in_quarantine'] = "A keresési feltételnek megfelelő üzenetek száma a karanténban";
|
||||
$_['text_number_of_spam_messages_in_quarantine'] = "A keresési feltételnek megfelelő spam üzenetek száma a karanténban";
|
||||
|
||||
$_['text_off'] = "ki";
|
||||
$_['text_on'] = "be";
|
||||
$_['text_other'] = "egyéb";
|
||||
$_['text_outbound'] = "kimenő";
|
||||
|
||||
$_['text_password'] = "Jelszó";
|
||||
$_['text_password_again'] = "Jelszó ismét";
|
||||
$_['text_password_changed'] = "Jelszó megváltozott";
|
||||
$_['text_password_mismatch'] = "A két jelszó nem egyezik meg";
|
||||
$_['text_page_length'] = "Lap méret";
|
||||
$_['text_policy'] = "Házirend";
|
||||
$_['text_policy_group'] = "Házirend azonosító";
|
||||
$_['text_policy_name'] = "Házirend neve";
|
||||
$_['text_previous'] = "Előző";
|
||||
$_['text_processed_emails'] = "Feldolgozott levelek";
|
||||
$_['text_purge_all_messages_from_quarantine'] = "Összes saját üzenet törlése a karanténból";
|
||||
$_['text_purge_selected_messages'] = "Kiválasztott üzenetek eltávolítása";
|
||||
$_['text_purged'] = "Eltávolítva";
|
||||
|
||||
$_['text_queue_status'] = "Queue státusz";
|
||||
$_['text_quick_search'] = "Gyorskeresés";
|
||||
|
||||
$_['text_realname'] = "Név";
|
||||
$_['text_recipient'] = "Címzett";
|
||||
$_['text_ref'] = "Hivatkozás";
|
||||
$_['text_refresh_period'] = "Frissítési periódus";
|
||||
$_['text_relay_details'] = "Relay részletek";
|
||||
$_['text_relay_status'] = "Relay státusz";
|
||||
$_['text_remove'] = "Törlés";
|
||||
$_['text_remove_domain'] = "Domain törlése";
|
||||
$_['text_remove_message'] = "Levél törlése";
|
||||
$_['text_remove_message2'] = "levél törlése";
|
||||
$_['text_remove_selected_uids'] = "Kijelölt azonosítók törlése";
|
||||
$_['text_remove_policy'] = "Házirend törlése";
|
||||
$_['text_remove_rule'] = "Szabály törlése";
|
||||
$_['text_remove_this_policy'] = "Házirend törlése";
|
||||
$_['text_remove_this_user'] = "Felhasználó törlése";
|
||||
$_['text_reset_counters'] = "Számlálók nullázása";
|
||||
$_['text_restore_message'] = "levél visszaállítása";
|
||||
$_['text_restore_to_mailbox'] = "Levél visszaállítása postafiókba";
|
||||
$_['text_restored'] = "Visszaállítva";
|
||||
$_['text_result'] = "Eredmény";
|
||||
$_['text_retention_rules'] = "Megtartási szabályok";
|
||||
$_['text_role'] = "Felhasználótípus";
|
||||
$_['text_running'] = "fut";
|
||||
|
||||
$_['text_save'] = "Mentés";
|
||||
$_['text_save_search'] = "keresés mentése";
|
||||
$_['text_save_search_terms'] = "Keresési feltétel mentése";
|
||||
$_['text_saved_search_terms'] = "Elmentett keresések";
|
||||
$_['text_search'] = "Keresés";
|
||||
$_['text_search2'] = "keresés";
|
||||
$_['text_search_terms'] = "Keresési feltételek";
|
||||
$_['text_select_action'] = "Művelet választás";
|
||||
$_['text_select_all'] = "Mindegyik kijelölése";
|
||||
$_['text_sender'] = "Feladó";
|
||||
$_['text_sending_domains'] = "küldő domain";
|
||||
$_['text_server_name'] = "Szerver név";
|
||||
$_['text_server_operating_system'] = "Operációs rendszer";
|
||||
$_['text_set'] = "Beállít";
|
||||
$_['text_settings'] = "Beállítások";
|
||||
$_['text_size'] = "Méret";
|
||||
$_['text_smtp_status'] = "SMTP státusz";
|
||||
$_['text_statistics'] = "Statisztika";
|
||||
$_['text_status'] = "Státusz";
|
||||
$_['text_subject'] = "Tárgy";
|
||||
$_['text_submit'] = "Mehet";
|
||||
$_['text_successful'] = "Sikeres";
|
||||
$_['text_successfully_added'] = "Sikeresen felvéve";
|
||||
$_['text_successfully_delivered'] = "Sikeresen kézbesítve";
|
||||
$_['text_successfully_modified'] = "Sikeresen módosítva";
|
||||
$_['text_successfully_removed'] = "Sikeresen eltávolítva";
|
||||
$_['text_successfully_trained'] = "Sikeresen tanítva";
|
||||
$_['text_successfully_updated'] = "Sikeresen módosítva";
|
||||
$_['text_swap_usage'] = "Swap használat";
|
||||
|
||||
$_['text_tags'] = "Címkék";
|
||||
$_['text_text'] = "Szöveg";
|
||||
$_['text_text2'] = "szöveg";
|
||||
$_['text_theme'] = "Stílus";
|
||||
$_['text_time'] = "Időpont";
|
||||
$_['text_to'] = "Címzett";
|
||||
$_['text_to_domain'] = "Címzett domain";
|
||||
$_['text_too_short_password'] = "Túl rövid jelszó";
|
||||
$_['text_total'] = "összes";
|
||||
$_['text_total_ratio'] = "összes arány";
|
||||
$_['text_total_query_time'] = "SQL lekérdezések összideje";
|
||||
$_['text_total_users'] = "összes";
|
||||
|
||||
$_['text_uids'] = "Felhasználó azonosítók";
|
||||
$_['text_unknown'] = "ismeretlen";
|
||||
$_['text_unauthorized_domain'] = "Nem megengedett domain";
|
||||
$_['text_unauthorized_remove_message'] = "jogosulatlan üzenet törlés";
|
||||
$_['text_unauthorized_view_message'] = "jogosulatlan üzenet megtekintés";
|
||||
$_['text_update_selected_uids'] = "Kijelölt azonosítók módosítása";
|
||||
$_['text_uptime'] = "Uptime";
|
||||
$_['text_user'] = "Felhasználó";
|
||||
$_['text_user_id'] = "Felhasználó azonosító";
|
||||
$_['text_user_auditor'] = "Auditor";
|
||||
$_['text_user_domainadmin'] = "Domain admin";
|
||||
$_['text_user_management'] = "Felhasználó";
|
||||
$_['text_user_masteradmin'] = "Mester admin";
|
||||
$_['text_user_read_only_admin'] = "Read-only admin";
|
||||
$_['text_user_regular'] = "Sima felhasználó";
|
||||
$_['text_userlist'] = "Felhasználók listája";
|
||||
$_['text_username'] = "Felhasználónév";
|
||||
$_['text_users_quarantine'] = "Felhasználók karanténja";
|
||||
|
||||
$_['text_view_formatted_email'] = "Formázott levél megtekintése";
|
||||
$_['text_view_header'] = "fejléc megtekintése";
|
||||
$_['text_view_headers'] = "Levél fejléce";
|
||||
$_['text_view_message'] = "Levél megtekintése";
|
||||
$_['text_view_message2'] = "levél megtekintése";
|
||||
$_['text_view_raw_email'] = "Formázatlan levél megtekintése";
|
||||
$_['text_view_user_quarantine'] = "Felhasználó karantén megtekintése";
|
||||
|
||||
$_['text_warning_about_default_policy'] = "Az alapértelmezett házirend a clapf.conf fájlban van";
|
||||
$_['text_whitelist'] = "Fehérlista";
|
||||
$_['text_whitelist_settings'] = "Fehérlista beállítások";
|
||||
$_['text_with_attachment'] = "mellékletekkel";
|
||||
$_['text_without_attachment'] = "mellékletek nélkül";
|
||||
|
||||
$_['text_you_are'] = "Ön";
|
||||
$_['text_you_are_not_admin'] = "Önnek nincs jogosultsága a művelethez";
|
||||
|
||||
|
||||
$_['rcvd'] = "fogadott levél";
|
||||
$_['virus'] = "vírusos levél";
|
||||
$_['duplicate'] = "duplikált levél";
|
||||
$_['ignore'] = "ignorált levél";
|
||||
$_['counters_last_update'] = "számlálók frissítve";
|
||||
|
||||
$_['text_24_hours'] = "24 óra";
|
||||
$_['text_1_week'] = "1 hét";
|
||||
$_['text_30_days'] = "30 nap";
|
||||
|
||||
?>
|
2
webui/log/.htaccess
Normal file
2
webui/log/.htaccess
Normal file
@ -0,0 +1,2 @@
|
||||
order deny,allow
|
||||
deny from all
|
1
webui/log/lock
Normal file
1
webui/log/lock
Normal file
@ -0,0 +1 @@
|
||||
lock file
|
121
webui/model/audit/audit.php
Normal file
121
webui/model/audit/audit.php
Normal file
@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
class ModelAuditAudit extends Model {
|
||||
|
||||
public function search_audit($data = array()) {
|
||||
$where = '';
|
||||
$arr = $results = array();
|
||||
$from = 0;
|
||||
$sort = "ts";
|
||||
$order = "DESC";
|
||||
$sortorder = "ORDER BY ts DESC";
|
||||
$q = '';
|
||||
|
||||
|
||||
if($data['sort'] == "user") { $sort = "email"; }
|
||||
if($data['sort'] == "ipaddr") { $sort = "ipaddr"; }
|
||||
if($data['sort'] == "ref") { $sort = "meta_id"; }
|
||||
if($data['sort'] == "action") { $sort = "action"; }
|
||||
if($data['sort'] == "description") { $sort = "description"; }
|
||||
|
||||
if($data['order'] == 1) { $order = "ASC"; }
|
||||
|
||||
$sortorder = "ORDER BY `$sort` $order";
|
||||
|
||||
|
||||
if(isset($data['action']) && $data['action'] != ACTION_ALL) {
|
||||
$where .= " AND action=?";
|
||||
array_push($arr, $data['action']);
|
||||
}
|
||||
|
||||
if(isset($data['ipaddr'])) {
|
||||
$where .= " AND ipaddr IN (" . $this->append_search_criteria($data['ipaddr'], &$arr) . ")";
|
||||
}
|
||||
|
||||
if(isset($data['user'])) {
|
||||
$where .= " AND email IN (" . $this->append_search_criteria($data['user'], &$arr) . ")";
|
||||
}
|
||||
|
||||
if(isset($data['ref'])) {
|
||||
$where .= " AND ref IN (" . $this->append_search_criteria($data['ref'], &$arr) . ")";
|
||||
}
|
||||
|
||||
|
||||
$date = fixup_date_condition('ts', $data['date1'], $data['date2']);
|
||||
|
||||
|
||||
if($date) { $where .= " AND $date "; }
|
||||
|
||||
if($where) {
|
||||
$where = " WHERE " . substr($where, 5, strlen($where));
|
||||
}
|
||||
|
||||
$from = $data['page_len'] * $data['page'];
|
||||
|
||||
|
||||
$query = $this->db->query("SELECT COUNT(*) AS count FROM " . TABLE_AUDIT . " $where", $arr);
|
||||
|
||||
$n = $query->row['count'];
|
||||
|
||||
if($n > 0) {
|
||||
if($n > MAX_AUDIT_HITS) { $n = MAX_AUDIT_HITS; }
|
||||
|
||||
$query = $this->db->query("SELECT * FROM " . TABLE_AUDIT . " $where $sortorder LIMIT $from," . $data['page_len'], $arr);
|
||||
|
||||
|
||||
if(isset($query->rows)) {
|
||||
|
||||
foreach($query->rows as $a) {
|
||||
if($a['meta_id'] > 0) { $q .= "," . $a['meta_id']; }
|
||||
}
|
||||
|
||||
if($q) {
|
||||
$q = substr($q, 1, strlen($q));
|
||||
$Q = $this->db->query("SELECT id, piler_id FROM " . TABLE_META . " WHERE id IN($q)");
|
||||
|
||||
foreach($Q->rows as $a) {
|
||||
$m[$a['id']] = $a['piler_id'];
|
||||
}
|
||||
}
|
||||
|
||||
foreach($query->rows as $a) {
|
||||
$results[] = array(
|
||||
'id' => $a['meta_id'],
|
||||
'piler_id' => isset($m[$a['meta_id']]) ? $m[$a['meta_id']] : '',
|
||||
'action' => $a['action'],
|
||||
'email' => $a['email'],
|
||||
'date' => date(AUDIT_DATE_FORMAT, $a['ts']),
|
||||
'ipaddr' => $a['ipaddr'],
|
||||
'description' => $a['description'],
|
||||
'shortdescription' => make_short_string($a['description'], MAX_CGI_FROM_SUBJ_LEN)
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return array($n, $results);
|
||||
}
|
||||
|
||||
|
||||
private function append_search_criteria($s = '', $arr = array()) {
|
||||
$q = "";
|
||||
|
||||
$a = explode("*", $s);
|
||||
|
||||
for($i=0; $i<count($a); $i++) {
|
||||
if($a[$i]) {
|
||||
array_push($arr, $a[$i]);
|
||||
$q .= ",?";
|
||||
}
|
||||
}
|
||||
|
||||
$q = substr($q, 1, strlen($q));
|
||||
|
||||
return $q;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
47
webui/model/domain/domain.php
Normal file
47
webui/model/domain/domain.php
Normal file
@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
class ModelDomainDomain extends Model {
|
||||
|
||||
public function getDomains() {
|
||||
$query = $this->db->query("SELECT domain, mapped FROM " . TABLE_DOMAIN . " ORDER BY domain ASC");
|
||||
|
||||
return $query->rows;
|
||||
}
|
||||
|
||||
|
||||
public function deleteDomain($domain = '') {
|
||||
if($domain == "") { return 0; }
|
||||
|
||||
$query = $this->db->query("DELETE FROM " . TABLE_DOMAIN . " WHERE domain=?", array($domain));
|
||||
|
||||
$rc = $this->db->countAffected();
|
||||
|
||||
LOGGER("remove domain: $domain (rc=$rc)");
|
||||
|
||||
return $rc;
|
||||
}
|
||||
|
||||
|
||||
public function addDomain($domain = '', $mapped = '') {
|
||||
if($domain == "" || $mapped == "") { return 0; }
|
||||
|
||||
$domains = explode("\n", $domain);
|
||||
|
||||
foreach ($domains as $domain) {
|
||||
$domain = rtrim($domain);
|
||||
$query = $this->db->query("INSERT INTO " . TABLE_DOMAIN . " (domain, mapped) VALUES (?,?)", array($domain, $mapped));
|
||||
|
||||
$rc = $this->db->countAffected();
|
||||
|
||||
LOGGER("add domain: $domain (rc=$rc)");
|
||||
|
||||
if($rc != 1){ return 0; }
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
114
webui/model/health/health.php
Normal file
114
webui/model/health/health.php
Normal file
@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
class ModelHealthHealth extends Model {
|
||||
|
||||
public function format_time($time = 0) {
|
||||
if($time >= 1) {
|
||||
return sprintf("%.2f", $time) . " sec";
|
||||
}
|
||||
else {
|
||||
return sprintf("%.2f", 1000*$time) . " ms";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function checksmtp($smtp = array(), $error = '') {
|
||||
|
||||
$ret = $error;
|
||||
$time = 0;
|
||||
|
||||
if($smtp[0] && $smtp[1] && is_numeric($smtp[1]) && $smtp[1] > 0 && $smtp[1] < 65536) {
|
||||
$time_start = microtime(true);
|
||||
|
||||
$s = @fsockopen($smtp[0], $smtp[1]);
|
||||
|
||||
if($s) {
|
||||
$ret = trim(fgets($s, 4096));
|
||||
fputs($s, "QUIT\r\n");
|
||||
fclose($s);
|
||||
}
|
||||
}
|
||||
|
||||
$time = microtime(true) - $time_start;
|
||||
return array($smtp[0] . ":" . $smtp[1], $ret, $this->format_time($time), $smtp[2]);
|
||||
}
|
||||
|
||||
|
||||
public function count_processed_emails() {
|
||||
$today = $last_7_days = $last_30_days = 0;
|
||||
$now = time();
|
||||
|
||||
$ts = $now - 86400;
|
||||
$query = $this->db->query("select count(*) as count from " . TABLE_META . " where arrived > $ts");
|
||||
if(isset($query->row['count'])) { $today = $query->row['count']; }
|
||||
|
||||
$ts = $now - 604800;
|
||||
$query = $this->db->query("select count(*) as count from " . TABLE_META . " where arrived > $ts");
|
||||
if(isset($query->row['count'])) { $last_7_days = $query->row['count']; }
|
||||
|
||||
$ts = $now - 2592000;
|
||||
$query = $this->db->query("select count(*) as count from " . TABLE_META . " where arrived > $ts");
|
||||
if(isset($query->row['count'])) { $last_30_days = $query->row['count']; }
|
||||
|
||||
return array($today, $last_7_days, $last_30_days);
|
||||
}
|
||||
|
||||
|
||||
public function uptime() {
|
||||
$s = exec("uptime");
|
||||
list ($uptime, $loadavg) = preg_split("/ load average\: /", $s);
|
||||
|
||||
return array(preg_replace("/\,\ {0,}$/", "", $uptime), $loadavg);
|
||||
}
|
||||
|
||||
|
||||
public function meminfo() {
|
||||
$m = explode("\n", file_get_contents("/proc/meminfo"));
|
||||
|
||||
while(list($k, $v) = each($m)) {
|
||||
$a = preg_split("/\ {1,}/", $v);
|
||||
if(isset($a[0]) && $a[0]) { $_m[$a[0]] = $a[1]; }
|
||||
}
|
||||
|
||||
$mem_percentage = sprintf("%.2f", 100*($_m['MemTotal:'] - $_m['MemFree:'] - $_m['Cached:']) / $_m['MemTotal:']);
|
||||
$swap_percentage = sprintf("%.2f", 100*($_m['SwapTotal:'] - $_m['SwapFree:']) / $_m['SwapTotal:']);
|
||||
|
||||
return array(sprintf("%.0f", $_m['MemTotal:'] / 1000), $mem_percentage, sprintf("%.0f", $_m['SwapTotal:'] / 1000), $swap_percentage);
|
||||
}
|
||||
|
||||
|
||||
public function diskinfo() {
|
||||
$shortinfo = array();
|
||||
|
||||
$s = exec("df -h", $output);
|
||||
|
||||
$partitions = Registry::get('partitions_to_monitor');
|
||||
|
||||
while(list($k, $v) = each($output)) {
|
||||
if($k > 0) {
|
||||
$p = preg_split("/\ {1,}/", $v);
|
||||
if(isset($p[5]) && in_array($p[5], $partitions)) {
|
||||
$shortinfo[] = array(
|
||||
'partition' => $p[5],
|
||||
'utilization' => preg_replace("/\%/", "", $p[4])
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $shortinfo;
|
||||
}
|
||||
|
||||
|
||||
public function sysinfo() {
|
||||
$hostname = exec("hostname -f");
|
||||
$s = exec("uname -a");
|
||||
|
||||
return array($hostname, $s);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
51
webui/model/mail/mail.php
Normal file
51
webui/model/mail/mail.php
Normal file
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
class ModelMailMail extends Model {
|
||||
|
||||
|
||||
public function send_smtp_email($smtphost, $smtpport, $yourdomain, $from, $to = array(), $msg){
|
||||
$ok = 0;
|
||||
|
||||
if($to == "" || strlen($msg) < 30){ return $ok; }
|
||||
|
||||
$r = fsockopen($smtphost, $smtpport);
|
||||
if(!$r){ return -1; }
|
||||
|
||||
$l = fgets($r, 4096);
|
||||
|
||||
fputs($r, "HELO $yourdomain\r\n");
|
||||
$l = fgets($r, 4096);
|
||||
|
||||
fputs($r, "MAIL FROM: <$from>\r\n");
|
||||
$l = fgets($r, 4096);
|
||||
|
||||
while(list($k, $v) = each($to)) {
|
||||
fputs($r, "RCPT TO: <$v>\r\n");
|
||||
$l = fgets($r, 4096);
|
||||
}
|
||||
|
||||
fputs($r, "DATA\r\n");
|
||||
$l = fgets($r, 4096);
|
||||
if(!preg_match("/^354/", $l)){ $l = fgets($r, 4096); }
|
||||
|
||||
fputs($r, $msg);
|
||||
|
||||
if(!preg_match("/\r\n.\r\n$/", $msg)){
|
||||
fputs($r, "\r\n.\r\n");
|
||||
}
|
||||
|
||||
$l = fgets($r, 4096);
|
||||
|
||||
if(preg_match("/^250/", $l)){ $ok = 1; }
|
||||
|
||||
fputs($r, "QUIT\r\n");
|
||||
$l = fgets($r, 4096);
|
||||
|
||||
fclose($r);
|
||||
|
||||
return $ok;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
39
webui/model/policy/archiving.php
Normal file
39
webui/model/policy/archiving.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ModelPolicyArchiving extends Model {
|
||||
|
||||
public function get_rules() {
|
||||
$query = $this->db->query("SELECT * FROM " . TABLE_ARCHIVING_RULE . " ORDER BY id");
|
||||
|
||||
if(isset($query->rows)) { return $query->rows; }
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
|
||||
public function get_rule($id = 0) {
|
||||
$query = $this->db->query("SELECT * FROM " . TABLE_ARCHIVING_RULE . " WHERE id=?", array($id));
|
||||
|
||||
if(isset($query->row)) { return $query->row; }
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
|
||||
public function add_new_rule($data = array()) {
|
||||
$query = $this->db->query("INSERT INTO " . TABLE_ARCHIVING_RULE . " (`from`,`to`,`subject`,`_size`,`size`,`attachment_type`,`_attachment_size`,`attachment_size`) VALUES(?,?,?,?,?,?,?,?)", array($data['from'], $data['to'], $data['subject'], $data['_size'], $data['size'], $data['attachment_type'], $data['_attachment_size'], $data['attachment_size']));
|
||||
|
||||
return $this->db->countAffected();
|
||||
}
|
||||
|
||||
|
||||
public function remove_rule($id = 0) {
|
||||
$query = $this->db->query("DELETE FROM " . TABLE_ARCHIVING_RULE . " WHERE id=?", array($id));
|
||||
return $this->db->countAffected();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
420
webui/model/search/message.php
Normal file
420
webui/model/search/message.php
Normal file
@ -0,0 +1,420 @@
|
||||
<?php
|
||||
|
||||
class ModelSearchMessage extends Model {
|
||||
|
||||
|
||||
public function get_store_path($id = '') {
|
||||
|
||||
if($id == '') { return ''; }
|
||||
|
||||
$len = strlen($id);
|
||||
|
||||
return DIR_STORE . "/" . substr($id, $len-6, 2) . "/" . substr($id, $len-4, 2) . "/" . substr($id, $len-2, 2) . "/" . $id;
|
||||
}
|
||||
|
||||
|
||||
public function verify_message($id = '') {
|
||||
if($id == '') { return 0; }
|
||||
|
||||
$q = $this->db->query("SELECT `size`, `hlen`, `digest`, `bodydigest`,`attachments` FROM " . TABLE_META . " WHERE piler_id=?", array($id));
|
||||
|
||||
$digest = $q->row['digest'];
|
||||
$bodydigest = $q->row['bodydigest'];
|
||||
$size = $q->row['size'];
|
||||
$hlen = $q->row['hlen'];
|
||||
$attachments = $q->row['attachments'];
|
||||
|
||||
$data = $this->get_raw_message($id);
|
||||
|
||||
$_digest = openssl_digest($data, "SHA256");
|
||||
$_bodydigest = openssl_digest(substr($data, $hlen), "SHA256");
|
||||
|
||||
$data = '';
|
||||
|
||||
if($_digest == $digest && $_bodydigest == $bodydigest) { return 1; }
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
public function get_raw_message($id = '') {
|
||||
$data = '';
|
||||
|
||||
if($id == '' || !preg_match("/^([0-9a-f]+)$/", $id)) { return $data; }
|
||||
|
||||
$handle = popen(DECRYPT_BINARY . " $id", "r");
|
||||
|
||||
while(($buf = fread($handle, DECRYPT_BUFFER_LENGTH))){
|
||||
$data .= $buf;
|
||||
}
|
||||
|
||||
pclose($handle);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
public function get_message_headers($id = '') {
|
||||
$data = '';
|
||||
|
||||
//$f = $this->get_store_path($id);
|
||||
//$msg = $this->decrypt_and_uncompress_file($f.".m");
|
||||
$msg = $this->get_raw_message($id);
|
||||
|
||||
$pos = strpos($msg, "\n\r\n");
|
||||
if($pos == false) {
|
||||
$pos = strpos($msg, "\n\n");
|
||||
}
|
||||
|
||||
if($pos == false) { return $msg; }
|
||||
|
||||
$data = substr($msg, 0, $pos);
|
||||
$msg = '';
|
||||
|
||||
$data = preg_replace("/\</", "<", $data);
|
||||
$data = preg_replace("/\>/", ">", $data);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
public function extract_message($id = '') {
|
||||
$header = "";
|
||||
$body_chunk = "";
|
||||
$is_header = 1;
|
||||
$state = "UNDEF";
|
||||
$b = array();
|
||||
$boundary = array();
|
||||
$text_plain = 1;
|
||||
$text_html = 0;
|
||||
$charset = "";
|
||||
$qp = $base64 = 0;
|
||||
$has_text_plain = 0;
|
||||
|
||||
$from = $to = $subject = $date = $message = "";
|
||||
|
||||
$msg = $this->get_raw_message($id);
|
||||
|
||||
//print "a: $msg\n";
|
||||
|
||||
$a = explode("\n", $msg); $msg = "";
|
||||
|
||||
while(list($k, $l) = each($a)){
|
||||
$l .= "\n";
|
||||
|
||||
if(($l[0] == "\r" && $l[1] == "\n" && $is_header == 1) || ($l[0] == "\n" && $is_header == 1) ){
|
||||
$is_header = 0;
|
||||
}
|
||||
|
||||
if(preg_match("/^Content-Type:/i", $l)) $state = "CONTENT_TYPE";
|
||||
if(preg_match("/^Content-Transfer-Encoding:/i", $l)) $state = "CONTENT_TRANSFER_ENCODING";
|
||||
|
||||
if($state == "CONTENT_TYPE"){
|
||||
$x = strstr($l, "boundary");
|
||||
if($x){
|
||||
$x = preg_replace("/boundary =/", "boundary=", $x);
|
||||
$x = preg_replace("/boundary= /", "boundary=", $x);
|
||||
|
||||
$x = preg_replace("/\"/", "", $x);
|
||||
$x = preg_replace("/\'/", "", $x);
|
||||
|
||||
$b = explode("boundary=", $x);
|
||||
|
||||
array_push($boundary, rtrim($b[count($b)-1]));
|
||||
}
|
||||
|
||||
if(preg_match("/charset/i", $l)){
|
||||
$types = explode(";", $l);
|
||||
foreach ($types as $type){
|
||||
if(preg_match("/charset/i", $type)){
|
||||
$type = preg_replace("/[\"\'\ ]/", "", $type);
|
||||
|
||||
$x = explode("=", $type);
|
||||
$charset = $x[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(strstr($l, "text/plain")){ $text_plain = 1; $has_text_plain = 1; }
|
||||
if(strstr($l, "text/html")){ $text_html = 1; $text_plain = 0; }
|
||||
}
|
||||
|
||||
if($state == "CONTENT_TRANSFER_ENCODING"){
|
||||
if(strstr($l, "quoted-printable")){ $qp = 1; }
|
||||
if(strstr($l, "base64")){ $base64 = 1; }
|
||||
}
|
||||
|
||||
|
||||
if($is_header == 1){
|
||||
if($l[0] != " " && $l[0] != "\t"){ $state = "UNDEF"; }
|
||||
if(preg_match("/^From:/i", $l)){ $state = "FROM"; }
|
||||
if(preg_match("/^To:/i", $l) || preg_match("/^Cc:/i", $l)){ $state = "TO"; }
|
||||
if(preg_match("/^Date:/i", $l)){ $state = "DATE"; }
|
||||
if(preg_match("/^Subject:/i", $l)){ $state = "SUBJECT"; }
|
||||
if(preg_match("/^Content-Type:/", $l)){ $state = "CONTENT_TYPE"; }
|
||||
|
||||
$l = preg_replace("/</", "<", $l);
|
||||
$l = preg_replace("/>/", ">", $l);
|
||||
|
||||
if($state == "FROM"){ $from .= preg_replace("/\r|\n/", "", $l); }
|
||||
if($state == "TO"){ $to .= preg_replace("/\r|\n/", "", $l); }
|
||||
if($state == "SUBJECT"){ $subject .= preg_replace("/\r|\n/", "", $l); }
|
||||
if($state == "DATE"){ $date .= preg_replace("/\r|\n/", "", $l); }
|
||||
}
|
||||
else {
|
||||
|
||||
if($this->check_boundary($boundary, $l) == 1){
|
||||
|
||||
if($text_plain == 1 || $has_text_plain == 0) {
|
||||
$message .= $this->flush_body_chunk($body_chunk, $charset, $qp, $base64, $text_plain, $text_html);
|
||||
}
|
||||
|
||||
$text_plain = $text_html = $qp = $base64 = 0;
|
||||
|
||||
$charset = $body_chunk = "";
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
else if(($l[0] == "\r" && $l[1] == "\n") || $l[0] == "\n"){
|
||||
$state = "BODY";
|
||||
$body_chunk .= $l;
|
||||
}
|
||||
|
||||
else if($state == "BODY"){
|
||||
if($text_plain == 1 || $text_html == 1){ $body_chunk .= $l; }
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
if($body_chunk && ($text_plain == 1 || $has_text_plain == 0) ){
|
||||
$message .= $this->flush_body_chunk($body_chunk, $charset, $qp, $base64, $text_plain, $text_html);
|
||||
}
|
||||
|
||||
|
||||
return array('from' => $this->decode_my_str($from),
|
||||
'to' => $this->decode_my_str($to),
|
||||
'subject' => $this->decode_my_str($subject),
|
||||
'date' => $this->decode_my_str($date),
|
||||
'message' => $message
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
private function check_boundary($boundary, $line) {
|
||||
|
||||
for($i=0; $i<count($boundary); $i++){
|
||||
if(strstr($line, $boundary[$i])){
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
private function flush_body_chunk($chunk, $charset, $qp, $base64, $text_plain, $text_html) {
|
||||
|
||||
if($qp == 1){
|
||||
$chunk = $this->qp_decode($chunk);
|
||||
}
|
||||
|
||||
if($base64 == 1){
|
||||
$chunk = base64_decode($chunk);
|
||||
}
|
||||
|
||||
if(!preg_match("/utf-8/i", $charset)){
|
||||
$chunk = utf8_encode($chunk);
|
||||
}
|
||||
|
||||
if($text_plain == 1){
|
||||
$chunk = preg_replace("/</", "<", $chunk);
|
||||
$chunk = preg_replace("/>/", ">", $chunk);
|
||||
|
||||
//$chunk = "<pre>\n" . $this->print_nicely($chunk) . "</pre>\n";
|
||||
$chunk = preg_replace("/\n/", "<br />\n", $chunk);
|
||||
$chunk = "\n" . $this->print_nicely($chunk);
|
||||
}
|
||||
|
||||
if($text_html == 1){
|
||||
$chunk = preg_replace("/\<style([^\>]+)\>([\w\W]+)\<\/style\>/i", "", $chunk);
|
||||
|
||||
if(ENABLE_REMOTE_IMAGES == 0) {
|
||||
$chunk = preg_replace("/style([\s]{0,}=[\s]{0,})\"([^\"]+)/", "style=\"xxxx", $chunk);
|
||||
$chunk = preg_replace("/style([\s]{0,}=[\s]{0,})\'([^\']+)/", "style=\'xxxx", $chunk);
|
||||
}
|
||||
|
||||
$chunk = preg_replace("/\<body ([\w\s\;\"\'\#\d\:\-\=]+)\>/i", "<body>", $chunk);
|
||||
|
||||
if(ENABLE_REMOTE_IMAGES == 0) { $chunk = preg_replace("/\<img([^\>]+)\>/i", "<img src=\"" . REMOTE_IMAGE_REPLACEMENT . "\" />", $chunk); }
|
||||
|
||||
/* prevent scripts in the HTML part */
|
||||
|
||||
$chunk = preg_replace("/document\.write/", "document.writeee", $chunk);
|
||||
$chunk = preg_replace("/<\s{0,}script([\w\W]+)\/script\s{0,}\>/i", "<!-- disabled javascript here -->", $chunk);
|
||||
}
|
||||
|
||||
return $chunk;
|
||||
}
|
||||
|
||||
|
||||
private function print_nicely($chunk) {
|
||||
$k = 0;
|
||||
$nice_chunk = "";
|
||||
|
||||
$x = explode(" ", $chunk);
|
||||
|
||||
for($i=0; $i<count($x); $i++){
|
||||
$nice_chunk .= "$x[$i] ";
|
||||
$k += strlen($x[$i]);
|
||||
|
||||
if(strstr($x[$i], "\n")){ $k = 0; }
|
||||
|
||||
if($k > 70){ $nice_chunk .= "\n"; $k = 0; }
|
||||
}
|
||||
|
||||
return $nice_chunk;
|
||||
}
|
||||
|
||||
|
||||
public function NiceSize($size) {
|
||||
if($size < 1000) return "1k";
|
||||
if($size < 100000) return round($size/1000) . "k";
|
||||
|
||||
return sprintf("%.1f", $size/1000000) . "M";
|
||||
}
|
||||
|
||||
|
||||
private function qp_decode($l) {
|
||||
$res = "";
|
||||
$c = "";
|
||||
|
||||
if($l == ""){ return ""; }
|
||||
|
||||
/* remove soft breaks at the end of lines */
|
||||
|
||||
if(preg_match("/\=\r\n/", $l)){ $l = preg_replace("/\=\r\n/", "", $l); }
|
||||
if(preg_match("/\=\n/", $l)){ $l = preg_replace("/\=\n/", "", $l); }
|
||||
|
||||
for($i=0; $i<strlen($l); $i++){
|
||||
$c = $l[$i];
|
||||
|
||||
if($c == '=' && ctype_xdigit($l[$i+1]) && ctype_xdigit($l[$i+2])){
|
||||
$a = $l[$i+1];
|
||||
$b = $l[$i+2];
|
||||
|
||||
$c = chr(16*hexdec($a) + hexdec($b));
|
||||
|
||||
$i += 2;
|
||||
}
|
||||
|
||||
$res .= $c;
|
||||
|
||||
}
|
||||
|
||||
return $res;
|
||||
}
|
||||
|
||||
|
||||
public function decode_my_str($what = '') {
|
||||
$result = "";
|
||||
|
||||
$what = rtrim($what);
|
||||
|
||||
$a = preg_split("/\s/", $what);
|
||||
|
||||
while(list($k, $v) = each($a)){
|
||||
$x = preg_match("/\?\=$/", $v);
|
||||
|
||||
if( ($x == 0 && $k > 0) || ($x == 1 && $k == 1) ){
|
||||
$result .= " ";
|
||||
}
|
||||
|
||||
$result .= $this->fix_encoded_string($v);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
private function fix_encoded_string($what = '') {
|
||||
$s = "";
|
||||
|
||||
$what = rtrim($what, "\"\r\n");
|
||||
$what = ltrim($what, "\"");
|
||||
|
||||
if(preg_match("/^\=\?/", $what) && preg_match("/\?\=$/", $what)){
|
||||
$what = preg_replace("/^\=\?/", "", $what);
|
||||
$what = preg_replace("/\?\=$/", "", $what);
|
||||
|
||||
if(preg_match("/\?Q\?/i", $what)){
|
||||
$x = preg_replace("/^([\w\-]+)\?Q\?/i", "", $what);
|
||||
|
||||
$s = quoted_printable_decode($x);
|
||||
$s = preg_replace("/_/", " ", $s);
|
||||
}
|
||||
|
||||
if(preg_match("/\?B\?/i", $what)){
|
||||
$x = preg_replace("/^([\w\-]+)\?B\?/i", "", $what);
|
||||
|
||||
$s = base64_decode($x);
|
||||
$s = preg_replace('/\0/', "*", $s);
|
||||
}
|
||||
|
||||
|
||||
if(!preg_match("/utf-8/i", $what)){
|
||||
$s = utf8_encode($s);
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
$s = utf8_encode($what);
|
||||
}
|
||||
|
||||
return $s;
|
||||
}
|
||||
|
||||
|
||||
public function get_message_tag($id = '', $uid = 0) {
|
||||
if($id == '' || $uid <= 0) { return ''; }
|
||||
|
||||
$query = $this->db->query("SELECT `tag` FROM " . TABLE_TAG . "," . TABLE_META . " WHERE " . TABLE_TAG . ".id=" . TABLE_META . ".id AND uid=? AND piler_id=?", array($uid, $id));
|
||||
|
||||
if(isset($query->row['tag'])) { return $query->row['tag']; }
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
public function add_message_tag($id = '', $uid = 0, $tag = '') {
|
||||
if($id == '' || $uid <= 0) { return 0; }
|
||||
|
||||
$query = $this->db->query("SELECT `id` FROM " . TABLE_META . " WHERE piler_id=?", array($id));
|
||||
|
||||
if(isset($query->row['id']) && $query->row['id'] > 0) {
|
||||
|
||||
$id = $query->row['id'];
|
||||
|
||||
if($tag == '') {
|
||||
$query = $this->db->query("DELETE FROM " . TABLE_TAG . " WHERE uid=? AND id=?", array($uid, $id));
|
||||
} else {
|
||||
$query = $this->db->query("UPDATE " . TABLE_TAG . " SET tag=? WHERE uid=? AND id=?", array($tag, $uid, $id));
|
||||
if($this->db->countAffected() == 0) {
|
||||
$query = $this->db->query("INSERT INTO " . TABLE_TAG . " (id, uid, tag) VALUES(?,?,?)", array($id, $uid, $tag));
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
502
webui/model/search/search.php
Normal file
502
webui/model/search/search.php
Normal file
@ -0,0 +1,502 @@
|
||||
<?php
|
||||
|
||||
class ModelSearchSearch extends Model {
|
||||
|
||||
public function search_messages($data = array(), $search_type = SIMPLE_SEARCH, $page = 0) {
|
||||
$one_page_of_ids = array();
|
||||
$total_hits = 0;
|
||||
$sort = "sent";
|
||||
$order = "DESC";
|
||||
$sortorder = "ORDER BY sent DESC";
|
||||
$cache_key = "";
|
||||
$q = "";
|
||||
$s = "";
|
||||
|
||||
while(list($k,$v) = each($data)) {
|
||||
if($v) { $s .= '&' . $k . '=' . $v; }
|
||||
}
|
||||
|
||||
if($s) { $s = substr($s, 1, strlen($s)); }
|
||||
|
||||
AUDIT(ACTION_SEARCH, '', '', 0, $s);
|
||||
|
||||
|
||||
if($data['sort'] == "sent") { $sort = "sent"; }
|
||||
if($data['sort'] == "size") { $sort = "size"; }
|
||||
if($data['sort'] == "from") { $sort = "from"; }
|
||||
if($data['sort'] == "subj") { $sort = "subject"; }
|
||||
|
||||
if($data['order'] == 1) { $order = "ASC"; }
|
||||
|
||||
$sortorder = "ORDER BY `$sort` $order";
|
||||
|
||||
$m = array();
|
||||
|
||||
if(MEMCACHED_ENABLED) {
|
||||
$cache_key = $this->make_cache_file_name($data, $sortorder);
|
||||
$memcache = Registry::get('memcache');
|
||||
$m = $memcache->get($cache_key);
|
||||
}
|
||||
|
||||
|
||||
if(isset($m['ids'])) {
|
||||
$all_ids = $m['ids'];
|
||||
} else {
|
||||
|
||||
if($search_type == SIMPLE_SEARCH) {
|
||||
$conditions = $this->assemble_simple_query_conditions($data);
|
||||
}
|
||||
else {
|
||||
$conditions = $this->assemble_advanced_query_conditions($data);
|
||||
}
|
||||
|
||||
$all_ids = $this->query_all_possible_IDs($data, $conditions, $sort, $order, $sortorder, $cache_key);
|
||||
}
|
||||
|
||||
|
||||
|
||||
$total_hits = count($all_ids);
|
||||
|
||||
$data['page_len'] = get_page_length();
|
||||
|
||||
if($total_hits > 0) {
|
||||
$i = 0;
|
||||
|
||||
foreach($all_ids as $id) {
|
||||
|
||||
if($i >= $data['page_len'] * $page && $i < $data['page_len'] * ($page+1) ) {
|
||||
array_push($one_page_of_ids, $id);
|
||||
|
||||
if($q) { $q .= ",?"; } else { $q = "?"; }
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return array($total_hits, $this->get_meta_data($one_page_of_ids, $q, $sortorder));
|
||||
}
|
||||
|
||||
|
||||
private function assemble_advanced_query_conditions($data = array()) {
|
||||
$f1 = $f2 = $t1 = $t2 = $fd = $td = '';
|
||||
$incoming = $outgoing = '';
|
||||
$email = $match = '';
|
||||
$n_fc = $n_tc = 0;
|
||||
|
||||
|
||||
$data['f_from'] = $this->fix_email_address_for_sphinx($data['f_from']);
|
||||
$data['o_from'] = $this->fix_email_address_for_sphinx($data['o_from']);
|
||||
$data['f_to'] = $this->fix_email_address_for_sphinx($data['f_to']);
|
||||
$data['o_to'] = $this->fix_email_address_for_sphinx($data['o_to']);
|
||||
$data['from_domain'] = $this->fix_email_address_for_sphinx($data['from_domain']);
|
||||
$data['to_domain'] = $this->fix_email_address_for_sphinx($data['to_domain']);
|
||||
|
||||
$data['body'] = $this->fixup_sphinx_operators($data['body']);
|
||||
$data['subject'] = $this->fixup_sphinx_operators($data['subject']);
|
||||
|
||||
|
||||
if(Registry::get('admin_user') == 1 || Registry::get('auditor_user') == 1) {
|
||||
if($data['f_from']) { $f1 .= "|" . $data['f_from']; $n_fc++; }
|
||||
if($data['o_from']) { $f1 .= "|" . $data['o_from']; $n_fc++; }
|
||||
if($data['from_domain']) { $fd .= "(@fromdomain " . $data['from_domain'] . ")"; $n_fc++; }
|
||||
|
||||
if($data['f_to']) { $t1 .= "|" . $data['f_to']; $n_tc++; }
|
||||
if($data['o_to']) { $t1 .= "|" . $data['o_to']; $n_tc++; }
|
||||
if($data['to_domain']) { $td .= "(@todomain " . $data['to_domain'] . ")"; $n_tc++; }
|
||||
|
||||
if($f1) { $f1 = "(@from " . substr($f1, 1, strlen($f1)) . ")"; }
|
||||
if($t1) { $t1 = "(@to " . substr($t1, 1, strlen($t1)) . ")"; }
|
||||
|
||||
}
|
||||
else {
|
||||
$all_your_addresses = $this->get_all_your_address();
|
||||
|
||||
if($data['f_from']) { $f1 = "(@from " . $data['f_from'] . " @to $all_your_addresses)"; $n_fc++; }
|
||||
if($data['o_from']) { $f2 = "(@from " . $data['o_from'] . ")"; $n_fc++; }
|
||||
if($data['from_domain']) { $fd = "(@fromdomain " . $data['from_domain'] . " @to $all_your_addresses)"; $n_fc++; }
|
||||
|
||||
if($data['f_to']) { $t1 = "(@to " . $data['f_to'] . " @from $all_your_addresses)"; $n_tc++; }
|
||||
if($data['o_to']) { $t2 = "(@to " . $data['o_to'] . ")"; $n_tc++; }
|
||||
if($data['to_domain']) { $td = "(@todomain " . $data['to_domain'] . " @from $all_your_addresses)"; $n_tc++; }
|
||||
|
||||
if($n_fc == 0 && $n_tc == 0 && $data['from_domain'] == '' && $data['to_domain'] == '') {
|
||||
if($data['direction'] == 2) {
|
||||
$f1 = " (@from " . $all_your_addresses . ")";
|
||||
} else {
|
||||
$t1 = " (@to " . $all_your_addresses . ")";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($f1) { $incoming .= "|$f1"; }
|
||||
if($f2) { $incoming .= "|$f2"; }
|
||||
if($fd) { $incoming .= "|$fd"; }
|
||||
|
||||
if($t1) { $outgoing .= "|$t1"; }
|
||||
if($t2) { $outgoing .= "|$t2"; }
|
||||
if($td) { $outgoing .= "|$td"; }
|
||||
|
||||
if($incoming) { $incoming = substr($incoming, 1, strlen($incoming)); if($n_fc > 1) { $incoming = "($incoming)"; } }
|
||||
if($outgoing) { $outgoing = substr($outgoing, 1, strlen($outgoing)); if($n_tc > 1) { $outgoing = "($outgoing)"; } }
|
||||
|
||||
|
||||
if($incoming) {
|
||||
$email = $incoming;
|
||||
if($outgoing) { $email = $incoming . " & " . $outgoing; }
|
||||
} else if($outgoing) {
|
||||
$email = $outgoing;
|
||||
}
|
||||
|
||||
|
||||
if($email) { $match = $email; }
|
||||
|
||||
if($data['body']) { if($match) { $match .= " & "; } $match .= "(@body " . $data['body'] . ") "; }
|
||||
if($data['subject']) { if($match) { $match .= " & "; } $match .= "(@subject " . $data['subject'] . ") "; }
|
||||
if($data['attachment_type']) { if($match) { $match .= " & "; } $match .= "(@attachment_types " . $data['attachment_type'] . ") "; }
|
||||
|
||||
return $match;
|
||||
}
|
||||
|
||||
|
||||
private function assemble_simple_query_conditions($data = array(), $sort = 'sent', $order = 'DESC', $sortorder = '', $cache_key = '') {
|
||||
$email = $match = "";
|
||||
|
||||
if(Registry::get('admin_user') == 0 && Registry::get('auditor_user') == 0) {
|
||||
|
||||
$all_your_addresses = $this->get_all_your_address();
|
||||
|
||||
if(isset($data['from'])) { $data['from'] = fix_email_address($data['from']); }
|
||||
if(isset($data['to'])) { $data['to'] = fix_email_address($data['to']); }
|
||||
|
||||
// missing from address
|
||||
|
||||
if(!isset($data['from'])) {
|
||||
|
||||
if(isset($data['to']) && !strstr($data['to'], '@')) { $email = "@from $all_your_addresses @todomain " . $this->fix_email_address_for_sphinx($data['to']); }
|
||||
else if(!isset($data['to'])) { $email = "@to $all_your_addresses"; }
|
||||
else if(!in_array($data['to'], $_SESSION['emails'])) { $email = "@from $all_your_addresses @to " . $this->fix_email_address_for_sphinx($data['to']); }
|
||||
else { $email = "@to " . $this->fix_email_address_for_sphinx($data['to']); }
|
||||
|
||||
}
|
||||
|
||||
// missing to address
|
||||
|
||||
else if(!isset($data['to'])) {
|
||||
if(isset($data['from']) && !strstr($data['from'], '@')) { $email = "@to $all_your_addresses @fromdomain " . $this->fix_email_address_for_sphinx($data['from']); }
|
||||
else if(!in_array($data['from'], $_SESSION['emails'])) { $email = "@to $all_your_addresses @from " . $this->fix_email_address_for_sphinx($data['from']); }
|
||||
else { $email = "@from " . $this->fix_email_address_for_sphinx($data['from']); }
|
||||
}
|
||||
|
||||
else if(isset($data['from']) && isset($data['to'])) {
|
||||
|
||||
if(
|
||||
(!in_array($data['from'], $_SESSION['emails']) && in_array($data['to'], $_SESSION['emails'])) ||
|
||||
(!in_array($data['to'], $_SESSION['emails']) && in_array($data['from'], $_SESSION['emails']))
|
||||
) {
|
||||
$email = "@from " . $this->fix_email_address_for_sphinx($data['from']) . " @to " . $this->fix_email_address_for_sphinx($data['to']);
|
||||
}
|
||||
|
||||
else {
|
||||
$email = " @to INVALID ";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
if(isset($data['from'])) {
|
||||
if(strstr($data['from'], '@')) { $match .= " @from " . $this->fix_email_address_for_sphinx($data['from']); }
|
||||
else { $match .= " @fromdomain " . $this->fix_email_address_for_sphinx($data['from']); }
|
||||
}
|
||||
|
||||
if(isset($data['to'])) {
|
||||
if(strstr($data['to'], '@')) { $match .= " @to " . $this->fix_email_address_for_sphinx($data['to']); }
|
||||
else { $match .= " @todomain " . $this->fix_email_address_for_sphinx($data['to']); }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(isset($data['subject'])) {
|
||||
$data['subject'] = $this->fixup_sphinx_operators($data['subject']);
|
||||
$match .= " @(subject,body) " . $data['subject'];
|
||||
}
|
||||
|
||||
|
||||
if($email) { $match = " $email " . $match; }
|
||||
|
||||
return $match;
|
||||
}
|
||||
|
||||
|
||||
private function query_all_possible_IDs($data = array(), $conditions = '', $sort = 'sent', $order = 'DESC', $sortorder = '', $cache_key = '') {
|
||||
$ids = array();
|
||||
$direction = $size = '';
|
||||
$tag_id_list = '';
|
||||
|
||||
|
||||
if($data['sort'] == 'from' || $data['sort'] == 'subj') { $sortorder = ''; }
|
||||
|
||||
$date = fixup_date_condition('sent', $data['date1'], $data['date2']);
|
||||
|
||||
if($date) { $date .= " AND "; }
|
||||
|
||||
if(isset($data['direction']) && $data['direction'] != '') { $direction = "direction = " . $data['direction'] . " AND "; }
|
||||
|
||||
if(isset($data['size']) && $data['size']) {
|
||||
$data['size'] = preg_replace("/\s/", "", $data['size']);
|
||||
if(preg_match("/^(\>|\<)\={0,}\d{1,}$/", $data['size'])) { $size = "size " . $data['size'] . " AND "; }
|
||||
}
|
||||
|
||||
|
||||
if($data['tag']) {
|
||||
$tag_id_list = " AND id IN (0";
|
||||
|
||||
$data['tag'] = $this->fixup_sphinx_operators($data['tag']);
|
||||
|
||||
$aa = $this->sphx->query("SELECT id FROM " . SPHINX_TAG_INDEX . " WHERE uid=" . $_SESSION['uid'] . " AND MATCH('@tag " . $data['tag'] . " ') ");
|
||||
|
||||
foreach($aa->rows as $a) {
|
||||
$tag_id_list .= "," . $a['id'];
|
||||
}
|
||||
|
||||
$tag_id_list .= ") ";
|
||||
}
|
||||
|
||||
|
||||
|
||||
$query = $this->sphx->query("SELECT id FROM " . SPHINX_MAIN_INDEX . " WHERE $date $direction $size MATCH('$conditions') $tag_id_list $sortorder LIMIT 0," . MAX_SEARCH_HITS);
|
||||
|
||||
//print $query->query; print "<p>" . $query->exec_time . "</p>\n";
|
||||
|
||||
|
||||
/*
|
||||
* build an id list
|
||||
*/
|
||||
|
||||
$q = "";
|
||||
|
||||
foreach($query->rows as $a) {
|
||||
array_push($ids, $a['id']);
|
||||
|
||||
if($q) { $q .= ",?"; }
|
||||
else { $q = "?"; }
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* if the query was requested to be sorted by sender or subject, then sphinx cannot do
|
||||
* that, so we assemble the list of all sphinx IDs matching the query
|
||||
*/
|
||||
|
||||
if($data['sort'] == 'from' || $data['sort'] == 'subj') {
|
||||
|
||||
$query = $this->db->query("SELECT id FROM " . TABLE_META . " WHERE id IN ($q) ORDER BY `$sort` $order", $ids);
|
||||
//print $query->query . ", exec: " . $query->exec_time . "<p/>\n";
|
||||
|
||||
$ids = array();
|
||||
|
||||
foreach($query->rows as $q) {
|
||||
array_push($ids, $q['id']);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if(MEMCACHED_ENABLED && $cache_key) {
|
||||
$memcache = Registry::get('memcache');
|
||||
$memcache->add($cache_key, array('ts' => time(), 'total_hits' => count($ids), 'ids' => $ids), 0, MEMCACHED_TTL);
|
||||
}
|
||||
|
||||
|
||||
return $ids;
|
||||
}
|
||||
|
||||
|
||||
private function get_meta_data($ids = array(), $q = '', $sortorder = '') {
|
||||
$messages = array();
|
||||
$tag = array();
|
||||
|
||||
|
||||
if(count($ids) == 0) return $messages;
|
||||
|
||||
$query = $this->db->query("SELECT `id`, `from`, `subject`, `piler_id`, `reference`, `size`, `spam`, `sent`, `arrived`, `attachments` FROM `" . TABLE_META . "` WHERE `id` IN ($q) $sortorder", $ids);
|
||||
|
||||
|
||||
if(isset($query->rows)) {
|
||||
|
||||
$tags = $this->db->query("SELECT `id`, `tag` FROM `" . TABLE_TAG . "` WHERE `id` IN ($q)", $ids);
|
||||
foreach ($tags->rows as $t) {
|
||||
$tag[$t['id']] = $t['tag'];
|
||||
}
|
||||
|
||||
|
||||
$lang = Registry::get('language');
|
||||
|
||||
foreach($query->rows as $m) {
|
||||
$m['shortfrom'] = make_short_string($m['from'], MAX_CGI_FROM_SUBJ_LEN);
|
||||
|
||||
if($m['subject'] == "") { $m['subject'] = "<" . $lang->data['text_no_subject'] . ">"; }
|
||||
|
||||
$m['subject'] = escape_gt_lt_quote_symbols($m['subject']);
|
||||
$m['shortsubject'] = make_short_string($m['subject'], MAX_CGI_FROM_SUBJ_LEN);
|
||||
|
||||
$m['date'] = date(SEARCH_HIT_DATE_FORMAT, $m['sent']);
|
||||
$m['size'] = nice_size($m['size']);
|
||||
|
||||
|
||||
/*
|
||||
* verifying 20 messages takes some time, still it's useful
|
||||
*/
|
||||
|
||||
if(ENABLE_ON_THE_FLY_VERIFICATION == 1) {
|
||||
$m['verification'] = $this->model_search_message->verify_message($m['piler_id']);
|
||||
}
|
||||
|
||||
if(isset($tag[$m['id']])) { $m['tag'] = $tag[$m['id']]; } else { $m['tag'] = ''; }
|
||||
|
||||
array_push($messages, $m);
|
||||
}
|
||||
}
|
||||
|
||||
return $messages;
|
||||
}
|
||||
|
||||
|
||||
public function get_message_recipients($id = '') {
|
||||
$rcpt = array();
|
||||
|
||||
if(Registry::get('admin_user') == 0 && Registry::get('auditor_user') == 0) { return $rcpt; }
|
||||
|
||||
$query = $this->db->query("SELECT `to` FROM " . VIEW_MESSAGES . " WHERE piler_id=?", array($id));
|
||||
|
||||
foreach($query->rows as $q) {
|
||||
array_push($rcpt, $q['to']);
|
||||
}
|
||||
|
||||
return $rcpt;
|
||||
}
|
||||
|
||||
|
||||
private function get_all_your_address() {
|
||||
$s = '';
|
||||
|
||||
while(list($k, $v) = each($_SESSION['emails'])) {
|
||||
if($s) { $s .= '| ' . $this->fix_email_address_for_sphinx($v); }
|
||||
else { $s = $this->fix_email_address_for_sphinx($v); }
|
||||
}
|
||||
|
||||
return $s;
|
||||
}
|
||||
|
||||
|
||||
public function check_your_permission_by_piler_id($id = '') {
|
||||
$q = '';
|
||||
$arr = $a = array();
|
||||
|
||||
if($id == '') { return 0; }
|
||||
|
||||
if(Registry::get('admin_user') == 1 || Registry::get('auditor_user') == 1) { return 1; }
|
||||
|
||||
array_push($arr, $id);
|
||||
|
||||
while(list($k, $v) = each($_SESSION['emails'])) {
|
||||
if(validemail($v) == 1) {
|
||||
$q .= ",?";
|
||||
array_push($a, $v);
|
||||
}
|
||||
}
|
||||
|
||||
$q = preg_replace("/^\,/", "", $q);
|
||||
|
||||
$arr = array_merge($arr, $a, $a);
|
||||
|
||||
$query = $this->db->query("SELECT * FROM " . VIEW_MESSAGES . " WHERE piler_id=? AND ( `from` IN ($q) OR `to` IN ($q) )", $arr);
|
||||
|
||||
if(isset($query->row['id'])) { return 1; }
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
public function remove_message($id = '') {
|
||||
if($id == '') { return 0; }
|
||||
|
||||
if(Registry::get('admin_user') == 0) { return 0; }
|
||||
|
||||
$query = $this->db->query("UPDATE " . TABLE_META . " SET deleted=1 WHERE piler_id=?", array($id));
|
||||
|
||||
return $this->db->countAffected();
|
||||
}
|
||||
|
||||
|
||||
private function fix_email_address_for_sphinx($email = '') {
|
||||
return preg_replace("/[\@\.\+\-]/", "X", $email);
|
||||
}
|
||||
|
||||
|
||||
public function get_search_terms() {
|
||||
|
||||
$query = $this->db->query("SELECT term FROM " . TABLE_SEARCH . " where email=? ORDER BY ts DESC", array($_SESSION['email']));
|
||||
if(isset($query->rows)) { return $query->rows; }
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
|
||||
public function add_search_term($term = '') {
|
||||
if($term == '') { return 0; }
|
||||
|
||||
if($this->update_search_term($term) == 0) {
|
||||
AUDIT(ACTION_SAVE_SEARCH, '', '', '', $term);
|
||||
$query = $this->db->query("INSERT INTO " . TABLE_SEARCH . " (email, ts, term) VALUES(?,?,?)", array($_SESSION['email'], time(), $term));
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
public function update_search_term($term = '') {
|
||||
if($term == '') { return 0; }
|
||||
|
||||
AUDIT(ACTION_SEARCH, '', '', '', $term);
|
||||
|
||||
$query = $this->db->query("UPDATE " . TABLE_SEARCH . " SET ts=? WHERE term=? AND email=?", array(time(), $term, $_SESSION['email']));
|
||||
|
||||
return $this->db->countAffected();
|
||||
}
|
||||
|
||||
|
||||
private function fixup_sphinx_operators($s = '') {
|
||||
if($s == '') { return $s; }
|
||||
|
||||
$s = preg_replace("/ OR /", "|", $s);
|
||||
$a = explode(" ", $s);
|
||||
$s = '';
|
||||
|
||||
while(list($k, $v) = each($a)) {
|
||||
|
||||
if(substr($v, 0, 4) == 'http') {
|
||||
$v = preg_replace("/http(s){0,1}\:\/\//", "__URL__", $v);
|
||||
$b = explode("/", $v);
|
||||
$s .= ' ' . $this->fix_email_address_for_sphinx($b[0]);
|
||||
}
|
||||
else {
|
||||
$s .= ' ' . $v;
|
||||
}
|
||||
}
|
||||
|
||||
return $s;
|
||||
}
|
||||
|
||||
|
||||
private function make_cache_file_name($data = array(), $sortorder = '') {
|
||||
return sha1($_SESSION['email'] . "/" . join("*", $data) . "-" . (NOW - NOW % 3600) . "-" . $sortorder);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
139
webui/model/stat/chart.php
Normal file
139
webui/model/stat/chart.php
Normal file
@ -0,0 +1,139 @@
|
||||
<?php
|
||||
|
||||
class ModelStatChart extends Model {
|
||||
|
||||
public function lineChartHamSpam($emails, $timespan, $title, $size_x, $size_y, $output){
|
||||
$ydata = array();
|
||||
$ydata2 = array();
|
||||
$dates = array();
|
||||
|
||||
$chart = new LineChart($size_x, $size_y);
|
||||
|
||||
$chart->getPlot()->getPalette()->setLineColor(array(
|
||||
//new Color(26, 192, 144),
|
||||
new Color(208, 48, 128),
|
||||
));
|
||||
|
||||
$line1 = new XYDataSet();
|
||||
|
||||
$limit = $this->getDataPoints($timespan);
|
||||
|
||||
$range = $this->getRangeInSeconds($timespan);
|
||||
|
||||
if($timespan == "daily"){ $grouping = "GROUP BY FROM_UNIXTIME(ts, '%Y.%m.%d. %H')"; }
|
||||
else { $grouping = "GROUP BY FROM_UNIXTIME(ts, '%Y.%m.%d.')"; }
|
||||
|
||||
|
||||
if($timespan == "daily"){
|
||||
$query = $this->db->query("select arrived-(arrived%3600) as ts, count(*) as num from " . TABLE_META . " where arrived > $range $emails $grouping ORDER BY ts DESC limit $limit");
|
||||
$date_format = "H:i";
|
||||
} else {
|
||||
$query = $this->db->query("select arrived-(arrived%86400) as ts, count(*) as num from " . TABLE_META . " where arrived > $range $emails $grouping ORDER BY ts DESC limit $limit");
|
||||
$date_format = "m.d.";
|
||||
}
|
||||
|
||||
foreach ($query->rows as $q) {
|
||||
array_push($ydata, $q['num']);
|
||||
array_push($dates, date($date_format, $q['ts']));
|
||||
}
|
||||
|
||||
if($query->num_rows >= 15) {
|
||||
$i = 0;
|
||||
while(list($k, $v) = each($dates)) {
|
||||
$i++;
|
||||
if($i % 3) { $dates[$k] = ""; }
|
||||
}
|
||||
reset($dates);
|
||||
}
|
||||
|
||||
|
||||
|
||||
$ydata = array_reverse($ydata);
|
||||
$dates = array_reverse($dates);
|
||||
|
||||
for($i=0; $i<count($ydata); $i++){
|
||||
$ts = $dates[$i];
|
||||
$line1->addPoint(new Point("$ts", $ydata[$i]));
|
||||
}
|
||||
|
||||
|
||||
$dataSet = new XYSeriesDataSet();
|
||||
$dataSet->addSerie("RCVD", $line1);
|
||||
|
||||
$chart->setDataSet($dataSet);
|
||||
|
||||
$chart->setTitle($title);
|
||||
$chart->getPlot()->setGraphCaptionRatio(0.80);
|
||||
|
||||
$this->sendOutput($chart, $output);
|
||||
}
|
||||
|
||||
|
||||
public function pieChartHamSpam($emails = '', $timespan, $title, $output) {
|
||||
$ham = $spam = 0;
|
||||
|
||||
$range = $this->getRangeInSeconds($timespan);
|
||||
|
||||
$chart = new PieChart(SIZE_X, SIZE_Y);
|
||||
|
||||
$query = $this->db->query("SELECT COUNT(*) AS SPAM FROM " . TABLE_META . " WHERE $emails AND arrived > $range");
|
||||
if($query->num_rows > 0) { $spam = $query->row['SPAM']; }
|
||||
|
||||
$query = $this->db->query("SELECT COUNT(*) AS HAM FROM " . TABLE_META . " WHERE $emails AND arrived > $range");
|
||||
if($query->num_rows > 0) { $ham = $query->row['HAM']; }
|
||||
|
||||
if($ham > $spam) {
|
||||
$chart->getPlot()->getPalette()->setPieColor(array(new Color(26, 192, 144), new Color(208, 48, 128) ));
|
||||
} else {
|
||||
$chart->getPlot()->getPalette()->setPieColor(array(new Color(208, 48, 128), new Color(26, 192, 144) ));
|
||||
}
|
||||
|
||||
|
||||
$dataSet = new XYDataSet();
|
||||
|
||||
$dataSet->addPoint(new Point("HAM ($ham)", $ham));
|
||||
$dataSet->addPoint(new Point("SPAM ($spam)", $spam));
|
||||
|
||||
$chart->setDataSet($dataSet);
|
||||
$chart->setTitle($title);
|
||||
|
||||
$this->sendOutput($chart, $output);
|
||||
}
|
||||
|
||||
|
||||
private function getRangeInSeconds($timespan) {
|
||||
$range = 0;
|
||||
|
||||
if($timespan == "daily") { return time() - 86400; }
|
||||
if($timespan == "weekly") { return time() - 604800; }
|
||||
|
||||
return time() - 2592000;
|
||||
}
|
||||
|
||||
|
||||
private function getDataPoints($timespan) {
|
||||
|
||||
if($timespan == "daily") { return 24; }
|
||||
if($timespan == "weekly") { return 7; }
|
||||
|
||||
return 30;
|
||||
}
|
||||
|
||||
|
||||
private function sendOutput($chart, $output = '') {
|
||||
if($output == "") {
|
||||
header("Content-type: image/png");
|
||||
header("Expires: now");
|
||||
}
|
||||
|
||||
if($output) {
|
||||
$chart->render($output);
|
||||
}
|
||||
else {
|
||||
$chart->render();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
43
webui/model/stat/counter.php
Normal file
43
webui/model/stat/counter.php
Normal file
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
class ModelStatCounter extends Model {
|
||||
|
||||
public function getCounters(){
|
||||
$counter = array();
|
||||
|
||||
if(MEMCACHED_ENABLED) {
|
||||
$memcache = Registry::get('memcache');
|
||||
|
||||
$counter = $memcache->get(Registry::get('counters'));
|
||||
|
||||
if(isset($counter['_c:counters_last_update'])) { return $counter; }
|
||||
}
|
||||
|
||||
$query = $this->db->query("SELECT * FROM " . TABLE_COUNTER);
|
||||
|
||||
if($query->num_rows == 1) {
|
||||
$counter = $query->row;
|
||||
}
|
||||
|
||||
return $counter;
|
||||
}
|
||||
|
||||
|
||||
public function resetCounters(){
|
||||
|
||||
if(MEMCACHED_ENABLED) {
|
||||
$memcache = Registry::get('memcache');
|
||||
|
||||
foreach (Registry::get('counters') as $counter) {
|
||||
$memcache->set($counter, 0);
|
||||
}
|
||||
}
|
||||
|
||||
$query = $this->db->query("UPDATE " . TABLE_COUNTER . " set rcvd=0, virus=0, duplicate=0, ignore=0");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
78
webui/model/user/auth.php
Normal file
78
webui/model/user/auth.php
Normal file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
class ModelUserAuth extends Model {
|
||||
|
||||
public function checkLogin($username = '', $password = '') {
|
||||
|
||||
$query = $this->db->query("SELECT " . TABLE_USER . ".username, " . TABLE_USER . ".uid, " . TABLE_USER . ".realname, " . TABLE_USER . ".dn, " . TABLE_USER . ".password, " . TABLE_USER . ".isadmin, " . TABLE_USER . ".domain FROM " . TABLE_USER . ", " . TABLE_EMAIL . " WHERE " . TABLE_EMAIL . ".email=? AND " . TABLE_EMAIL . ".uid=" . TABLE_USER . ".uid", array($username));
|
||||
|
||||
if(!isset($query->row['password'])) { return 0; }
|
||||
|
||||
$pass = crypt($password, $query->row['password']);
|
||||
|
||||
if($pass == $query->row['password']){
|
||||
|
||||
$_SESSION['username'] = $query->row['username'];
|
||||
$_SESSION['uid'] = $query->row['uid'];
|
||||
$_SESSION['admin_user'] = $query->row['isadmin'];
|
||||
$_SESSION['email'] = $username;
|
||||
$_SESSION['domain'] = $query->row['domain'];
|
||||
$_SESSION['realname'] = $query->row['realname'];
|
||||
|
||||
$_SESSION['emails'] = $this->model_user_user->get_users_all_email_addresses($query->row['uid']);
|
||||
|
||||
AUDIT(ACTION_LOGIN, $username, '', '', 'successful auth against user table');
|
||||
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
AUDIT(ACTION_LOGIN_FAILED, $username, '', '', 'failed auth against user table');
|
||||
}
|
||||
|
||||
if(strlen($query->row['dn']) > 3) { return $this->checkLoginAgainstLDAP($query->row, $password); }
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
private function checkLoginAgainstLDAP($user = array(), $password = '') {
|
||||
if($password == '' || !isset($user['username']) || !isset($user['domain']) || !isset($user['dn']) || strlen($user['domain']) < 2){ return 0; }
|
||||
|
||||
$query = $this->db->query("SELECT remotehost, basedn FROM " . TABLE_REMOTE . " WHERE remotedomain=?", array($user['domain']));
|
||||
|
||||
if($query->num_rows != 1) { return 0; }
|
||||
|
||||
$ldap = new LDAP($query->row['remotehost'], $user['dn'], $password);
|
||||
|
||||
if($ldap->is_bind_ok()) {
|
||||
$_SESSION['username'] = $user['username'];
|
||||
$_SESSION['admin_user'] = 0;
|
||||
$_SESSION['email'] = $user['username'];
|
||||
|
||||
$this->changePassword($user['username'], $password);
|
||||
|
||||
AUDIT(ACTION_LOGIN, $user['username'], '', '', 'changed password in local table');
|
||||
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
AUDIT(ACTION_LOGIN_FAILED, $user['username'], '', '', 'failed bind to ' . $query->row['remotehost'], $user['dn']);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
public function changePassword($username = '', $password = '') {
|
||||
if($username == "" || $password == ""){ return 0; }
|
||||
|
||||
$query = $this->db->query("UPDATE " . TABLE_USER . " SET password=? WHERE username=?", array(crypt($password), $username));
|
||||
|
||||
$rc = $this->db->countAffected();
|
||||
|
||||
return $rc;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
344
webui/model/user/import.php
Normal file
344
webui/model/user/import.php
Normal file
@ -0,0 +1,344 @@
|
||||
<?php
|
||||
|
||||
|
||||
class ModelUserImport extends Model {
|
||||
|
||||
|
||||
public function getLdapParameters() {
|
||||
$my_domain = $this->model_user_user->getDomains();
|
||||
$query = $this->db->query("SELECT remotehost, basedn, binddn FROM " . TABLE_REMOTE . " WHERE remotedomain=?", array($my_domain[0]));
|
||||
|
||||
return $query->row;
|
||||
}
|
||||
|
||||
|
||||
public function queryRemoteUsers($host) {
|
||||
$data = array();
|
||||
|
||||
LOGGER("running queryRemoteUsers() ...");
|
||||
|
||||
$attrs = array("cn", "mail", "mailAlternateAddress", "memberdn", "memberaddr");
|
||||
$mailAttr = 'mail';
|
||||
$mailAttrs = array("mail", "mailalternateaddress");
|
||||
|
||||
$memberAttrs = array("memberdn");
|
||||
|
||||
$ldap = new LDAP($host['ldap_host'], $host['ldap_binddn'], $host['ldap_bindpw']);
|
||||
if($ldap->is_bind_ok() == 0) {
|
||||
LOGGER($host['ldap_binddn'] . ": failed bind to " . $host['ldap_host']);
|
||||
return array();
|
||||
}
|
||||
|
||||
LOGGER($host['ldap_binddn'] . ": successful bind to " . $host['ldap_host']);
|
||||
LOGGER("LDAP type: " . $host['type']);
|
||||
|
||||
if($host['type'] == "AD") {
|
||||
$attrs = array("cn", "proxyaddresses", "member");
|
||||
|
||||
$mailAttr = "proxyaddresses";
|
||||
$mailAttrs = array("proxyaddresses");
|
||||
|
||||
$memberAttrs = array("member");
|
||||
}
|
||||
|
||||
|
||||
$query = $ldap->query($host['ldap_basedn'], "$mailAttr=*", $attrs );
|
||||
LOGGER("LDAP query: $mailAttr=* for basedn:" . $host['ldap_basedn']);
|
||||
|
||||
foreach ($query->rows as $result) {
|
||||
$emails = "";
|
||||
|
||||
if(!isset($result['cn']) || !isset($result['dn']) ) { continue; }
|
||||
|
||||
foreach($mailAttrs as $__mail_attr) {
|
||||
|
||||
if(isset($result[$__mail_attr]) ) {
|
||||
|
||||
if(is_array($result[$__mail_attr]) ) {
|
||||
|
||||
for($i = 0; $i < $result[$__mail_attr]['count']; $i++) {
|
||||
LOGGER("found email entry: " . $result['dn'] . " => $__mail_attr:" . $result[$__mail_attr][$i]);
|
||||
if(preg_match("/^smtp\:/i", $result[$__mail_attr][$i])) {
|
||||
$emails .= strtolower(preg_replace("/^smtp\:/i", "", $result[$__mail_attr][$i])) . "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
LOGGER("found email entry: " . $result['dn'] . " => $__mail_attr:" . $result[$__mail_attr]);
|
||||
$emails .= strtolower(preg_replace("/smtp\:/i", "", $result[$__mail_attr])) . "\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$__emails = explode("\n", $emails);
|
||||
|
||||
|
||||
$members = "";
|
||||
|
||||
foreach($memberAttrs as $__member_attr) {
|
||||
|
||||
if(isset($result[$__member_attr]) ) {
|
||||
if(is_array($result[$__member_attr]) ) {
|
||||
for($i = 0; $i < $result[$__member_attr]['count']; $i++) {
|
||||
LOGGER("found member entry: " . $result['dn'] . " => $__member_attr:" . $result[$__member_attr][$i]);
|
||||
$members .= $result[$__member_attr][$i] . "\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
LOGGER("found member entry: " . $result['dn'] . " => $__member_attr:" . $result[$__member_attr]);
|
||||
$members .= $result[$__member_attr] . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$data[] = array(
|
||||
'username' => preg_replace("/\n{1,}$/", "", $__emails[0]),
|
||||
'realname' => $result['cn'],
|
||||
'dn' => $result['dn'],
|
||||
'emails' => preg_replace("/\n{1,}$/", "", $emails),
|
||||
'members' => preg_replace("/\n{1,}$/", "", $members)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
LOGGER("found " . count($data) . " users");
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function fillRemoteTable($host = array(), $domain = '') {
|
||||
if($domain == '') { return 0; }
|
||||
|
||||
/*
|
||||
* if the 't_remote' table has no entry for your domain and we read some users
|
||||
* let's put the connection info to the 't_remote' table needed for proxying
|
||||
* the authentication requests
|
||||
*/
|
||||
|
||||
$query = $this->db->query("SELECT COUNT(*) AS num FROM " . TABLE_REMOTE . " WHERE remotedomain=?", array($domain));
|
||||
|
||||
if(isset($query->row['num'])) {
|
||||
|
||||
if($query->row['num'] == 0) {
|
||||
$query = $this->db->query("INSERT INTO " . TABLE_REMOTE . " (remotedomain, remotehost, basedn, binddn) VALUES(?,?,?,?)", array($domain, $host['ldap_host'], $host['ldap_basedn'], $host['ldap_binddn']));
|
||||
}
|
||||
else {
|
||||
$query = $this->db->query("UPDATE " . TABLE_REMOTE . " SET remotehost=?, basedn=?, binddn=? WHERE remotedomain=?", array($host['ldap_host'], $host['ldap_basedn'], $host['ldap_binddn'], $domain));
|
||||
|
||||
}
|
||||
|
||||
LOGGER("SQL exec:" . $query->query);
|
||||
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function processUsers($users = array(), $globals = array()) {
|
||||
$late_add = array();
|
||||
$uids = array();
|
||||
$exclude = array();
|
||||
$newuser = 0;
|
||||
$deleteduser = 0;
|
||||
$n = 0;
|
||||
|
||||
LOGGER("running processUsers() ...");
|
||||
|
||||
/* build a list of DNs to exclude from the import */
|
||||
|
||||
while (list($k, $v) = each($globals)) {
|
||||
if(preg_match("/^reject_/", $k)) {
|
||||
$exclude[$v] = $v;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
foreach ($users as $_user) {
|
||||
if(strlen($_user['dn']) > DN_MAX_LEN) { LOGGER("ERR: too long entry: " . $_user['dn']); }
|
||||
|
||||
if(in_array($_user['dn'], $exclude) ) {
|
||||
LOGGER("excluding from import:" . $_user['dn']);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Does this DN exist in the user table ? */
|
||||
|
||||
$__user = $this->model_user_user->getUserByDN($_user['dn']);
|
||||
|
||||
if(isset($__user['uid'])) {
|
||||
|
||||
array_push($uids, $__user['uid']);
|
||||
|
||||
|
||||
/* if so, then verify the email addresses */
|
||||
|
||||
$changed = 0;
|
||||
$emails = $this->model_user_user->getEmailsByUid($__user['uid']);
|
||||
|
||||
/* first let's add the new email addresses */
|
||||
|
||||
$ldap_emails = explode("\n", $_user['emails']);
|
||||
$sql_emails = explode("\n", $emails);
|
||||
|
||||
foreach ($ldap_emails as $email) {
|
||||
if(!in_array($email, $sql_emails)) {
|
||||
$rc = $this->model_user_user->addEmail($__user['uid'], $email);
|
||||
$changed++;
|
||||
|
||||
/* in case of an error add it to the $late_add array() */
|
||||
|
||||
if($rc == 0) {
|
||||
$late_add[] = array(
|
||||
'uid' => $__user['uid'],
|
||||
'email' => $email
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* delete emails not present in the user's LDAP entry */
|
||||
|
||||
foreach ($sql_emails as $email) {
|
||||
if(!in_array($email, $ldap_emails)) {
|
||||
$rc = $this->model_user_user->removeEmail($__user['uid'], $email);
|
||||
$changed++;
|
||||
}
|
||||
}
|
||||
|
||||
LOGGER($_user['dn'] . ": exists, changed=$changed");
|
||||
|
||||
if($changed > 0) { $n++; }
|
||||
}
|
||||
else {
|
||||
|
||||
/* or add the new user */
|
||||
|
||||
$user = $this->createNewUserArray($_user['dn'], $_user['username'], $_user['realname'], $_user['emails'], $globals);
|
||||
array_push($uids, $user['uid']);
|
||||
|
||||
$rc = $this->model_user_user->addUser($user);
|
||||
if($rc == 1) { $newuser++; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* add the rest to the email table */
|
||||
|
||||
foreach ($late_add as $new) {
|
||||
$rc = $this->model_user_user->addEmail($new['uid'], $new['email']);
|
||||
if($rc == 1) { $newuser++; }
|
||||
}
|
||||
|
||||
|
||||
/* delete accounts not present in the LDAP directory */
|
||||
|
||||
if(count($uids) > 0) {
|
||||
$uidlist = implode("','", $uids);
|
||||
$query = $this->db->query("SELECT uid, username FROM " . TABLE_USER . " WHERE domain=? AND dn != '*' AND dn LIKE '%" . $globals['ldap_basedn'] . "' AND dn is NOT NULL AND uid NOT IN ('$uidlist')", array($globals['domain']) );
|
||||
|
||||
foreach ($query->rows as $deleted) {
|
||||
$deleteduser++;
|
||||
$this->model_user_user->deleteUser($deleted['uid']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* try to add new membership entries */
|
||||
|
||||
reset($users);
|
||||
|
||||
foreach ($users as $user) {
|
||||
if($user['members']) {
|
||||
|
||||
$group = $this->model_user_user->getUserByDN($user['dn']);
|
||||
|
||||
$members = explode("\n", $user['members']);
|
||||
if(count($members) > 0) {
|
||||
|
||||
if(isset($group['uid'])) {
|
||||
$query = $this->db->query("DELETE FROM " . TABLE_EMAIL_LIST . " WHERE gid=?", array($group['uid']) );
|
||||
}
|
||||
|
||||
foreach ($members as $member) {
|
||||
if(validemail($member)) {
|
||||
$__user = $this->model_user_user->getUserByEmail($member);
|
||||
} else {
|
||||
$__user = $this->model_user_user->getUserByDN($member);
|
||||
}
|
||||
|
||||
if(isset($group['uid']) && isset($__user['uid'])) {
|
||||
$query = $this->db->query("INSERT INTO " . TABLE_EMAIL_LIST . " (uid, gid) VALUES(?,?)", array((int)$__user['uid'], $group['uid']));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return array($newuser, $deleteduser);
|
||||
}
|
||||
|
||||
|
||||
private function createNewUserArray($dn = '', $username = '', $realname = '', $emails = '', $globals = array()) {
|
||||
$user = array();
|
||||
|
||||
$user['uid'] = $this->model_user_user->getNextUid();
|
||||
$user['gid'] = $globals['gid'];
|
||||
|
||||
$user['email'] = $emails;
|
||||
|
||||
if(USE_EMAIL_AS_USERNAME == 1) {
|
||||
$email = explode("\n", $emails);
|
||||
$user['username'] = $email[0];
|
||||
}
|
||||
else {
|
||||
$user['username'] = $username . $user['uid'];
|
||||
}
|
||||
|
||||
|
||||
$user['password'] = '*';
|
||||
|
||||
$user['realname'] = $realname;
|
||||
|
||||
if($realname == '') { $user['realname'] = $username; }
|
||||
|
||||
$user['domain'] = $globals['domain'];
|
||||
$user['dn'] = $dn;
|
||||
$user['policy_group'] = $globals['policy_group'];
|
||||
$user['isadmin'] = 0;
|
||||
$user['whitelist'] = '';
|
||||
$user['blacklist'] = '';
|
||||
|
||||
return $user;
|
||||
}
|
||||
|
||||
|
||||
public function trashPassword($users = array()) {
|
||||
foreach ($users as $user) {
|
||||
$query = $this->db->query("UPDATE " . TABLE_USER . " SET password='*' WHERE dn=?", array($user['dn']));
|
||||
$rc = $this->db->countAffected();
|
||||
LOGGER("setting default password for " . $user['dn'] . " (rc=$rc)");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function count_email_addresses() {
|
||||
$query = $this->db->query("SELECT COUNT(*) AS num FROM " . TABLE_EMAIL);
|
||||
|
||||
if(isset($query->row['num'])) { return $query->row['num']; }
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
45
webui/model/user/prefs.php
Normal file
45
webui/model/user/prefs.php
Normal file
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
class ModelUserPrefs extends Model {
|
||||
|
||||
public function get_user_preferences($username = '') {
|
||||
if($username == "") { return 0; }
|
||||
|
||||
$query = $this->db->query("SELECT * FROM " . TABLE_USER_SETTINGS . " WHERE username=?", array($username));
|
||||
|
||||
if(isset($query->row['pagelen'])) { $_SESSION['pagelen'] = $query->row['pagelen']; } else { $_SESSION['pagelen'] = PAGE_LEN; }
|
||||
if(isset($query->row['lang'])) { $_SESSION['lang'] = $query->row['lang']; } else { $_SESSION['lang'] = LANG; }
|
||||
if(isset($query->row['theme'])) { $_SESSION['theme'] = $query->row['theme']; } else { $_SESSION['theme'] = THEME; }
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
public function set_user_preferences($username = '', $prefs = array() ) {
|
||||
|
||||
if(!isset($prefs['pagelen']) || !is_numeric($prefs['pagelen']) || $prefs['pagelen'] < 10 || $prefs['pagelen'] > 100
|
||||
|| !isset($prefs['lang']) || strlen($prefs['lang']) != 2 || !file_exists(DIR_LANGUAGE . $prefs['lang'])
|
||||
|| !isset($prefs['theme']) || !preg_match("/^([a-zA-Z0-9\-\_]+)$/", $prefs['theme']) || !file_exists(DIR_THEME . $prefs['theme']) ) { return 1; }
|
||||
|
||||
$query = $this->db->query("SELECT COUNT(*) AS num FROM " . TABLE_USER_SETTINGS . " WHERE username=?", array($username));
|
||||
|
||||
if((int)@$query->row['num'] == 1) {
|
||||
$query = $this->db->query("UPDATE " . TABLE_USER_SETTINGS . " SET lang=?, pagelen=?, theme=? WHERE username=?", array($prefs['lang'], (int)@$prefs['pagelen'], $prefs['theme'], $username));
|
||||
}
|
||||
else {
|
||||
$query = $this->db->query("INSERT INTO " . TABLE_USER_SETTINGS . " (username, pagelen, lang, theme) VALUES(?,?,?,?)", array($username, (int)@$prefs['pagelen'], $prefs['lang'], $prefs['theme']));
|
||||
}
|
||||
|
||||
|
||||
$_SESSION['pagelen'] = $prefs['pagelen'];
|
||||
$_SESSION['lang'] = $prefs['lang'];
|
||||
$_SESSION['theme'] = $prefs['theme'];
|
||||
|
||||
LOGGER("set user preference", $username);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
421
webui/model/user/user.php
Normal file
421
webui/model/user/user.php
Normal file
@ -0,0 +1,421 @@
|
||||
<?php
|
||||
|
||||
class ModelUserUser extends Model {
|
||||
|
||||
|
||||
public function checkUID($uid) {
|
||||
if($uid == "") { return 0; }
|
||||
|
||||
if(!is_numeric($uid)) { return 0; }
|
||||
|
||||
if($uid < 1) { return 0; }
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
public function getUidByName($username = '') {
|
||||
if($username == ""){ return -1; }
|
||||
|
||||
$query = $this->db->query("SELECT uid FROM " . TABLE_USER . " WHERE username=?", array($username));
|
||||
|
||||
if(isset($query->row['uid'])){
|
||||
return $query->row['uid'];
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
public function getUsernameByUid($uid = 0) {
|
||||
|
||||
$query = $this->db->query("SELECT username FROM " . TABLE_USER . " WHERE uid=?", array((int)$uid));
|
||||
|
||||
if(isset($query->row['username'])){
|
||||
return $query->row['username'];
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
public function get_uid_by_email($email = '') {
|
||||
$query = $this->db->query("SELECT uid FROM " . TABLE_EMAIL . " WHERE email=?", array($email));
|
||||
|
||||
if(isset($query->row['uid'])){ return $query->row['uid']; }
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
public function get_username_by_email($email = '') {
|
||||
$query = $this->db->query("SELECT username FROM " . TABLE_USER . ", " . TABLE_EMAIL . " WHERE " . TABLE_USER . ".uid=" . TABLE_EMAIL . ".uid AND email=?", array($email));
|
||||
|
||||
if(isset($query->row['username'])){ return $query->row['username']; }
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
public function get_users_all_email_addresses($uid = 0) {
|
||||
$data = array();
|
||||
$uids = $uid;
|
||||
|
||||
if($uid > 0) {
|
||||
$query = $this->db->query("SELECT gid FROM " . TABLE_EMAIL_LIST . " WHERE uid=?", array((int)$uid));
|
||||
|
||||
if(isset($query->rows)) {
|
||||
foreach ($query->rows as $q) {
|
||||
if(is_numeric($q['gid']) && $q['gid'] > 0) {
|
||||
$uids .= "," . $q['gid'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$query = $this->db->query("SELECT email FROM " . TABLE_EMAIL . " WHERE uid IN ($uids)");
|
||||
foreach ($query->rows as $q) {
|
||||
array_push($data, $q['email']);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
public function get_additional_uids($uid = 0) {
|
||||
$data = array();
|
||||
|
||||
if($uid > 0) {
|
||||
$query = $this->db->query("SELECT gid FROM " . TABLE_EMAIL_LIST . " WHERE uid=?", array((int)$uid));
|
||||
|
||||
if(isset($query->rows)) {
|
||||
foreach ($query->rows as $q) {
|
||||
array_push($data, $q['gid']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
public function getEmailAddress($username = '') {
|
||||
|
||||
$query = $this->db->query("SELECT " . TABLE_EMAIL . ".email AS email FROM " . TABLE_EMAIL . "," . TABLE_USER . " WHERE " . TABLE_EMAIL . ".uid=" . TABLE_USER . ".uid AND " . TABLE_USER . ".username=? LIMIT 1", array($username));
|
||||
|
||||
if(isset($query->row['email'])){
|
||||
return $query->row['email'];
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
public function getEmails($username = '') {
|
||||
$emails = "";
|
||||
|
||||
$query = $this->db->query("SELECT " . TABLE_EMAIL . ".email AS email FROM " . TABLE_EMAIL . "," . TABLE_USER . " WHERE " . TABLE_EMAIL . ".uid=" . TABLE_USER . ".uid AND " . TABLE_USER . ".username=?", array($username));
|
||||
|
||||
foreach ($query->rows as $q) {
|
||||
$emails .= $q['email'] . "\n";
|
||||
}
|
||||
|
||||
return preg_replace("/\n$/", "", $emails);
|
||||
}
|
||||
|
||||
|
||||
public function getEmailsByUid($uid = 0) {
|
||||
$emails = "";
|
||||
|
||||
$query = $this->db->query("SELECT email FROM " . TABLE_EMAIL . " WHERE uid=?", array((int)$uid));
|
||||
foreach ($query->rows as $q) {
|
||||
$emails .= $q['email'] . "\n";
|
||||
}
|
||||
|
||||
return preg_replace("/\n$/", "", $emails);
|
||||
}
|
||||
|
||||
|
||||
public function getUserByDN($dn = '') {
|
||||
if($dn == '') { return array(); }
|
||||
|
||||
$query = $this->db->query("SELECT * FROM " . TABLE_USER . " WHERE dn=?", array($dn));
|
||||
|
||||
if($query->num_rows == 1) {
|
||||
return $query->row;
|
||||
}
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
|
||||
public function getUserByUid($uid = 0) {
|
||||
if(!is_numeric($uid) || (int)$uid < 0){
|
||||
return array();
|
||||
}
|
||||
|
||||
$query = $this->db->query("SELECT * FROM " . TABLE_USER . " WHERE uid=?", array((int)$uid));
|
||||
|
||||
return $query->row;
|
||||
}
|
||||
|
||||
|
||||
public function getUserByEmail($email = '') {
|
||||
if($email == '') {
|
||||
return array();
|
||||
}
|
||||
|
||||
$query = $this->db->query("SELECT * FROM " . TABLE_USER . "," . TABLE_EMAIL . " WHERE " . TABLE_USER . ".uid=" . TABLE_EMAIL . ".uid AND email=?", array($email));
|
||||
|
||||
return $query->row;
|
||||
}
|
||||
|
||||
|
||||
public function getUsernameByEmail($email = '') {
|
||||
$username = "";
|
||||
|
||||
if($email == '') { return $username; }
|
||||
|
||||
$query = $this->db->query("SELECT username FROM " . TABLE_USER . " WHERE uid IN (SELECT uid FROM " . TABLE_EMAIL . " WHERE email=?)", array($email));
|
||||
|
||||
if(isset($query->row['username'])) { $username = $query->row['username']; }
|
||||
|
||||
return $username;
|
||||
}
|
||||
|
||||
|
||||
public function getUsers($search = '', $page = 0, $page_len = 0, $sort = 'username', $order = 0) {
|
||||
$where_cond = " WHERE " . TABLE_USER . ".uid=" . TABLE_EMAIL . ".uid ";
|
||||
$_order = "";
|
||||
$users = array();
|
||||
$my_domain = array();
|
||||
$limit = "";
|
||||
|
||||
$from = (int)$page * (int)$page_len;
|
||||
|
||||
$search = preg_replace("/\s{1,}/", "", $search);
|
||||
|
||||
if($search){
|
||||
$where_cond .= " AND email like '%" . $this->db->escape($search) . "%' ";
|
||||
}
|
||||
|
||||
/* sort order */
|
||||
|
||||
if($order == 0) { $order = "ASC"; }
|
||||
else { $order = "DESC"; }
|
||||
|
||||
$_order = "ORDER BY $sort $order";
|
||||
|
||||
if($page_len > 0) { $limit = " LIMIT " . (int)$from . ", " . (int)$page_len; }
|
||||
|
||||
$query = $this->db->query("SELECT " . TABLE_USER . ".uid, isadmin, username, realname, domain, email FROM " . TABLE_USER . "," . TABLE_EMAIL . " $where_cond group by " . TABLE_USER . ".uid $_order $limit");
|
||||
|
||||
foreach ($query->rows as $q) {
|
||||
|
||||
if(Registry::get('admin_user') == 1 || (isset($q['domain']) && $q['domain'] == $my_domain[0]) ) {
|
||||
$users[] = array(
|
||||
'uid' => $q['uid'],
|
||||
'username' => $q['username'],
|
||||
'realname' => $q['realname'],
|
||||
'domain' => isset($q['domain']) ? $q['domain'] : "",
|
||||
'email' => $q['email'],
|
||||
'isadmin' => $q['isadmin']
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $users;
|
||||
}
|
||||
|
||||
|
||||
public function howManyUsers($search = '') {
|
||||
$where_cond = "";
|
||||
|
||||
if($search){
|
||||
$where_cond .= " WHERE email like '%" . $this->db->escape($search) . "%' ";
|
||||
}
|
||||
|
||||
$query = $this->db->query("SELECT COUNT(*) AS num, uid FROM " . TABLE_EMAIL . " $where_cond group by uid");
|
||||
|
||||
return $query->num_rows;
|
||||
}
|
||||
|
||||
|
||||
public function get_domains() {
|
||||
$data = array();
|
||||
|
||||
$query = $this->db->query("SELECT DISTINCT mapped AS domain FROM " . TABLE_DOMAIN);
|
||||
|
||||
foreach ($query->rows as $q) {
|
||||
array_push($data, $q['domain']);
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
public function get_email_domains() {
|
||||
$data = array();
|
||||
|
||||
$query = $this->db->query("SELECT domain FROM " . TABLE_DOMAIN);
|
||||
|
||||
foreach ($query->rows as $q) {
|
||||
array_push($data, $q['domain']);
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
public function getNextUid() {
|
||||
|
||||
$query = $this->db->query("SELECT MAX(uid) AS last_id FROM " . TABLE_USER);
|
||||
|
||||
if(isset($query->row['last_id']) && $query->row['last_id'] > 0) {
|
||||
return (int)$query->row['last_id'] + 1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
public function addUser($user) {
|
||||
LOGGER("add user: " . $user['username'] . ", uid=" . (int)$user['uid']);
|
||||
|
||||
if(!isset($user['domain']) || $user['domain'] == "") { return -1; }
|
||||
if(!isset($user['username']) || $user['username'] == "" || $this->getUidByName($user['username']) > 0) { return -1; }
|
||||
|
||||
$emails = explode("\n", $user['email']);
|
||||
foreach ($emails as $email) {
|
||||
$email = rtrim($email);
|
||||
|
||||
$query = $this->db->query("SELECT COUNT(*) AS count FROM " . TABLE_EMAIL . " WHERE email=?", array($email));
|
||||
|
||||
/* remove from memcached */
|
||||
|
||||
if(MEMCACHED_ENABLED) {
|
||||
$memcache = Registry::get('memcache');
|
||||
$memcache->delete("_c:" . $email);
|
||||
}
|
||||
|
||||
if($query->row['count'] > 0) {
|
||||
return $email;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$query = $this->db->query("SELECT COUNT(*) AS count FROM " . TABLE_USER . " WHERE username=?", array($user['username']));
|
||||
if($query->row['count'] > 0) {
|
||||
return $user['username'];
|
||||
}
|
||||
|
||||
$encrypted_password = crypt($user['password']);
|
||||
|
||||
$query = $this->db->query("INSERT INTO " . TABLE_USER . " (uid, username, realname, password, domain, dn, isadmin) VALUES(?,?,?,?,?,?,?)", array((int)$user['uid'], $user['username'], $user['realname'], $encrypted_password, $user['domain'], @$user['dn'], (int)$user['isadmin']));
|
||||
|
||||
if($query->error == 1 || $this->db->countAffected() == 0){ return $user['username']; }
|
||||
|
||||
foreach ($emails as $email) {
|
||||
$email = rtrim($email);
|
||||
|
||||
$ret = $this->addEmail((int)$user['uid'], $email);
|
||||
if($ret == 0) { return -2; }
|
||||
}
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
public function addEmail($uid = 0, $email = '') {
|
||||
if($uid < 1 || $email == ""){ return 0; }
|
||||
|
||||
$query = $this->db->query("INSERT INTO " . TABLE_EMAIL . " (uid, email) VALUES(?,?)", array((int)$uid, $email));
|
||||
|
||||
$rc = $this->db->countAffected();
|
||||
|
||||
LOGGER("add email: $email, uid=$uid (rc=$rc)");
|
||||
|
||||
return $rc;
|
||||
}
|
||||
|
||||
|
||||
public function removeEmail($uid = 0, $email = '') {
|
||||
if((int)$uid < 1 || $email == ""){ return 0; }
|
||||
|
||||
$query = $this->db->query("DELETE FROM " . TABLE_EMAIL . " WHERE uid=? AND email=?", array((int)$uid, $email));
|
||||
|
||||
$rc = $this->db->countAffected();
|
||||
|
||||
LOGGER("remove email: $email, uid=$uid (rc=$rc)");
|
||||
|
||||
return $rc;
|
||||
}
|
||||
|
||||
|
||||
public function updateUser($user) {
|
||||
LOGGER("update user: " . $user['username'] . ", uid=" . (int)$user['uid']);
|
||||
|
||||
$emails = explode("\n", $user['email']);
|
||||
foreach ($emails as $email) {
|
||||
$email = rtrim($email);
|
||||
|
||||
$query = $this->db->query("SELECT COUNT(*) AS count FROM " . TABLE_EMAIL . " WHERE uid!=? AND email=?", array((int)$user['uid'], $email));
|
||||
|
||||
if($query->row['count'] > 0) {
|
||||
return $email;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* update password field if we have to */
|
||||
|
||||
if(strlen($user['password']) >= MIN_PASSWORD_LENGTH) {
|
||||
$query = $this->db->query("UPDATE " . TABLE_USER . " SET password=? WHERE uid=?", array(crypt($user['password']), (int)$user['uid']));
|
||||
if($this->db->countAffected() != 1) { return 0; }
|
||||
}
|
||||
|
||||
$query = $this->db->query("UPDATE " . TABLE_USER . " SET username=?, realname=?, domain=?, dn=?, isadmin=? WHERE uid=?", array($user['username'], $user['realname'], $user['domain'], @$user['dn'], $user['isadmin'], (int)$user['uid']));
|
||||
|
||||
|
||||
/* first, remove all his email addresses */
|
||||
|
||||
$query = $this->db->query("DELETE FROM " . TABLE_EMAIL . " WHERE uid=?", array((int)$user['uid']));
|
||||
|
||||
/* then add all the emails we have from the CGI post input */
|
||||
|
||||
foreach ($emails as $email) {
|
||||
$email = rtrim($email);
|
||||
$query = $this->db->query("INSERT INTO " . TABLE_EMAIL . " (uid, email) VALUES(?,?)", array((int)$user['uid'], $email));
|
||||
|
||||
/* remove from memcached */
|
||||
|
||||
if(MEMCACHED_ENABLED) {
|
||||
$memcache = Registry::get('memcache');
|
||||
$memcache->delete("_c:" . $email);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
public function deleteUser($uid) {
|
||||
if(!$this->checkUID($uid)){ return 0; }
|
||||
|
||||
$query = $this->db->query("DELETE FROM " . TABLE_EMAIL . " WHERE uid=?", array((int)$uid));
|
||||
$query = $this->db->query("DELETE FROM " . TABLE_USER . " WHERE uid=?", array((int)$uid));
|
||||
|
||||
LOGGER("remove user: uid=$uid");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
36
webui/sign.php
Normal file
36
webui/sign.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
require_once("config.php");
|
||||
|
||||
require(DIR_SYSTEM . "/startup.php");
|
||||
|
||||
$now = time();
|
||||
$data = "";
|
||||
|
||||
$ts1 = $now - ($now % 3600);
|
||||
$ts2 = $ts1 + 3600;
|
||||
|
||||
|
||||
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PREFIX);
|
||||
|
||||
$query = $db->query("select vcode FROM " . TABLE_META . " WHERE sent >= ? AND sent < ? ORDER BY id ASC", array($ts1, $ts2));
|
||||
|
||||
|
||||
print $query->query . " $ts1, $ts2\n\n";
|
||||
|
||||
|
||||
|
||||
foreach ($query->rows as $q) {
|
||||
$data .= $q['vcode'];
|
||||
}
|
||||
|
||||
print $data . "\n";
|
||||
|
||||
$digest = openssl_digest($data, "SHA256");
|
||||
|
||||
print "$digest\n";
|
||||
|
||||
|
||||
print fetch_url("http://ecrive.net/api/plain?mode=sign&data=$digest");
|
||||
|
||||
//print fetch_url("http://ecrive.net/api/plain?mode=check&data=$digest&signature=$s");
|
119
webui/system/controller.php
Normal file
119
webui/system/controller.php
Normal file
@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
|
||||
class Controller {
|
||||
protected $id;
|
||||
protected $data = array();
|
||||
protected $children = array();
|
||||
protected $layout;
|
||||
protected $output;
|
||||
protected $template;
|
||||
|
||||
|
||||
public function __construct() {
|
||||
$language = Registry::get('language');
|
||||
$this->data = array_merge($this->data, $language->data);
|
||||
}
|
||||
|
||||
|
||||
public function __get($key) {
|
||||
return Registry::get($key);
|
||||
}
|
||||
|
||||
|
||||
public function __set($key, $value) {
|
||||
Registry::set($key, $value);
|
||||
}
|
||||
|
||||
|
||||
public function args($args = array()){
|
||||
while(list($key, $value) = each($args)) $this->data[$key] = $value;
|
||||
}
|
||||
|
||||
|
||||
protected function render(){
|
||||
|
||||
foreach ($this->children as $child) {
|
||||
$file = DIR_APPLICATION . $child . ".php";
|
||||
$class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $child);
|
||||
|
||||
if(file_exists($file)){
|
||||
require_once($file);
|
||||
|
||||
$controller = new $class();
|
||||
|
||||
$controller->index();
|
||||
|
||||
$this->data[$controller->id] = $controller->output;
|
||||
}
|
||||
else {
|
||||
exit("Error: Could not load controller ($file)" . $child . '!');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$this->output = $this->fetch($this->template);
|
||||
|
||||
|
||||
if($this->layout){
|
||||
|
||||
$file = DIR_APPLICATION . $this->layout . '.php';
|
||||
$class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $this->layout);
|
||||
|
||||
if(file_exists($file)){
|
||||
require_once($file);
|
||||
|
||||
$controller = new $class();
|
||||
|
||||
$controller->data[$this->id] = $this->output;
|
||||
|
||||
$controller->index();
|
||||
|
||||
$this->output = $controller->output;
|
||||
|
||||
}
|
||||
else {
|
||||
exit("Error: Could not load layout ($file) " . $this->layout . '!');
|
||||
}
|
||||
|
||||
print $this->output;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
protected function fetch(){
|
||||
|
||||
if(isset($_SESSION['theme']) && preg_match("/^([a-zA-Z0-9\-\_]+)$/", $_SESSION['theme']) && file_exists(DIR_THEME . $_SESSION['theme']) ) {
|
||||
$file = DIR_THEME . $_SESSION['theme'] . '/templates/' . $this->template;
|
||||
} else {
|
||||
$file = DIR_THEME . THEME . '/templates/' . $this->template;
|
||||
}
|
||||
|
||||
|
||||
if(file_exists($file)){
|
||||
|
||||
extract($this->data);
|
||||
|
||||
ob_start();
|
||||
|
||||
include($file);
|
||||
|
||||
$content = ob_get_contents();
|
||||
|
||||
ob_end_clean();
|
||||
|
||||
return $content;
|
||||
}
|
||||
else {
|
||||
exit('Error: Could not load template ' . $file . '!');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
101
webui/system/database/ldap.php
Normal file
101
webui/system/database/ldap.php
Normal file
@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
|
||||
class LDAP {
|
||||
|
||||
private $link;
|
||||
private $bind;
|
||||
|
||||
public function __construct($ldaphost, $binddn, $bindpw) {
|
||||
|
||||
$this->link = ldap_connect($ldaphost) or exit('Error: ldap_connect()');
|
||||
ldap_set_option($this->link, LDAP_OPT_PROTOCOL_VERSION, 3);
|
||||
|
||||
if(@ldap_bind($this->link, $binddn, $bindpw)) {
|
||||
$this->bind = 1;
|
||||
}
|
||||
else {
|
||||
$this->bind = 0;
|
||||
}
|
||||
|
||||
return $this->link;
|
||||
}
|
||||
|
||||
|
||||
public function is_bind_ok() {
|
||||
return $this->bind;
|
||||
}
|
||||
|
||||
|
||||
public function query($basedn, $filter, $justthese) {
|
||||
$i = 0;
|
||||
$data = array();
|
||||
|
||||
$sr = ldap_search($this->link, $basedn, $filter, $justthese);
|
||||
|
||||
$results = ldap_get_entries($this->link, $sr);
|
||||
|
||||
for($i=0; $i < $results['count']; $i++) {
|
||||
for($k=0; $k < $results[$i]['count']; $k++) {
|
||||
$attr = $results[$i][$k];
|
||||
|
||||
if($results[$i][$attr]['count'] == 1) {
|
||||
$data[$i][$attr] = isset($results[$i][$attr][0]) ? $results[$i][$attr][0] : "";
|
||||
}
|
||||
else {
|
||||
$data[$i][$attr] = isset($results[$i][$attr]) ? $results[$i][$attr] : "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$data[$i]['dn'] = $results[$i]['dn'];
|
||||
}
|
||||
|
||||
|
||||
$query = new stdClass();
|
||||
|
||||
$query->row = isset($data[0]) ? $data[0] : array();
|
||||
$query->dn = isset($results[0]['dn']) ? $results[0]['dn'] : "";
|
||||
$query->rows = $data;
|
||||
$query->num_rows = $results['count'];
|
||||
|
||||
unset($data);
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
|
||||
public function add($dn, $entry) {
|
||||
return ldap_add($this->link, $dn, $entry);
|
||||
}
|
||||
|
||||
|
||||
public function modify($dn, $entry) {
|
||||
return ldap_modify($this->link, $dn, $entry);
|
||||
}
|
||||
|
||||
|
||||
public function rename($dn, $newrdn, $newparent) {
|
||||
return ldap_rename($this->link, $dn, $newrdn, $newparent, TRUE);
|
||||
}
|
||||
|
||||
|
||||
public function replace($dn, $entry) {
|
||||
return ldap_mod_replace($this->link, $dn, $entry);
|
||||
}
|
||||
|
||||
|
||||
public function delete($dn) {
|
||||
return ldap_delete($this->link, $dn);
|
||||
}
|
||||
|
||||
|
||||
public function __destruct() {
|
||||
ldap_unbind($this->link);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
88
webui/system/database/mysql.php
Normal file
88
webui/system/database/mysql.php
Normal file
@ -0,0 +1,88 @@
|
||||
<?php
|
||||
|
||||
|
||||
class MySQL {
|
||||
private $link;
|
||||
private $affected;
|
||||
|
||||
public function __construct($hostname, $username, $password, $database, $prefix = NULL) {
|
||||
|
||||
try {
|
||||
$this->link = new PDO("mysql:host=$hostname;dbname=$database", $username, $password,
|
||||
array(
|
||||
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
|
||||
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8"
|
||||
)
|
||||
);
|
||||
|
||||
}
|
||||
catch(PDOException $exception) {
|
||||
exit('Error: ' . $exception->getMessage() . " on database: $database<br />");
|
||||
}
|
||||
|
||||
$this->affected = 0;
|
||||
}
|
||||
|
||||
|
||||
public function select_db($database) { }
|
||||
|
||||
|
||||
public function query($sql, $arr = array()) {
|
||||
$query = new stdClass();
|
||||
|
||||
$query->error = 1;
|
||||
$query->errmsg = "Error";
|
||||
$query->query = $sql;
|
||||
|
||||
$time_start = microtime(true);
|
||||
|
||||
$i = 0;
|
||||
$data = array();
|
||||
|
||||
$s = $this->link->prepare($sql);
|
||||
if(!$s) { return $query; }
|
||||
|
||||
$s->execute($arr);
|
||||
|
||||
$this->affected = $s->rowCount();
|
||||
|
||||
$R = $s->fetchAll();
|
||||
|
||||
while(list ($k, $v) = each($R)){
|
||||
$data[$i] = $v;
|
||||
$i++;
|
||||
}
|
||||
|
||||
$query->row = isset($data[0]) ? $data[0] : array();
|
||||
$query->rows = $data;
|
||||
$query->num_rows = $i;
|
||||
|
||||
$query->error = 0;
|
||||
$query->errmsg = "";
|
||||
|
||||
unset($data);
|
||||
|
||||
$time_end = microtime(true);
|
||||
|
||||
$query->exec_time = $time_end - $time_start;
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
|
||||
public function countAffected() {
|
||||
return $this->affected;
|
||||
}
|
||||
|
||||
|
||||
public function getLastId() {
|
||||
return $this->link->lastInsertId();
|
||||
}
|
||||
|
||||
|
||||
public function __destruct() { }
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
92
webui/system/database/sphinx.php
Normal file
92
webui/system/database/sphinx.php
Normal file
@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
class Sphinx {
|
||||
private $link;
|
||||
private $prefix;
|
||||
|
||||
|
||||
public function __construct($hostname, $username, $password, $database, $prefix = NULL) {
|
||||
|
||||
if (!$this->link = mysql_connect($hostname, $username, $password)) {
|
||||
exit('Error: Could not make a database connection using ' . $username . '@' . $hostname);
|
||||
}
|
||||
|
||||
$this->prefix = $prefix;
|
||||
|
||||
mysql_query("SET NAMES 'utf8'", $this->link);
|
||||
mysql_query("SET CHARACTER SET utf8", $this->link);
|
||||
}
|
||||
|
||||
|
||||
public function query($sql) {
|
||||
$query = new stdClass();
|
||||
|
||||
$query->query = $sql;
|
||||
$query->error = 0;
|
||||
$query->errmsg = "";
|
||||
|
||||
$time_start = microtime(true);
|
||||
|
||||
$resource = mysql_query(str_replace('#__', $this->prefix, $sql), $this->link);
|
||||
|
||||
if($resource){
|
||||
if(is_resource($resource)){
|
||||
$i = 0;
|
||||
|
||||
$data = array();
|
||||
|
||||
while ($result = mysql_fetch_assoc($resource)) {
|
||||
$data[$i] = $result;
|
||||
|
||||
$i++;
|
||||
}
|
||||
|
||||
mysql_free_result($resource);
|
||||
|
||||
$query->row = isset($data[0]) ? $data[0] : array();
|
||||
$query->rows = $data;
|
||||
$query->num_rows = $i;
|
||||
|
||||
unset($data);
|
||||
|
||||
$time_end = microtime(true);
|
||||
|
||||
$query->exec_time = $time_end - $time_start;
|
||||
|
||||
return $query;
|
||||
}
|
||||
else {
|
||||
return $query;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$_SESSION['error'] = 'Error: ' . mysql_error() . '<br />Error No: ' . mysql_errno() . '<br />' . $sql;
|
||||
|
||||
$query->errmsg = 'Error: ' . mysql_error() . '<br />Error No: ' . mysql_errno() . '<br />' . $sql;
|
||||
$query->error = 1;
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function countAffected() {
|
||||
return mysql_affected_rows($this->link);
|
||||
}
|
||||
|
||||
|
||||
public function getLastId() {
|
||||
return mysql_insert_id($this->link);
|
||||
}
|
||||
|
||||
|
||||
public function __destruct() {
|
||||
mysql_close($this->link);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
93
webui/system/database/sqlite.php
Normal file
93
webui/system/database/sqlite.php
Normal file
@ -0,0 +1,93 @@
|
||||
<?php
|
||||
|
||||
|
||||
class SQLite {
|
||||
private $link;
|
||||
private $affected;
|
||||
|
||||
public function __construct($hostname, $username, $password, $database, $prefix = NULL) {
|
||||
$fixperm = 0;
|
||||
|
||||
if(!file_exists($database)) { $fixperm = 1; }
|
||||
|
||||
try {
|
||||
$this->link = new PDO("sqlite:$database", 'OPEN_CREATE');
|
||||
}
|
||||
catch(PDOException $exception) {
|
||||
exit('Error: ' . $exception->getMessage() . " on $database<br />");
|
||||
}
|
||||
|
||||
if($fixperm == 1) { chmod($database, 0660); }
|
||||
|
||||
$this->affected = 0;
|
||||
}
|
||||
|
||||
|
||||
public function select_db($database) { }
|
||||
|
||||
|
||||
public function query($sql) {
|
||||
$query = new stdClass();
|
||||
|
||||
$query->error = 1;
|
||||
$query->errmsg = "Error";
|
||||
$query->query = $sql;
|
||||
|
||||
$time_start = microtime(true);
|
||||
|
||||
$i = 0;
|
||||
$data = array();
|
||||
|
||||
$s = $this->link->prepare($sql);
|
||||
if(!$s) { return $query; }
|
||||
|
||||
$s->execute();
|
||||
|
||||
$this->affected = $s->rowCount();
|
||||
|
||||
$R = $s->fetchAll();
|
||||
|
||||
while(list ($k, $v) = each($R)){
|
||||
$data[$i] = $v;
|
||||
$i++;
|
||||
}
|
||||
|
||||
$query->row = isset($data[0]) ? $data[0] : array();
|
||||
$query->rows = $data;
|
||||
$query->num_rows = $i;
|
||||
|
||||
$query->error = 0;
|
||||
$query->errmsg = "";
|
||||
|
||||
unset($data);
|
||||
|
||||
$time_end = microtime(true);
|
||||
|
||||
$query->exec_time = $time_end - $time_start;
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
|
||||
public function escape($value) {
|
||||
//return $this->link->quote($value);
|
||||
return $value;
|
||||
}
|
||||
|
||||
|
||||
public function countAffected() {
|
||||
return $this->affected;
|
||||
}
|
||||
|
||||
|
||||
public function getLastId() {
|
||||
return $this->link->lastInsertId();
|
||||
}
|
||||
|
||||
|
||||
public function __destruct() { }
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
38
webui/system/db.php
Normal file
38
webui/system/db.php
Normal file
@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
class DB {
|
||||
private $driver;
|
||||
private $prefix;
|
||||
|
||||
public function __construct($driver, $hostname, $username, $password, $database, $prefix = NULL) {
|
||||
if (!@require_once(DIR_DATABASE . $driver . '.php')) {
|
||||
exit('Error: Could not load database file ' . $driver . '!');
|
||||
}
|
||||
|
||||
$this->driver = new $driver($hostname, $username, $password, $database, $prefix);
|
||||
$this->database = $database;
|
||||
}
|
||||
|
||||
|
||||
public function select_db($db) {
|
||||
$this->driver->select_db($db);
|
||||
}
|
||||
|
||||
|
||||
public function query($sql, $arr = array()) {
|
||||
return $this->driver->query($sql, $arr);
|
||||
}
|
||||
|
||||
|
||||
public function countAffected() {
|
||||
return $this->driver->countAffected();
|
||||
}
|
||||
|
||||
|
||||
public function getLastId() {
|
||||
return $this->driver->getLastId();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
12
webui/system/document.php
Normal file
12
webui/system/document.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
class Document {
|
||||
public $title;
|
||||
public $description;
|
||||
public $base;
|
||||
public $charset = 'utf-8';
|
||||
public $language = 'en-gb';
|
||||
}
|
||||
|
||||
|
||||
?>
|
59
webui/system/front.php
Normal file
59
webui/system/front.php
Normal file
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
class Front {
|
||||
protected $error;
|
||||
|
||||
private function sanitize_path($path){
|
||||
return str_replace('../', '', $path);
|
||||
}
|
||||
|
||||
|
||||
public function dispatch($action, $error){
|
||||
$this->error = $error;
|
||||
|
||||
$action = $this->execute($action);
|
||||
|
||||
if($action) $this->execute($error);
|
||||
}
|
||||
|
||||
|
||||
private function execute($action) {
|
||||
$file = DIR_APPLICATION . $this->sanitize_path($action->getClass()) . ".php";
|
||||
$class = 'Controller' . preg_replace("/[^a-zA-Z0-9]/", "", $action->getClass());
|
||||
|
||||
$method = $action->getMethod();
|
||||
$args = $action->getArgs();
|
||||
|
||||
|
||||
$action = NULL;
|
||||
|
||||
if(file_exists($file)){
|
||||
require_once($file);
|
||||
|
||||
$controller = new $class();
|
||||
|
||||
if(is_callable(array($controller, $method))){
|
||||
$action = call_user_func_array(array($controller, $method), $args);
|
||||
}
|
||||
else {
|
||||
$action = $this->error;
|
||||
|
||||
$this->error = NULL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
|
||||
$action = $this->error;
|
||||
|
||||
$this->error = NULL;
|
||||
}
|
||||
|
||||
|
||||
return $action;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
7
webui/system/helper/fpdf16/font/courier.php
Executable file
7
webui/system/helper/fpdf16/font/courier.php
Executable file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
for($i=0;$i<=255;$i++)
|
||||
$fpdf_charwidths['courier'][chr($i)]=600;
|
||||
$fpdf_charwidths['courierB']=$fpdf_charwidths['courier'];
|
||||
$fpdf_charwidths['courierI']=$fpdf_charwidths['courier'];
|
||||
$fpdf_charwidths['courierBI']=$fpdf_charwidths['courier'];
|
||||
?>
|
4
webui/system/helper/fpdf16/font/desktop.ini
Executable file
4
webui/system/helper/fpdf16/font/desktop.ini
Executable file
@ -0,0 +1,4 @@
|
||||
[ViewState]
|
||||
Mode=
|
||||
Vid=
|
||||
FolderType=NotSpecified
|
15
webui/system/helper/fpdf16/font/helvetica.php
Executable file
15
webui/system/helper/fpdf16/font/helvetica.php
Executable file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['helvetica']=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);
|
||||
?>
|
15
webui/system/helper/fpdf16/font/helveticab.php
Executable file
15
webui/system/helper/fpdf16/font/helveticab.php
Executable file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['helveticaB']=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);
|
||||
?>
|
15
webui/system/helper/fpdf16/font/helveticabi.php
Executable file
15
webui/system/helper/fpdf16/font/helveticabi.php
Executable file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['helveticaBI']=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);
|
||||
?>
|
15
webui/system/helper/fpdf16/font/helveticai.php
Executable file
15
webui/system/helper/fpdf16/font/helveticai.php
Executable file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['helveticaI']=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);
|
||||
?>
|
251
webui/system/helper/fpdf16/font/makefont/cp1250.map
Executable file
251
webui/system/helper/fpdf16/font/makefont/cp1250.map
Executable file
@ -0,0 +1,251 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!89 U+2030 perthousand
|
||||
!8A U+0160 Scaron
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+015A Sacute
|
||||
!8D U+0164 Tcaron
|
||||
!8E U+017D Zcaron
|
||||
!8F U+0179 Zacute
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!99 U+2122 trademark
|
||||
!9A U+0161 scaron
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+015B sacute
|
||||
!9D U+0165 tcaron
|
||||
!9E U+017E zcaron
|
||||
!9F U+017A zacute
|
||||
!A0 U+00A0 space
|
||||
!A1 U+02C7 caron
|
||||
!A2 U+02D8 breve
|
||||
!A3 U+0141 Lslash
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+0104 Aogonek
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+015E Scedilla
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+017B Zdotaccent
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+02DB ogonek
|
||||
!B3 U+0142 lslash
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+0105 aogonek
|
||||
!BA U+015F scedilla
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+013D Lcaron
|
||||
!BD U+02DD hungarumlaut
|
||||
!BE U+013E lcaron
|
||||
!BF U+017C zdotaccent
|
||||
!C0 U+0154 Racute
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+0102 Abreve
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+0139 Lacute
|
||||
!C6 U+0106 Cacute
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+010C Ccaron
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+0118 Eogonek
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+011A Ecaron
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+010E Dcaron
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+0143 Nacute
|
||||
!D2 U+0147 Ncaron
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+0150 Ohungarumlaut
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+0158 Rcaron
|
||||
!D9 U+016E Uring
|
||||
!DA U+00DA Uacute
|
||||
!DB U+0170 Uhungarumlaut
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+0162 Tcommaaccent
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+0155 racute
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+0103 abreve
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+013A lacute
|
||||
!E6 U+0107 cacute
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+010D ccaron
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+0119 eogonek
|
||||
!EB U+00EB edieresis
|
||||
!EC U+011B ecaron
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+010F dcaron
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+0144 nacute
|
||||
!F2 U+0148 ncaron
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+0151 ohungarumlaut
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+0159 rcaron
|
||||
!F9 U+016F uring
|
||||
!FA U+00FA uacute
|
||||
!FB U+0171 uhungarumlaut
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+0163 tcommaaccent
|
||||
!FF U+02D9 dotaccent
|
255
webui/system/helper/fpdf16/font/makefont/cp1251.map
Executable file
255
webui/system/helper/fpdf16/font/makefont/cp1251.map
Executable file
@ -0,0 +1,255 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0402 afii10051
|
||||
!81 U+0403 afii10052
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0453 afii10100
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+20AC Euro
|
||||
!89 U+2030 perthousand
|
||||
!8A U+0409 afii10058
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+040A afii10059
|
||||
!8D U+040C afii10061
|
||||
!8E U+040B afii10060
|
||||
!8F U+040F afii10145
|
||||
!90 U+0452 afii10099
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!99 U+2122 trademark
|
||||
!9A U+0459 afii10106
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+045A afii10107
|
||||
!9D U+045C afii10109
|
||||
!9E U+045B afii10108
|
||||
!9F U+045F afii10193
|
||||
!A0 U+00A0 space
|
||||
!A1 U+040E afii10062
|
||||
!A2 U+045E afii10110
|
||||
!A3 U+0408 afii10057
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+0490 afii10050
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+0401 afii10023
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+0404 afii10053
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+0407 afii10056
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+0406 afii10055
|
||||
!B3 U+0456 afii10103
|
||||
!B4 U+0491 afii10098
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+0451 afii10071
|
||||
!B9 U+2116 afii61352
|
||||
!BA U+0454 afii10101
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+0458 afii10105
|
||||
!BD U+0405 afii10054
|
||||
!BE U+0455 afii10102
|
||||
!BF U+0457 afii10104
|
||||
!C0 U+0410 afii10017
|
||||
!C1 U+0411 afii10018
|
||||
!C2 U+0412 afii10019
|
||||
!C3 U+0413 afii10020
|
||||
!C4 U+0414 afii10021
|
||||
!C5 U+0415 afii10022
|
||||
!C6 U+0416 afii10024
|
||||
!C7 U+0417 afii10025
|
||||
!C8 U+0418 afii10026
|
||||
!C9 U+0419 afii10027
|
||||
!CA U+041A afii10028
|
||||
!CB U+041B afii10029
|
||||
!CC U+041C afii10030
|
||||
!CD U+041D afii10031
|
||||
!CE U+041E afii10032
|
||||
!CF U+041F afii10033
|
||||
!D0 U+0420 afii10034
|
||||
!D1 U+0421 afii10035
|
||||
!D2 U+0422 afii10036
|
||||
!D3 U+0423 afii10037
|
||||
!D4 U+0424 afii10038
|
||||
!D5 U+0425 afii10039
|
||||
!D6 U+0426 afii10040
|
||||
!D7 U+0427 afii10041
|
||||
!D8 U+0428 afii10042
|
||||
!D9 U+0429 afii10043
|
||||
!DA U+042A afii10044
|
||||
!DB U+042B afii10045
|
||||
!DC U+042C afii10046
|
||||
!DD U+042D afii10047
|
||||
!DE U+042E afii10048
|
||||
!DF U+042F afii10049
|
||||
!E0 U+0430 afii10065
|
||||
!E1 U+0431 afii10066
|
||||
!E2 U+0432 afii10067
|
||||
!E3 U+0433 afii10068
|
||||
!E4 U+0434 afii10069
|
||||
!E5 U+0435 afii10070
|
||||
!E6 U+0436 afii10072
|
||||
!E7 U+0437 afii10073
|
||||
!E8 U+0438 afii10074
|
||||
!E9 U+0439 afii10075
|
||||
!EA U+043A afii10076
|
||||
!EB U+043B afii10077
|
||||
!EC U+043C afii10078
|
||||
!ED U+043D afii10079
|
||||
!EE U+043E afii10080
|
||||
!EF U+043F afii10081
|
||||
!F0 U+0440 afii10082
|
||||
!F1 U+0441 afii10083
|
||||
!F2 U+0442 afii10084
|
||||
!F3 U+0443 afii10085
|
||||
!F4 U+0444 afii10086
|
||||
!F5 U+0445 afii10087
|
||||
!F6 U+0446 afii10088
|
||||
!F7 U+0447 afii10089
|
||||
!F8 U+0448 afii10090
|
||||
!F9 U+0449 afii10091
|
||||
!FA U+044A afii10092
|
||||
!FB U+044B afii10093
|
||||
!FC U+044C afii10094
|
||||
!FD U+044D afii10095
|
||||
!FE U+044E afii10096
|
||||
!FF U+044F afii10097
|
251
webui/system/helper/fpdf16/font/makefont/cp1252.map
Executable file
251
webui/system/helper/fpdf16/font/makefont/cp1252.map
Executable file
@ -0,0 +1,251 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+02C6 circumflex
|
||||
!89 U+2030 perthousand
|
||||
!8A U+0160 Scaron
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+0152 OE
|
||||
!8E U+017D Zcaron
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!98 U+02DC tilde
|
||||
!99 U+2122 trademark
|
||||
!9A U+0161 scaron
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+0153 oe
|
||||
!9E U+017E zcaron
|
||||
!9F U+0178 Ydieresis
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+00D0 Eth
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+00DE Thorn
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+00F0 eth
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+00FE thorn
|
||||
!FF U+00FF ydieresis
|
239
webui/system/helper/fpdf16/font/makefont/cp1253.map
Executable file
239
webui/system/helper/fpdf16/font/makefont/cp1253.map
Executable file
@ -0,0 +1,239 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!89 U+2030 perthousand
|
||||
!8B U+2039 guilsinglleft
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!99 U+2122 trademark
|
||||
!9B U+203A guilsinglright
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0385 dieresistonos
|
||||
!A2 U+0386 Alphatonos
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+2015 afii00208
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+0384 tonos
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+0388 Epsilontonos
|
||||
!B9 U+0389 Etatonos
|
||||
!BA U+038A Iotatonos
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+038C Omicrontonos
|
||||
!BD U+00BD onehalf
|
||||
!BE U+038E Upsilontonos
|
||||
!BF U+038F Omegatonos
|
||||
!C0 U+0390 iotadieresistonos
|
||||
!C1 U+0391 Alpha
|
||||
!C2 U+0392 Beta
|
||||
!C3 U+0393 Gamma
|
||||
!C4 U+0394 Delta
|
||||
!C5 U+0395 Epsilon
|
||||
!C6 U+0396 Zeta
|
||||
!C7 U+0397 Eta
|
||||
!C8 U+0398 Theta
|
||||
!C9 U+0399 Iota
|
||||
!CA U+039A Kappa
|
||||
!CB U+039B Lambda
|
||||
!CC U+039C Mu
|
||||
!CD U+039D Nu
|
||||
!CE U+039E Xi
|
||||
!CF U+039F Omicron
|
||||
!D0 U+03A0 Pi
|
||||
!D1 U+03A1 Rho
|
||||
!D3 U+03A3 Sigma
|
||||
!D4 U+03A4 Tau
|
||||
!D5 U+03A5 Upsilon
|
||||
!D6 U+03A6 Phi
|
||||
!D7 U+03A7 Chi
|
||||
!D8 U+03A8 Psi
|
||||
!D9 U+03A9 Omega
|
||||
!DA U+03AA Iotadieresis
|
||||
!DB U+03AB Upsilondieresis
|
||||
!DC U+03AC alphatonos
|
||||
!DD U+03AD epsilontonos
|
||||
!DE U+03AE etatonos
|
||||
!DF U+03AF iotatonos
|
||||
!E0 U+03B0 upsilondieresistonos
|
||||
!E1 U+03B1 alpha
|
||||
!E2 U+03B2 beta
|
||||
!E3 U+03B3 gamma
|
||||
!E4 U+03B4 delta
|
||||
!E5 U+03B5 epsilon
|
||||
!E6 U+03B6 zeta
|
||||
!E7 U+03B7 eta
|
||||
!E8 U+03B8 theta
|
||||
!E9 U+03B9 iota
|
||||
!EA U+03BA kappa
|
||||
!EB U+03BB lambda
|
||||
!EC U+03BC mu
|
||||
!ED U+03BD nu
|
||||
!EE U+03BE xi
|
||||
!EF U+03BF omicron
|
||||
!F0 U+03C0 pi
|
||||
!F1 U+03C1 rho
|
||||
!F2 U+03C2 sigma1
|
||||
!F3 U+03C3 sigma
|
||||
!F4 U+03C4 tau
|
||||
!F5 U+03C5 upsilon
|
||||
!F6 U+03C6 phi
|
||||
!F7 U+03C7 chi
|
||||
!F8 U+03C8 psi
|
||||
!F9 U+03C9 omega
|
||||
!FA U+03CA iotadieresis
|
||||
!FB U+03CB upsilondieresis
|
||||
!FC U+03CC omicrontonos
|
||||
!FD U+03CD upsilontonos
|
||||
!FE U+03CE omegatonos
|
249
webui/system/helper/fpdf16/font/makefont/cp1254.map
Executable file
249
webui/system/helper/fpdf16/font/makefont/cp1254.map
Executable file
@ -0,0 +1,249 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+02C6 circumflex
|
||||
!89 U+2030 perthousand
|
||||
!8A U+0160 Scaron
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+0152 OE
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!98 U+02DC tilde
|
||||
!99 U+2122 trademark
|
||||
!9A U+0161 scaron
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+0153 oe
|
||||
!9F U+0178 Ydieresis
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+011E Gbreve
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+0130 Idotaccent
|
||||
!DE U+015E Scedilla
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+011F gbreve
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+0131 dotlessi
|
||||
!FE U+015F scedilla
|
||||
!FF U+00FF ydieresis
|
233
webui/system/helper/fpdf16/font/makefont/cp1255.map
Executable file
233
webui/system/helper/fpdf16/font/makefont/cp1255.map
Executable file
@ -0,0 +1,233 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+02C6 circumflex
|
||||
!89 U+2030 perthousand
|
||||
!8B U+2039 guilsinglleft
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!98 U+02DC tilde
|
||||
!99 U+2122 trademark
|
||||
!9B U+203A guilsinglright
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+20AA afii57636
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00D7 multiply
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD sfthyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 middot
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00F7 divide
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+05B0 afii57799
|
||||
!C1 U+05B1 afii57801
|
||||
!C2 U+05B2 afii57800
|
||||
!C3 U+05B3 afii57802
|
||||
!C4 U+05B4 afii57793
|
||||
!C5 U+05B5 afii57794
|
||||
!C6 U+05B6 afii57795
|
||||
!C7 U+05B7 afii57798
|
||||
!C8 U+05B8 afii57797
|
||||
!C9 U+05B9 afii57806
|
||||
!CB U+05BB afii57796
|
||||
!CC U+05BC afii57807
|
||||
!CD U+05BD afii57839
|
||||
!CE U+05BE afii57645
|
||||
!CF U+05BF afii57841
|
||||
!D0 U+05C0 afii57842
|
||||
!D1 U+05C1 afii57804
|
||||
!D2 U+05C2 afii57803
|
||||
!D3 U+05C3 afii57658
|
||||
!D4 U+05F0 afii57716
|
||||
!D5 U+05F1 afii57717
|
||||
!D6 U+05F2 afii57718
|
||||
!D7 U+05F3 gereshhebrew
|
||||
!D8 U+05F4 gershayimhebrew
|
||||
!E0 U+05D0 afii57664
|
||||
!E1 U+05D1 afii57665
|
||||
!E2 U+05D2 afii57666
|
||||
!E3 U+05D3 afii57667
|
||||
!E4 U+05D4 afii57668
|
||||
!E5 U+05D5 afii57669
|
||||
!E6 U+05D6 afii57670
|
||||
!E7 U+05D7 afii57671
|
||||
!E8 U+05D8 afii57672
|
||||
!E9 U+05D9 afii57673
|
||||
!EA U+05DA afii57674
|
||||
!EB U+05DB afii57675
|
||||
!EC U+05DC afii57676
|
||||
!ED U+05DD afii57677
|
||||
!EE U+05DE afii57678
|
||||
!EF U+05DF afii57679
|
||||
!F0 U+05E0 afii57680
|
||||
!F1 U+05E1 afii57681
|
||||
!F2 U+05E2 afii57682
|
||||
!F3 U+05E3 afii57683
|
||||
!F4 U+05E4 afii57684
|
||||
!F5 U+05E5 afii57685
|
||||
!F6 U+05E6 afii57686
|
||||
!F7 U+05E7 afii57687
|
||||
!F8 U+05E8 afii57688
|
||||
!F9 U+05E9 afii57689
|
||||
!FA U+05EA afii57690
|
||||
!FD U+200E afii299
|
||||
!FE U+200F afii300
|
244
webui/system/helper/fpdf16/font/makefont/cp1257.map
Executable file
244
webui/system/helper/fpdf16/font/makefont/cp1257.map
Executable file
@ -0,0 +1,244 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!89 U+2030 perthousand
|
||||
!8B U+2039 guilsinglleft
|
||||
!8D U+00A8 dieresis
|
||||
!8E U+02C7 caron
|
||||
!8F U+00B8 cedilla
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!99 U+2122 trademark
|
||||
!9B U+203A guilsinglright
|
||||
!9D U+00AF macron
|
||||
!9E U+02DB ogonek
|
||||
!A0 U+00A0 space
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00D8 Oslash
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+0156 Rcommaaccent
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00C6 AE
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00F8 oslash
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+0157 rcommaaccent
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00E6 ae
|
||||
!C0 U+0104 Aogonek
|
||||
!C1 U+012E Iogonek
|
||||
!C2 U+0100 Amacron
|
||||
!C3 U+0106 Cacute
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+0118 Eogonek
|
||||
!C7 U+0112 Emacron
|
||||
!C8 U+010C Ccaron
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+0179 Zacute
|
||||
!CB U+0116 Edotaccent
|
||||
!CC U+0122 Gcommaaccent
|
||||
!CD U+0136 Kcommaaccent
|
||||
!CE U+012A Imacron
|
||||
!CF U+013B Lcommaaccent
|
||||
!D0 U+0160 Scaron
|
||||
!D1 U+0143 Nacute
|
||||
!D2 U+0145 Ncommaaccent
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+014C Omacron
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+0172 Uogonek
|
||||
!D9 U+0141 Lslash
|
||||
!DA U+015A Sacute
|
||||
!DB U+016A Umacron
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+017B Zdotaccent
|
||||
!DE U+017D Zcaron
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+0105 aogonek
|
||||
!E1 U+012F iogonek
|
||||
!E2 U+0101 amacron
|
||||
!E3 U+0107 cacute
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+0119 eogonek
|
||||
!E7 U+0113 emacron
|
||||
!E8 U+010D ccaron
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+017A zacute
|
||||
!EB U+0117 edotaccent
|
||||
!EC U+0123 gcommaaccent
|
||||
!ED U+0137 kcommaaccent
|
||||
!EE U+012B imacron
|
||||
!EF U+013C lcommaaccent
|
||||
!F0 U+0161 scaron
|
||||
!F1 U+0144 nacute
|
||||
!F2 U+0146 ncommaaccent
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+014D omacron
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+0173 uogonek
|
||||
!F9 U+0142 lslash
|
||||
!FA U+015B sacute
|
||||
!FB U+016B umacron
|
||||
!FC U+00FC udieresis
|
||||
!FD U+017C zdotaccent
|
||||
!FE U+017E zcaron
|
||||
!FF U+02D9 dotaccent
|
247
webui/system/helper/fpdf16/font/makefont/cp1258.map
Executable file
247
webui/system/helper/fpdf16/font/makefont/cp1258.map
Executable file
@ -0,0 +1,247 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+02C6 circumflex
|
||||
!89 U+2030 perthousand
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+0152 OE
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!98 U+02DC tilde
|
||||
!99 U+2122 trademark
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+0153 oe
|
||||
!9F U+0178 Ydieresis
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+0102 Abreve
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+0300 gravecomb
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+0309 hookabovecomb
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+01A0 Ohorn
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+01AF Uhorn
|
||||
!DE U+0303 tildecomb
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+0103 abreve
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+0301 acutecomb
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+0323 dotbelowcomb
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+01A1 ohorn
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+01B0 uhorn
|
||||
!FE U+20AB dong
|
||||
!FF U+00FF ydieresis
|
225
webui/system/helper/fpdf16/font/makefont/cp874.map
Executable file
225
webui/system/helper/fpdf16/font/makefont/cp874.map
Executable file
@ -0,0 +1,225 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!85 U+2026 ellipsis
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0E01 kokaithai
|
||||
!A2 U+0E02 khokhaithai
|
||||
!A3 U+0E03 khokhuatthai
|
||||
!A4 U+0E04 khokhwaithai
|
||||
!A5 U+0E05 khokhonthai
|
||||
!A6 U+0E06 khorakhangthai
|
||||
!A7 U+0E07 ngonguthai
|
||||
!A8 U+0E08 chochanthai
|
||||
!A9 U+0E09 chochingthai
|
||||
!AA U+0E0A chochangthai
|
||||
!AB U+0E0B sosothai
|
||||
!AC U+0E0C chochoethai
|
||||
!AD U+0E0D yoyingthai
|
||||
!AE U+0E0E dochadathai
|
||||
!AF U+0E0F topatakthai
|
||||
!B0 U+0E10 thothanthai
|
||||
!B1 U+0E11 thonangmonthothai
|
||||
!B2 U+0E12 thophuthaothai
|
||||
!B3 U+0E13 nonenthai
|
||||
!B4 U+0E14 dodekthai
|
||||
!B5 U+0E15 totaothai
|
||||
!B6 U+0E16 thothungthai
|
||||
!B7 U+0E17 thothahanthai
|
||||
!B8 U+0E18 thothongthai
|
||||
!B9 U+0E19 nonuthai
|
||||
!BA U+0E1A bobaimaithai
|
||||
!BB U+0E1B poplathai
|
||||
!BC U+0E1C phophungthai
|
||||
!BD U+0E1D fofathai
|
||||
!BE U+0E1E phophanthai
|
||||
!BF U+0E1F fofanthai
|
||||
!C0 U+0E20 phosamphaothai
|
||||
!C1 U+0E21 momathai
|
||||
!C2 U+0E22 yoyakthai
|
||||
!C3 U+0E23 roruathai
|
||||
!C4 U+0E24 ruthai
|
||||
!C5 U+0E25 lolingthai
|
||||
!C6 U+0E26 luthai
|
||||
!C7 U+0E27 wowaenthai
|
||||
!C8 U+0E28 sosalathai
|
||||
!C9 U+0E29 sorusithai
|
||||
!CA U+0E2A sosuathai
|
||||
!CB U+0E2B hohipthai
|
||||
!CC U+0E2C lochulathai
|
||||
!CD U+0E2D oangthai
|
||||
!CE U+0E2E honokhukthai
|
||||
!CF U+0E2F paiyannoithai
|
||||
!D0 U+0E30 saraathai
|
||||
!D1 U+0E31 maihanakatthai
|
||||
!D2 U+0E32 saraaathai
|
||||
!D3 U+0E33 saraamthai
|
||||
!D4 U+0E34 saraithai
|
||||
!D5 U+0E35 saraiithai
|
||||
!D6 U+0E36 sarauethai
|
||||
!D7 U+0E37 saraueethai
|
||||
!D8 U+0E38 sarauthai
|
||||
!D9 U+0E39 sarauuthai
|
||||
!DA U+0E3A phinthuthai
|
||||
!DF U+0E3F bahtthai
|
||||
!E0 U+0E40 saraethai
|
||||
!E1 U+0E41 saraaethai
|
||||
!E2 U+0E42 saraothai
|
||||
!E3 U+0E43 saraaimaimuanthai
|
||||
!E4 U+0E44 saraaimaimalaithai
|
||||
!E5 U+0E45 lakkhangyaothai
|
||||
!E6 U+0E46 maiyamokthai
|
||||
!E7 U+0E47 maitaikhuthai
|
||||
!E8 U+0E48 maiekthai
|
||||
!E9 U+0E49 maithothai
|
||||
!EA U+0E4A maitrithai
|
||||
!EB U+0E4B maichattawathai
|
||||
!EC U+0E4C thanthakhatthai
|
||||
!ED U+0E4D nikhahitthai
|
||||
!EE U+0E4E yamakkanthai
|
||||
!EF U+0E4F fongmanthai
|
||||
!F0 U+0E50 zerothai
|
||||
!F1 U+0E51 onethai
|
||||
!F2 U+0E52 twothai
|
||||
!F3 U+0E53 threethai
|
||||
!F4 U+0E54 fourthai
|
||||
!F5 U+0E55 fivethai
|
||||
!F6 U+0E56 sixthai
|
||||
!F7 U+0E57 seventhai
|
||||
!F8 U+0E58 eightthai
|
||||
!F9 U+0E59 ninethai
|
||||
!FA U+0E5A angkhankhuthai
|
||||
!FB U+0E5B khomutthai
|
256
webui/system/helper/fpdf16/font/makefont/iso-8859-1.map
Executable file
256
webui/system/helper/fpdf16/font/makefont/iso-8859-1.map
Executable file
@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+00D0 Eth
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+00DE Thorn
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+00F0 eth
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+00FE thorn
|
||||
!FF U+00FF ydieresis
|
248
webui/system/helper/fpdf16/font/makefont/iso-8859-11.map
Executable file
248
webui/system/helper/fpdf16/font/makefont/iso-8859-11.map
Executable file
@ -0,0 +1,248 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0E01 kokaithai
|
||||
!A2 U+0E02 khokhaithai
|
||||
!A3 U+0E03 khokhuatthai
|
||||
!A4 U+0E04 khokhwaithai
|
||||
!A5 U+0E05 khokhonthai
|
||||
!A6 U+0E06 khorakhangthai
|
||||
!A7 U+0E07 ngonguthai
|
||||
!A8 U+0E08 chochanthai
|
||||
!A9 U+0E09 chochingthai
|
||||
!AA U+0E0A chochangthai
|
||||
!AB U+0E0B sosothai
|
||||
!AC U+0E0C chochoethai
|
||||
!AD U+0E0D yoyingthai
|
||||
!AE U+0E0E dochadathai
|
||||
!AF U+0E0F topatakthai
|
||||
!B0 U+0E10 thothanthai
|
||||
!B1 U+0E11 thonangmonthothai
|
||||
!B2 U+0E12 thophuthaothai
|
||||
!B3 U+0E13 nonenthai
|
||||
!B4 U+0E14 dodekthai
|
||||
!B5 U+0E15 totaothai
|
||||
!B6 U+0E16 thothungthai
|
||||
!B7 U+0E17 thothahanthai
|
||||
!B8 U+0E18 thothongthai
|
||||
!B9 U+0E19 nonuthai
|
||||
!BA U+0E1A bobaimaithai
|
||||
!BB U+0E1B poplathai
|
||||
!BC U+0E1C phophungthai
|
||||
!BD U+0E1D fofathai
|
||||
!BE U+0E1E phophanthai
|
||||
!BF U+0E1F fofanthai
|
||||
!C0 U+0E20 phosamphaothai
|
||||
!C1 U+0E21 momathai
|
||||
!C2 U+0E22 yoyakthai
|
||||
!C3 U+0E23 roruathai
|
||||
!C4 U+0E24 ruthai
|
||||
!C5 U+0E25 lolingthai
|
||||
!C6 U+0E26 luthai
|
||||
!C7 U+0E27 wowaenthai
|
||||
!C8 U+0E28 sosalathai
|
||||
!C9 U+0E29 sorusithai
|
||||
!CA U+0E2A sosuathai
|
||||
!CB U+0E2B hohipthai
|
||||
!CC U+0E2C lochulathai
|
||||
!CD U+0E2D oangthai
|
||||
!CE U+0E2E honokhukthai
|
||||
!CF U+0E2F paiyannoithai
|
||||
!D0 U+0E30 saraathai
|
||||
!D1 U+0E31 maihanakatthai
|
||||
!D2 U+0E32 saraaathai
|
||||
!D3 U+0E33 saraamthai
|
||||
!D4 U+0E34 saraithai
|
||||
!D5 U+0E35 saraiithai
|
||||
!D6 U+0E36 sarauethai
|
||||
!D7 U+0E37 saraueethai
|
||||
!D8 U+0E38 sarauthai
|
||||
!D9 U+0E39 sarauuthai
|
||||
!DA U+0E3A phinthuthai
|
||||
!DF U+0E3F bahtthai
|
||||
!E0 U+0E40 saraethai
|
||||
!E1 U+0E41 saraaethai
|
||||
!E2 U+0E42 saraothai
|
||||
!E3 U+0E43 saraaimaimuanthai
|
||||
!E4 U+0E44 saraaimaimalaithai
|
||||
!E5 U+0E45 lakkhangyaothai
|
||||
!E6 U+0E46 maiyamokthai
|
||||
!E7 U+0E47 maitaikhuthai
|
||||
!E8 U+0E48 maiekthai
|
||||
!E9 U+0E49 maithothai
|
||||
!EA U+0E4A maitrithai
|
||||
!EB U+0E4B maichattawathai
|
||||
!EC U+0E4C thanthakhatthai
|
||||
!ED U+0E4D nikhahitthai
|
||||
!EE U+0E4E yamakkanthai
|
||||
!EF U+0E4F fongmanthai
|
||||
!F0 U+0E50 zerothai
|
||||
!F1 U+0E51 onethai
|
||||
!F2 U+0E52 twothai
|
||||
!F3 U+0E53 threethai
|
||||
!F4 U+0E54 fourthai
|
||||
!F5 U+0E55 fivethai
|
||||
!F6 U+0E56 sixthai
|
||||
!F7 U+0E57 seventhai
|
||||
!F8 U+0E58 eightthai
|
||||
!F9 U+0E59 ninethai
|
||||
!FA U+0E5A angkhankhuthai
|
||||
!FB U+0E5B khomutthai
|
256
webui/system/helper/fpdf16/font/makefont/iso-8859-15.map
Executable file
256
webui/system/helper/fpdf16/font/makefont/iso-8859-15.map
Executable file
@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+20AC Euro
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+0160 Scaron
|
||||
!A7 U+00A7 section
|
||||
!A8 U+0161 scaron
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+017D Zcaron
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+017E zcaron
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+0152 OE
|
||||
!BD U+0153 oe
|
||||
!BE U+0178 Ydieresis
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+00D0 Eth
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+00DE Thorn
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+00F0 eth
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+00FE thorn
|
||||
!FF U+00FF ydieresis
|
256
webui/system/helper/fpdf16/font/makefont/iso-8859-16.map
Executable file
256
webui/system/helper/fpdf16/font/makefont/iso-8859-16.map
Executable file
@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0104 Aogonek
|
||||
!A2 U+0105 aogonek
|
||||
!A3 U+0141 Lslash
|
||||
!A4 U+20AC Euro
|
||||
!A5 U+201E quotedblbase
|
||||
!A6 U+0160 Scaron
|
||||
!A7 U+00A7 section
|
||||
!A8 U+0161 scaron
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+0218 Scommaaccent
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+0179 Zacute
|
||||
!AD U+00AD hyphen
|
||||
!AE U+017A zacute
|
||||
!AF U+017B Zdotaccent
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+010C Ccaron
|
||||
!B3 U+0142 lslash
|
||||
!B4 U+017D Zcaron
|
||||
!B5 U+201D quotedblright
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+017E zcaron
|
||||
!B9 U+010D ccaron
|
||||
!BA U+0219 scommaaccent
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+0152 OE
|
||||
!BD U+0153 oe
|
||||
!BE U+0178 Ydieresis
|
||||
!BF U+017C zdotaccent
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+0102 Abreve
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+0106 Cacute
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+0143 Nacute
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+0150 Ohungarumlaut
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+015A Sacute
|
||||
!D8 U+0170 Uhungarumlaut
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+0118 Eogonek
|
||||
!DE U+021A Tcommaaccent
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+0103 abreve
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+0107 cacute
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+0144 nacute
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+0151 ohungarumlaut
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+015B sacute
|
||||
!F8 U+0171 uhungarumlaut
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+0119 eogonek
|
||||
!FE U+021B tcommaaccent
|
||||
!FF U+00FF ydieresis
|
256
webui/system/helper/fpdf16/font/makefont/iso-8859-2.map
Executable file
256
webui/system/helper/fpdf16/font/makefont/iso-8859-2.map
Executable file
@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0104 Aogonek
|
||||
!A2 U+02D8 breve
|
||||
!A3 U+0141 Lslash
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+013D Lcaron
|
||||
!A6 U+015A Sacute
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+0160 Scaron
|
||||
!AA U+015E Scedilla
|
||||
!AB U+0164 Tcaron
|
||||
!AC U+0179 Zacute
|
||||
!AD U+00AD hyphen
|
||||
!AE U+017D Zcaron
|
||||
!AF U+017B Zdotaccent
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+0105 aogonek
|
||||
!B2 U+02DB ogonek
|
||||
!B3 U+0142 lslash
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+013E lcaron
|
||||
!B6 U+015B sacute
|
||||
!B7 U+02C7 caron
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+0161 scaron
|
||||
!BA U+015F scedilla
|
||||
!BB U+0165 tcaron
|
||||
!BC U+017A zacute
|
||||
!BD U+02DD hungarumlaut
|
||||
!BE U+017E zcaron
|
||||
!BF U+017C zdotaccent
|
||||
!C0 U+0154 Racute
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+0102 Abreve
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+0139 Lacute
|
||||
!C6 U+0106 Cacute
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+010C Ccaron
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+0118 Eogonek
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+011A Ecaron
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+010E Dcaron
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+0143 Nacute
|
||||
!D2 U+0147 Ncaron
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+0150 Ohungarumlaut
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+0158 Rcaron
|
||||
!D9 U+016E Uring
|
||||
!DA U+00DA Uacute
|
||||
!DB U+0170 Uhungarumlaut
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+0162 Tcommaaccent
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+0155 racute
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+0103 abreve
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+013A lacute
|
||||
!E6 U+0107 cacute
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+010D ccaron
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+0119 eogonek
|
||||
!EB U+00EB edieresis
|
||||
!EC U+011B ecaron
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+010F dcaron
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+0144 nacute
|
||||
!F2 U+0148 ncaron
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+0151 ohungarumlaut
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+0159 rcaron
|
||||
!F9 U+016F uring
|
||||
!FA U+00FA uacute
|
||||
!FB U+0171 uhungarumlaut
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+0163 tcommaaccent
|
||||
!FF U+02D9 dotaccent
|
256
webui/system/helper/fpdf16/font/makefont/iso-8859-4.map
Executable file
256
webui/system/helper/fpdf16/font/makefont/iso-8859-4.map
Executable file
@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0104 Aogonek
|
||||
!A2 U+0138 kgreenlandic
|
||||
!A3 U+0156 Rcommaaccent
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+0128 Itilde
|
||||
!A6 U+013B Lcommaaccent
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+0160 Scaron
|
||||
!AA U+0112 Emacron
|
||||
!AB U+0122 Gcommaaccent
|
||||
!AC U+0166 Tbar
|
||||
!AD U+00AD hyphen
|
||||
!AE U+017D Zcaron
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+0105 aogonek
|
||||
!B2 U+02DB ogonek
|
||||
!B3 U+0157 rcommaaccent
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+0129 itilde
|
||||
!B6 U+013C lcommaaccent
|
||||
!B7 U+02C7 caron
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+0161 scaron
|
||||
!BA U+0113 emacron
|
||||
!BB U+0123 gcommaaccent
|
||||
!BC U+0167 tbar
|
||||
!BD U+014A Eng
|
||||
!BE U+017E zcaron
|
||||
!BF U+014B eng
|
||||
!C0 U+0100 Amacron
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+012E Iogonek
|
||||
!C8 U+010C Ccaron
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+0118 Eogonek
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+0116 Edotaccent
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+012A Imacron
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+0145 Ncommaaccent
|
||||
!D2 U+014C Omacron
|
||||
!D3 U+0136 Kcommaaccent
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+0172 Uogonek
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+0168 Utilde
|
||||
!DE U+016A Umacron
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+0101 amacron
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+012F iogonek
|
||||
!E8 U+010D ccaron
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+0119 eogonek
|
||||
!EB U+00EB edieresis
|
||||
!EC U+0117 edotaccent
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+012B imacron
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+0146 ncommaaccent
|
||||
!F2 U+014D omacron
|
||||
!F3 U+0137 kcommaaccent
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+0173 uogonek
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+0169 utilde
|
||||
!FE U+016B umacron
|
||||
!FF U+02D9 dotaccent
|
256
webui/system/helper/fpdf16/font/makefont/iso-8859-5.map
Executable file
256
webui/system/helper/fpdf16/font/makefont/iso-8859-5.map
Executable file
@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0401 afii10023
|
||||
!A2 U+0402 afii10051
|
||||
!A3 U+0403 afii10052
|
||||
!A4 U+0404 afii10053
|
||||
!A5 U+0405 afii10054
|
||||
!A6 U+0406 afii10055
|
||||
!A7 U+0407 afii10056
|
||||
!A8 U+0408 afii10057
|
||||
!A9 U+0409 afii10058
|
||||
!AA U+040A afii10059
|
||||
!AB U+040B afii10060
|
||||
!AC U+040C afii10061
|
||||
!AD U+00AD hyphen
|
||||
!AE U+040E afii10062
|
||||
!AF U+040F afii10145
|
||||
!B0 U+0410 afii10017
|
||||
!B1 U+0411 afii10018
|
||||
!B2 U+0412 afii10019
|
||||
!B3 U+0413 afii10020
|
||||
!B4 U+0414 afii10021
|
||||
!B5 U+0415 afii10022
|
||||
!B6 U+0416 afii10024
|
||||
!B7 U+0417 afii10025
|
||||
!B8 U+0418 afii10026
|
||||
!B9 U+0419 afii10027
|
||||
!BA U+041A afii10028
|
||||
!BB U+041B afii10029
|
||||
!BC U+041C afii10030
|
||||
!BD U+041D afii10031
|
||||
!BE U+041E afii10032
|
||||
!BF U+041F afii10033
|
||||
!C0 U+0420 afii10034
|
||||
!C1 U+0421 afii10035
|
||||
!C2 U+0422 afii10036
|
||||
!C3 U+0423 afii10037
|
||||
!C4 U+0424 afii10038
|
||||
!C5 U+0425 afii10039
|
||||
!C6 U+0426 afii10040
|
||||
!C7 U+0427 afii10041
|
||||
!C8 U+0428 afii10042
|
||||
!C9 U+0429 afii10043
|
||||
!CA U+042A afii10044
|
||||
!CB U+042B afii10045
|
||||
!CC U+042C afii10046
|
||||
!CD U+042D afii10047
|
||||
!CE U+042E afii10048
|
||||
!CF U+042F afii10049
|
||||
!D0 U+0430 afii10065
|
||||
!D1 U+0431 afii10066
|
||||
!D2 U+0432 afii10067
|
||||
!D3 U+0433 afii10068
|
||||
!D4 U+0434 afii10069
|
||||
!D5 U+0435 afii10070
|
||||
!D6 U+0436 afii10072
|
||||
!D7 U+0437 afii10073
|
||||
!D8 U+0438 afii10074
|
||||
!D9 U+0439 afii10075
|
||||
!DA U+043A afii10076
|
||||
!DB U+043B afii10077
|
||||
!DC U+043C afii10078
|
||||
!DD U+043D afii10079
|
||||
!DE U+043E afii10080
|
||||
!DF U+043F afii10081
|
||||
!E0 U+0440 afii10082
|
||||
!E1 U+0441 afii10083
|
||||
!E2 U+0442 afii10084
|
||||
!E3 U+0443 afii10085
|
||||
!E4 U+0444 afii10086
|
||||
!E5 U+0445 afii10087
|
||||
!E6 U+0446 afii10088
|
||||
!E7 U+0447 afii10089
|
||||
!E8 U+0448 afii10090
|
||||
!E9 U+0449 afii10091
|
||||
!EA U+044A afii10092
|
||||
!EB U+044B afii10093
|
||||
!EC U+044C afii10094
|
||||
!ED U+044D afii10095
|
||||
!EE U+044E afii10096
|
||||
!EF U+044F afii10097
|
||||
!F0 U+2116 afii61352
|
||||
!F1 U+0451 afii10071
|
||||
!F2 U+0452 afii10099
|
||||
!F3 U+0453 afii10100
|
||||
!F4 U+0454 afii10101
|
||||
!F5 U+0455 afii10102
|
||||
!F6 U+0456 afii10103
|
||||
!F7 U+0457 afii10104
|
||||
!F8 U+0458 afii10105
|
||||
!F9 U+0459 afii10106
|
||||
!FA U+045A afii10107
|
||||
!FB U+045B afii10108
|
||||
!FC U+045C afii10109
|
||||
!FD U+00A7 section
|
||||
!FE U+045E afii10110
|
||||
!FF U+045F afii10193
|
250
webui/system/helper/fpdf16/font/makefont/iso-8859-7.map
Executable file
250
webui/system/helper/fpdf16/font/makefont/iso-8859-7.map
Executable file
@ -0,0 +1,250 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+2018 quoteleft
|
||||
!A2 U+2019 quoteright
|
||||
!A3 U+00A3 sterling
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AF U+2015 afii00208
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+0384 tonos
|
||||
!B5 U+0385 dieresistonos
|
||||
!B6 U+0386 Alphatonos
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+0388 Epsilontonos
|
||||
!B9 U+0389 Etatonos
|
||||
!BA U+038A Iotatonos
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+038C Omicrontonos
|
||||
!BD U+00BD onehalf
|
||||
!BE U+038E Upsilontonos
|
||||
!BF U+038F Omegatonos
|
||||
!C0 U+0390 iotadieresistonos
|
||||
!C1 U+0391 Alpha
|
||||
!C2 U+0392 Beta
|
||||
!C3 U+0393 Gamma
|
||||
!C4 U+0394 Delta
|
||||
!C5 U+0395 Epsilon
|
||||
!C6 U+0396 Zeta
|
||||
!C7 U+0397 Eta
|
||||
!C8 U+0398 Theta
|
||||
!C9 U+0399 Iota
|
||||
!CA U+039A Kappa
|
||||
!CB U+039B Lambda
|
||||
!CC U+039C Mu
|
||||
!CD U+039D Nu
|
||||
!CE U+039E Xi
|
||||
!CF U+039F Omicron
|
||||
!D0 U+03A0 Pi
|
||||
!D1 U+03A1 Rho
|
||||
!D3 U+03A3 Sigma
|
||||
!D4 U+03A4 Tau
|
||||
!D5 U+03A5 Upsilon
|
||||
!D6 U+03A6 Phi
|
||||
!D7 U+03A7 Chi
|
||||
!D8 U+03A8 Psi
|
||||
!D9 U+03A9 Omega
|
||||
!DA U+03AA Iotadieresis
|
||||
!DB U+03AB Upsilondieresis
|
||||
!DC U+03AC alphatonos
|
||||
!DD U+03AD epsilontonos
|
||||
!DE U+03AE etatonos
|
||||
!DF U+03AF iotatonos
|
||||
!E0 U+03B0 upsilondieresistonos
|
||||
!E1 U+03B1 alpha
|
||||
!E2 U+03B2 beta
|
||||
!E3 U+03B3 gamma
|
||||
!E4 U+03B4 delta
|
||||
!E5 U+03B5 epsilon
|
||||
!E6 U+03B6 zeta
|
||||
!E7 U+03B7 eta
|
||||
!E8 U+03B8 theta
|
||||
!E9 U+03B9 iota
|
||||
!EA U+03BA kappa
|
||||
!EB U+03BB lambda
|
||||
!EC U+03BC mu
|
||||
!ED U+03BD nu
|
||||
!EE U+03BE xi
|
||||
!EF U+03BF omicron
|
||||
!F0 U+03C0 pi
|
||||
!F1 U+03C1 rho
|
||||
!F2 U+03C2 sigma1
|
||||
!F3 U+03C3 sigma
|
||||
!F4 U+03C4 tau
|
||||
!F5 U+03C5 upsilon
|
||||
!F6 U+03C6 phi
|
||||
!F7 U+03C7 chi
|
||||
!F8 U+03C8 psi
|
||||
!F9 U+03C9 omega
|
||||
!FA U+03CA iotadieresis
|
||||
!FB U+03CB upsilondieresis
|
||||
!FC U+03CC omicrontonos
|
||||
!FD U+03CD upsilontonos
|
||||
!FE U+03CE omegatonos
|
256
webui/system/helper/fpdf16/font/makefont/iso-8859-9.map
Executable file
256
webui/system/helper/fpdf16/font/makefont/iso-8859-9.map
Executable file
@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+011E Gbreve
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+0130 Idotaccent
|
||||
!DE U+015E Scedilla
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+011F gbreve
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+0131 dotlessi
|
||||
!FE U+015F scedilla
|
||||
!FF U+00FF ydieresis
|
256
webui/system/helper/fpdf16/font/makefont/koi8-r.map
Executable file
256
webui/system/helper/fpdf16/font/makefont/koi8-r.map
Executable file
@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+2500 SF100000
|
||||
!81 U+2502 SF110000
|
||||
!82 U+250C SF010000
|
||||
!83 U+2510 SF030000
|
||||
!84 U+2514 SF020000
|
||||
!85 U+2518 SF040000
|
||||
!86 U+251C SF080000
|
||||
!87 U+2524 SF090000
|
||||
!88 U+252C SF060000
|
||||
!89 U+2534 SF070000
|
||||
!8A U+253C SF050000
|
||||
!8B U+2580 upblock
|
||||
!8C U+2584 dnblock
|
||||
!8D U+2588 block
|
||||
!8E U+258C lfblock
|
||||
!8F U+2590 rtblock
|
||||
!90 U+2591 ltshade
|
||||
!91 U+2592 shade
|
||||
!92 U+2593 dkshade
|
||||
!93 U+2320 integraltp
|
||||
!94 U+25A0 filledbox
|
||||
!95 U+2219 periodcentered
|
||||
!96 U+221A radical
|
||||
!97 U+2248 approxequal
|
||||
!98 U+2264 lessequal
|
||||
!99 U+2265 greaterequal
|
||||
!9A U+00A0 space
|
||||
!9B U+2321 integralbt
|
||||
!9C U+00B0 degree
|
||||
!9D U+00B2 twosuperior
|
||||
!9E U+00B7 periodcentered
|
||||
!9F U+00F7 divide
|
||||
!A0 U+2550 SF430000
|
||||
!A1 U+2551 SF240000
|
||||
!A2 U+2552 SF510000
|
||||
!A3 U+0451 afii10071
|
||||
!A4 U+2553 SF520000
|
||||
!A5 U+2554 SF390000
|
||||
!A6 U+2555 SF220000
|
||||
!A7 U+2556 SF210000
|
||||
!A8 U+2557 SF250000
|
||||
!A9 U+2558 SF500000
|
||||
!AA U+2559 SF490000
|
||||
!AB U+255A SF380000
|
||||
!AC U+255B SF280000
|
||||
!AD U+255C SF270000
|
||||
!AE U+255D SF260000
|
||||
!AF U+255E SF360000
|
||||
!B0 U+255F SF370000
|
||||
!B1 U+2560 SF420000
|
||||
!B2 U+2561 SF190000
|
||||
!B3 U+0401 afii10023
|
||||
!B4 U+2562 SF200000
|
||||
!B5 U+2563 SF230000
|
||||
!B6 U+2564 SF470000
|
||||
!B7 U+2565 SF480000
|
||||
!B8 U+2566 SF410000
|
||||
!B9 U+2567 SF450000
|
||||
!BA U+2568 SF460000
|
||||
!BB U+2569 SF400000
|
||||
!BC U+256A SF540000
|
||||
!BD U+256B SF530000
|
||||
!BE U+256C SF440000
|
||||
!BF U+00A9 copyright
|
||||
!C0 U+044E afii10096
|
||||
!C1 U+0430 afii10065
|
||||
!C2 U+0431 afii10066
|
||||
!C3 U+0446 afii10088
|
||||
!C4 U+0434 afii10069
|
||||
!C5 U+0435 afii10070
|
||||
!C6 U+0444 afii10086
|
||||
!C7 U+0433 afii10068
|
||||
!C8 U+0445 afii10087
|
||||
!C9 U+0438 afii10074
|
||||
!CA U+0439 afii10075
|
||||
!CB U+043A afii10076
|
||||
!CC U+043B afii10077
|
||||
!CD U+043C afii10078
|
||||
!CE U+043D afii10079
|
||||
!CF U+043E afii10080
|
||||
!D0 U+043F afii10081
|
||||
!D1 U+044F afii10097
|
||||
!D2 U+0440 afii10082
|
||||
!D3 U+0441 afii10083
|
||||
!D4 U+0442 afii10084
|
||||
!D5 U+0443 afii10085
|
||||
!D6 U+0436 afii10072
|
||||
!D7 U+0432 afii10067
|
||||
!D8 U+044C afii10094
|
||||
!D9 U+044B afii10093
|
||||
!DA U+0437 afii10073
|
||||
!DB U+0448 afii10090
|
||||
!DC U+044D afii10095
|
||||
!DD U+0449 afii10091
|
||||
!DE U+0447 afii10089
|
||||
!DF U+044A afii10092
|
||||
!E0 U+042E afii10048
|
||||
!E1 U+0410 afii10017
|
||||
!E2 U+0411 afii10018
|
||||
!E3 U+0426 afii10040
|
||||
!E4 U+0414 afii10021
|
||||
!E5 U+0415 afii10022
|
||||
!E6 U+0424 afii10038
|
||||
!E7 U+0413 afii10020
|
||||
!E8 U+0425 afii10039
|
||||
!E9 U+0418 afii10026
|
||||
!EA U+0419 afii10027
|
||||
!EB U+041A afii10028
|
||||
!EC U+041B afii10029
|
||||
!ED U+041C afii10030
|
||||
!EE U+041D afii10031
|
||||
!EF U+041E afii10032
|
||||
!F0 U+041F afii10033
|
||||
!F1 U+042F afii10049
|
||||
!F2 U+0420 afii10034
|
||||
!F3 U+0421 afii10035
|
||||
!F4 U+0422 afii10036
|
||||
!F5 U+0423 afii10037
|
||||
!F6 U+0416 afii10024
|
||||
!F7 U+0412 afii10019
|
||||
!F8 U+042C afii10046
|
||||
!F9 U+042B afii10045
|
||||
!FA U+0417 afii10025
|
||||
!FB U+0428 afii10042
|
||||
!FC U+042D afii10047
|
||||
!FD U+0429 afii10043
|
||||
!FE U+0427 afii10041
|
||||
!FF U+042A afii10044
|
256
webui/system/helper/fpdf16/font/makefont/koi8-u.map
Executable file
256
webui/system/helper/fpdf16/font/makefont/koi8-u.map
Executable file
@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+2500 SF100000
|
||||
!81 U+2502 SF110000
|
||||
!82 U+250C SF010000
|
||||
!83 U+2510 SF030000
|
||||
!84 U+2514 SF020000
|
||||
!85 U+2518 SF040000
|
||||
!86 U+251C SF080000
|
||||
!87 U+2524 SF090000
|
||||
!88 U+252C SF060000
|
||||
!89 U+2534 SF070000
|
||||
!8A U+253C SF050000
|
||||
!8B U+2580 upblock
|
||||
!8C U+2584 dnblock
|
||||
!8D U+2588 block
|
||||
!8E U+258C lfblock
|
||||
!8F U+2590 rtblock
|
||||
!90 U+2591 ltshade
|
||||
!91 U+2592 shade
|
||||
!92 U+2593 dkshade
|
||||
!93 U+2320 integraltp
|
||||
!94 U+25A0 filledbox
|
||||
!95 U+2022 bullet
|
||||
!96 U+221A radical
|
||||
!97 U+2248 approxequal
|
||||
!98 U+2264 lessequal
|
||||
!99 U+2265 greaterequal
|
||||
!9A U+00A0 space
|
||||
!9B U+2321 integralbt
|
||||
!9C U+00B0 degree
|
||||
!9D U+00B2 twosuperior
|
||||
!9E U+00B7 periodcentered
|
||||
!9F U+00F7 divide
|
||||
!A0 U+2550 SF430000
|
||||
!A1 U+2551 SF240000
|
||||
!A2 U+2552 SF510000
|
||||
!A3 U+0451 afii10071
|
||||
!A4 U+0454 afii10101
|
||||
!A5 U+2554 SF390000
|
||||
!A6 U+0456 afii10103
|
||||
!A7 U+0457 afii10104
|
||||
!A8 U+2557 SF250000
|
||||
!A9 U+2558 SF500000
|
||||
!AA U+2559 SF490000
|
||||
!AB U+255A SF380000
|
||||
!AC U+255B SF280000
|
||||
!AD U+0491 afii10098
|
||||
!AE U+255D SF260000
|
||||
!AF U+255E SF360000
|
||||
!B0 U+255F SF370000
|
||||
!B1 U+2560 SF420000
|
||||
!B2 U+2561 SF190000
|
||||
!B3 U+0401 afii10023
|
||||
!B4 U+0404 afii10053
|
||||
!B5 U+2563 SF230000
|
||||
!B6 U+0406 afii10055
|
||||
!B7 U+0407 afii10056
|
||||
!B8 U+2566 SF410000
|
||||
!B9 U+2567 SF450000
|
||||
!BA U+2568 SF460000
|
||||
!BB U+2569 SF400000
|
||||
!BC U+256A SF540000
|
||||
!BD U+0490 afii10050
|
||||
!BE U+256C SF440000
|
||||
!BF U+00A9 copyright
|
||||
!C0 U+044E afii10096
|
||||
!C1 U+0430 afii10065
|
||||
!C2 U+0431 afii10066
|
||||
!C3 U+0446 afii10088
|
||||
!C4 U+0434 afii10069
|
||||
!C5 U+0435 afii10070
|
||||
!C6 U+0444 afii10086
|
||||
!C7 U+0433 afii10068
|
||||
!C8 U+0445 afii10087
|
||||
!C9 U+0438 afii10074
|
||||
!CA U+0439 afii10075
|
||||
!CB U+043A afii10076
|
||||
!CC U+043B afii10077
|
||||
!CD U+043C afii10078
|
||||
!CE U+043D afii10079
|
||||
!CF U+043E afii10080
|
||||
!D0 U+043F afii10081
|
||||
!D1 U+044F afii10097
|
||||
!D2 U+0440 afii10082
|
||||
!D3 U+0441 afii10083
|
||||
!D4 U+0442 afii10084
|
||||
!D5 U+0443 afii10085
|
||||
!D6 U+0436 afii10072
|
||||
!D7 U+0432 afii10067
|
||||
!D8 U+044C afii10094
|
||||
!D9 U+044B afii10093
|
||||
!DA U+0437 afii10073
|
||||
!DB U+0448 afii10090
|
||||
!DC U+044D afii10095
|
||||
!DD U+0449 afii10091
|
||||
!DE U+0447 afii10089
|
||||
!DF U+044A afii10092
|
||||
!E0 U+042E afii10048
|
||||
!E1 U+0410 afii10017
|
||||
!E2 U+0411 afii10018
|
||||
!E3 U+0426 afii10040
|
||||
!E4 U+0414 afii10021
|
||||
!E5 U+0415 afii10022
|
||||
!E6 U+0424 afii10038
|
||||
!E7 U+0413 afii10020
|
||||
!E8 U+0425 afii10039
|
||||
!E9 U+0418 afii10026
|
||||
!EA U+0419 afii10027
|
||||
!EB U+041A afii10028
|
||||
!EC U+041B afii10029
|
||||
!ED U+041C afii10030
|
||||
!EE U+041D afii10031
|
||||
!EF U+041E afii10032
|
||||
!F0 U+041F afii10033
|
||||
!F1 U+042F afii10049
|
||||
!F2 U+0420 afii10034
|
||||
!F3 U+0421 afii10035
|
||||
!F4 U+0422 afii10036
|
||||
!F5 U+0423 afii10037
|
||||
!F6 U+0416 afii10024
|
||||
!F7 U+0412 afii10019
|
||||
!F8 U+042C afii10046
|
||||
!F9 U+042B afii10045
|
||||
!FA U+0417 afii10025
|
||||
!FB U+0428 afii10042
|
||||
!FC U+042D afii10047
|
||||
!FD U+0429 afii10043
|
||||
!FE U+0427 afii10041
|
||||
!FF U+042A afii10044
|
419
webui/system/helper/fpdf16/font/makefont/makefont.php
Executable file
419
webui/system/helper/fpdf16/font/makefont/makefont.php
Executable file
@ -0,0 +1,419 @@
|
||||
<?php
|
||||
/*******************************************************************************
|
||||
* Utility to generate font definition files *
|
||||
* *
|
||||
* Version: 1.14 *
|
||||
* Date: 2008-08-03 *
|
||||
* Author: Olivier PLATHEY *
|
||||
*******************************************************************************/
|
||||
|
||||
function ReadMap($enc)
|
||||
{
|
||||
//Read a map file
|
||||
$file=dirname(__FILE__).'/'.strtolower($enc).'.map';
|
||||
$a=file($file);
|
||||
if(empty($a))
|
||||
die('<b>Error:</b> encoding not found: '.$enc);
|
||||
$cc2gn=array();
|
||||
foreach($a as $l)
|
||||
{
|
||||
if($l[0]=='!')
|
||||
{
|
||||
$e=preg_split('/[ \\t]+/',rtrim($l));
|
||||
$cc=hexdec(substr($e[0],1));
|
||||
$gn=$e[2];
|
||||
$cc2gn[$cc]=$gn;
|
||||
}
|
||||
}
|
||||
for($i=0;$i<=255;$i++)
|
||||
{
|
||||
if(!isset($cc2gn[$i]))
|
||||
$cc2gn[$i]='.notdef';
|
||||
}
|
||||
return $cc2gn;
|
||||
}
|
||||
|
||||
function ReadAFM($file, &$map)
|
||||
{
|
||||
//Read a font metric file
|
||||
$a=file($file);
|
||||
if(empty($a))
|
||||
die('File not found');
|
||||
$widths=array();
|
||||
$fm=array();
|
||||
$fix=array('Edot'=>'Edotaccent','edot'=>'edotaccent','Idot'=>'Idotaccent','Zdot'=>'Zdotaccent','zdot'=>'zdotaccent',
|
||||
'Odblacute'=>'Ohungarumlaut','odblacute'=>'ohungarumlaut','Udblacute'=>'Uhungarumlaut','udblacute'=>'uhungarumlaut',
|
||||
'Gcedilla'=>'Gcommaaccent','gcedilla'=>'gcommaaccent','Kcedilla'=>'Kcommaaccent','kcedilla'=>'kcommaaccent',
|
||||
'Lcedilla'=>'Lcommaaccent','lcedilla'=>'lcommaaccent','Ncedilla'=>'Ncommaaccent','ncedilla'=>'ncommaaccent',
|
||||
'Rcedilla'=>'Rcommaaccent','rcedilla'=>'rcommaaccent','Scedilla'=>'Scommaaccent','scedilla'=>'scommaaccent',
|
||||
'Tcedilla'=>'Tcommaaccent','tcedilla'=>'tcommaaccent','Dslash'=>'Dcroat','dslash'=>'dcroat','Dmacron'=>'Dcroat','dmacron'=>'dcroat',
|
||||
'combininggraveaccent'=>'gravecomb','combininghookabove'=>'hookabovecomb','combiningtildeaccent'=>'tildecomb',
|
||||
'combiningacuteaccent'=>'acutecomb','combiningdotbelow'=>'dotbelowcomb','dongsign'=>'dong');
|
||||
foreach($a as $l)
|
||||
{
|
||||
$e=explode(' ',rtrim($l));
|
||||
if(count($e)<2)
|
||||
continue;
|
||||
$code=$e[0];
|
||||
$param=$e[1];
|
||||
if($code=='C')
|
||||
{
|
||||
//Character metrics
|
||||
$cc=(int)$e[1];
|
||||
$w=$e[4];
|
||||
$gn=$e[7];
|
||||
if(substr($gn,-4)=='20AC')
|
||||
$gn='Euro';
|
||||
if(isset($fix[$gn]))
|
||||
{
|
||||
//Fix incorrect glyph name
|
||||
foreach($map as $c=>$n)
|
||||
{
|
||||
if($n==$fix[$gn])
|
||||
$map[$c]=$gn;
|
||||
}
|
||||
}
|
||||
if(empty($map))
|
||||
{
|
||||
//Symbolic font: use built-in encoding
|
||||
$widths[$cc]=$w;
|
||||
}
|
||||
else
|
||||
{
|
||||
$widths[$gn]=$w;
|
||||
if($gn=='X')
|
||||
$fm['CapXHeight']=$e[13];
|
||||
}
|
||||
if($gn=='.notdef')
|
||||
$fm['MissingWidth']=$w;
|
||||
}
|
||||
elseif($code=='FontName')
|
||||
$fm['FontName']=$param;
|
||||
elseif($code=='Weight')
|
||||
$fm['Weight']=$param;
|
||||
elseif($code=='ItalicAngle')
|
||||
$fm['ItalicAngle']=(double)$param;
|
||||
elseif($code=='Ascender')
|
||||
$fm['Ascender']=(int)$param;
|
||||
elseif($code=='Descender')
|
||||
$fm['Descender']=(int)$param;
|
||||
elseif($code=='UnderlineThickness')
|
||||
$fm['UnderlineThickness']=(int)$param;
|
||||
elseif($code=='UnderlinePosition')
|
||||
$fm['UnderlinePosition']=(int)$param;
|
||||
elseif($code=='IsFixedPitch')
|
||||
$fm['IsFixedPitch']=($param=='true');
|
||||
elseif($code=='FontBBox')
|
||||
$fm['FontBBox']=array($e[1],$e[2],$e[3],$e[4]);
|
||||
elseif($code=='CapHeight')
|
||||
$fm['CapHeight']=(int)$param;
|
||||
elseif($code=='StdVW')
|
||||
$fm['StdVW']=(int)$param;
|
||||
}
|
||||
if(!isset($fm['FontName']))
|
||||
die('FontName not found');
|
||||
if(!empty($map))
|
||||
{
|
||||
if(!isset($widths['.notdef']))
|
||||
$widths['.notdef']=600;
|
||||
if(!isset($widths['Delta']) && isset($widths['increment']))
|
||||
$widths['Delta']=$widths['increment'];
|
||||
//Order widths according to map
|
||||
for($i=0;$i<=255;$i++)
|
||||
{
|
||||
if(!isset($widths[$map[$i]]))
|
||||
{
|
||||
echo '<b>Warning:</b> character '.$map[$i].' is missing<br>';
|
||||
$widths[$i]=$widths['.notdef'];
|
||||
}
|
||||
else
|
||||
$widths[$i]=$widths[$map[$i]];
|
||||
}
|
||||
}
|
||||
$fm['Widths']=$widths;
|
||||
return $fm;
|
||||
}
|
||||
|
||||
function MakeFontDescriptor($fm, $symbolic)
|
||||
{
|
||||
//Ascent
|
||||
$asc=(isset($fm['Ascender']) ? $fm['Ascender'] : 1000);
|
||||
$fd="array('Ascent'=>".$asc;
|
||||
//Descent
|
||||
$desc=(isset($fm['Descender']) ? $fm['Descender'] : -200);
|
||||
$fd.=",'Descent'=>".$desc;
|
||||
//CapHeight
|
||||
if(isset($fm['CapHeight']))
|
||||
$ch=$fm['CapHeight'];
|
||||
elseif(isset($fm['CapXHeight']))
|
||||
$ch=$fm['CapXHeight'];
|
||||
else
|
||||
$ch=$asc;
|
||||
$fd.=",'CapHeight'=>".$ch;
|
||||
//Flags
|
||||
$flags=0;
|
||||
if(isset($fm['IsFixedPitch']) && $fm['IsFixedPitch'])
|
||||
$flags+=1<<0;
|
||||
if($symbolic)
|
||||
$flags+=1<<2;
|
||||
if(!$symbolic)
|
||||
$flags+=1<<5;
|
||||
if(isset($fm['ItalicAngle']) && $fm['ItalicAngle']!=0)
|
||||
$flags+=1<<6;
|
||||
$fd.=",'Flags'=>".$flags;
|
||||
//FontBBox
|
||||
if(isset($fm['FontBBox']))
|
||||
$fbb=$fm['FontBBox'];
|
||||
else
|
||||
$fbb=array(0,$desc-100,1000,$asc+100);
|
||||
$fd.=",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'";
|
||||
//ItalicAngle
|
||||
$ia=(isset($fm['ItalicAngle']) ? $fm['ItalicAngle'] : 0);
|
||||
$fd.=",'ItalicAngle'=>".$ia;
|
||||
//StemV
|
||||
if(isset($fm['StdVW']))
|
||||
$stemv=$fm['StdVW'];
|
||||
elseif(isset($fm['Weight']) && preg_match('/bold|black/i',$fm['Weight']))
|
||||
$stemv=120;
|
||||
else
|
||||
$stemv=70;
|
||||
$fd.=",'StemV'=>".$stemv;
|
||||
//MissingWidth
|
||||
if(isset($fm['MissingWidth']))
|
||||
$fd.=",'MissingWidth'=>".$fm['MissingWidth'];
|
||||
$fd.=')';
|
||||
return $fd;
|
||||
}
|
||||
|
||||
function MakeWidthArray($fm)
|
||||
{
|
||||
//Make character width array
|
||||
$s="array(\n\t";
|
||||
$cw=$fm['Widths'];
|
||||
for($i=0;$i<=255;$i++)
|
||||
{
|
||||
if(chr($i)=="'")
|
||||
$s.="'\\''";
|
||||
elseif(chr($i)=="\\")
|
||||
$s.="'\\\\'";
|
||||
elseif($i>=32 && $i<=126)
|
||||
$s.="'".chr($i)."'";
|
||||
else
|
||||
$s.="chr($i)";
|
||||
$s.='=>'.$fm['Widths'][$i];
|
||||
if($i<255)
|
||||
$s.=',';
|
||||
if(($i+1)%22==0)
|
||||
$s.="\n\t";
|
||||
}
|
||||
$s.=')';
|
||||
return $s;
|
||||
}
|
||||
|
||||
function MakeFontEncoding($map)
|
||||
{
|
||||
//Build differences from reference encoding
|
||||
$ref=ReadMap('cp1252');
|
||||
$s='';
|
||||
$last=0;
|
||||
for($i=32;$i<=255;$i++)
|
||||
{
|
||||
if($map[$i]!=$ref[$i])
|
||||
{
|
||||
if($i!=$last+1)
|
||||
$s.=$i.' ';
|
||||
$last=$i;
|
||||
$s.='/'.$map[$i].' ';
|
||||
}
|
||||
}
|
||||
return rtrim($s);
|
||||
}
|
||||
|
||||
function SaveToFile($file, $s, $mode)
|
||||
{
|
||||
$f=fopen($file,'w'.$mode);
|
||||
if(!$f)
|
||||
die('Can\'t write to file '.$file);
|
||||
fwrite($f,$s,strlen($s));
|
||||
fclose($f);
|
||||
}
|
||||
|
||||
function ReadShort($f)
|
||||
{
|
||||
$a=unpack('n1n',fread($f,2));
|
||||
return $a['n'];
|
||||
}
|
||||
|
||||
function ReadLong($f)
|
||||
{
|
||||
$a=unpack('N1N',fread($f,4));
|
||||
return $a['N'];
|
||||
}
|
||||
|
||||
function CheckTTF($file)
|
||||
{
|
||||
//Check if font license allows embedding
|
||||
$f=fopen($file,'rb');
|
||||
if(!$f)
|
||||
die('<b>Error:</b> Can\'t open '.$file);
|
||||
//Extract number of tables
|
||||
fseek($f,4,SEEK_CUR);
|
||||
$nb=ReadShort($f);
|
||||
fseek($f,6,SEEK_CUR);
|
||||
//Seek OS/2 table
|
||||
$found=false;
|
||||
for($i=0;$i<$nb;$i++)
|
||||
{
|
||||
if(fread($f,4)=='OS/2')
|
||||
{
|
||||
$found=true;
|
||||
break;
|
||||
}
|
||||
fseek($f,12,SEEK_CUR);
|
||||
}
|
||||
if(!$found)
|
||||
{
|
||||
fclose($f);
|
||||
return;
|
||||
}
|
||||
fseek($f,4,SEEK_CUR);
|
||||
$offset=ReadLong($f);
|
||||
fseek($f,$offset,SEEK_SET);
|
||||
//Extract fsType flags
|
||||
fseek($f,8,SEEK_CUR);
|
||||
$fsType=ReadShort($f);
|
||||
$rl=($fsType & 0x02)!=0;
|
||||
$pp=($fsType & 0x04)!=0;
|
||||
$e=($fsType & 0x08)!=0;
|
||||
fclose($f);
|
||||
if($rl && !$pp && !$e)
|
||||
echo '<b>Warning:</b> font license does not allow embedding';
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* fontfile: path to TTF file (or empty string if not to be embedded) *
|
||||
* afmfile: path to AFM file *
|
||||
* enc: font encoding (or empty string for symbolic fonts) *
|
||||
* patch: optional patch for encoding *
|
||||
* type: font type if fontfile is empty *
|
||||
*******************************************************************************/
|
||||
function MakeFont($fontfile, $afmfile, $enc='cp1252', $patch=array(), $type='TrueType')
|
||||
{
|
||||
//Generate a font definition file
|
||||
if(get_magic_quotes_runtime())
|
||||
@set_magic_quotes_runtime(0);
|
||||
ini_set('auto_detect_line_endings','1');
|
||||
if($enc)
|
||||
{
|
||||
$map=ReadMap($enc);
|
||||
foreach($patch as $cc=>$gn)
|
||||
$map[$cc]=$gn;
|
||||
}
|
||||
else
|
||||
$map=array();
|
||||
if(!file_exists($afmfile))
|
||||
die('<b>Error:</b> AFM file not found: '.$afmfile);
|
||||
$fm=ReadAFM($afmfile,$map);
|
||||
if($enc)
|
||||
$diff=MakeFontEncoding($map);
|
||||
else
|
||||
$diff='';
|
||||
$fd=MakeFontDescriptor($fm,empty($map));
|
||||
//Find font type
|
||||
if($fontfile)
|
||||
{
|
||||
$ext=strtolower(substr($fontfile,-3));
|
||||
if($ext=='ttf')
|
||||
$type='TrueType';
|
||||
elseif($ext=='pfb')
|
||||
$type='Type1';
|
||||
else
|
||||
die('<b>Error:</b> unrecognized font file extension: '.$ext);
|
||||
}
|
||||
else
|
||||
{
|
||||
if($type!='TrueType' && $type!='Type1')
|
||||
die('<b>Error:</b> incorrect font type: '.$type);
|
||||
}
|
||||
//Start generation
|
||||
$s='<?php'."\n";
|
||||
$s.='$type=\''.$type."';\n";
|
||||
$s.='$name=\''.$fm['FontName']."';\n";
|
||||
$s.='$desc='.$fd.";\n";
|
||||
if(!isset($fm['UnderlinePosition']))
|
||||
$fm['UnderlinePosition']=-100;
|
||||
if(!isset($fm['UnderlineThickness']))
|
||||
$fm['UnderlineThickness']=50;
|
||||
$s.='$up='.$fm['UnderlinePosition'].";\n";
|
||||
$s.='$ut='.$fm['UnderlineThickness'].";\n";
|
||||
$w=MakeWidthArray($fm);
|
||||
$s.='$cw='.$w.";\n";
|
||||
$s.='$enc=\''.$enc."';\n";
|
||||
$s.='$diff=\''.$diff."';\n";
|
||||
$basename=substr(basename($afmfile),0,-4);
|
||||
if($fontfile)
|
||||
{
|
||||
//Embedded font
|
||||
if(!file_exists($fontfile))
|
||||
die('<b>Error:</b> font file not found: '.$fontfile);
|
||||
if($type=='TrueType')
|
||||
CheckTTF($fontfile);
|
||||
$f=fopen($fontfile,'rb');
|
||||
if(!$f)
|
||||
die('<b>Error:</b> Can\'t open '.$fontfile);
|
||||
$file=fread($f,filesize($fontfile));
|
||||
fclose($f);
|
||||
if($type=='Type1')
|
||||
{
|
||||
//Find first two sections and discard third one
|
||||
$header=(ord($file[0])==128);
|
||||
if($header)
|
||||
{
|
||||
//Strip first binary header
|
||||
$file=substr($file,6);
|
||||
}
|
||||
$pos=strpos($file,'eexec');
|
||||
if(!$pos)
|
||||
die('<b>Error:</b> font file does not seem to be valid Type1');
|
||||
$size1=$pos+6;
|
||||
if($header && ord($file[$size1])==128)
|
||||
{
|
||||
//Strip second binary header
|
||||
$file=substr($file,0,$size1).substr($file,$size1+6);
|
||||
}
|
||||
$pos=strpos($file,'00000000');
|
||||
if(!$pos)
|
||||
die('<b>Error:</b> font file does not seem to be valid Type1');
|
||||
$size2=$pos-$size1;
|
||||
$file=substr($file,0,$size1+$size2);
|
||||
}
|
||||
if(function_exists('gzcompress'))
|
||||
{
|
||||
$cmp=$basename.'.z';
|
||||
SaveToFile($cmp,gzcompress($file),'b');
|
||||
$s.='$file=\''.$cmp."';\n";
|
||||
echo 'Font file compressed ('.$cmp.')<br>';
|
||||
}
|
||||
else
|
||||
{
|
||||
$s.='$file=\''.basename($fontfile)."';\n";
|
||||
echo '<b>Notice:</b> font file could not be compressed (zlib extension not available)<br>';
|
||||
}
|
||||
if($type=='Type1')
|
||||
{
|
||||
$s.='$size1='.$size1.";\n";
|
||||
$s.='$size2='.$size2.";\n";
|
||||
}
|
||||
else
|
||||
$s.='$originalsize='.filesize($fontfile).";\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
//Not embedded font
|
||||
$s.='$file='."'';\n";
|
||||
}
|
||||
$s.="?>\n";
|
||||
SaveToFile($basename.'.php',$s,'t');
|
||||
echo 'Font definition file generated ('.$basename.'.php'.')<br>';
|
||||
}
|
||||
?>
|
15
webui/system/helper/fpdf16/font/symbol.php
Executable file
15
webui/system/helper/fpdf16/font/symbol.php
Executable file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['symbol']=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);
|
||||
?>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user