Compare commits

..

328 Commits

Author SHA1 Message Date
d860676bba Update changelog 2014-06-12 15:37:13 +04:00
99cf1f9d65 Update version 2014-06-12 15:36:55 +04:00
09f32100f2 Update list of locales in packaging script 2014-06-12 15:13:01 +04:00
1d89b7562c Change japanese language code according to ISO 639 2014-06-10 18:26:54 +04:00
fc25f35655 Prevent use of an invalid salt for Blowfish hashing of passwords 2014-06-08 20:55:12 +04:00
f15ce27cde Disable caching of an avatar on the page for avatar's upload 2014-05-19 14:37:28 +04:00
739adf3f89 Implement CSRF protection for deletion of an avatar 2014-05-19 14:29:46 +04:00
85a78c9cd1 Improve filtration of special characters 2014-05-15 15:54:16 +04:00
a844768d08 Improve README file 2014-05-12 15:31:19 +04:00
e9186b3c14 Update javascripts: version changed to 1.6.11 2014-04-06 00:56:09 +04:00
39c315c09b Update changelog 2014-04-06 00:44:13 +04:00
727663d67c Update version 2014-04-06 00:44:03 +04:00
Fedor A. Fetisov
d141167c3e Make filtration of special characters unicode safe 2014-03-29 00:55:03 +04:00
8f56f0ea81 Update list of locales in packaging script 2014-03-24 23:21:48 +04:00
6e93210976 Update changelog 2014-03-24 23:15:54 +04:00
3aa0f022d5 Update version 2014-03-24 23:15:45 +04:00
d819e20721 Encode the value of Mibew root according to RFC 3986 2014-03-24 03:07:32 +04:00
bf254a2604 Improve filtration of special characters (see Issue #30) 2014-03-20 00:56:24 +04:00
e51e3ad24d Revoke invalid patch 2014-03-18 14:16:07 +04:00
19023b3cdc Merge pull request #29 from mitelg/patch-1
Fix typo in update.js
2014-03-18 13:13:55 +03:00
mitelg
90f1001d16 Update update.js 2014-03-18 11:04:49 +01:00
2ff5ea3fb6 Make open_basedir protection optional (opt-in policy) 2014-03-07 17:57:59 +04:00
f3ec6dd53b Prevent low level system settings from being stored in the database (see Issue #22) 2014-03-07 16:50:25 +04:00
7dd680cea1 Remove 'empty password' notification when altering another operator 2014-01-24 17:33:50 +04:00
1d7b27a99d Fix bug with tab selection on permissions management page while groups are disabled 2014-01-24 17:33:11 +04:00
d19ae22a8b Update version 2014-01-24 16:31:54 +04:00
17622b1d40 Update changelog 2014-01-24 15:56:06 +04:00
afa92d45cc Update copyright notices 2014-01-24 15:55:31 +04:00
68b0c8619e Update list of locales in packaging script 2014-01-23 18:55:03 +04:00
04826f394a Add name for the Japanese locale 2014-01-23 18:33:20 +04:00
Dmitriy Simushev
71aaceba56 Fix typo in README file 2014-01-23 12:41:17 +00:00
Dmitriy Simushev
3019cdc831 Fix wrong defenition of $home_locale global variable 2014-01-15 14:10:52 +00:00
559ec80248 Add variables check into the thread processor view 2013-12-22 04:40:25 +04:00
4588710478 Hide small login form on front login page 2013-12-22 04:39:39 +04:00
8597446abc Restrict access to login-related pages for authenticated operators 2013-12-22 04:26:03 +04:00
01dba643ba Fix multiple privilege escalation vulnerabilities (thanks to X Chen for advice) 2013-12-22 04:08:47 +04:00
f9fd80423f Fix permissions-related bug in menu appearance 2013-12-22 03:17:14 +04:00
f29be662a6 Make use of the new 'view notifications' permission on the dashboard 2013-12-22 03:16:10 +04:00
Dmitriy Simushev
df2ed6fdee Update .gitignore to don't index custom locales 2013-12-16 16:08:12 +00:00
Dmitriy Simushev
47a38fab3e Fix open_basedir on Windows XAMPP (thanks to X Chen) 2013-12-16 11:25:08 +00:00
Dmitriy S. Simushev
a1a798785b Merge pull request #12 from smaug1985/legacy
Added new permission for operators to see Notifications
2013-12-13 05:56:16 -08:00
Borja Rubio
85c4caefdd Fixed problem with security constants 2013-12-11 19:20:52 +01:00
11bb9a9b58 Update changelog 2013-11-28 12:41:42 +04:00
7489f0d368 Fix layout for silver theme 2013-11-28 12:37:08 +04:00
69fc8b8701 Update logo for silver theme 2013-11-26 14:41:35 +04:00
86ac3dc434 Update list of locales in packaging script 2013-11-26 12:44:08 +04:00
e10b59ad06 Change version in packaging script 2013-11-24 23:44:27 +04:00
dce9f2e339 Update changelog 2013-11-24 23:33:23 +04:00
56d17d567a Set default and safe web server settings 2013-11-14 18:39:21 +04:00
2ef473d2c1 Add missed .htaccess into silver theme 2013-11-14 18:18:36 +04:00
22a3690d67 Disable autocomplete for password fields 2013-11-14 17:36:05 +04:00
2ff3e8c4f0 Prevent empty messages from being posted (related to Issue #9) 2013-11-14 15:09:52 +04:00
6eef9e8762 Add missed type attribute for embed javascripts 2013-11-14 12:48:36 +04:00
Borja Rubio
01eff99db9 Added new permission for operators to see Notifications 2013-11-08 11:22:55 +01:00
9a0c9f42a1 Improve validation of incoming params 2013-11-07 02:55:14 +04:00
9f94e73dd2 Change version to 1.6.8 2013-10-30 19:59:28 +04:00
77ed17082f Update changelog 2013-10-30 19:50:10 +04:00
39d3d2b7b0 Switch to the new logo 2013-10-30 19:47:09 +04:00
dc006e0a50 Add missed CSRF check 2013-10-29 02:25:51 +04:00
12f4cebe31 Fix bug with extra escaping of button code (related to Issue #11) 2013-10-21 01:10:21 +04:00
d21482ae8a Remove extra colon from the presurvey templates of 'default' and 'silver' themes 2013-10-16 18:58:16 +04:00
f324249c8c Fix invalid link for takeover of a chat (see Issue #10) 2013-10-14 17:19:15 +04:00
6130b6f2af Fix locale code for Norsk nynorsk 2013-10-10 14:12:25 +04:00
849cb79b0f Fix locales' names and codes 2013-10-06 01:46:47 +04:00
150fdbd3da Fix issue when special chars in messages affected a browser's parser 2013-10-03 18:18:53 +04:00
0b2bff871f Fix bug with extra escaping of 'session expired' message 2013-10-01 01:33:03 +04:00
f845cb628e Completely wiped out the old application name 2013-09-27 18:57:37 +04:00
3478bf187d Update README 2013-09-27 18:44:09 +04:00
Dmitriy Simushev
821de1baec Clean up repository 2013-09-27 18:00:51 +04:00
f2d9674f02 Remove useless links to 'Download' page for absent Mibew Jabber 2013-09-26 18:24:09 +04:00
8cec341fd0 Unify translations: add extra Deutsch localization constant from master branch 2013-09-26 17:49:59 +04:00
a201761bc3 Add Lithuanian translation (thanks to livechat.lt) 2013-09-26 17:15:15 +04:00
63a2a71245 Fixed some localized constants 2013-09-26 17:14:54 +04:00
5a6b4e5437 Remove useless double strings sanitizing 2013-09-25 15:29:57 +04:00
4f6b2624e2 Update packaging script 2013-09-25 00:24:00 +04:00
dc2e139556 Update changelog 2013-09-25 00:13:34 +04:00
5ea2f8416a Change version to 1.6.7 2013-09-25 00:11:20 +04:00
36aa4f4b74 Add initialization of 'sendmail_from' PHP variable
This is a workaround for some systems that requires this variable to be set explicitly for sending emails (thanks to falcon for the issue)
2013-09-24 23:33:06 +04:00
7113ab3158 Fix missed db connection in escaping values when storing notification 2013-09-24 23:25:32 +04:00
96e1f4047e Improve passwords hashing and testing
* Fix issue with failed blowfish-based encryption (see second part of Issue #7)
* Switch to binary safe hashes comparison
2013-09-24 20:09:45 +04:00
239e62d979 Prevent user from setting an empty name (see Issue #3) 2013-09-24 18:39:54 +04:00
338d5a9976 Beautify regexp for links highlighting in dialogue 2013-09-24 15:58:44 +04:00
36f8f68f9f Merge pull request #6 from falcon4fun/patch-1
HTTPS links highlighting
2013-09-24 04:56:41 -07:00
da1a171fbc Prevent generation of negative tokens (see Issue #5) 2013-09-24 14:44:04 +04:00
falcon4fun
8bf1e34fce Update chat.php 2013-09-24 10:44:30 +03:00
falcon4fun
ccc9bdfbb0 HTTPS links highlighting
Make a https links highlighting too.
2013-09-24 10:34:53 +03:00
Dmitriy Simushev
5a93a16303 Update Dutch translation (thanks to Erik Kerkhoven) 2013-09-22 13:45:20 +04:00
7cfe7d6a4d Update packaging script 2013-09-17 19:18:49 +04:00
95c37f1777 Change version to 1.6.6 2013-09-14 22:52:03 +04:00
547a415488 Update changelog 2013-09-14 22:49:42 +04:00
032306866a Fix bugs with extra escaping of special chars in requests related to operations with threads 2013-09-14 22:31:13 +04:00
2779206a1a Add new localization constants 2013-09-14 22:15:36 +04:00
6e3f6a4201 Add missed parentheses 2013-09-14 20:52:07 +04:00
5d728ed7fd Completely wiped out the old application name 2013-09-14 20:32:58 +04:00
16879885c5 Change some translations to decrease confusion with the old application name 2013-09-14 20:18:35 +04:00
fc965fd285 Rename some cookies to decrease confusion with the old application name 2013-09-14 16:36:39 +04:00
1c0b4f48c9 Rename some functions to decrease confusion with the old application name 2013-09-14 16:30:54 +04:00
e94ba149df Update README file to decrease confusion with the old application name 2013-09-14 16:28:50 +04:00
5afc23c446 Switch to a properly hashed passwords 2013-09-14 15:59:38 +04:00
003ba6f46b Make session cookie more secure 2013-09-14 15:58:57 +04:00
13729dac93 Improve generation of CAPTCHA images 2013-09-13 22:56:01 +04:00
8bb1551f7a Switch to a more secure method for generation of the thread token 2013-09-13 20:19:12 +04:00
d9a8afeb57 Fix regular expressions for integer IDs 2013-09-13 20:18:06 +04:00
d7c18215c5 Switch to a more secure method for generation of the CSRF token 2013-09-13 19:53:20 +04:00
2334a0ed0a Switch to a more secure method for generation of the token for request for a password restore 2013-09-13 19:36:56 +04:00
e61706955a Switch to a more reliable function for generation of userid 2013-09-13 19:36:31 +04:00
b77e2a9743 Fix bug with userid type in sql requests 2013-09-13 19:33:31 +04:00
4f43280bd1 Set PHPSESSID cookie as secure if HTTPS is used 2013-09-13 16:21:10 +04:00
e7ae0845d8 Set PHPSESSID cookie as HTTP-only 2013-09-13 15:56:06 +04:00
0cfb7a74f5 Fix multiple potential filepath manipulation vulnerabilities 2013-09-13 15:26:54 +04:00
84467fbb8d Restrict opening of files outside the Mibew installation 2013-09-13 14:34:59 +04:00
afa06b21e2 Bug fix
Properly check file handler before making use of it in common.php
2013-09-13 14:34:32 +04:00
6747e2f557 Improve algorithm of setting and storing locale setting 2013-09-13 13:36:04 +04:00
2559630e8f Add verification of values of the default and home locales 2013-09-11 20:18:26 +04:00
097ee2b0d9 Fix files' permissions 2013-09-11 19:35:17 +04:00
50c0b50abf Sanitize database tables prefix 2013-09-10 19:10:26 +04:00
f26af7f05d Make headers more safe 2013-09-10 17:41:54 +04:00
b42f5bdd0d Sanitize path to application and remove extra slashes from it 2013-09-10 17:28:22 +04:00
92847d1a52 Fix multiple (potential) SQL Injections 2013-09-10 16:21:34 +04:00
2532f3bc01 Enable default conversion of single quotes during HTML entities conversion 2013-09-06 17:08:27 +04:00
441e88dfa9 Remove redundant whitespaces 2013-09-06 15:35:11 +04:00
0f86f558ec Fix HTML attributes markup 2013-09-06 15:34:42 +04:00
621f5951c4 Fix paths in login-related forms 2013-09-06 14:34:44 +04:00
4e6eff55e5 Mark necessary comment field in ban form 2013-09-06 14:33:11 +04:00
03265a1fb0 Fix multiple CSRF vulnerabilities 2013-09-06 14:32:25 +04:00
9aef0fb2d4 Fix multiple XSS vulnerabilities (including CVE-2012-0829) 2013-09-06 14:31:07 +04:00
Dmitriy Simushev
3ee7fca025 Add captcha to pre-chat survey 2013-08-28 12:33:25 +04:00
845d250b88 Fix steps enumeration in README file 2013-08-04 13:38:17 +04:00
efe6caee71 Mibew Tray 1.1.1 release
Update links to an actual mibew domain in Mibew Tray application (thanks to Nemesis0one)
2013-07-31 16:38:10 +04:00
dcd5ecebfa 1.6.5 released 2013-07-24 17:23:48 +04:00
32b9ba862b Update db and features versions 2013-07-24 15:50:00 +04:00
eb65ec9329 Update translations (da, de, fi, it, pt-br) 2013-07-24 15:49:22 +04:00
d6c18a5ef7 Update javascripts: version changed to 1.6.5 2013-07-24 01:47:07 +04:00
3ea9c6c893 Update copyright notice 2013-07-24 01:20:36 +04:00
4cd7bab1be Improve packaging script 2013-07-24 00:42:43 +04:00
95d95daa34 Update localization constants 2013-07-24 00:42:23 +04:00
Dmitriy Simushev
b5d05f5411 Update license info in license.php 2013-07-24 00:08:46 +04:00
Evgeny Gryaznov
13ca97f10d update headers 2013-03-06 22:56:55 +01:00
Evgeny Gryaznov
4f483abe26 Merge branch 'v1.6.x' 2013-03-06 22:52:38 +01:00
Evgeny Gryaznov
2400cd2588 Merge branch 'v1.6.x' 2012-03-12 01:27:47 +01:00
Evgeny Gryaznov
035479f7a2 Merge branch v1.6.x into master 2012-03-12 01:05:44 +01:00
Evgeny Gryaznov
b969bf7717 phpstorm 3.0.3 config files 2012-03-12 00:20:15 +01:00
Evgeny Gryaznov
463ff10744 update Persian (by Amir Khani) 2012-03-12 00:19:36 +01:00
Evgeny Gryaznov
2b3b897545 update Hungarian (by Istvan Somlai) 2012-03-12 00:19:28 +01:00
Evgeny Gryaznov
875bccb9d0 update Simplified Chinese (by Xiaoyu) 2012-03-12 00:19:20 +01:00
Evgeny Gryaznov
d753a68a9e update Spanish (by Jesus Plaza) 2012-03-12 00:19:12 +01:00
Evgeny Gryaznov
ae2d6e95bb update Portuguese European, pt-pt (by Carlos Silva) 2012-03-12 00:19:01 +01:00
Evgeny Gryaznov
15c1127cb7 update Indonesian (by Adi Nugroho), without images though 2012-03-12 00:18:53 +01:00
Evgeny Gryaznov
dbd2a058e2 update Italian (Luca Sasdelli) 2012-03-12 00:18:45 +01:00
Evgeny Gryaznov
9df971df14 update English (by Olimax) 2012-03-12 00:18:27 +01:00
Evgeny Gryaznov
34765f7180 update Belarusian (by Berasneu) 2012-03-12 00:16:21 +01:00
Evgeny Gryaznov
cb373fb7f2 update pl (by WebTower), hu, fr 2012-03-12 00:16:15 +01:00
Evgeny Gryaznov
701c8e2251 fix encoding in operators list 2012-03-12 00:16:00 +01:00
a749909f90 Fix check of existance of tables indexes during database upgrade process 2012-03-12 00:15:49 +01:00
6a867b4a92 Create indexes for database tables during installation process 2012-03-12 00:15:39 +01:00
Evgeny Gryaznov
d02b113f93 redirect to profile page after first login; informational banner when password is blank; do not enforce password change; rename Home -> Dashboard 2011-04-15 01:38:43 +02:00
Haynes
aee46f9e2a This commit forces the User to set a password for the Administrator before doing anything else after the installation. 2011-04-14 23:52:33 +02:00
Evgeny Gryaznov
c053bfe283 removed .iml; modern tabs on group settings pages; beautifying code 2011-04-07 00:52:03 +02:00
Evgeny Gryaznov
7ff174aa86 silver skin by Alekin Pavel (update) 2011-04-06 23:44:28 +02:00
Evgeny Gryaznov
ff141e42f2 silver skin by Alekin Pavel (initial commit) 2011-04-06 23:44:19 +02:00
Evgeny Gryaznov
1700b128b0 fix theme preview; fix bottom anchor in chat.js 2011-04-06 23:43:50 +02:00
Evgeny Gryaznov
2261c1cfbe fix TYPE -> ENGINE (mysql 5.5 compatibility) 2011-04-06 23:42:59 +02:00
Evgeny Gryaznov
a68b9e6e9c 1.6.4 released 2011-04-06 23:42:28 +02:00
Evgeny Gryaznov
02c43a147d 1.6.4 RC2 2011-04-06 23:42:08 +02:00
Evgeny Gryaznov
483bc80180 1.6.4 RC1 2011-04-06 23:41:57 +02:00
Evgeny Gryaznov
71f9b1fa6a update whatsnew 2011-04-06 23:41:47 +02:00
Evgeny Gryaznov
81c84f3702 better installation messages; ignore \r in checksum 2011-04-06 23:41:15 +02:00
Evgeny Gryaznov
ab922fd519 fix cr in .htaccess; disable drop tables; do not show change password/delete install folder if admin has password; check file permissions/checksum 2011-04-06 23:40:06 +02:00
Evgeny Gryaznov
4257b6f87b fix sound issues in windows 2011-04-06 23:36:15 +02:00
Evgeny Gryaznov
049def144e update whatsnew, recompute resources 2011-04-06 23:34:34 +02:00
Evgeny Gryaznov
acc86b9221 ability to override notification email for group 2011-04-06 23:32:29 +02:00
Evgeny Gryaznov
3715d2207e fix: do not cache button image (thanks to Alex Morozov) 2011-04-06 23:32:13 +02:00
Evgeny Gryaznov
5595bd0f6e install page: links to check the sound 2011-04-06 23:31:39 +02:00
Evgeny Gryaznov
2a5943c058 update release script 2011-04-06 23:21:57 +02:00
Evgeny Gryaznov
9d9cbf7e81 code cleanup 2011-04-06 23:21:36 +02:00
Evgeny Gryaznov
3d368c6783 fix session using for installations with prefix 2011-02-27 00:11:08 +01:00
Evgeny Gryaznov
9cc2833364 fix tr/fr locale 2011-02-27 00:04:59 +01:00
Evgeny Gryaznov
f4e99a3d52 fix minor issues (link param, formatting) 2011-02-26 23:54:58 +01:00
Evgeny Gryaznov
03dec2afb2 format code 2011-02-26 23:48:41 +01:00
Evgeny Gryaznov
2bcffd5f4a replace " . $mysqlprefix . " -> ${mysqlprefix} 2011-02-26 14:29:11 +01:00
Evgeny Gryaznov
84bd011a11 ka images, part 2 2011-02-25 01:00:03 +01:00
Evgeny Gryaznov
74bc8de4fb update ka images 2011-02-25 00:45:40 +01:00
Evgeny Gryaznov
893d455a32 Georgian locale (by George Zviadadze) 2011-02-24 22:15:55 +01:00
Evgeny Gryaznov
d61a9d30f7 disable feature checkboxes for non-admin 2011-02-22 00:16:31 +01:00
Evgeny Gryaznov
d308977a00 Ignore packaged releases/output of check_translation (proposed by Peter Harkins); fix formatting in php 2011-02-21 23:59:46 +01:00
Peter Harkins
8a39697351 Check admin permissions 2011-02-21 23:47:59 +01:00
Evgeny Gryaznov
c48cf51e58 fix captcha 2011-02-21 01:08:47 +01:00
Evgeny Gryaznov
acfd461617 fix XSS problem in leavemessage 2011-02-21 01:07:35 +01:00
Evgeny Gryaznov
0829a0bd2b ignore .DS_Store 2011-02-21 00:12:23 +01:00
Evgeny Gryaznov
36283f4f87 add el, update fa 2011-02-21 00:10:05 +01:00
Evgeny Gryaznov
735225dea8 update page: show iconv module status 2011-02-21 00:09:55 +01:00
Evgeny Gryaznov
dd92249a0a update ar, cs, da, fa, fi, it, ka, ru 2011-02-21 00:09:46 +01:00
Evgeny Gryaznov
7f290fd2b2 turn off spelling intention 2011-02-20 23:11:36 +01:00
Evgeny Gryaznov
a58c7774a0 swt-base notifier application; update java api 2011-02-20 23:05:47 +01:00
Evgeny Gryaznov
de5717e2f2 swt libraries 3.6.1 - cocoa 64; IC 10.0.2 project 2011-02-17 00:28:30 +01:00
Evgeny Gryaznov
d0db10ae6e remove old idea project 2011-02-17 00:23:35 +01:00
Evgeny Gryaznov
374e3307d9 phpstorm files 2011-02-16 03:32:24 +01:00
Evgeny Gryaznov
7418e57075 update copyrights - 2011 2011-02-14 22:48:14 +01:00
Evgeny Gryaznov
32d64d8600 update version to 1.6.4 2011-02-13 23:29:47 +01:00
Evgeny Gryaznov
f65b49d49b fix eol in readme.txt 2011-02-13 23:22:24 +01:00
Evgeny Gryaznov
b34f1727c0 idea project files + gitignore 2011-02-13 23:22:13 +01:00
Evgeny Gryaznov
bd97e06dab remove site 2011-02-13 23:12:38 +01:00
Evgeny Gryaznov
21d0e5ada6 added README 2010-11-07 22:17:06 +01:00
Evgeny Gryaznov
419f161723 fix eol in repository 2010-11-07 22:04:53 +01:00
Evgeny Gryaznov
47ba545e4c update .gitattributes 2010-11-07 22:04:14 +01:00
Evgeny Gryaznov
2d77bc03f6 fix eol in repository 2010-11-07 22:02:41 +01:00
Evgeny Gryaznov
e43c517b49 .gitattributes added 2010-11-07 21:55:38 +01:00
Evgeny Gryaznov
1388151bf8 small fix in /libs/operator.php, a few missed db usages, formatting 2010-11-07 15:12:40 +01:00
novagen
7cc810c683 Fixed a problem with multiple installations on the same domain.
When a user logged in on one chat, they also got logged in to all the other chats.
2010-10-29 11:44:17 +02:00
novagen
e304901bd0 Fixed bug in /libs/operator.php 2010-10-26 12:21:55 +02:00
novagen
d70bfbcce0 Fixed a bug in function db_build_select 2010-10-26 10:23:04 +02:00
novagen
a0a9a7f708 Added support for multiple installations in one database. User can add a prefix to the tables in the database. This is set in the variable $mysqlprefix in /libs/config.php 2010-10-26 09:53:44 +02:00
Evgeny Gryaznov
43e69a0e3a sort tr, prepare to release
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@810 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-07 22:59:16 +00:00
Evgeny Gryaznov
83e861cf9b turkish by Serkan Durusoy
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@809 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-07 22:54:34 +00:00
Evgeny Gryaznov
3d42b81053 image sources: fix tr dataset
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@808 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-07 22:47:24 +00:00
Evgeny Gryaznov
4eb81a1fd7 update tr images (by Serkan Durusoy)
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@807 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-07 22:45:34 +00:00
Evgeny Gryaznov
4bd0b9dd37 tr: regenerate buttons
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@806 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-07 22:40:47 +00:00
Evgeny Gryaznov
ffbd9397ab installation: proper name of folder to remove, fix locales
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@805 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-02 18:31:45 +00:00
Evgeny Gryaznov
47b4a82da2 check webimroot variable during installation
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@804 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-02 18:20:55 +00:00
Evgeny Gryaznov
a0d3403cb5 generate Text button started
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@803 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-02 17:44:38 +00:00
Evgeny Gryaznov
f069d8d9b6 update whatsnew
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@802 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-02 12:56:57 +00:00
Evgeny Gryaznov
b1e2624702 fix captcha
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@801 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-02 12:35:24 +00:00
Evgeny Gryaznov
a99a621a66 getcode refactoring started: rename view file, move generate_button method
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@800 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-02 12:28:16 +00:00
Evgeny Gryaznov
64f27e8805 create button.php (for compatibility)
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@799 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-02 12:15:46 +00:00
Evgeny Gryaznov
d916b10276 rename button.php -> b.php
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@798 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-02 12:12:56 +00:00
Evgeny Gryaznov
e5833dcc75 update release script
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@797 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-02 12:04:11 +00:00
Evgeny Gryaznov
5459b5ff4b add download links for: bg, ca, hu, ro, sv
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@796 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-01 23:11:04 +00:00
Evgeny Gryaznov
4087a5f9bc eol-style = LF
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@795 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-01 22:58:53 +00:00
Evgeny Gryaznov
8ff4c21993 small properties fixes, remove odd images
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@794 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-01 22:12:07 +00:00
Evgeny Gryaznov
1d69ead8f2 update locales (from the site)
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@793 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-01 21:50:43 +00:00
Evgeny Gryaznov
024fc33d78 update locales/hu/button/*
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@792 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-01 21:46:34 +00:00
Evgeny Gryaznov
fd24c49f5b add hu dataset
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@791 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-01 21:40:46 +00:00
Evgeny Gryaznov
a9b87cf5e7 update locales/hu/images/*
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@790 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-01 21:35:12 +00:00
Evgeny Gryaznov
d69f6463b4 localize locales/ro/images/*
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@789 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-05-01 21:00:29 +00:00
Evgeny Gryaznov
b1113fcbe1 ro buttons
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@788 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-30 22:13:14 +00:00
Evgeny Gryaznov
03dc8d7bbf ro dataset
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@787 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-30 22:09:30 +00:00
Evgeny Gryaznov
03f4b241b3 update sv/button/*
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@786 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-30 22:03:16 +00:00
Evgeny Gryaznov
755078d223 sv datasets
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@785 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-30 22:01:06 +00:00
Evgeny Gryaznov
af1d15c401 add sv dataset
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@784 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-30 21:40:24 +00:00
Evgeny Gryaznov
d9f8b2366e update sv/images/*
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@783 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-30 21:33:20 +00:00
Evgeny Gryaznov
2c0ebbe7c9 update ca images
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@782 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-27 22:34:12 +00:00
Evgeny Gryaznov
3e617ff62e add bg & ca
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@781 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-27 22:13:52 +00:00
Evgeny Gryaznov
ad270cf968 update bg buttons
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@780 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-27 21:56:11 +00:00
Evgeny Gryaznov
d97b7c45c6 regenerate images; remove simple button for bg
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@779 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-27 21:35:00 +00:00
Evgeny Gryaznov
465172329b proper links
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@778 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-26 21:31:47 +00:00
Evgeny Gryaznov
68ec93abf6 update contacts
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@777 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-26 21:03:57 +00:00
Evgeny Gryaznov
4cd3cd3e47 proper links
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@776 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-26 20:58:55 +00:00
Evgeny Gryaznov
07b1d1310b revert ua, until we have it translated
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@775 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-26 20:40:50 +00:00
Evgeny Gryaznov
836ffcc62a link to article
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@774 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-26 20:39:41 +00:00
Evgeny Gryaznov
d749e58621 update credits page
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@773 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-26 20:35:05 +00:00
Evgeny Gryaznov
e2b5238b78 update credits page
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@772 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-26 20:29:36 +00:00
Evgeny Gryaznov
b77ee7efb0 add nl/fr
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@771 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-25 23:46:45 +00:00
Evgeny Gryaznov
fd597941ee update ru (site localization, sorted)
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@770 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-25 23:37:45 +00:00
Evgeny Gryaznov
cecdbacf8a update sp (site localization, sorted)
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@769 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-25 23:36:53 +00:00
Evgeny Gryaznov
4524bafd0a add missing locales in packing script
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@768 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-25 23:32:38 +00:00
Evgeny Gryaznov
3903449edc apply patch by Andrew Armstrong: available operators list (revised); remove odd eval code in common.js
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@767 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-25 23:28:05 +00:00
Evgeny Gryaznov
59e5325785 replace preview.php -> themes.php in properties, add Catalan lang
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@766 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-23 00:21:37 +00:00
Evgeny Gryaznov
f82f10ee71 punctuation in Catalan
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@765 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-23 00:19:25 +00:00
Evgeny Gryaznov
af3ebb058e sort and fix punctuation
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@764 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-22 23:48:18 +00:00
Evgeny Gryaznov
3e5f3c254c sort locales
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@763 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-22 23:15:18 +00:00
Evgeny Gryaznov
fb7bddebdc update Latvian
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@762 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-22 23:10:23 +00:00
Evgeny Gryaznov
eb71d62ffd update Persian
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@761 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-22 23:05:50 +00:00
Evgeny Gryaznov
79d789f98d Bulgarian by Teodor Todorov
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@760 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-21 22:07:49 +00:00
Evgeny Gryaznov
10dcf26128 Bulgarian by Teodor Todorov
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@759 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-21 21:07:55 +00:00
Ed Kraus
3994000200 Initial import.
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@758 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-21 02:12:37 +00:00
Ed Kraus
828e59d53f Discontinuing ticket support, linked "Support" to our contact page.
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@757 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-04-01 02:08:48 +00:00
Evgeny Gryaznov
63a083804c initial ca by Enric Garcia Barrios
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@756 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-03-16 21:13:16 +00:00
Evgeny Gryaznov
ade7d13151 initial sv by Sverok - Oliver Sundström, Nina Högberg, Andreas Brodin and David Stenström
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@755 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-03-16 21:09:53 +00:00
Evgeny Gryaznov
cee36b75fc update packing script
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@754 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-03-11 21:37:34 +00:00
Evgeny Gryaznov
a2b897f91e cs & fi created
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@751 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-03-03 22:02:37 +00:00
Evgeny Gryaznov
904d5588e7 copyright text in generated .js
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@750 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-02-27 16:06:25 +00:00
Evgeny Gryaznov
1f6946ec44 google closure compiler updated: better compression
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@749 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-02-27 14:44:41 +00:00
Evgeny Gryaznov
5b743ecdec use google closure compiler
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@748 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-02-27 14:38:02 +00:00
Evgeny Gryaznov
491676f37e extract get_operator_groupslist (fix for Java API)
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@747 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-02-27 14:33:59 +00:00
Evgeny Gryaznov
190f7914f4 jquery 1.3.2 -> 1.4.2
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@746 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-02-27 14:24:41 +00:00
Evgeny Gryaznov
91683c4de0 add ua, update ru/en
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@745 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-02-24 00:08:20 +00:00
Evgeny Gryaznov
f8571cfa67 minor: da, tr
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@744 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-02-23 23:02:14 +00:00
Evgeny Gryaznov
c2c0953aff update ar, ro by Tallal Suliman Eshaq
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@743 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-02-23 23:00:21 +00:00
Evgeny Gryaznov
86bfe87956 add persian
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@742 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-02-23 22:51:51 +00:00
Evgeny Gryaznov
3cdfd8fd3c Thai/Dutch
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@741 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-02-18 22:00:16 +00:00
Evgeny Gryaznov
c1abc7376e locales tool on the top
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@740 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-02-18 21:54:52 +00:00
Evgeny Gryaznov
95701358da sort messages, add thai language, fix nl
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@739 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-02-17 08:36:32 +00:00
Evgeny Gryaznov
2acc073581 thai by Bongkoch P.
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@738 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-02-17 08:29:50 +00:00
Evgeny Gryaznov
85734d07a5 dutch update from elegantchaos
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@737 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-02-17 08:24:28 +00:00
Evgeny Gryaznov
79d901847f minor improvements: site properties
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@736 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-28 22:43:27 +00:00
Evgeny Gryaznov
923b9c944a pad file 1.6.3, newlocale.zip
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@735 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-28 22:40:57 +00:00
Evgeny Gryaznov
01217e6b7d Notification application (without options dialog)
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@734 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-23 10:35:54 +00:00
Evgeny Gryaznov
ecb7d3643f menu with visitors list, info
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@733 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-17 21:32:18 +00:00
Evgeny Gryaznov
e453ed2757 add MibewAgent, offline/online icon
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@732 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-17 21:15:31 +00:00
Evgeny Gryaznov
cb85159474 add notifier project
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@731 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-17 19:03:40 +00:00
Evgeny Gryaznov
fcb70074bf remove empty folder
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@730 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-17 18:59:38 +00:00
Evgeny Gryaznov
5bf6ed1acd extract api part
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@729 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-17 18:58:57 +00:00
Evgeny Gryaznov
0656e7d8f2 build dmg, fix plist.info, ignore dmg
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@728 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-17 00:23:25 +00:00
Evgeny Gryaznov
3d8cc81ced update ant file, exclude jars/bin
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@727 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-17 00:04:31 +00:00
Evgeny Gryaznov
3988fe9724 add deployment folder
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@726 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-16 23:29:40 +00:00
Evgeny Gryaznov
9a054da64b send new visitor notification
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@725 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-16 00:42:28 +00:00
Evgeny Gryaznov
42bb76d504 notifications on home page, warn if operator is offline
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@724 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-15 23:47:35 +00:00
Evgeny Gryaznov
b39c9a8d33 show notification details
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@723 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-10 23:58:05 +00:00
Evgeny Gryaznov
9f4db8d39d remove copyright page
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@722 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-10 23:08:24 +00:00
Evgeny Gryaznov
7c65433c5f sort properties, update ru, fix label width (login page)
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@721 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-10 14:19:28 +00:00
Evgeny Gryaznov
f9965f4d10 add "Notifications Log" page, record sent mails, fast history search, fix redirection to groups
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@720 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-10 13:39:49 +00:00
Evgeny Gryaznov
ecfe7ebfc4 notify about new features
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@719 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-09 22:01:19 +00:00
Evgeny Gryaznov
d98d0e04d8 service "Jabber notifications", hide operator jabber options when service is off, fix css
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@718 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-09 21:33:33 +00:00
Evgeny Gryaznov
958423ef35 two-row tab menu, two column options in "generate code", jabber notification option, adjust db
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@717 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-09 20:58:27 +00:00
Evgeny Gryaznov
5b91e98928 update js folder references 163 -> 164
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@716 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-07 22:28:18 +00:00
Evgeny Gryaznov
2b31cc8d33 rename js folder -> 164
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@715 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-07 22:23:51 +00:00
Evgeny Gryaznov
3a17dd02ab update year in headers
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@714 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-07 22:14:29 +00:00
Evgeny Gryaznov
c37027ebb0 hu properties
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@713 c66351dc-e62f-0410-b875-e3a5c0b9693f
2010-01-07 22:08:27 +00:00
Evgeny Gryaznov
8824ee3923 fix demo
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@712 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-12-27 21:06:24 +00:00
Evgeny Gryaznov
c64d4d3525 update news
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@711 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-12-27 20:49:48 +00:00
Evgeny Gryaznov
dcc2f75732 features list
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@710 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-12-27 20:38:56 +00:00
Evgeny Gryaznov
a126c76477 localize dates on downloads page, fix site name in sp locale
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@709 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-12-20 00:56:48 +00:00
Evgeny Gryaznov
67809dc9d9 localize dates on downloads page, fix site name in sp locale
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@708 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-12-20 00:53:34 +00:00
Evgeny Gryaznov
461f9ed8e2 localize home page
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@707 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-12-20 00:43:08 +00:00
Evgeny Gryaznov
fa7330b365 get rid of smart getlocale, folders for languages
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@706 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-12-19 23:35:54 +00:00
Evgeny Gryaznov
23e6e1edb5 site update
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@705 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-12-19 22:57:27 +00:00
Ed Kraus
e674c47058 deleted cause of security reasons
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@704 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-12-16 02:24:12 +00:00
Ed Kraus
a5736fc53f added db.php - it's to show whose paid to have "powered by" taken off
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@703 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-12-16 02:18:38 +00:00
Ed Kraus
21d38e3fd9 fixed location of folders.
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@702 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-12-16 02:13:15 +00:00
Ed Kraus
eedb94d05a Removing COpywrite
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@701 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-11-18 04:00:20 +00:00
Ed Kraus
92b23e9cd8 Change in what's said for Creating tables
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@700 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-11-18 00:16:00 +00:00
Ed Kraus
35fe72e503 hehe added html code
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@699 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-11-03 21:53:33 +00:00
Ed Kraus
ecad44411f Took out 1 guy from tech team, added link to "WebTower"
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@698 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-11-03 21:52:24 +00:00
Ed Kraus
d47e4fe437 reverted
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@697 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-11-01 17:28:29 +00:00
Ed Kraus
28443beb9e Moved files to represent the ftp better
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@696 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-11-01 17:17:08 +00:00
Ed Kraus
e2ffddf9b5 Features page updated to 1.6.3 Features :D
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@695 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-10-26 15:14:54 +00:00
Ed Kraus
1628945de0 Updated the Update page on everyone's Mibew site :D
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@694 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-10-26 15:07:13 +00:00
Ed Kraus
0b69213378 Updated Main page to say 1.6.3 is out :)
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@693 c66351dc-e62f-0410-b875-e3a5c0b9693f
2009-10-26 15:03:58 +00:00
1006 changed files with 21571 additions and 62336 deletions

50
.gitignore vendored
View File

@ -1,55 +1,9 @@
# IDE folders
.idea
src/.idea/workspace.xml
src/mibew/install/package
src/absent_*
src/release*
src/upload*
src/*.po
# Do not index actual configuration files
src/mibew/configs/config.yml
src/tests/server_side/mibew/libs/config.php
# Do not index avatars
src/mibew/files/avatar/*
!src/mibew/files/avatar/.keep
# Do not index cache files
src/mibew/cache/*
!src/mibew/cache/.keep
!src/mibew/cache/.htaccess
# Do not index plugins
src/mibew/plugins/*
!src/mibew/plugins/.keep
# Do not index custom locales
src/mibew/locales/*
!src/mibew/locales/en/
# Do not index composer files
src/composer.phar
src/composer.lock
# Do not index third-party libraries
src/mibew/vendor
src/mibew/js/vendor
# Do not index node.js modules that are used for building
src/node_modules
src/package-lock.json
# Do not index compiled js files of the core
src/mibew/js/compiled/*
!src/mibew/js/compiled/.keep
# Do not index compiled files of chat styles
src/mibew/styles/chats/*/templates_compiled/client_side/*
!src/mibew/styles/chats/*/templates_compiled/client_side/.keep
src/mibew/styles/chats/*/js/compiled/*
!src/mibew/styles/chats/*/js/compiled/.keep
# Do not index compiled files of page styles
src/mibew/styles/pages/*/templates_compiled/client_side/*
!src/mibew/styles/pages/*/templates_compiled/client_side/.keep
!src/mibew/locales/names/

3
.gitmodules vendored
View File

@ -1,3 +0,0 @@
[submodule "src/i18n"]
path = src/i18n
url = git@github.com:Mibew/i18n.git

View File

@ -1,12 +0,0 @@
### Environment
* Mibew Messenger version:
* OS:
* Web server:
* PHP:
* PHP extensions:
* MySQL:
### Expected behavior
### Actual behavior
### Steps to reproduce the behavior

View File

@ -1 +0,0 @@
./src/mibew/LICENSE.txt

View File

@ -1,8 +0,0 @@
Fixes # .
Changes proposed in this pull request:
-
-
-
@Mibew/core-developers

BIN
README.md

Binary file not shown.

View File

@ -1,4 +0,0 @@
{
"directory": "./mibew/js/vendor",
"analytics": false
}

View File

@ -1,27 +0,0 @@
{
"extends": "eslint:recommended",
"rules": {
"indent": ["error", 4, {"SwitchCase": 1}],
"no-trailing-spaces": "error",
"semi": ["error", "always"],
"guard-for-in": "error",
"no-unused-vars": ["error", {"caughtErrors": "none", "args": "none"}]
},
"globals": {
"Mibew": true,
"MibewAPI": true,
"MibewAPIInteraction": true,
"MibewAPIChatInteraction": true,
"MibewAPIUsersInteraction": true,
"MibewAPIExecutionContext": true,
"Handlebars": true,
"_": true,
"Backbone": true,
"jQuery": true,
"vex": true,
"validator": true
},
"env":{
"browser": true
}
}

1
src/.idea/.name Normal file
View File

@ -0,0 +1 @@
messenger

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectCodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value>
<option name="OTHER_INDENT_OPTIONS">
<value>
<option name="INDENT_SIZE" value="4" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="true" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</value>
</option>
<XML>
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
</XML>
<codeStyleSettings language="PHP">
<indentOptions>
<option name="USE_TAB_CHARACTER" value="true" />
</indentOptions>
</codeStyleSettings>
</value>
</option>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</component>
</project>

13
src/.idea/encodings.xml Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false">
<file url="file://$PROJECT_DIR$" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/mibew/locales/be/properties" charset="windows-1251" />
<file url="file://$PROJECT_DIR$/mibew/locales/bg/properties" charset="windows-1251" />
<file url="file://$PROJECT_DIR$/mibew/locales/ca/properties" charset="ISO-8859-1" />
<file url="file://$PROJECT_DIR$/mibew/locales/ru/properties" charset="windows-1251" />
<file url="file://$PROJECT_DIR$/mibew/locales/sp/properties" charset="ISO-8859-1" />
<file url="file://$PROJECT_DIR$/mibew/locales/ua/properties" charset="windows-1251" />
</component>
</project>

View File

@ -0,0 +1,11 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0" is_locked="false">
<option name="myName" value="Project Default" />
<option name="myLocal" value="false" />
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
<option name="processCode" value="true" />
<option name="processLiterals" value="true" />
<option name="processComments" value="true" />
</inspection_tool>
</profile>
</component>

View File

@ -0,0 +1,7 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="PROJECT_PROFILE" value="Project Default" />
<option name="USE_PROJECT_PROFILE" value="true" />
<version value="1.0" />
</settings>
</component>

15
src/.idea/messenger.iml Normal file
View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library">
<library name="PHP">
<CLASSES />
<SOURCES />
</library>
</orderEntry>
</component>
</module>

8
src/.idea/misc.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectResources">
<default-html-doctype>http://www.w3.org/1999/xhtml</default-html-doctype>
</component>
<component name="ProjectRootManager" version="2" />
</project>

9
src/.idea/modules.xml Normal file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/messenger.iml" filepath="$PROJECT_DIR$/.idea/messenger.iml" />
</modules>
</component>
</project>

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value>
<ADDITIONAL_INDENT_OPTIONS fileType="js">
<option name="INDENT_SIZE" value="4" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="jsp">
<option name="INDENT_SIZE" value="4" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="php">
<option name="INDENT_SIZE" value="4" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="sass">
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="sql">
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="xml">
<option name="INDENT_SIZE" value="4" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="yml">
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
</value>
</option>
</component>
</project>

View File

@ -0,0 +1,5 @@
<component name="DependencyValidationManager">
<state>
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
</state>
</component>

7
src/.idea/vcs.xml Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>

View File

@ -1,17 +0,0 @@
{
"name": "mibew",
"private": true,
"dependencies": {
"underscore": "1.8.2",
"json": "https://github.com/douglascrockford/JSON-js.git#c98948ae1944a28e2e8ebc3717894e580aeaaa05",
"jquery": "1.11.3",
"backbone": "1.1.2",
"marionette": "2.4.1",
"handlebars": "4.3.0",
"vex": "2.3.2",
"validator-js": "3.40.0"
},
"resolutions": {
"underscore": "1.8.2"
}
}

56
src/check_translation.pl Executable file
View File

@ -0,0 +1,56 @@
#!/usr/bin/perl
sub read_transl($) {
my($from) = @_;
my %translation = ();
open(IN, "mibew/locales/$from/properties");
while(<IN>) {
chomp;
if(/^([\w\.]+)=(.*)$/) {
if($1 ne "encoding" && $1 ne "output_charset" && $1 ne "output_encoding") {
$translation{$1} = $2;
}
} else {
die "wrong line in $from: $_\n";
}
}
close(IN);
return %translation;
}
%tr_en = read_transl("en");
@all_keys = keys %tr_en;
sub check_transl($%) {
my($name,%tr) = @_;
print "checking $name...\n";
my @totransl = ();
for $key (@all_keys) {
unless(exists $tr{$key}) {
push @totransl, "$key=".$tr_en{$key};
}
}
for $key(keys %tr) {
unless(exists $tr_en{$key}) {
print "unknown key in $name: $key\n";
}
}
if($#totransl >= 0) {
print "@{[$#totransl+1]} lines absent in locales/$name/properties\n";
open(OUT, "> absent_$name");
for(sort @totransl) {
print OUT "$_\n";
}
close(OUT);
}
}
check_transl("ru", read_transl("ru"));
check_transl("fr", read_transl("fr"));
check_transl("de", read_transl("de"));
check_transl("sp", read_transl("sp"));
check_transl("it", read_transl("it"));
check_transl("pl", read_transl("pl"));
check_transl("zh-tw", read_transl("zh-tw"));

5
src/compile_js Executable file
View File

@ -0,0 +1,5 @@
#!/bin/sh
cd mibew/js/source
ant
rm -rf bin

View File

@ -1,51 +0,0 @@
{
"name": "mibew/mibew",
"version": "3.6.0",
"description": "Mibew Messenger - open-source live support application",
"type": "project",
"homepage": "https://mibew.org",
"license": "Apache-2.0",
"authors": [
{
"name": "Mibew Messenger Project",
"homepage": "https://mibew.org/credits"
}
],
"support": {
"email": "support@mibew.org",
"issues": "https://github.com/mibew/mibew/issues",
"forum": "https://mibew.org/forums",
"source": "https://github.com/mibew/mibew"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/mibew/handlebars.php"
},
{
"type": "vcs",
"url": "https://github.com/mibew/handlebars.php-helpers"
}
],
"require": {
"mibew/handlebars.php": "~0.10.5",
"mibew/handlebars.php-helpers": "1.*",
"symfony/http-foundation": "4.4.*",
"symfony/routing": "4.4.*",
"symfony/config": "4.4.*",
"symfony/yaml": "^5.2",
"symfony/translation": "2.6.*",
"tedivm/stash": "0.12.*",
"mibew/html5": "1.1.*",
"vierbergenlars/php-semver": "3.0.*",
"swiftmailer/swiftmailer": "~5.4.0",
"ua-parser/uap-php": "^3.9",
"true/punycode": "~1.1"
},
"require-dev": {
"squizlabs/php_codesniffer": "3.*"
},
"config": {
"vendor-dir": "mibew/vendor"
}
}

245
src/compute_resources.pl Executable file
View File

@ -0,0 +1,245 @@
#!/usr/bin/perl
use Digest::MD5 qw(md5 md5_hex md5_base64);
@rules = (
["redirect(ed)?\\.tpl", 1],
["\\.tpl", 0],
["view/license.php", 0],
["view/themes.php", 2],
["view/translate.php", 2],
["view/translatelist.php", 2],
["view/settings.php", 2],
["view/updates.php", 2],
["view/features.php", 2],
["view/performance.php", 2],
["view/avatar.php", 2],
["view/permissions.php", 2],
["view/agent.php", 2],
["view/agents.php", 2],
["view/group.php", 2],
["view/groupmembers.php", 2],
["view/groups.php", 2],
["view/operator_groups.php", 2],
["view/gen_button.php", 2],
["view/install_err.php", 2],
["view/install_index.php", 2],
["view/.*\\.php", 1],
["install/.*\\.php", 2],
["operator/themes.php", 2],
["operator/translate.php", 2],
["operator/settings.php", 2],
["operator/updates.php", 2],
["operator/features.php", 2],
["operator/performance.php", 2],
["operator/avatar.php", 2],
["operator/permissions.php", 2],
["operator/operator.php", 2],
["operator/operators.php", 2],
["operator/group.php", 2],
["operator/groupmembers.php", 2],
["operator/groups.php", 2],
["operator/opgroups.php", 2],
["operator/getcode.php", 2],
["operator/.*\\.php", 1],
["mibew/client.php", 0],
["mibew/leavemessage.php", 0],
["mibew/captcha.php", 0],
["mibew/license.php", 0],
["mibew/mail.php", 0],
["libs/operator_settings.php", 2],
["mibew/libs/chat.php", 0],
["libs/pagination.php", 1],
["libs/settings.php", 2],
["libs/groups.php", 2],
["libs/demothread.php", 2],
["mibew/thread.php", 0],
["mibew/b.php", 0],
["mibew/button.php", 0],
["mibew/index.php", 0],
["mibew/libs/.*\\.php", 1],
);
%messagekeys = (
"localeid" => 0,
"output_charset" => 0,
"output_encoding" => 0,
"harderrors.header" => 0,
"errors.required" => 0,
"errors.wrong_field" => 0,
"errors.file.move.error" => 2,
"errors.invalid.file.type" => 2,
"errors.file.size.exceeded" => 2,
"permission.admin" => 1,
"permission.takeover" => 1,
"permission.viewthreads" => 1,
"chat.thread.state_chatting_with_agent" => 1,
"chat.thread.state_closed" => 1,
"chat.thread.state_loading" => 1,
"chat.thread.state_wait" => 1,
"chat.thread.state_wait_for_another_agent" => 1,
"clients.queue.chat" => 1,
"clients.queue.prio" => 1,
"clients.queue.wait" => 1,
);
$mibewPath = "mibew";
%urls = ();
%usermessages = ();
%operatormessages = ();
$current_level = 0;
sub usemsg($) {
my ($m) = @_;
$messagekeys{$m} = exists $messagekeys{$m} && $messagekeys{$m} < $current_level ? $messagekeys{$m} : $current_level;
if($current_level == -1) {
print " .. $m\n";
}
}
sub file_content($) {
my $input = $_[0];
open( IN1, "< $input" ) or die "cannot find file $input";
my $oldslash = $/;
$/ = EOI;
$content = <IN1>;
close( IN1 );
if($content =~ s/\r//g) {
open( OUT1, "> $input") or die "cannot fix $input";
print OUT1 $content;
close(OUT1);
}
$/ = $oldslash;
return $content;
}
sub process_tpl($) {
my ($filename) = @_;
my $m = file_content($filename);
while( $m =~ /\${msg:([\w\.]+)(,[\w\.]+)?}/g ) {
usemsg($1);
}
while( $m =~ /\${url:([\w\.]+)(,[\w\.]+)?}/g ) {
usemsg($1);
$urls{"%$1"} = 1;
}
}
sub process_php($) {
my ($source) = @_;
my $content = file_content($source);
$content =~ s/<\?xml version=\\"1\.0\\" encoding=\\"UTF-8\\"\?>//;
while( $content =~ s/<\?(?!xml)(.*?)\?>//s ) {
my $inner = $1;
while($inner =~ s/(getlocal|getstring|no_field)2?_?\((.*?)[,\)]//s) {
my $firstarg = $2;
if( $firstarg =~ /^["']([\w\.]+)['"]$/) {
usemsg($1);
} elsif($firstarg =~ /^\$\w+$/ || $firstarg eq '"$var.header"' || $firstarg eq '"permission.$permid"' || $firstarg eq '$threadstate_key[$thread[\'istate\']]') {
# skip
} else {
print "> unknown: $firstarg\n";
}
}
}
}
sub file_checksum($) {
my ($source) = @_;
if($source =~ /\.(png|gif|jpg|ico|wav)$/ || $source =~ /config\.php$/) {
return "-";
}
my $content = file_content($source);
return md5_hex($content);
}
@allsources = ();
sub process_one($) {
my($source) = @_;
push @allsources, $source unless $source =~ /$mibewPath\/locales/ && $source !~ /$mibewPath\/locales\/(en|names)/ || $source =~ /\/package$/;
if($source !~ /\.(php|tpl)$/) {
return;
}
$current_level = -1;
A: foreach $rule (@rules) {
my $key = $$rule[0];
if($source =~ /$key/) {
$current_level = $$rule[1];
last A;
}
}
if($current_level < 0 || $current_level > 2) {
print "not detected for: $source\n";
$current_level = 0;
}
if($source =~ /\.php$/) {
# print "$source ($current_level)\n";
process_php($source);
} elsif($source =~ /\.tpl$/) {
process_tpl($source);
} else {
#print ". $source\n";
}
}
sub process_files($) {
my($from) = @_;
opendir(DIR, $from) || die "can't opendir $from: $!";
my @content = readdir(DIR);
closedir DIR;
for(grep { -f "$from/$_" && ($_ !~ /^\./ || $_ eq ".htaccess") } @content) {
process_one("$from/$_");
}
for(grep { -d "$from/$_" && $_ !~ /^\./ } @content) {
process_files("$from/$_");
}
}
process_files($mibewPath);
# fix
$messagekeys{'page.analysis.userhistory.title'} = 1;
$messagekeys{'errors.failed.uploading.file'} = 2;
open( OUT, "> $mibewPath/locales/names/level1") or die "cannot write file, $!";
for $key(sort grep { $messagekeys{$_} == 0 } keys %messagekeys) {
print OUT "$key\n";
}
close( OUT );
open( OUT, "> $mibewPath/locales/names/level2") or die "cannot write file, $!";
for $key(sort grep { $messagekeys{$_} == 1 } keys %messagekeys) {
print OUT "$key\n";
}
close( OUT );
open( OUT, "> $mibewPath/install/package") or die "cannot write file, $!";
for $key(sort @allsources) {
$digest = file_checksum($key);
$key =~ s/$mibewPath\///;
print OUT "$key $digest\n";
}
close( OUT );

View File

@ -1,743 +0,0 @@
// Initialize requirements
var fs = require('fs'),
https = require('https'),
exec = require('child_process').exec,
eventStream = require('event-stream'),
runSequence = require('gulp4-run-sequence'),
through = require('through2'),
lodash = require('lodash'),
PoFile = require('pofile'),
strftime = require('strftime'),
del = require('del'),
bower = require('bower'),
gulp = require('gulp'),
uglify = require('gulp-uglify'),
concat = require('gulp-concat'),
phpcs = require('gulp-phpcs'),
order = require('gulp-order'),
handlebars = require('gulp-handlebars'),
handlebarsEngine = require('handlebars'),
defineModule = require('gulp-define-module'),
header = require('gulp-header'),
zip = require('gulp-zip'),
tar = require('gulp-tar'),
gzip = require('gulp-gzip'),
chmod = require('gulp-chmod'),
xgettext = require('gulp-xgettext'),
concatPo = require('gulp-concat-po'),
rename = require('gulp-rename'),
eslint = require('gulp-eslint'),
removeDuplicateHeaders = require('mibew-gulp-greh'),
mkdirp = require('mkdirp');
// Set global configuration
var config = {
mibewPath: 'mibew',
configsPath: 'mibew/configs',
phpVendorPath: 'mibew/vendor',
jsVendorPath: 'mibew/js/vendor',
pluginsPath: 'mibew/plugins',
avatarsPath: 'mibew/files/avatar',
cachePath: 'mibew/cache',
jsPath: 'mibew/js',
chatStylesPath: 'mibew/styles/chats',
pageStylesPath: 'mibew/styles/pages',
i18nPath: 'i18n',
i18nPrefix: 'mibew-i18n-',
releasePath: 'release',
uploadPath: 'upload',
compiledTemplatesHeader: fs.readFileSync('tools/compiled_templates_header.txt'),
getComposerUrl: 'https://getcomposer.org/installer',
phpBin: 'php -d "suhosin.executor.include.whitelist = phar" -d "memory_limit=512M"',
package: require('./composer.json'),
msginit: 'msginit',
msgcat: 'msgcat'
}
config.i18nSuffix = '-' + config.package.version + '-' + strftime('%Y%m%d');
// Tasks for cleaning //////////////////
// Cleans all built files
gulp.task('clean', function(callback) {
return del([
config.releasePath,
'composer.lock',
config.phpVendorPath,
config.jsVendorPath,
config.jsPath + '/compiled/**/*',
'!' + config.jsPath + '/compiled/.keep',
config.chatStylesPath + '/*/templates_compiled/client_side/*.js',
config.chatStylesPath + '/*/js/compiled/*.js',
config.pageStylesPath + '/*/templates_compiled/client_side/*.js'
], callback);
});
// Cleans temporary English translation in the release dir
gulp.task('clean-tmp-po', function(callback) {
return del([config.releasePath + '/translation.po'], callback);
});
// Cleans temporary files of translations in the release dir
gulp.task('clean-tmp-i18n-files', function(callback) {
return del([
config.releasePath + '/**/*',
'!' + config.releasePath + '/*.zip',
'!' + config.releasePath + '/*.tar.gz',
'!' + config.releasePath + '/*.pot'
], callback);
});
// Cleans all files prepared for uploading to CDN
gulp.task('clean-upload', function(callback) {
return del([config.uploadPath], callback);
});
// Cleans everything
gulp.task('clean-all', function(callback) {
runSequence( ['clean', 'clean-upload'],
callback );
});
// Watcher tasks ///////////////////////
// Watch styles
gulp.task('watch', function() {
gulp.watch(config.pageStylesPath + '/**/*.handlebars', gulp.series('page-styles'));
gulp.watch(config.chatStylesPath + '/**/js/source/**/*.js', gulp.series('chat-styles-js'));
gulp.watch(config.chatStylesPath + '/**/*.handlebars', gulp.series('chat-styles-handlebars'));
});
// Service tasks //////////////////
// Get and install PHP Composer
gulp.task('get-composer', function(callback) {
// Check whether Composer is already in place
if (fs.existsSync('./composer.phar')) {
callback(null);
return;
}
// Get installer from the Internet
https.get(config.getComposerUrl, function(response) {
// Run PHP to install Composer
var php = exec(config.phpBin, function(error, stdout, stderr) {
callback(error ? stderr : null);
});
// Pass installer code to PHP via STDIN
response.pipe(php.stdin);
});
});
// Install Composer dependencies excluding development ones
gulp.task('composer-install', gulp.series('get-composer', function(callback) {
exec(config.phpBin + ' composer.phar install --no-dev',
function(error, stdout, stderr) {
callback(error ? stderr : null);
});
}));
// Install all Composer dependencies
gulp.task('composer-install-dev', gulp.series('get-composer', function(callback) {
exec(config.phpBin + ' composer.phar install',
function(error, stdout, stderr) {
callback(error ? stderr : null);
});
}));
// Installs bower dependencies
gulp.task('bower-install', function(callback) {
bower.commands.install([], {}, {})
.on('error', function(error) {
callback(error);
})
.on('end', function() {
// We should manually minify JavaScript files that was not minified
// by bower packages' authors
// TODO: This is a temproary workaround and should be removed once
// the packages will be fixed
var stream = eventStream.merge(
gulp.src(config.jsVendorPath + '/backbone/backbone.js',
{base: config.jsVendorPath})
.pipe(uglify({preserveComments: 'some'}))
// There are neither "@license" tag nor "!preserve" in the
// header. Add the header manually
.pipe(header(
"// Backbone.js 1.1.2\n"
+ "// (c) 2010-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n"
+ "// Backbone may be freely distributed under the MIT license.\n"
+ "// For all details and documentation:\n"
+ "// http://backbonejs.org\n"
))
.pipe(rename('backbone/backbone-min.js')),
gulp.src(config.jsVendorPath + '/json/json2.js',
{base: config.jsVendorPath})
.pipe(uglify({preserveComments: 'some'}))
// There are neither "@license" tag nor "!preserve" in the
// header, add the header manually
.pipe(header("// json2.js. Public Domain. See http://www.JSON.org/js.html\n"))
.pipe(rename('json/json2.min.js'))
)
.pipe(gulp.dest(config.jsVendorPath));
stream
.on('error', callback)
.on('end', callback);
});
});
// Tasks for checking //////////////////
// Checks all PHP files with PHP Code Sniffer
gulp.task('phpcs', gulp.series('composer-install-dev', function() {
return gulp.src([
config.mibewPath + '/**/*.php',
'!' + config.phpVendorPath + '/**/*.*',
'!' + config.pluginsPath + '/**/*.*',
'!' + config.cachePath + '/**/*.*'
], {
// Content of the cache directory is readable only for webserver.
// Thus we must to set "strict" option to false to prevent "EACCES"
// errors. At the same we need to see all errors that take place.
strict: false,
silent: false
})
.pipe(phpcs({
bin: config.phpVendorPath + '/bin/phpcs',
standard: 'PSR2',
warningSeverity: 0
}))
.pipe(phpcs.reporter('log'))
.pipe(phpcs.reporter('fail'));
}));
// Checks all JavaScript Source files with ESLint
gulp.task('eslint', function() {
return gulp.src(config.jsPath + '/source/**/*.js')
.pipe(eslint())
.pipe(eslint.format())
.pipe(eslint.failAfterError());
});
// Restore empty English translation in the source code
gulp.task('post-pack-cleanup', function(callback) {
gulp.src('translation.po')
.pipe(gulp.dest(config.mibewPath + '/locales/en/'));
del(['translation.po', config.releasePath + '/translation.po'], callback);
});
// Tasks of compiling //////////////////
// Compile all JavaScript files of the Mibew Messenger Core
gulp.task('js', function() {
return eventStream.merge(
getClientSideApp('default'),
getClientSideApp('chat'),
getClientSideApp('thread_log'),
getClientSideApp('users'),
gulp.src(config.jsPath + '/source/**/*.js')
)
.pipe(uglify({preserveComments: 'some'}))
.pipe(removeDuplicateHeaders())
.pipe(gulp.dest(config.jsPath + '/compiled'));
});
// Compile and concatenate Handlebars templates for all chat styles
gulp.task('chat-styles-handlebars', function() {
return getChildDirs(config.chatStylesPath)
.then(function (dirs) {
return Promise.all(dirs.map(function (dir) {
return new Promise(function(resolve, reject) {
gulp.src(config.chatStylesPath + '/' + dir
+ '/templates_src/client_side/**/*.handlebars')
.pipe(handlebars({
// Use specific version of Handlebars.js
handlebars: handlebarsEngine
}))
.pipe(wrapHandlebarsTemplate())
.pipe(concat('templates.js'))
.pipe(uglify({preserveComments: 'some'}))
.pipe(header(config.compiledTemplatesHeader))
.pipe(gulp.dest(config.chatStylesPath + '/' + dir
+ '/templates_compiled/client_side'))
.on('end', resolve)
.on('error', reject);
});
}));
});
});
// Compile and concatenate js files for all chat styles
gulp.task('chat-styles-js', function() {
return getChildDirs(config.chatStylesPath)
.then(function (dirs) {
return Promise.all(dirs.map(function (dir) {
return new Promise(function(resolve, reject) {
gulp.src(config.chatStylesPath + '/' + dir
+ '/js/source/**/*.js')
.pipe(concat('scripts.js'))
.pipe(uglify({preserveComments: 'some'}))
.pipe(gulp.dest(config.chatStylesPath + '/' + dir
+ '/js/compiled'))
.on('end', resolve)
.on('error', reject);
});
}));
});
});
// Performs all job related to pages styles
gulp.task('page-styles', function() {
return getChildDirs(config.pageStylesPath)
.then(function (dirs) {
return Promise.all(dirs.map(function (dir) {
return new Promise(function(resolve, reject){
gulp.src(config.pageStylesPath + '/' + dir
+ '/templates_src/client_side/**/*.handlebars')
.pipe(handlebars({
// Use specific version of Handlebars.js
handlebars: handlebarsEngine
}))
.pipe(wrapHandlebarsTemplate())
.pipe(concat('templates.js'))
.pipe(uglify({preserveComments: 'some'}))
.pipe(header(config.compiledTemplatesHeader))
.pipe(gulp.dest(config.pageStylesPath + '/' + dir
+ '/templates_compiled/client_side'))
.on('end', resolve)
.on('error', reject);
});
}));
});
});
// Performs all job related to chat styles
gulp.task('chat-styles', gulp.series('chat-styles-handlebars', 'chat-styles-js'));
// Prepares ready to use development version of Mibew Messenger without
// packing or validating it
gulp.task('rebuild', function(callback) {
runSequence(
'clean',
['js', 'chat-styles', 'page-styles', 'composer-install',
'bower-install'],
callback
);
});
// Tasks for localization issues ///////
// Generate POT-file based upon the source code
gulp.task('generate-pot', function() {
return eventStream.merge(
gulp.src([
config.mibewPath + '/**/*.php',
'!' + config.phpVendorPath + '/**/*.*',
'!' + config.pluginsPath + '/**/*.*',
'!' + config.cachePath + '/**/*.*'
], {
// Content of the cache directory is readable only for
// webserver. Thus we must to set "strict" option to false
// to prevent "EACCES" errors. At the same we need to see all
// errors that take place.
strict: false,
silent: false
})
.pipe(xgettext({
language: 'PHP',
keywords: [
{name: 'getlocal'},
{name: 'no_field'},
{name: 'wrong_field'},
{name: 'failed_uploading_file', singular: 2}
]
})),
gulp.src(config.jsPath + '/source/**/*.js', {base: config.mibewPath})
.pipe(xgettext({
language: 'JavaScript',
keywords: [
{name: 'trans'}
]
})),
gulp.src([
config.chatStylesPath + '/default/templates_src/**/*.handlebars',
config.pageStylesPath + '/default/templates_src/**/*.handlebars'
], {base: config.mibewPath})
.pipe(xgettextHandlebars())
)
.pipe(concatPo(config.i18nPrefix + 'translation'
+ config.i18nSuffix + '.pot',
{
headers: {
'Project-Id-Version': 'Mibew Messenger '
+ config.package.version,
'Report-Msgid-Bugs-To': config.package.support.email,
'POT-Creation-Date': strftime('%Y-%m-%d %H:%M%z'),
'PO-Revision-Date': '',
'Last-Translator': '',
'Language-Team': '',
'Content-Type': 'text/plain; charset=UTF-8'
}
})
)
.pipe(gulp.dest(config.releasePath));
});
// Generate temporary English translation to be used in the release
gulp.task('generate-tmp-po', gulp.series('generate-pot', function(callback) {
return exec(config.msginit + ' --no-translator --no-wrap -i '
+ config.releasePath + '/' + config.i18nPrefix + 'translation'
+ config.i18nSuffix + '.pot' + ' -l en -o '
+ config.releasePath + '/translation.po',
function(error, stdout, stderr) {
callback(error ? stderr : null);
});
}));
// Generate complete translations (that includes missed strings) to be used
// in the release
gulp.task('generate-pos', gulp.series('generate-tmp-po', function(callback) {
return getChildDirs(config.i18nPath + '/translations')
.then(function (dirs) {
return Promise.all(dirs.map(function (dir) {
return new Promise(function(resolve, reject) {
mkdirp(config.releasePath + '/' + dir, function (error) {
if (error) {
reject(error);
}
});
exec(config.msgcat + ' ' + config.i18nPath + '/translations/'
+ dir + '/translation.po ' + config.releasePath
+ '/translation.po --no-location --no-wrap --use-first'
+ ' -o ' + config.releasePath + '/' + dir
+ '/translation.po',
function(error, stdout, stderr) {
if (error) {
reject(error);
}
});
var sources = [
config.i18nPath + '/translations/' + dir + '/**/*',
'!' + config.i18nPath + '/translations/' + dir
+ '/translation.po'
];
gulp.src(sources)
.pipe(gulp.dest(config.releasePath + '/' + dir))
.on('error', reject)
.on('end', resolve);
});
}));
});
}));
// Packaging tasks /////////////////////
// Pack sources for release as .zip and .tar.gz archives
gulp.task('pack-sources', gulp.series('composer-install', 'bower-install', function() {
gulp.src(config.mibewPath + '/locales/en/translation.po')
.pipe(gulp.dest('.'));
gulp.src(config.releasePath + '/translation.po')
.pipe(gulp.dest(config.mibewPath + '/locales/en/'));
var sources = [
config.mibewPath + '/**/*',
// Exclude user's config
'!' + config.configsPath + '/config.yml',
// Exclude cache files but not the ".keep" file.
'!' + config.cachePath + '/**/!(.keep)',
// Exclude avatars but not the ".keep" file.
'!' + config.avatarsPath + '/!(.keep)',
// Exclude plugins but not the ".keep" file.
'!' + config.pluginsPath + '/!(.keep)',
'!' + config.pluginsPath + '/*/**/*',
// Exclude Git repositories that can be shipped with third-party libs
'!' + config.phpVendorPath + '/**/.git',
'!' + config.phpVendorPath + '/**/.git/**/*',
// Exclude vendors binaries
'!' + config.phpVendorPath + '/bin/**/*',
// Exclude JavaScript sources
'!' + config.jsPath + '/source/**/*',
// Actually we does not need backbone.babysitter and backbone.wreqr
// dependencies because they embed into marionette.js. So we exclude
// "backbone.babysitter" and "backbone.wreqr" directories and all their
// contents.
'!' + config.jsVendorPath + '/backbone.babysitter{,/**}',
'!' + config.jsVendorPath + '/backbone.wreqr{,/**}',
// Exclude dot files within third-party JS libraries.
'!' + config.jsVendorPath + '/**/.*',
// Exclude config files of various package systems
'!' + config.jsVendorPath + '/**/{bower,component,package,composer}.json',
// Exclude config files of various build systems
'!' + config.jsVendorPath + '/**/Gruntfile.*',
'!' + config.jsVendorPath + '/**/gulpfile.*',
'!' + config.jsVendorPath + '/**/Makefile',
// Exclude HTML files from third-party JS libraries. Such files can be
// used for docs or for tests, we need none of them.
'!' + config.jsVendorPath + '/**/*.html',
// There are too many useless files in Vex.js library. Exclude them.
'!' + config.jsVendorPath + '/vex/sass{,/**}',
'!' + config.jsVendorPath + '/vex/docs{,/**}',
'!' + config.jsVendorPath + '/vex/docs{,/**}',
'!' + config.jsVendorPath + '/vex/coffee{,/**}'
];
var srcOptions = {
// Dot files (.htaccess, .keep, etc.) must be included in the package
dot: true,
// Content of the cache directory is readable only for webserver. Thus
// we must to set "strict" option to false to prevent "EACCES" errors.
// At the same we need to see all errors that take place.
strict: false,
silent: false,
// Preserve root directory name (i.e. 'mibew/')
base: '.'
}
var version = config.package.version;
return eventStream.merge(
gulp.src(sources, srcOptions)
.pipe(zip('mibew-' + version + '.zip')),
gulp.src(sources, srcOptions)
.pipe(tar('mibew-' + version + '.tar'))
.pipe(gzip())
)
.pipe(chmod(644))
.pipe(gulp.dest(config.releasePath));
}));
// Pack translations for release as .zip and .tar.gz archives
gulp.task('pack-i18n', function(callback) {
return getChildDirs(config.i18nPath + '/translations')
.then(function (dirs) {
return Promise.all(dirs.map(function (dir) {
return new Promise(function(resolve, reject) {
var srcOptions = {
base: config.releasePath
};
eventStream.merge(
gulp.src(config.releasePath + '/' + dir
+ '/**/*', srcOptions)
.pipe(zip(config.i18nPrefix + dir
+ config.i18nSuffix + '.zip')),
gulp.src(config.releasePath + '/' + dir
+ '/**/*', srcOptions)
.pipe(tar(config.i18nPrefix + dir
+ config.i18nSuffix + '.tar'))
.pipe(gzip())
)
.pipe(chmod(644))
.pipe(gulp.dest(config.releasePath))
.on('error', reject)
.on('end', resolve);
});
}));
});
});
// Tasks of releasing //////////////////
// Prepare release of Mibew Messenger
gulp.task('prepare-release', function(callback) {
runSequence(
'clean',
['phpcs', 'js', 'chat-styles', 'page-styles', 'generate-pot',
'generate-tmp-po'],
'pack-sources',
'post-pack-cleanup',
callback
);
});
// Prepare releases of translations for Mibew Messenger
gulp.task('prepare-i18n-release', function(callback) {
runSequence( 'clean-tmp-po',
'generate-pos',
'pack-i18n',
'clean-tmp-i18n-files',
callback
);
});
// Mirror prepared releases of Mibew Messenger and its translations in a form
// intended for uploading into the CDN
gulp.task('prepare-for-upload', function(callback) {
gulp.src(config.releasePath + '/mibew-' + config.package.version + '.*')
.pipe(gulp.dest(config.uploadPath + '/core/' + config.package.version + '/'));
gulp.src(config.releasePath + '/mibew-i18n-translation-' + config.package.version + '-*.pot')
.pipe(gulp.dest(config.uploadPath + '/i18n/_pot/' + config.package.version + '/'));
return getChildDirs(config.i18nPath + '/translations')
.then(function (dirs) {
return Promise.all(dirs.map(function (dir) {
return new Promise(function(resolve, reject) {
gulp.src(config.releasePath + '/mibew-i18n-' + dir + '-' + config.package.version + '-*.*')
.pipe(gulp.dest(config.uploadPath + '/i18n/' + dir + '/' + config.package.version + '/'))
.on('error', reject)
.on('end', resolve);
});
}));
});
});
// Perform all preparations before uploading the release of Mibew Messenger and
// its translations into the CDN
gulp.task('prepare-all', function(callback) {
runSequence('clean-all', 'prepare-release', 'prepare-i18n-release',
'prepare-for-upload', callback);
});
// Prepare release archives of the development version of Mibew Messenger
gulp.task('default', function(callback) {
runSequence(
'clean',
['js', 'chat-styles', 'page-styles', 'generate-tmp-po'],
'pack-sources',
['post-pack-cleanup', 'clean-tmp-po'],
callback
);
});
/**
* Loads and prepare js file for a client side application with the specified
* name.
*
* @param {String} name Application name.
* @returns A files stream that can be piped to any gulp plugin.
*/
var getClientSideApp = function(name) {
var appSource = config.jsPath + '/source/' + name;
return gulp.src(appSource + '/**/*.js')
.pipe(order(
[
appSource + '/init.js',
// The following line is equivalent to
// gulp.src([appSource + '/*.js', '!' + appSource + '/app.js']);
appSource + '/!(app).js',
appSource + '/models/**/base*.js',
appSource + '/models/**/*.js',
appSource + '/collections/**/base*.js',
appSource + '/collections/**/*.js',
appSource + '/model_views/**/base*.js',
appSource + '/model_views/**/*.js',
appSource + '/collection_views/**/base*.js',
appSource + '/collection_views/**/*.js',
appSource + '/regions/**/base*.js',
appSource + '/regions/**/*.js',
appSource + '/layouts/**/base*.js',
appSource + '/layouts/**/*.js',
appSource + '/**/base*.js',
// The following line is equivalent to
// gulp.src([appSource + '/**/*.js', '!' + appSource + '/app.js']);
'!' + appSource + '/app.js',
appSource + '/app.js'
],
{base: process.cwd()}
))
.pipe(concat(name + '_app.js'));
}
/**
* Wraps a handlebars template with a function and attach it to the
* Handlebars.templates object.
*
* @returns {Function} A function that can be used in pipe() method of a file
* stream right after gulp-handlebars plugin.
*/
var wrapHandlebarsTemplate = function() {
return defineModule('plain', {
wrapper: '(function() {\n'
+ 'var templates = Handlebars.templates = Handlebars.templates || {};\n'
+ 'Handlebars.templates["<%= relative %>"] = <%= handlebars %>;\n'
+ '})()',
context: function(context) {
return {relative: context.file.relative.replace(/\.js$/, '').replace(/\\/g, '/')};
}
});
}
/**
* Extracts gettext messages from handlebars templates.
*
* @returns {Function} A function that can be used in pipe() method of a file
* stream.
*/
var xgettextHandlebars = function() {
var helperRegExp = /\{{2}l10n\s*('|")(.*?[^\\])\1.*?\}{2}/g;
return through.obj(function (file, enc, callback) {
var po = new PoFile();
match = false,
contents = file.contents.toString();
while (match = helperRegExp.exec(contents)) {
// Try to find item in the .po file by its name
var item = lodash.find(po.items, function(item) {
return match[2] === item.msgid;
});
var line = contents.substr(0, match.index).split(/\r?\n|\r/g).length;
if (!item) {
// There is no such item, create new one
item = new PoFile.Item();
item.msgid = match[2].replace(/\\'/g, "'").replace(/\\"/g, '"');
po.items.push(item);
}
// Add new reference
item.references.push(file.relative + ':' + line);
}
// Update file contents
file.contents = Buffer.from(po.toString());
this.push(file);
callback();
});
}
/**
* Retrieves list of all dirs which are placed in the specified one.
*
* @param {String} srcDir A dir to search.
* @returns Promise A promise which will be resolved with list of child dirs or
* rejected with the occured error.
*/
var getChildDirs = function(srcDir) {
return (new Promise(function(resolve, reject) {
fs.readdir(srcDir, function (err, files) {
if (err) {
reject(err);
} else {
resolve(files);
}
});
})).then(function (files) {
// Replace all files that are not a directory with nulls.
return Promise.all(files.map(function (file) {
return new Promise(function (resolve, reject) {
fs.lstat(srcDir + '/' + file, function (err, stat) {
if (err) {
reject(err);
} else {
resolve(stat.isDirectory() ? file : null);
}
});
});
}));
}).then(function(dirs) {
// Remove all nulls from the array.
return dirs.filter(function (dir) {
return null !== dir;
});
});
}

@ -1 +0,0 @@
Subproject commit 55868d9973f531c3550575481bde4233cc625b91

View File

@ -1,14 +1,12 @@
# Set default handler for incoming requests
DirectoryIndex index.php
# Disable directory listing
Options -Indexes
# Follow symbolic links in the directory
Options +FollowSymLinks
<IfModule mod_negotiation.c>
# Forbid apache to guess file extensions
Options -MultiViews
</IfModule>
# Disable mod_security for Apache 1.x
<IfModule mod_security.c>
SecFilterEngine Off
@ -25,40 +23,3 @@ Options +FollowSymLinks
php_value mbstring.http_output pass
php_flag session.auto_start off
</IfModule>
# Redirect requests to the front controller
<IfModule mod_rewrite.c>
# Use the front controller as a default handler
DirectoryIndex index.php
RewriteEngine On
# Use separate front controller for the system installator
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^install(/(.*))?$ install.php [QSA,L]
# Rewrite all other requests for files and directories that do not exist to
# the main front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
<IfModule !mod_rewrite.c>
# There is no mod_rewrite in the system. For the root Mibew Messenger
# directory index_fallback.php should be loaded first to activate
# old-fashioned URLs. For all other directories index.php is just a
# directory index file.
DirectoryIndex index_fallback.php index.php
</IfModule>
# Deny access to internal system files
<FilesMatch "\.(yml|po|ini|handlebars|keep)$">
Deny from all
</FilesMatch>
# Deny access to CLI cron worker from the outside
<Files "cron.php">
Deny from all
</Files>

75
src/mibew/README Normal file
View File

@ -0,0 +1,75 @@
Mibew Messenger
Copyright 2005-2014 the original author or authors.
REQUIREMENTS
* Apache web server 1.3.34 or above
* MySQL database 5.0 or above
* PHP 4.x or above with MySQL support
INSTALLATION
1. Create folder with name 'mibew' in the root of your website.
2. Upload all files contained in this archive (retaining the directory
structure) into the created folder.
3. Make sure that the user, under which the web server is running (for
instance, www), is able to access and read all files in mibew folder
and all of its subfolders.
On *nix systems the simplest way is to use this pair of commands:
find -type f | xargs chmod 0644
find -type d | xargs chmod 0755
4. Add a MySQL database to be used with Mibew Messenger (for instance, with
the name 'mibew').
5. Edit mibew/libs/config.php to specify the information needed to connect
to the database.
6. Using your web browser visit http://<yourdomain>/mibew/install/ and
hit 'Create tables'.
7. Remove mibew/install/ directory from your server.
8. On *nix platforms change the owner of mibew/images/avatar folder
to the user, under which the web server is running (for instance, www):
chown www mibew/images/avatar
The owner should have all rights on the folder mibew/images/avatar:
chmod u+rwx mibew/images/avatar
9. Log in as
user: admin
password: <empty>
10. Get button code and set it up on your site.
11. Change your password and name.
12. Wait for your visitors on the 'Pending users' page.
UPDATE
1. Backup your mibew/libs/config.php
2. Backup your mibew/images/avatar folder.
3. Delete all items in mibew folder on the server.
4. Upload all files contained in the downloaded archive (retaining the
directory structure) into mibew folder.
5. Restore the MySQL database settings in mibew/libs/config.php
6. Visit http://<yourdomain>/mibew/install/ and follow the instructions
to update the database tables (if needed).
7. Remove mibew/install/ directory from your server.
8. Restore contents of mibew/images/avatar folder.

View File

@ -1,56 +0,0 @@
Mibew Messenger
Copyright 2005-2023 the original author or authors.
REQUIREMENTS
* Apache web server 1.3.34 or above with the ability to use local .htaccess
files (mod_rewrite module is optional, but recommended)
* MySQL database 5.0 or above
* PHP 7.2.5 or above with PDO, pdo_mysql, cURL, mbstring and gd extensions
INSTALLATION
1. Create folder with name 'mibew' in the root of your website.
2. Upload all the files contained in this archive (retaining the directory
structure) into created folder.
Be sure to chmod the mibew folder to 0755.
3. Add a MySQL database with the name 'mibew'
4. Copy /mibew/configs/default_config.yml to /mibew/configs/config.yml
5. Edit /mibew/configs/config.yml to the information needed to connect to the database
6. Using your web browser visit http://<yourdomain>/mibew/install and
perform step-by-step installation.
7. Remove /mibew/install.php file from your server
8. Logon as
user: admin
password: <your password>
9. Get button code and setup it on your site.
10. Configure periodically running tasks by setting up an automated
process to visit the page http://<yourdomain>/cron?cron_key=<key>
The full URL including the secret "cron key" used to protect against
unauthorized access can be seen on the 'General' tab at the 'Settings' page.
11. Change your name.
12. Wait for your visitors on 'Pending users' page.
On unix/linux platforms change the owner of /mibew/files/avatar and
/mibew/cache folders to the user, under which the web server is running
(for instance, www). The owner should have all rights on the folders
/mibew/files/avatar and /mibew/cache
(chmod 0700 /mibew/files/avatar && chmod 0700 /mibew/cache).
UPDATE
1. Backup your actual installation (i.e. code and database).
2. Disable all plugins.
3. Delete all items in your Mibew Messenger directory on the server.
4. Unpack the archive with the official distrubition in that directory.
5. Remove install.php file.
6. Restore configuration (configs/ directory), plugins (plugins/ directory),
(maybe) custom styles (if you have any), (maybe) additional
locales (if you use any), and avatars (files/avatar/ directory) from the
backup you've made at the step 1.
7. Visit http://<yourdomain>/<path to your Mibew Messenger>/update and follow
the instructions to update the database tables (if needed).
8. Enable disabled plugins.

1
src/mibew/VERSION Normal file
View File

@ -0,0 +1 @@
Mibew/1.6.12

View File

@ -1 +0,0 @@
Mibew/3.6.0

74
src/mibew/b.php Normal file
View File

@ -0,0 +1,74 @@
<?php
/*
* Copyright 2005-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
require_once('libs/common.php');
require_once('libs/chat.php');
require_once('libs/operator.php');
require_once('libs/groups.php');
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : "";
if($referer && isset($_SESSION['threadid'])) {
$link = connect();
$thread = thread_by_id_($_SESSION['threadid'], $link);
if ($thread && $thread['istate'] != $state_closed) {
$msg = getstring2_("chat.client.visited.page", array($referer), $thread['locale'], true);
post_message_($thread['threadid'], $kind_for_agent,$msg,$link);
}
mysql_close($link);
}
$image = verifyparam(isset($_GET['image']) ? "image" : "i", "/^\w+$/", "mibew");
$lang = verifyparam(isset($_GET['language']) ? "language" : "lang", "/^[\w-]{2,5}$/", "");
if(!$lang || !locale_pattern_check($lang) || !locale_exists($lang)) {
$lang = $current_locale;
}
$groupid = verifyparam( "group", "/^\d{1,10}$/", "");
if($groupid) {
loadsettings();
if($settings['enablegroups'] == '1') {
$group = group_by_id($groupid);
if(!$group) {
$groupid = "";
}
} else {
$groupid = "";
}
}
$image_postfix = has_online_operators($groupid) ? "on" : "off";
$filename = dirname(__FILE__) . "/locales/${lang}/button/${image}_${image_postfix}.gif";
if (!file_exists($filename)) {
die("no image");
}
$fp = fopen($filename, 'rb') or die("unable to get image");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-Type: image/gif");
header("Content-Length: ".filesize($filename));
if(function_exists('fpassthru')){
@fpassthru($fp);
} else {
while( (!feof($fp)) && (connection_status()==0)){
print(fread($fp, 1024*8));
flush();
}
fclose($fp);
}
exit;
?>

View File

@ -1,7 +1,6 @@
/*!
* This file is a part of Mibew Messenger.
*
* Copyright 2005-2023 the original author or authors.
<?php
/*
* Copyright 2005-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -15,3 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
require_once('b.php');
exit;
?>

View File

@ -1,5 +1,6 @@
<?php
/*
* Copyright 2005-2023 the original author or authors.
* Copyright 2005-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -14,12 +15,12 @@
* limitations under the License.
*/
/* common controls */
.control,
.user-name-control-set,
.user-name-control-change,
.user-name-control-input-background,
#confirm-pane .submit-button {
display: inline;
zoom: 1;
}
require_once('libs/common.php');
require_once('libs/captcha.php');
$captchaCode = gen_captcha();
$_SESSION["mibew_captcha"] = $captchaCode;
draw_captcha($captchaCode);
exit;
?>

182
src/mibew/client.php Normal file
View File

@ -0,0 +1,182 @@
<?php
/*
* Copyright 2005-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
require_once('libs/common.php');
require_once('libs/chat.php');
require_once('libs/operator.php');
require_once('libs/groups.php');
require_once('libs/expand.php');
require_once('libs/captcha.php');
require_once('libs/notify.php');
loadsettings();
if($settings['enablessl'] == "1" && $settings['forcessl'] == "1") {
if(!is_secure_request()) {
$requested = $_SERVER['PHP_SELF'];
if($_SERVER['REQUEST_METHOD'] == 'GET' && $_SERVER['QUERY_STRING']) {
header("Location: ".get_app_location(true,true)."/client.php?".$_SERVER['QUERY_STRING']);
} else {
die("only https connections are handled");
}
exit;
}
}
if( !isset($_GET['token']) || !isset($_GET['thread']) ) {
$thread = NULL;
if( isset($_SESSION['threadid']) ) {
$thread = reopen_thread($_SESSION['threadid']);
}
if( !$thread ) {
$groupid = "";
$groupname = "";
if($settings['enablegroups'] == '1') {
$groupid = verifyparam( "group", "/^\d{1,10}$/", "");
if($groupid) {
$group = group_by_id($groupid);
if(!$group) {
$groupid = "";
} else {
$groupname = get_group_name($group);
}
}
}
$visitor = visitor_from_request();
if(isset($_POST['survey']) && $_POST['survey'] == 'on') {
$firstmessage = getparam("message");
$info = getparam("info");
$email = getparam("email");
$referrer = urldecode(getparam("referrer"));
if ($settings["surveyaskcaptcha"] == "1") {
$captcha = getparam('captcha');
$original = isset($_SESSION["mibew_captcha"])
? $_SESSION["mibew_captcha"]
: "";
$survey_captcha_failed = empty($original)
|| empty($captcha)
|| $captcha != $original;
unset($_SESSION['mibew_captcha']);
}
if($settings['usercanchangename'] == "1" && isset($_POST['name'])) {
$newname = getparam("name");
if($newname != $visitor['name']) {
$data = strtr(base64_encode(myiconv($mibew_encoding,"utf-8",$newname)), '+/=', '-_,');
setcookie($namecookie, $data, time()+60*60*24*365);
$visitor['name'] = $newname;
}
}
} else {
$firstmessage = NULL;
$info = getgetparam('info');
$email = getgetparam('email');
$referrer = isset($_GET['url']) ? $_GET['url'] :
(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : "");
if(isset($_GET['referrer']) && $_GET['referrer']) {
$referrer .= "\n".$_GET['referrer'];
}
}
if(!has_online_operators($groupid)) {
$page = array();
setup_logo();
setup_leavemessage($visitor['name'],$email,$firstmessage,$groupid,$groupname,$info,$referrer,can_show_captcha());
expand("styles", getchatstyle(), "leavemessage.tpl");
exit;
}
$show_survey = $settings['enablepresurvey'] == '1'
&& (
!(isset($_POST['survey']) && $_POST['survey'] == 'on')
|| ($settings["surveyaskcaptcha"] == "1" && !empty($survey_captcha_failed))
);
if($show_survey) {
$page = array();
setup_logo();
if (!empty($survey_captcha_failed)) {
$errors[] = getlocal('errors.captcha');
}
setup_survey($visitor['name'], $email, $groupid, $info, $referrer, can_show_captcha());
expand("styles", getchatstyle(), "survey.tpl");
exit;
}
$remoteHost = get_remote_host();
$userbrowser = $_SERVER['HTTP_USER_AGENT'];
$link = connect();
if(!check_connections_from_remote($remoteHost, $link)) {
mysql_close($link);
die("number of connections from your IP is exceeded, try again later");
}
$thread = create_thread($groupid,$visitor['name'], $remoteHost, $referrer,$current_locale,$visitor['id'], $userbrowser,$state_loading,$link);
$_SESSION['threadid'] = $thread['threadid'];
if( $referrer ) {
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.came.from',array($referrer),true),$link);
}
post_message_($thread['threadid'],$kind_info,getstring('chat.wait', true),$link);
if($email) {
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.visitor.email',array($email),true),$link);
}
if($info) {
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.visitor.info',array($info),true),$link);
}
if($firstmessage) {
$postedid = post_message_($thread['threadid'],$kind_user,$firstmessage,$link,$visitor['name']);
if ($postedid) {
commit_thread( $thread['threadid'], array('shownmessageid' => intval($postedid)), $link);
}
}
notify_operators($thread, $firstmessage, $link);
mysql_close($link);
}
$threadid = $thread['threadid'];
$token = $thread['ltoken'];
$level = get_remote_level($_SERVER['HTTP_USER_AGENT']);
$chatstyle = verifyparam( "style", "/^\w+$/", "");
header("Location: $mibewroot/client.php?thread=$threadid&token=$token&level=$level".($chatstyle ? "&style=$chatstyle" : ""));
exit;
}
$token = verifyparam( "token", "/^\d{1,10}$/");
$threadid = verifyparam( "thread", "/^\d{1,10}$/");
$level = verifyparam( "level", "/^(ajaxed|simple|old)$/");
$thread = thread_by_id($threadid);
if( !$thread || !isset($thread['ltoken']) || $token != $thread['ltoken'] ) {
die("wrong thread");
}
setup_chatview_for_user($thread, $level);
$pparam = verifyparam( "act", "/^(mailthread)$/", "default");
if( $pparam == "mailthread" ) {
expand("styles", getchatstyle(), "mail.tpl");
} else if( $level == "ajaxed" ) {
expand("styles", getchatstyle(), "chat.tpl");
} else if( $level == "simple" ) {
expand("styles", getchatstyle(), "chatsimple.tpl");
} else if( $level == "old" ) {
expand("styles", getchatstyle(), "nochat.tpl");
}
?>

View File

@ -1,336 +0,0 @@
# This file contains current database schema that is used for installation.
# Do not change anything in this file unless you know what you are doing!
# Contains information about chat groups. This table cannot be named just
# "group" because it is reserved SQL word.
opgroup:
fields:
groupid: "int NOT NULL auto_increment PRIMARY KEY"
parent: "int DEFAULT NULL"
vcemail: "varchar(64)"
vclocalname: "varchar(64) NOT NULL"
vccommonname: "varchar(64) NOT NULL"
vclocaldescription: "varchar(1024) NOT NULL"
vccommondescription: "varchar(1024) NOT NULL"
iweight: "int NOT NULL DEFAULT 0"
vctitle: "varchar(255) DEFAULT ''"
vcchattitle: "varchar(255) DEFAULT ''"
vclogo: "varchar(255) DEFAULT ''"
vchosturl: "varchar(255) DEFAULT ''"
indexes:
parent: [parent]
# Contains info about chat threads
thread:
fields:
# ID of the thread.
threadid: "int NOT NULL auto_increment PRIMARY KEY"
# Name of the user in chat.
username: "varchar(64) NOT NULL"
# ID of the user. This field is foreign key for {sitevisitor}.userid
userid: "varchar(255)"
# Name of the operator who took place in the chat.
agentname: "varchar(64)"
# ID of the operator who took place in the chat.
agentid: "int NOT NULL DEFAULT 0"
# Unix timestamp of the moment when the thread was created.
dtmcreated: "int NOT NULL DEFAULT 0"
# Unix timestamp of the moment when chat actually started.
dtmchatstarted: "int NOT NULL DEFAULT 0"
# Unix timestamp of the last thread modification.
dtmmodified: "int NOT NULL DEFAULT 0"
# Unix timestamp of the moment when the thread was closed.
dtmclosed: "int NOT NULL DEFAULT 0"
# ID of the last thread revision.
lrevision: "int NOT NULL DEFAULT 0"
# State of the thread. It is one of Thread::STATE_* constants.
istate: "int NOT NULL DEFAULT 0"
# State of invitation related with the thread. It is one of
# Thread::INVITATION_* constants.
invitationstate: "int NOT NULL DEFAULT 0"
# Last token of the thread.
ltoken: "int NOT NULL"
# IP address of the user.
remote: "varchar(255)"
# Page from which chat thread was started.
referer: "text"
# ID of the operator who will next in the chat.
nextagent: "int NOT NULL DEFAULT 0"
# Code of chat locale.
locale: "varchar(8)"
# Unix timestamp of the last request from user's window to server.
lastpinguser: "int NOT NULL DEFAULT 0"
# Unix timestamp of the last request from operator's window to server.
lastpingagent: "int NOT NULL DEFAULT 0"
# Indicates if user typing or not. It can take two values 0 and 1.
usertyping: "int DEFAULT 0"
# Indicates if operator typing or not. It can take two values 0 and 1.
agenttyping: "int DEFAULT 0"
# ID of shown message in the chat.
shownmessageid: "int NOT NULL DEFAULT 0"
# User agent description that took from 'User-Agent' HTTP header.
useragent: "varchar(255)"
# Total count of user's messages related with the thread.
messagecount: "varchar(16)"
# ID of the group at Mibew Messenger side related with the thread.
groupid: "int references {opgroup}(groupid)"
# Contains "by thread" statistics
threadstatistics:
fields:
statid: "int NOT NULL auto_increment PRIMARY KEY"
date: "int NOT NULL DEFAULT 0"
threads: "int NOT NULL DEFAULT 0"
missedthreads: "int NOT NULL DEFAULT 0"
sentinvitations: "int NOT NULL DEFAULT 0"
acceptedinvitations: "int NOT NULL DEFAULT 0"
rejectedinvitations: "int NOT NULL DEFAULT 0"
ignoredinvitations: "int NOT NULL DEFAULT 0"
operatormessages: "int NOT NULL DEFAULT 0"
usermessages: "int NOT NULL DEFAULT 0"
averagewaitingtime: "FLOAT(10, 1) NOT NULL DEFAULT 0"
averagechattime: "FLOAT(10, 1) NOT NULL DEFAULT 0"
requestbuffer:
fields:
requestid: "int NOT NULL auto_increment PRIMARY KEY"
# Use MD5 hashes as keys
requestkey: "char(32) NOT NULL"
request: "text NOT NULL"
indexes:
requestkey: [requestkey]
requestcallback:
fields:
callbackid: "int NOT NULL auto_increment PRIMARY KEY"
token: "varchar(64) NOT NULL DEFAULT ''"
func: "varchar(64) NOT NULL"
arguments: "varchar(1024)"
indexes:
token: [token]
# Contains updated translations
translation:
fields:
translationid: "int NOT NULL auto_increment PRIMARY KEY"
locale: "varchar(5) NOT NULL"
context: "varchar(256) NOT NULL DEFAULT ''"
source: "text COLLATE utf8_bin"
translation: "text"
# An artificial unique key for the record. It is needed to avoid
# duplication of translation strings. The field contains SHA-1 hash of
# combination of locale, context and source fields. Native MySQL unique
# keys cannot be applied to them because "source" field has text data
# type.
hash: "char(40) NOT NULL"
unique_keys:
hash: [hash]
# Contains locales info
locale:
fields:
# Artificial primary key.
localeid: "int NOT NULL auto_increment PRIMARY KEY"
# Locale code
code: "varchar(5) NOT NULL"
# Human readable name of the locale.
name: "varchar(128) NOT NULL DEFAULT ''"
# Indicates if the locale is enabled or not.
enabled: "tinyint NOT NULL DEFAULT 0"
# Indicates if the locale uses RTL writing.
rtl: "tinyint NOT NULL DEFAULT 0"
# Name of the locale which is used with PHP's setlocale to format dates.
time_locale: "varchar(128) NOT NULL DEFAULT 'en_US'"
# Serialized array of various date formats.
date_format: "text"
unique_keys:
# Make sure locale code can be duplicated
code: [code]
# Contains localized mail templates
mailtemplate:
fields:
# Artificial primary key
templateid: "int NOT NULL auto_increment PRIMARY KEY"
# Locale code a template belongs to
locale: "varchar(5) NOT NULL"
# Machine name of a template
name: "varchar(256) NOT NULL"
# Mail subject
subject: "varchar(1024) NOT NULL"
# Mail body
body: "text"
# Store chat thread messages
message:
fields:
# Message ID.
messageid: "int NOT NULL auto_increment PRIMARY KEY"
# ID of the thread related with the message.
threadid: "int NOT NULL references {thread}(threadid)"
# Message kind. It is one of Thread::KIND_* constants.
ikind: "int NOT NULL"
# ID of operator who sent the message. This value will be ignored for
# system messages and messages which sent by users.
agentid: "int NOT NULL DEFAULT 0"
# Message text body.
tmessage: "text NOT NULL"
# Name of the plugin which sent the message. If message was not sent by
# a plugin this field equals to an empty string.
plugin: "varchar(256) NOT NULL DEFAULT ''"
# Arbitrary serialized data related with message.
data: "text"
# Unix timestamp when message was created.
dtmcreated: "int NOT NULL DEFAULT 0"
# Name of the message sender.
tname: "varchar(64)"
indexes:
idx_agentid: [agentid]
# Contains info about operators
operator:
fields:
operatorid: "int NOT NULL auto_increment PRIMARY KEY"
vclogin: "varchar(64) NOT NULL"
vcpassword: "varchar(64) NOT NULL"
vclocalename: "varchar(64) NOT NULL"
vccommonname: "varchar(64) NOT NULL"
vcemail: "varchar(64)"
dtmlastvisited: "int NOT NULL DEFAULT 0"
# Current status of an operator: 0 - online, 1 - away
istatus: "int DEFAULT 0"
idisabled: "int DEFAULT 0"
vcavatar: "varchar(255)"
# Operators privileges bitmask.
iperm: "int DEFAULT 0"
dtmrestore: "int NOT NULL DEFAULT 0"
vcrestoretoken: "varchar(64)"
# Use to start chat with specified operator.
code: "varchar(64) DEFAULT ''"
# Contains "by operator" statistics
operatorstatistics:
fields:
statid: "int NOT NULL auto_increment PRIMARY KEY"
date: "int NOT NULL DEFAULT 0"
operatorid: "int NOT NULL"
threads: "int NOT NULL DEFAULT 0"
messages: "int NOT NULL DEFAULT 0"
averagelength: "FLOAT(10, 1) NOT NULL DEFAULT 0"
sentinvitations: "int NOT NULL DEFAULT 0"
acceptedinvitations: "int NOT NULL DEFAULT 0"
rejectedinvitations: "int NOT NULL DEFAULT 0"
ignoredinvitations: "int NOT NULL DEFAULT 0"
indexes:
operatorid: [operatorid]
revision:
fields:
id: "INT NOT NULL PRIMARY KEY"
# Contains relations between operators and groups
operatortoopgroup:
fields:
groupid: "int NOT NULL references {opgroup}(groupid)"
operatorid: "int NOT NULL references {operator}(operatorid)"
indexes:
groupid: [groupid]
operatorid: [operatorid]
# Contains banned visitors
ban:
fields:
banid: "INT NOT NULL auto_increment PRIMARY KEY"
dtmcreated: "int NOT NULL DEFAULT 0"
dtmtill: "int NOT NULL DEFAULT 0"
address: "varchar(255)"
comment: "varchar(255)"
# Contains dynamic configs
config:
fields:
id: "INT NOT NULL auto_increment PRIMARY KEY"
vckey: "varchar(255)"
vcvalue: "varchar(255)"
# Contains canned messages
cannedmessage:
fields:
id: "INT NOT NULL auto_increment PRIMARY KEY"
locale: "varchar(8)"
groupid: "int references {opgroup}(groupid)"
vctitle: "varchar(100) NOT NULL DEFAULT ''"
vcvalue: "varchar(1024) NOT NULL"
sitevisitor:
fields:
visitorid: "INT NOT NULL auto_increment PRIMARY KEY"
userid: "varchar(255) NOT NULL"
username: "varchar(64)"
firsttime: "int NOT NULL DEFAULT 0"
lasttime: "int NOT NULL DEFAULT 0"
entry: "text NOT NULL"
details: "text NOT NULL"
invitations: "INT NOT NULL DEFAULT 0"
chats: "INT NOT NULL DEFAULT 0"
threadid: "INT references {thread}(threadid) on delete set null"
indexes:
threadid: [threadid]
visitedpage:
fields:
pageid: "INT NOT NULL auto_increment PRIMARY KEY"
address: "varchar(1024)"
visittime: "int NOT NULL DEFAULT 0"
visitorid: "INT"
# Indicates if path included in 'by page' statistics
calculated: "tinyint NOT NULL DEFAULT 0"
indexes:
visitorid: [visitorid]
# Contains "by page" statistics
visitedpagestatistics:
fields:
pageid: "INT NOT NULL auto_increment PRIMARY KEY"
date: "int NOT NULL DEFAULT 0"
address: "varchar(1024)"
visits: "int NOT NULL DEFAULT 0"
chats: "int NOT NULL DEFAULT 0"
sentinvitations: "int NOT NULL DEFAULT 0"
acceptedinvitations: "int NOT NULL DEFAULT 0"
rejectedinvitations: "int NOT NULL DEFAULT 0"
ignoredinvitations: "int NOT NULL DEFAULT 0"
# Contains info about installed plugins
plugin:
fields:
# Artificial ID
id: "INT NOT NULL auto_increment PRIMARY KEY"
# Plugin name in "<Vendor>:<Name>" format.
name: "varchar(255) NOT NULL"
# Installed version of the plugin.
version: "varchar(255) NOT NULL"
# Indicates if the plugin is installed or not.
installed: "tinyint NOT NULL DEFAULT 0"
# Indicates if the plugin is enabled or not.
enabled: "tinyint NOT NULL DEFAULT 0"
# Indicates if the plugin is initialized or not.
initialized: "tinyint NOT NULL DEFAULT 0"
unique_keys:
name: [name]
# Contains info about all available updates
availableupdate:
fields:
# Artificial ID
id: "INT NOT NULL auto_increment PRIMARY KEY"
# Can be either "core" or fully qualified plugin's name
target: "varchar(255) NOT NULL"
# The latest available version of the plugin
version: "varchar(255) NOT NULL"
# A URL where the new version can be downloaded
url: "text"
# Description of the update
description: "text"
unique_keys:
target: [target]

View File

@ -1,98 +0,0 @@
# IMPORTANT: Before install Mibew Messenger copy this file to config.yml and
# fill it with your own settings!
# MySQL Database parameters
database:
host: ""
port: 3306
db: ""
login: ""
pass: ""
tables_prefix: ""
use_persistent_connection: false
# Mail
## This value will be used as sender address in all e-mails Mibew Messenger send.
mailbox: mibew@yourdomain.com
## Mailer parameters
mailer:
# This value determines what kind of mailer will be used. Possible values
# are "mail" and "smtp".
#
# To use standard PHP mail function just set this option to "mail". No
# additional configs are required in this case.
#
# To use SMTP-based solution set this option "smtp". This approach require
# some extra configuration to be done (see below).
transport: mail
# The lines below represents default SMTP mailer configurations. They will
# be used only if the "transport" option is set to "smtp".
host: localhost
port: 25
user: user
pass: ""
# The following option determines what kind of encryption should be used.
# false means no encyption at all. Another values once can use are "ssl" and
# "tls".
encryption: false
# Cache subsystem
cache:
# This value determines where the cached data will be stored. Possible
# values are "none", "file_system" and "memcached".
#
# If "none" is used the caching will be disabled. This option should be used
# only if none of the other options works.
#
# If "file_system" is used the cached data will be stored in files within
# the "cache/" directory. Notice, that the file system storage does not work
# on NFS systems bucause exclusive file locks are not supported where.
#
# If "memcached" is used the cached data will be stored in Memcached
# storage. Before using this kind of storage make sure PHP's memcached
# extension is installed and enabled.
storage: file_system
# The lines below represents default Memcached server configurations. They
# will be used only if the "storage" option is set to "memcached".
memcached_servers:
- host: localhost
port: 11211
# The "weight" field is optional and can be omitted and it's only positive int number.
weight: 1
# Actually, one can use any number of memcached servers he wants. Just
# add servers description like the one above.
# Locales
## Native name will be used in this locale
home_locale: en
## If user does not provide known lang
default_locale: en
# A timezone to use. Leave this value empty to use the default timezone from the
# system settings. For the details about available timezones see
# http://php.net/manual/en/timezones.php
timezone: ""
# List of proxy's IP Mibew Messenger should trust. You should set this option
# if you use Mibew Messenger with a load balancer or behind a proxy.
trusted_proxies: []
# Here is an example of what values this option can take:
# trusted_proxies:
# - 127.0.0.1
# - ::1
# - 10.0.0.0/8
# Plugins
plugins: []
## Example of plugins configuration
# plugins:
# "VendorName:PluginName":
# weight: 100
# some_configurable_value: value
# "VendorName:AnotherPluginName":
# very_important_value: "$3.50"

View File

@ -1,829 +0,0 @@
# Chat actions
chat_thread_update:
path: /thread/update
defaults:
_controller: Mibew\Controller\Chat\ThreadController::updateAction
## Operator's chat
chat_operator:
path: /operator/chat/{thread_id}/{token}
defaults:
_controller: Mibew\Controller\Chat\OperatorChatController::indexAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
requirements:
thread_id: \d{1,10}
token: \d{1,10}
chat_operator_redirect:
path: /operator/chat/{thread_id}/{token}/redirect
defaults:
_controller: Mibew\Controller\Chat\RedirectController::redirectAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
requirements:
thread_id: \d{1,10}
token: \d{1,10}
chat_operator_start:
path: /operator/chat/{thread_id}
defaults:
_controller: Mibew\Controller\Chat\OperatorChatController::startAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
requirements:
thread_id: \d{1,10}
chat_operator_redirection_links:
path: /operator/chat/{thread_id}/{token}/redirection-links
defaults:
_controller: Mibew\Controller\Chat\RedirectController::showRedirectionLinksAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
requirements:
thread_id: \d{1,10}
token: \d{1,10}
## User's chat
chat_user:
path: /chat/{thread_id}/{token}
defaults:
_controller: Mibew\Controller\Chat\UserChatController::indexAction
requirements:
thread_id: \d{1,10}
token: \d{1,10}
chat_user_check:
path: /chat/{thread_id}/{token}/check
defaults:
_controller: Mibew\Controller\Chat\UserChatController::checkAction
requirements:
thread_id: \d{1,10}
token: \d{1,10}
chat_user_invitation:
path: /chat/invitation
defaults:
_controller: Mibew\Controller\Chat\UserChatController::invitationAction
chat_user_mail:
path: /chat/{thread_id}/{token}/mail
defaults:
_controller: Mibew\Controller\Chat\MailController::showFormAction
requirements:
thread_id: \d{1,10}
token: \d{1,10}
methods: [GET]
chat_user_mail_send:
path: /chat/{thread_id}/{token}/mail
defaults:
_controller: Mibew\Controller\Chat\MailController::submitFormAction
requirements:
thread_id: \d{1,10}
token: \d{1,10}
methods: [POST]
chat_user_popup_style:
path: /chat/style/popup/{style}
defaults:
_controller: Mibew\Controller\Chat\StyleController::loadPopupStyleAction
style: ""
requirements:
style: "[0-9A-Za-z_]*"
chat_user_popup_style_force_secure:
path: /chat/style/popup/{style}/force_secure
defaults:
_controller: Mibew\Controller\Chat\StyleController::loadPopupStyleAction
style: ""
force_secure: on
requirements:
style: "[0-9A-Za-z_]*"
chat_user_start:
path: /chat
defaults:
_controller: Mibew\Controller\Chat\UserChatController::startAction
chat_user_cookie_set_permission:
path: /chat/cookies-set-permission
defaults:
_controller: Mibew\Controller\Chat\UserChatController::cookieSetPermissionAction
# Pages that are available for all users
button:
path: /b
defaults: { _controller: Mibew\Controller\ButtonController::indexAction }
captcha:
path: /captcha
defaults: { _controller: Mibew\Controller\CaptchaController::drawAction }
cron:
path: /cron
defaults: { _controller: Mibew\Controller\CronController::runAction }
# A set of localization constants for the client side applications is generated
# dynamically
js_translation:
path: /locales/{locale}/translation.js
defaults:
_controller: Mibew\Controller\Localization\JsTranslationController::indexAction
widget_gateway:
path: /widget
defaults: { _controller: Mibew\Controller\WidgetController::indexAction }
# Operators' pages
## About page
about:
path: /operator/about
defaults:
_controller: Mibew\Controller\AboutController::indexAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
## Banned visitors
ban_add:
path: /operator/ban/add
defaults:
_controller: Mibew\Controller\BanController::showEditFormAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
methods: [GET]
ban_add_save:
path: /operator/ban/add
defaults:
_controller: Mibew\Controller\BanController::submitEditFormAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
methods: [POST]
ban_delete:
path: /operator/ban/{ban_id}/delete
defaults:
_controller: Mibew\Controller\BanController::deleteAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
requirements:
ban_id: \d{1,10}
ban_edit:
path: /operator/ban/{ban_id}/edit
defaults:
_controller: Mibew\Controller\BanController::showEditFormAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
requirements:
ban_id: \d{1,10}
methods: [GET]
ban_edit_save:
path: /operator/ban/{ban_id}/edit
defaults:
_controller: Mibew\Controller\BanController::submitEditFormAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
requirements:
ban_id: \d{1,10}
methods: [POST]
bans:
path: /operator/ban
defaults:
_controller: Mibew\Controller\BanController::indexAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
## Button code
button_code:
path: /operator/button-code
defaults:
_controller: Mibew\Controller\ButtonCodeController::generateAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
## Canned messages
canned_message_add:
path: /operator/canned-message/add
defaults:
_controller: Mibew\Controller\CannedMessageController::showEditFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [GET]
canned_message_add_save:
path: /operator/canned-message/add
defaults:
_controller: Mibew\Controller\CannedMessageController::submitEditFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [POST]
canned_message_delete:
path: /operator/canned-message/{message_id}/delete
defaults:
_controller: Mibew\Controller\CannedMessageController::deleteAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
message_id: \d{1,10}
canned_message_edit:
path: /operator/canned-message/{message_id}/edit
defaults:
_controller: Mibew\Controller\CannedMessageController::showEditFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
message_id: \d{1,10}
methods: [GET]
canned_message_edit_save:
path: /operator/canned-message/{message_id}/edit
defaults:
_controller: Mibew\Controller\CannedMessageController::submitEditFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
message_id: \d{1,10}
methods: [POST]
canned_messages:
path: /operator/canned-message
defaults:
_controller: Mibew\Controller\CannedMessageController::indexAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
## Groups
group_add:
path: /operator/group/add
defaults:
_controller: Mibew\Controller\Group\SettingsController::showFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [GET]
group_add_save:
path: /operator/group/add
defaults:
_controller: Mibew\Controller\Group\SettingsController::submitFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [POST]
group_delete:
path: /operator/group/{group_id}/delete
defaults:
_controller: Mibew\Controller\Group\ManagementController::deleteAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
group_id: \d{1,10}
group_edit:
path: /operator/group/{group_id}/edit
defaults:
_controller: Mibew\Controller\Group\SettingsController::showFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
group_id: \d{1,10}
methods: [GET]
group_edit_save:
path: /operator/group/{group_id}/edit
defaults:
_controller: Mibew\Controller\Group\SettingsController::submitFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
group_id: \d{1,10}
methods: [POST]
group_members:
path: /operator/group/{group_id}/members
defaults:
_controller: Mibew\Controller\Group\MembersController::showFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
group_id: \d{1,10}
methods: [GET]
group_members_save:
path: /operator/group/{group_id}/members
defaults:
_controller: Mibew\Controller\Group\MembersController::submitFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
group_id: \d{1,10}
methods: [POST]
groups:
path: /operator/group
defaults:
_controller: Mibew\Controller\Group\ManagementController::indexAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
## History
history:
path: /operator/history
defaults:
_controller: Mibew\Controller\HistoryController::indexAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
history_thread:
path: /operator/history/thread/{thread_id}
defaults:
_controller: Mibew\Controller\HistoryController::threadAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
requirements:
thread_id: \d{1,10}
history_user:
path: /operator/history/user/{user_id}
defaults:
_controller: Mibew\Controller\HistoryController::userAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
requirements:
user_id: .{0,63}
history_user_track:
path: /operator/history/user-track
defaults:
_controller: Mibew\Controller\HistoryController::userTrackAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
## Home
home:
path: /
defaults:
_controller: Mibew\Controller\HomeController::redirectAction
home_operator:
path: /operator
defaults:
_controller: Mibew\Controller\HomeController::dashboardAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
## Invitations
invite:
path: /operator/invite
defaults:
_controller: Mibew\Controller\InvitationController::inviteAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
## Locales
locale_disable:
path: /operator/locale/{locale}/disable
defaults:
_controller: Mibew\Controller\Localization\LocaleController::disableAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
locale: "[a-z\\-]{2,5}"
locale_edit:
path: /operator/locale/{locale}/edit
defaults:
_controller: Mibew\Controller\Localization\LocaleController::showEditFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
locale: "[a-z\\-]{2,5}"
methods: [GET]
locale_edit_save:
path: /operator/locale/{locale}/edit
defaults:
_controller: Mibew\Controller\Localization\LocaleController::submitEditFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
locale: "[a-z\\-]{2,5}"
methods: [POST]
locale_enable:
path: /operator/locale/{locale}/enable
defaults:
_controller: Mibew\Controller\Localization\LocaleController::enableAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
locale: "[a-z\\-]{2,5}"
locales:
path: /operator/locale
defaults:
_controller: Mibew\Controller\Localization\LocaleController::indexAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
## Log in
login:
path: /operator/login
defaults:
_controller: Mibew\Controller\LoginController::showFormAction
methods: [GET]
login_submit:
path: /operator/login
defaults:
_controller: Mibew\Controller\LoginController::submitFormAction
methods: [POST]
## Log out
logout:
path: /operator/logout
defaults:
_controller: Mibew\Controller\LogoutController::logoutAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
## Mail templates
mail_template_edit:
path: /operator/mail-template/{name}/edit
defaults:
_controller: Mibew\Controller\MailTemplateController::showEditFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [GET]
requirements:
name: "[A-Za-z0-9_]+"
mail_template_edit_save:
path: /operator/mail-template/{name}/edit
defaults:
_controller: Mibew\Controller\MailTemplateController::submitEditFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [POST]
requirements:
name: "[A-Za-z0-9_]+"
mail_templates:
path: /operator/mail-template
defaults:
_controller: Mibew\Controller\MailTemplateController::indexAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
## Operators
operator_add:
path: /operator/operator/add
defaults:
_controller: Mibew\Controller\Operator\ProfileController::showFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [GET]
operator_add_save:
path: /operator/operator/add
defaults:
_controller: Mibew\Controller\Operator\ProfileController::submitFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [POST]
operator_avatar:
path: /operator/operator/{operator_id}/avatar
defaults:
_controller: Mibew\Controller\Operator\AvatarController::showFormAction
_access_check: Mibew\AccessControl\Check\OperatorViewCheck
requirements:
operator_id: \d{1,10}
methods: [GET]
operator_avatar_delete:
path: /operator/operator/{operator_id}/avatar/delete
defaults:
_controller: Mibew\Controller\Operator\AvatarController::deleteAction
_access_check: Mibew\AccessControl\Check\OperatorEditCheck
requirements:
operator_id: \d{1,10}
operator_avatar_save:
path: /operator/operator/{operator_id}/avatar
defaults:
_controller: Mibew\Controller\Operator\AvatarController::submitFormAction
_access_check: Mibew\AccessControl\Check\OperatorEditCheck
requirements:
operator_id: \d{1,10}
methods: [POST]
operator_edit:
path: /operator/operator/{operator_id}/edit
defaults:
_controller: Mibew\Controller\Operator\ProfileController::showFormAction
_access_check: Mibew\AccessControl\Check\OperatorViewCheck
requirements:
operator_id: \d{1,10}
methods: [GET]
operator_edit_save:
path: /operator/operator/{operator_id}/edit
defaults:
_controller: Mibew\Controller\Operator\ProfileController::submitFormAction
_access_check: Mibew\AccessControl\Check\OperatorEditCheck
requirements:
operator_id: \d{1,10}
methods: [POST]
operator_enable:
path: /operator/operator/{operator_id}/enable
defaults:
_controller: Mibew\Controller\Operator\ManagementController::enableAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
operator_id: \d{1,10}
operator_delete:
path: /operator/operator/{operator_id}/delete
defaults:
_controller: Mibew\Controller\Operator\ManagementController::deleteAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
operator_id: \d{1,10}
operator_disable:
path: /operator/operator/{operator_id}/disable
defaults:
_controller: Mibew\Controller\Operator\ManagementController::disableAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
operator_id: \d{1,10}
operator_groups:
path: /operator/operator/{operator_id}/groups
defaults:
_controller: Mibew\Controller\Operator\GroupsController::showFormAction
_access_check: Mibew\AccessControl\Check\OperatorViewCheck
requirements:
operator_id: \d{1,10}
methods: [GET]
operator_groups_save:
path: /operator/operator/{operator_id}/groups
defaults:
_controller: Mibew\Controller\Operator\GroupsController::submitFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
operator_id: \d{1,10}
methods: [POST]
operator_permissions:
path: /operator/operator/{operator_id}/permissions
defaults:
_controller: Mibew\Controller\Operator\PermissionsController::showFormAction
_access_check: Mibew\AccessControl\Check\OperatorViewCheck
requirements:
operator_id: \d{1,10}
methods: [GET]
operator_permissions_save:
path: /operator/operator/{operator_id}/permissions
defaults:
_controller: Mibew\Controller\Operator\PermissionsController::submitFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
operator_id: \d{1,10}
methods: [POST]
operators:
path: /operator/operator
defaults:
_controller: Mibew\Controller\Operator\ManagementController::indexAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
## Password recovery
password_recovery:
path: /operator/password-recovery
defaults:
_controller: Mibew\Controller\PasswordRecoveryController::indexAction
password_recovery_reset:
path: /operator/password-recovery/reset
defaults:
_controller: Mibew\Controller\PasswordRecoveryController::resetAction
## Plugins
plugin_enable:
path: /operator/plugin/{plugin_name}/enable
defaults:
_controller: Mibew\Controller\PluginController::enableAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
plugin_disable:
path: /operator/plugin/{plugin_name}/disable
defaults:
_controller: Mibew\Controller\PluginController::disableAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
plugin_uninstall:
path: /operator/plugin/{plugin_name}/uninstall
defaults:
_controller: Mibew\Controller\PluginController::uninstallAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
plugin_update:
path: /operator/plugin/{plugin_name}/update
defaults:
_controller: Mibew\Controller\PluginController::updateAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
plugins:
path: /operator/plugin
defaults:
_controller: Mibew\Controller\PluginController::indexAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
## Settings
settings_common:
path: /operator/settings
defaults:
_controller: Mibew\Controller\Settings\CommonController::showFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [GET]
settings_common_save:
path: /operator/settings
defaults:
_controller: Mibew\Controller\Settings\CommonController::submitFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [POST]
settings_features:
path: /operator/settings/features
defaults:
_controller: Mibew\Controller\Settings\FeaturesController::showFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [GET]
settings_features_save:
path: /operator/settings/features
defaults:
_controller: Mibew\Controller\Settings\FeaturesController::submitFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [POST]
settings_performance:
path: /operator/settings/performance
defaults:
_controller: Mibew\Controller\Settings\PerformanceController::showFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [GET]
settings_performance_save:
path: /operator/settings/performance
defaults:
_controller: Mibew\Controller\Settings\PerformanceController::submitFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [POST]
## Statistics
statistics:
path: /operator/statistics/{type}
defaults:
type: "by-date"
_controller: Mibew\Controller\StatisticsController::indexAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_VIEWSTATISTICS]
requirements:
type: by-date|by-operator|by-page
## Styles
style_preview:
path: /operator/style/{type}/preview
defaults:
_controller: Mibew\Controller\StyleController::previewAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
type: chat|invitation|page
## Translation
translation_edit:
path: /operator/translation/{string_id}/edit
defaults:
_controller: Mibew\Controller\Localization\TranslationController::showEditFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
string_id: "\\d{1,10}"
methods: [GET]
translation_edit_save:
path: /operator/translation/{string_id}/edit
defaults:
_controller: Mibew\Controller\Localization\TranslationController::submitEditFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
requirements:
string_id: "\\d{1,10}"
methods: [POST]
translation_export:
path: /operator/translation/export
defaults:
_controller: Mibew\Controller\Localization\TranslationExportController::showFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [GET]
translation_export_process:
path: /operator/translation/export
defaults:
_controller: Mibew\Controller\Localization\TranslationExportController::submitFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [POST]
translation_import:
path: /operator/translation/import
defaults:
_controller: Mibew\Controller\Localization\TranslationImportController::showFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [GET]
translation_import_process:
path: /operator/translation/import
defaults:
_controller: Mibew\Controller\Localization\TranslationImportController::submitFormAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
methods: [POST]
translations:
path: /operator/translation
defaults:
_controller: Mibew\Controller\Localization\TranslationController::indexAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
## Updates
update:
path: /update
defaults:
_controller: Mibew\Controller\UpdateController::indexAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
update_run:
path: /update/run
defaults:
_controller: Mibew\Controller\UpdateController::runUpdateAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
update_check:
path: /update/check
defaults:
_controller: Mibew\Controller\UpdateController::checkUpdatesAction
_access_check: Mibew\AccessControl\Check\PermissionsCheck
_access_permissions: [CAN_ADMINISTRATE]
## Users (visitors avaiting page)
users:
path: /operator/users
defaults:
_controller: Mibew\Controller\UsersController::indexAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
users_update:
path: /operator/users/update
defaults:
_controller: Mibew\Controller\UsersController::updateAction
_access_check: Mibew\AccessControl\Check\LoggedInCheck
# System routes and includes
# The following route is a fake and is used only to load plugins routes. It can
# have any unique name.
_include_pluign_routes:
# Resource name has no meaning and can be any value.
resource: .
# The type actually indicates that plugins routes should be included.
type: plugin
# Remove trailing slashes. This route is the last one because previous rotes can
# (but definitely should not) have trailing slashes.
remove_trailing_slash:
path: /{url}
defaults:
_controller: Mibew\Controller\RedirectController::removeTrailingSlashAction
requirements:
url: .*/$
methods: [GET]

View File

@ -1,60 +0,0 @@
# The following route is a fake and is used only to load routes of the core. It
# can have any unique name.
_include_core_routes:
resource: routing.yml
type: yaml
# Override the home route to allow users use <mibew root>/install.php path to
# the installer.
home:
path: /
defaults:
_controller: Mibew\Controller\InstallController::indexAction
install:
path: /install
defaults:
_controller: Mibew\Controller\InstallController::indexAction
install_check_requirements:
path: /install/check-requirements
defaults:
_controller: Mibew\Controller\InstallController::checkRequirementsAction
_access_check: Mibew\AccessControl\Check\CanInstallCheck
install_check_connection:
path: /install/check-connection
defaults:
_controller: Mibew\Controller\InstallController::checkConnectionAction
_access_check: Mibew\AccessControl\Check\CanInstallCheck
install_create_tables:
path: /install/create-tables
defaults:
_controller: Mibew\Controller\InstallController::createTablesAction
_access_check: Mibew\AccessControl\Check\CanInstallCheck
install_set_password:
path: /install/set-password
defaults:
_controller: Mibew\Controller\InstallController::showPasswordFormAction
_access_check: Mibew\AccessControl\Check\CanInstallCheck
methods: [GET]
install_set_password_submit:
path: /install/set-password
defaults:
_controller: Mibew\Controller\InstallController::submitPasswordFormAction
_access_check: Mibew\AccessControl\Check\CanInstallCheck
methods: [POST]
install_import_locales:
path: /install/import-locales
defaults:
_controller: Mibew\Controller\InstallController::importLocalesAction
_access_check: Mibew\AccessControl\Check\CanInstallCheck
install_done:
path: /install/done
defaults:
_controller: Mibew\Controller\InstallController::doneAction

View File

@ -1,52 +0,0 @@
<?php
/*
* This file is a part of Mibew Messenger.
*
* Copyright 2005-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Initialize libraries
require_once(dirname(__FILE__) . '/libs/init.php');
use Mibew\Cache\CacheFactory;
use Mibew\Maintenance\CronWorker;
use Mibew\Plugin\PluginManager;
$configs = load_system_configs();
// Prepare the cache. It is initialized in the same way as in index.php
$cache_factory = new CacheFactory($configs['cache']);
// For now directory for cache files cannot be changed via the configs file.
$cache_factory->setOption('path', MIBEW_FS_ROOT . '/cache/stash');
// Run plugins
if (get_maintenance_mode() === false) {
$plugin_manager = PluginManager::getInstance();
$plugin_manager->setCache($cache_factory->getCache());
$plugin_manager->loadPlugins($configs['plugins']);
}
// Do the job.
$worker = new CronWorker($cache_factory->getCache());
$success = $worker->run();
if ($success) {
echo("All cron jobs done\n");
} else {
echo("Cron job failed. Here are the errors:\n");
foreach ($worker->getErrors() as $error) {
echo(' ' . $error . "\n");
}
}

921
src/mibew/default.css Normal file
View File

@ -0,0 +1,921 @@
/*
* Copyright 2005-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* reset all */
html, body, div, h1, h2, h3, h4, h5, h6, ul, ol, dl, li, dt, dd, p, blockquote, pre, form, fieldset, table, th, td { margin: 0; padding: 0; }
table { border-collapse:collapse; border-spacing:0; }
fieldset,img { border:0; }
ol,ul { list-style:none; }
h1,h2,h3,h4,h5,h6 { font-size:100%; font-weight:normal; }
q:before,q:after { content:''; }
body {
background: #FFFFFF url(images/header.gif) repeat-x;
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
font-size: 0.8em;
line-height: 140%;
color: #333333;
}
/* 100% height with footer, 200 px sidebar */
html, body {
height: 100%;
}
body {
min-width: 750px;
}
a {
color: #2f7599;
}
#wrap400, #wrap700, #fixedwrap {
position:relative;
margin: 0px auto -41px;
height:auto !important;
height:100%;
min-height:100%;
}
#wrap400 {
width: 100%;
min-width:450px;
}
#wrap700 {
width: 100%;
min-width:750px;
}
#fixedwrap {
width: 750px;
}
.contentdiv {
float:left;
width: 100%;
}
.contentinner {
margin-right: 210px;
padding: 10px 60px 10px 20px;
overflow: hidden;
}
.contentnomenu {
padding: 10px 60px 10px 20px;
}
.empty_inner {
height:40px;
}
#footer {
background: white url(images/footer.gif) bottom repeat-x;
font-size:11px;
position:relative;
min-height: 40px;
height:40px;
vertical-align:middle;
width:100%;
text-align: center;
}
#legal {
clear: both;
line-height: 30px;
padding-top:10px;
text-align: center;
color: #375C69;
margin-bottom: 0px;
}
#footer .flink {
color: #2f7599;
text-decoration: underline;
}
#togglediv {
float:right;
padding-right:10px;
}
/* Header */
#header {
width: 100%;
height: 32px;
margin: 0px -2px 10px 0px;
padding-top: 10px;
padding-bottom: 10px;
background: url(images/graydot.gif) repeat-x left bottom;
display: block;
}
#header {
float: left;
}
img.left {
float: left;
margin-right: 15px;
}
img.logo {
margin-top: 2px;
}
#header h1 {
font-size: 2em;
line-height: 32px;
color: #494949;
margin-left: 40px;
}
#header h1 a {
color: #494949;
}
#header a {
text-decoration: none;
}
#title {
float: left;
display: inline;
}
#path {
float: right;
padding: 10px 20px 0px 0px;
line-height: 22px;
display: inline;
}
/* Sidebar */
#sidebar {
float: left;
width: 185px;
margin-left: -210px;
margin-top: 20px;
position:relative;
line-height: 180%
}
#sidebar ul {
margin: 0;
padding: 0;
list-style: none;
}
#sidebar li {
margin-bottom: 20px;
}
#sidebar li ul {
}
#sidebar li li {
margin: 0;
}
#sidebar h2 {
text-transform: lowercase;
margin-bottom: 10px;
background: url(images/graydot.gif) repeat-x left bottom;
font-size: 1.3em;
font-weight: bold;
}
.locales a {
color: #2f7599;
font-size: 1em;
text-decoration: none;
}
.locales .active a {
color: #555;
}
.locales a:hover {
text-decoration: underline;
}
.submenu a {
padding-left: 15px;
color: #2f7599;
font-size: 1em;
text-decoration: none;
}
.submenu a.inner { padding-left: 0px; }
.submenu span.small { font-size: 80%; padding-left: 5px; }
.submenu .active a {
background: url(images/li.gif) no-repeat left 1px;
color: #555;
}
.submenu .active a.inner {
background: none;
}
.submenu a:hover {
text-decoration: underline;
}
/* form, tabbed form */
.mform {
background: url(images/loginbg.gif);
clear: both;
width: 100%;
}
.tabs {
float: right;
margin-left: 15px;
display: inline;
margin-right: 15px;
}
.tabs li {
display: inline;
}
.tabs a {
display: block;
float: left;
padding: 2px 9px 3px 9px;
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size: 11px;
color: #2f7599;
}
.tabs li.active a {
background: url(images/loginbg.gif);
border-left:1px solid #bbbbbb;border-top:1px solid #bbbbbb;border-right:1px solid #bbbbbb;
color: #000;
text-decoration: none;
}
.formtop, .formbottom, .formtopi, .formbottomi { height: 15px;}
.formtop { background: url(images/logincrnrt.gif) no-repeat top right;}
.formtopi { background: url(images/logincrnlt.gif) no-repeat top left; }
.formbottom { background: url(images/logincrnrb.gif) no-repeat bottom right; }
.formbottomi { background: url(images/logincrnlb.gif) no-repeat bottom left; }
.forminner { margin: 0px 15px;}
.forminner p { margin-bottom: 1em; }
/* fieldForm */
.fieldForm {
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size: 11px;
width: 100%;
}
.packedFormField {
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size: 11px;
float:left;
margin-right:25px;
margin-bottom:8px;
}
.packedFormField select {
min-width: 130px;
}
div.errinfo {
color: #c13030;
}
.field {
width: 100%;
margin-top: 5px;
}
.flabel {
position: relative;
margin: 8px auto 2px;
color: black;
}
.fleftlabel {
float: left;
width: 11em;
}
.flabel span.required {
font-size:8.0pt;
color:red;
font-weight: bold;
}
.field .subfield {
padding-left: 30px;
background: url(images/subitem.gif) no-repeat 10px 2px;
}
.fieldinrow {
min-width: 300px;
display: inline;
float:left;
width: 45%;
}
.fvalue {
float: left;
}
.fvaluewithta {
float: left;
width: 67%;
}
.fvaluewithta textarea {
width: 100%;
}
.fvaluenodesc {
}
.fvalueframe {
overflow: auto;
width: 100%;
}
.fvalueframe iframe {
border: solid 1px #999;
}
.fdescr {
float:left;
padding-left:10px;
color: #676767;
font-size: 10px;
min-width: 200px;
}
.fbutton {
background: url(images/formline.gif) repeat-x;
margin-top: 20px;
padding-top: 10px;
}
.fbutton .links {
float: right;
margin-top: 5px;
}
.fbutton .submitbutton {
float: left;
}
.formauth {
}
textarea.wide {
border:1px solid #878787;
overflow:auto;
width: 95%;
}
input.formauth {
border: 1px solid #878787;
color: #333;
margin-right:15px;
padding-right: 0px;
}
#formmessage {
border: 1px solid #4C96D4;
background-color: #E7F1F9;
padding: 8px 11px;
font-size: 0.85em;
font-weight:bold;
max-width: 700px;
margin: -10px 2px 10px;
color: #515151;
}
#offwarn {
border: 1px solid #4CD496;
background-color: #E7F9F1;
color: #515151;
padding: 8px 11px;
font-size: 0.85em;
font-weight:bold;
line-height: 140%;
margin: 0px;
}
#offwarn img {
margin-top: .4em;
float: left;
padding-right: 10px;
}
.asterisk {
padding: 10px 20px;
}
/* tables */
.tabletool {
float: right;
}
.tabletool a {
color: #296685;
vertical-align: top;
padding-left: 4px;
}
.tabletitle {
background: url(images/graydot.gif) repeat-x left bottom;
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
font-size: 1.4em;
margin: 10px 0px 20px;
padding-bottom: 10px;
color: #1D485E;
font-weight: bold;
}
table.list, table.translate, table.statistics {
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
background: #fff;
width: 100%;
border-collapse: collapse;
text-align: left;
}
table.list th, table.translate th, table.statistics th {
font-size: 1.2em;
font-weight: normal;
padding: 10px 8px;
border-bottom: 2px solid #2F7598;
}
table.list th, table.translate th { color: #1D485E; }
table.statistics th { color: #2F7598; }
table.list td, table.statistics td {
color: #2f7599;
padding: 10px 8px;
border-bottom: 1px solid #ccc;
}
table.translate td {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #515151;
padding: 2px 8px;
border-bottom: 1px solid #ccc;
}
table.list td a.man {
background: url(images/tbliclogin.gif) no-repeat left center;
padding-left: 15px;
}
table.list td a.mail {
background: url(images/mail.png) no-repeat left center;
padding-left: 24px;
}
table.list td a.xmpp {
background: url(images/xmpp.png) no-repeat left center;
padding-left: 24px;
}
table.list tbody tr:hover td, table.list tbody tr:hover td a, table.statistics tbody tr:hover td {
color: #1D485E;
}
/* awaiting */
table.awaiting {
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
background: #fff;
width: 100%;
border-collapse: collapse;
text-align: left;
}
table.awaiting th {
font-size: 1.2em;
font-weight: normal;
color: #1D485E;
padding: 10px 8px;
border-bottom: 2px solid #2F7598;
text-align: center;
}
table.awaiting th.first {
text-align: left;
}
table.awaiting table.inner {
border: none;
width: 100%;
}
table.awaiting table.inner .icon {
width: 30px;
text-align: center;
}
table.awaiting td.visitor {
color: #296685;
border-bottom: 1px solid #ccc;
padding: 10px 8px;
margin: 0px;
}
.awaiting .visitor a { color: #296685; }
.awaiting tr:hover .visitor, .awaiting tr:hover .visitor a { color: #1D485E; }
.awaiting tr.ban .visitor, .awaiting tr.ban .visitor a { color: #9AC8E0; }
.awaiting tr.ban:hover .visitor, .awaiting tr.ban:hover .visitor a { color: #4C9CC8; }
.awaiting tr.inwait .visitor, .awaiting tr.inwait a { font-weight: bold; }
.awaiting tr.inprio .visitor, .awaiting tr.inprio a { font-weight: bold; font-size: 1.05em; }
.awaiting tr.inchat .visitor, .awaiting tr.inchat .visitor a { color: #777; }
.awaiting tr.inchat:hover .visitor, .awaiting tr.inchat:hover .visitor a { color: #444; }
.awaiting tr.inchat a { text-decoration: none; }
.firstmessage {
text-align: right;
font-size: 0.8em;
padding-right: 10px;
}
.firstmessage a {
text-decoration: none;
}
.firstmessage a:hover {
text-decoration: underline;
}
#connstatus {
float:right;
margin: 10px 10px;
}
#connlinks {
margin: 10px 10px;
}
#connlinks a {
color: #777;
text-decoration: none;
}
#connlinks a:hover {
text-decoration: underline;
}
/* online operators */
#onlineoperators {
padding-right: 10px;
float: right;
}
/* search */
#searchtext {
float:left;
display: inline;
margin:7px 20px 5px 0px;
width:75%;
padding-right:5px;
}
.searchctrl {
float: left;
margin:7px 20px 5px 0px;
padding-right:5px;
display: inline;
}
#searchtext input {
width: 100%;
margin: 0px;
}
#searchbutton {
float:left;
}
/* login */
#loginsmallpane {
float: right;
padding: 10px 15px 0px 0px;
margin-right: 0px;
line-height: 22px;
display: inline;
}
#loginsmallpane input {
margin: 0px 3px;
padding: 0px 2px;
}
#loginsmallpane .butt {
height: 1.3em;
border: 0px;
background: none;
}
#loginsmallpane .butt:hover {
background: #aaa;
}
#loginintro {
width: 400px;
margin: 10px 30px;
}
#loginpane {
width: 400px;
margin: 30px 30px;
}
#loginpane .header h2 {
font-size: 2em;
margin-bottom: 0.9em;
padding-bottom: 0.8em;
border-bottom: 2px solid #2F7598;
}
/* nice button */
#confirmpane {
width:450px;
margin:0px auto 5px;
padding-top: 70px;
}
.nicebutton {
border: none;
float: left;
margin-left: 30px;
}
.submit a {
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size: 11px;
line-height: 35px;
color: #000000;
text-decoration: none;
}
.submit {
background: url(images/submitbg.gif) repeat-x;
vertical-align: top;
}
/* thread log */
.logpane {
margin: 10px 0px;
line-height: 150%;
}
.logpane .header {
padding-bottom: 0.8em;
border-bottom: 2px solid #2F7598;
}
.logpane .wlabel {
width: 10em;
float: left;
margin-right:10px;
}
.logpane .wvalue {
float: left;
}
/* dashboard */
#dashboard {
width: 100%;
}
.dashitem {
width:33%;
margin: 0px 2em 5em 0px;
padding: 5px 2em 5em;
vertical-align: top;
}
.dashitem:hover {
}
.dashitem a {
padding-top:2px;
padding-bottom: 10px;
display: block;
}
.dashitem img, #dashlocalesPopup h2 img {
float: left;
padding-right:10px;
width: 24px;
height: 24px;
}
#dashlocalesPopup h2 img {
margin-top: -3px;
}
#dashlocalesPopup .locales {
line-height: 180%;
margin-left:10px;
}
#dashlocalesPopup h2 {
font-size: 1.5em;
margin-bottom: 0.9em;
padding: 5px 30px 0.8em 0px;
border-bottom: 2px solid #2F7598;
}
#dashlocalesPopupClose {
float: right;
position:absolute;
right:5px;
top:5px;
}
#dashlocalesPopup {
display:none;
position:fixed;
_position:absolute; /* ie6*/
background:#FFFFFF;
border:2px solid #2F7598;
z-index:110;
padding:1em 1em;
font-size:1em;
}
#backgroundPopup{
display:none;
position:fixed;
_position:absolute; /* ie6*/
height:100%;
opacity: .5;
width:100%;
top:0;
left:0;
background:#000000;
border:1px solid #cecece;
z-index:101;
}
/* install */
#install li {
list-style-type: circle;
list-style-position: inside;
margin-left: 2em;
}
#check-nv, #check-nm {
color: #2f7599;
text-decoration: none;
}
#check-nv:hover, #check-nm:hover {
text-decoration: underline;
}
/* chat */
.message {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #4F4F4F;
padding: 15px 0px 0px 0px;
line-height: 17px;
}
.message span.time {
color: #000000;
}
.message span.nuser {
color: #B11E23;
font-weight: bold;
}
.message span.nagent {
font-weight: bold;
}
.message span.minf {
color: #1E48B1;
font-size: 11px;
}
.message span.mevent {
color: #A1A1A1;
font-size: 11px;
}
.message span.mhidden {
color: #A1A1A1;
font-size: 11px;
}
.message span.mconn {
color: #A1A1A1;
font-size: 11px;
}
/* updates */
#news {
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size: 11px;
margin-bottom:15px;
padding:4px;
}
.newstext {
margin-bottom:1em;
}
/* rtl rules */
.lrtl .dashitem img, .lrtl #dashlocalesPopup h2 img, .lrtl #offwarn img {
float: right;
padding-right:0px;
padding-left:10px;
}
.lrtl .fleftlabel {
float: right;
width: 11em;
}
.lrtl .fdescr {
float:right;
padding-right:10px;
}
.lrtl .field .subfield {
padding-right: 30px;
background: url(images/subitem_rtl.gif) no-repeat 99% 2px;
}
.lrtl .fvalue {
float: right;
}
.lrtl .logpane .wlabel {
float: right;
margin-left:10px;
}
.lrtl .logpane .wvalue {
float: right;
}
.lrtl .fvaluewithta {
float: right;
}
.lrtl #togglediv {
float:left;
padding-left:10px;
}

View File

Before

Width:  |  Height:  |  Size: 372 B

After

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 732 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 340 B

After

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,19 @@
"34aL volume 3.1" icons set
Ammount of icons:
60
Colors:
Colored, grey
Icon Sizes:
24x24
File Types:
.ico (RGBA, 256 color, 16 color),
.tiff (RGBA)
.gif (indexed)
.bmp (RGB - 1 color background),
.png (RGBA)
Note: These icons are free for use.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 894 B

After

Width:  |  Height:  |  Size: 894 B

View File

Before

Width:  |  Height:  |  Size: 162 B

After

Width:  |  Height:  |  Size: 162 B

View File

Before

Width:  |  Height:  |  Size: 43 B

After

Width:  |  Height:  |  Size: 43 B

View File

Before

Width:  |  Height:  |  Size: 49 B

After

Width:  |  Height:  |  Size: 49 B

View File

Before

Width:  |  Height:  |  Size: 43 B

After

Width:  |  Height:  |  Size: 43 B

View File

Before

Width:  |  Height:  |  Size: 162 B

After

Width:  |  Height:  |  Size: 162 B

View File

Before

Width:  |  Height:  |  Size: 713 B

After

Width:  |  Height:  |  Size: 713 B

View File

Before

Width:  |  Height:  |  Size: 60 B

After

Width:  |  Height:  |  Size: 60 B

View File

Before

Width:  |  Height:  |  Size: 377 B

After

Width:  |  Height:  |  Size: 377 B

View File

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 68 B

View File

Before

Width:  |  Height:  |  Size: 148 B

After

Width:  |  Height:  |  Size: 148 B

View File

Before

Width:  |  Height:  |  Size: 199 B

After

Width:  |  Height:  |  Size: 199 B

View File

Before

Width:  |  Height:  |  Size: 139 B

After

Width:  |  Height:  |  Size: 139 B

View File

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 142 B

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
src/mibew/images/mail.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 B

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 915 B

After

Width:  |  Height:  |  Size: 915 B

View File

Before

Width:  |  Height:  |  Size: 905 B

After

Width:  |  Height:  |  Size: 905 B

View File

Before

Width:  |  Height:  |  Size: 906 B

After

Width:  |  Height:  |  Size: 906 B

View File

Before

Width:  |  Height:  |  Size: 914 B

After

Width:  |  Height:  |  Size: 914 B

View File

Before

Width:  |  Height:  |  Size: 75 B

After

Width:  |  Height:  |  Size: 75 B

View File

Before

Width:  |  Height:  |  Size: 74 B

After

Width:  |  Height:  |  Size: 74 B

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 55 B

After

Width:  |  Height:  |  Size: 55 B

View File

Before

Width:  |  Height:  |  Size: 89 B

After

Width:  |  Height:  |  Size: 89 B

View File

Before

Width:  |  Height:  |  Size: 43 B

After

Width:  |  Height:  |  Size: 43 B

View File

Before

Width:  |  Height:  |  Size: 92 B

After

Width:  |  Height:  |  Size: 92 B

View File

Before

Width:  |  Height:  |  Size: 329 B

After

Width:  |  Height:  |  Size: 329 B

View File

Before

Width:  |  Height:  |  Size: 309 B

After

Width:  |  Height:  |  Size: 309 B

View File

Before

Width:  |  Height:  |  Size: 554 B

After

Width:  |  Height:  |  Size: 554 B

View File

Before

Width:  |  Height:  |  Size: 338 B

After

Width:  |  Height:  |  Size: 338 B

View File

Before

Width:  |  Height:  |  Size: 640 B

After

Width:  |  Height:  |  Size: 640 B

View File

Before

Width:  |  Height:  |  Size: 53 B

After

Width:  |  Height:  |  Size: 53 B

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