Commit bf507014 authored by Vladislav's avatar Vladislav

Инициализация гита

parents

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

# 404
ErrorDocument 404 /index.php
#
DirectoryIndex index.php
# mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
\ No newline at end of file
Deny from all
\ No newline at end of file
deny from all
\ No newline at end of file
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
\ No newline at end of file
config.php
typos_config.php
database.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| AUTO-LOADER
| -------------------------------------------------------------------
| This file specifies which systems should be loaded by default.
|
| In order to keep the framework as light-weight as possible only the
| absolute minimal resources are loaded by default. For example,
| the database is not connected to automatically since no assumption
| is made regarding whether you intend to use it. This file lets
| you globally define which systems you would like loaded with every
| request.
|
| -------------------------------------------------------------------
| Instructions
| -------------------------------------------------------------------
|
| These are the things you can load automatically:
|
| 1. Packages
| 2. Libraries
| 3. Helper files
| 4. Custom config files
| 5. Language files
| 6. Models
|
*/
/*
| -------------------------------------------------------------------
| Auto-load Packges
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['packages'] = array(APPPATH.'third_party', '/usr/local/shared');
|
*/
$autoload['packages'] = array();
/*
| -------------------------------------------------------------------
| Auto-load Libraries
| -------------------------------------------------------------------
| These are the classes located in the system/libraries folder
| or in your application/libraries folder.
|
| Prototype:
|
| $autoload['libraries'] = array('database', 'session', 'xmlrpc');
*/
$autoload['libraries'] = array('database', 'session');
/*
| -------------------------------------------------------------------
| Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['helper'] = array('url', 'file');
*/
$autoload['helper'] = array('url', 'typos_url', 'password');
/*
| -------------------------------------------------------------------
| Auto-load Config files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['config'] = array('config1', 'config2');
|
| NOTE: This item is intended for use ONLY if you have created custom
| config files. Otherwise, leave it blank.
|
*/
$autoload['config'] = array('typos_config');
/*
| -------------------------------------------------------------------
| Auto-load Language files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['language'] = array('lang1', 'lang2');
|
| NOTE: Do not include the "_lang" part of your file. For example
| "codeigniter_lang.php" would be referenced as array('codeigniter');
|
*/
$autoload['language'] = array();
/*
| -------------------------------------------------------------------
| Auto-load Models
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['model'] = array('model1', 'model2');
|
*/
$autoload['model'] = array('mdl_views', 'mdl_request', 'mdl_jqgrid', 'mdl_session', 'mdl_menu', 'mdl_stored_query', 'mdl_validate');
/* End of file autoload.php */
/* Location: ./application/config/autoload.php */
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
|--------------------------------------------------------------------------
| File and Directory Modes
|--------------------------------------------------------------------------
|
| These prefs are used when checking and setting modes when working
| with the file system. The defaults are fine on servers with proper
| security, but you may wish (or even need) to change the values in
| certain environments (Apache running a separate process for each
| user, PHP under CGI with Apache suEXEC, etc.). Octal values should
| always be used to set the mode correctly.
|
*/
define('FILE_READ_MODE', 0644);
define('FILE_WRITE_MODE', 0666);
define('DIR_READ_MODE', 0755);
define('DIR_WRITE_MODE', 0777);
/*
|--------------------------------------------------------------------------
| File Stream Modes
|--------------------------------------------------------------------------
|
| These modes are used when working with fopen()/popen()
|
*/
define('FOPEN_READ', 'rb');
define('FOPEN_READ_WRITE', 'r+b');
define('FOPEN_WRITE_CREATE_DESTRUCTIVE', 'wb'); // truncates existing file data, use with care
define('FOPEN_READ_WRITE_CREATE_DESTRUCTIVE', 'w+b'); // truncates existing file data, use with care
define('FOPEN_WRITE_CREATE', 'ab');
define('FOPEN_READ_WRITE_CREATE', 'a+b');
define('FOPEN_WRITE_CREATE_STRICT', 'xb');
define('FOPEN_READ_WRITE_CREATE_STRICT', 'x+b');
/* End of file constants.php */
/* Location: ./application/config/constants.php */
\ No newline at end of file
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| DATABASE CONNECTIVITY SETTINGS
| -------------------------------------------------------------------
| This file will contain the settings needed to access your database.
|
| For complete instructions please consult the 'Database Connection'
| page of the User Guide.
|
| -------------------------------------------------------------------
| EXPLANATION OF VARIABLES
| -------------------------------------------------------------------
|
| ['hostname'] The hostname of your database server.
| ['username'] The username used to connect to the database
| ['password'] The password used to connect to the database
| ['database'] The name of the database you want to connect to
| ['dbdriver'] The database type. ie: mysql. Currently supported:
mysql, mysqli, postgre, odbc, mssql, sqlite, oci8
| ['dbprefix'] You can add an optional prefix, which will be added
| to the table name when using the Active Record class
| ['pconnect'] TRUE/FALSE - Whether to use a persistent connection
| ['db_debug'] TRUE/FALSE - Whether database errors should be displayed.
| ['cache_on'] TRUE/FALSE - Enables/disables query caching
| ['cachedir'] The path to the folder where cache files should be stored
| ['char_set'] The character set used in communicating with the database
| ['dbcollat'] The character collation used in communicating with the database
| NOTE: For MySQL and MySQLi databases, this setting is only used
| as a backup if your server is running PHP < 5.2.3 or MySQL < 5.0.7
| (and in table creation queries made with DB Forge).
| There is an incompatibility in PHP with mysql_real_escape_string() which
| can make your site vulnerable to SQL injection if you are using a
| multi-byte character set and are running versions lower than these.
| Sites using Latin-1 or UTF-8 database character set and collation are unaffected.
| ['swap_pre'] A default table prefix that should be swapped with the dbprefix
| ['autoinit'] Whether or not to automatically initialize the database.
| ['stricton'] TRUE/FALSE - forces 'Strict Mode' connections
| - good for ensuring strict SQL while developing
|
| The $active_group variable lets you choose which connection group to
| make active. By default there is only one group (the 'default' group).
|
| The $active_record variables lets you determine whether or not to load
| the active record class
*/
$active_group = 'typos';
$active_record = TRUE;
/*Подключение к основной базе с опечатками*/
$db['typos']['hostname'] = 'localhost';
$db['typos']['username'] = 'barbass';
$db['typos']['password'] = '';
$db['typos']['database'] = 'barbass_typos_new';
$db['typos']['dbdriver'] = 'mysql';
$db['typos']['dbprefix'] = '';
$db['typos']['pconnect'] = TRUE;
$db['typos']['db_debug'] = TRUE;
$db['typos']['cache_on'] = FALSE;
$db['typos']['cachedir'] = '';
$db['typos']['char_set'] = 'utf8';
$db['typos']['dbcollat'] = 'utf8_general_ci';
$db['typos']['swap_pre'] = '';
$db['typos']['autoinit'] = TRUE;
$db['typos']['stricton'] = FALSE;
/*Подключение к TIME@ETERSOFT*/
$db['time']['hostname'] = 'localhost';
$db['time']['username'] = 'root';
$db['time']['password'] = '';
$db['time']['database'] = '';
$db['time']['dbdriver'] = 'mysql';
$db['time']['dbprefix'] = '';
$db['time']['pconnect'] = TRUE;
$db['time']['db_debug'] = TRUE;
$db['time']['cache_on'] = FALSE;
$db['time']['cachedir'] = '';
$db['time']['char_set'] = 'utf8';
$db['time']['dbcollat'] = 'utf8_general_ci';
$db['time']['swap_pre'] = '';
$db['time']['autoinit'] = TRUE;
$db['time']['stricton'] = FALSE;
/* End of file database.php */
/* Location: ./application/config/database.php */
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$_doctypes = array(
'xhtml11' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">',
'xhtml1-strict' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
'xhtml1-trans' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
'xhtml1-frame' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">',
'html5' => '<!DOCTYPE html>',
'html4-strict' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">',
'html4-trans' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">',
'html4-frame' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'
);
/* End of file doctypes.php */
/* Location: ./application/config/doctypes.php */
\ No newline at end of file
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| Foreign Characters
| -------------------------------------------------------------------
| This file contains an array of foreign characters for transliteration
| conversion used by the Text helper
|
*/
$foreign_characters = array(
'/ä|æ|ǽ/' => 'ae',
'/ö|œ/' => 'oe',
'/ü/' => 'ue',
'/Ä/' => 'Ae',
'/Ü/' => 'Ue',
'/Ö/' => 'Oe',
'/À|Á|Â|Ã|Ä|Å|Ǻ|Ā|Ă|Ą|Ǎ/' => 'A',
'/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª/' => 'a',
'/Ç|Ć|Ĉ|Ċ|Č/' => 'C',
'/ç|ć|ĉ|ċ|č/' => 'c',
'/Ð|Ď|Đ/' => 'D',
'/ð|ď|đ/' => 'd',
'/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě/' => 'E',
'/è|é|ê|ë|ē|ĕ|ė|ę|ě/' => 'e',
'/Ĝ|Ğ|Ġ|Ģ/' => 'G',
'/ĝ|ğ|ġ|ģ/' => 'g',
'/Ĥ|Ħ/' => 'H',
'/ĥ|ħ/' => 'h',
'/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ/' => 'I',
'/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı/' => 'i',
'/Ĵ/' => 'J',
'/ĵ/' => 'j',
'/Ķ/' => 'K',
'/ķ/' => 'k',
'/Ĺ|Ļ|Ľ|Ŀ|Ł/' => 'L',
'/ĺ|ļ|ľ|ŀ|ł/' => 'l',
'/Ñ|Ń|Ņ|Ň/' => 'N',
'/ñ|ń|ņ|ň|ʼn/' => 'n',
'/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ/' => 'O',
'/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º/' => 'o',
'/Ŕ|Ŗ|Ř/' => 'R',
'/ŕ|ŗ|ř/' => 'r',
'/Ś|Ŝ|Ş|Š/' => 'S',
'/ś|ŝ|ş|š|ſ/' => 's',
'/Ţ|Ť|Ŧ/' => 'T',
'/ţ|ť|ŧ/' => 't',
'/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ/' => 'U',
'/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ/' => 'u',
'/Ý|Ÿ|Ŷ/' => 'Y',
'/ý|ÿ|ŷ/' => 'y',
'/Ŵ/' => 'W',
'/ŵ/' => 'w',
'/Ź|Ż|Ž/' => 'Z',
'/ź|ż|ž/' => 'z',
'/Æ|Ǽ/' => 'AE',
'/ß/'=> 'ss',
'/IJ/' => 'IJ',
'/ij/' => 'ij',
'/Œ/' => 'OE',
'/ƒ/' => 'f'
);
/* End of file foreign_chars.php */
/* Location: ./application/config/foreign_chars.php */
\ No newline at end of file
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| Hooks
| -------------------------------------------------------------------------
| This file lets you define "hooks" to extend CI without hacking the core
| files. Please see the user guide for info:
|
| http://codeigniter.com/user_guide/general/hooks.html
|
*/
/*Включаем сессии*/
$hook['pre_system'][] = array(
'class' => 'Session',
'function' => '__construct',
'filename' => 'session.php',
'filepath' => 'hooks'
);
/*Проверяем авторизирован ли пользователь*/
$hook['pre_controller'][] = array(
'class' => 'Validate_authorized',
'function' => 'index',
'filename' => 'validate_authorized.php',
'filepath' => 'hooks'
);
/* End of file hooks.php */
/* Location: ./application/config/hooks.php */
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
\ No newline at end of file
<?php defined('BASEPATH') OR exit('No direct script access allowed');
/*
|--------------------------------------------------------------------------
| Enable/Disable Migrations
|--------------------------------------------------------------------------
|
| Migrations are disabled by default but should be enabled
| whenever you intend to do a schema migration.
|
*/
$config['migration_enabled'] = FALSE;
/*
|--------------------------------------------------------------------------
| Migrations version
|--------------------------------------------------------------------------
|
| This is used to set migration version that the file system should be on.
| If you run $this->migration->latest() this is the version that schema will
| be upgraded / downgraded to.
|
*/
$config['migration_version'] = 0;
/*
|--------------------------------------------------------------------------
| Migrations Path
|--------------------------------------------------------------------------
|
| Path to your migrations folder.
| Typically, it will be within your application path.
| Also, writing permission is required within the migrations path.
|
*/
$config['migration_path'] = APPPATH . 'migrations/';
/* End of file migration.php */
/* Location: ./application/config/migration.php */
\ No newline at end of file
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| MIME TYPES
| -------------------------------------------------------------------
| This file contains an array of mime types. It is used by the
| Upload class to help identify allowed file types.
|
*/
$mimes = array( 'hqx' => 'application/mac-binhex40',
'cpt' => 'application/mac-compactpro',
'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'),
'bin' => 'application/macbinary',
'dms' => 'application/octet-stream',
'lha' => 'application/octet-stream',
'lzh' => 'application/octet-stream',
'exe' => array('application/octet-stream', 'application/x-msdownload'),
'class' => 'application/octet-stream',
'psd' => 'application/x-photoshop',
'so' => 'application/octet-stream',
'sea' => 'application/octet-stream',
'dll' => 'application/octet-stream',
'oda' => 'application/oda',
'pdf' => array('application/pdf', 'application/x-download'),
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'smi' => 'application/smil',
'smil' => 'application/smil',
'mif' => 'application/vnd.mif',
'xls' => array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'),
'ppt' => array('application/powerpoint', 'application/vnd.ms-powerpoint'),
'wbxml' => 'application/wbxml',
'wmlc' => 'application/wmlc',
'dcr' => 'application/x-director',
'dir' => 'application/x-director',
'dxr' => 'application/x-director',
'dvi' => 'application/x-dvi',
'gtar' => 'application/x-gtar',
'gz' => 'application/x-gzip',
'php' => 'application/x-httpd-php',
'php4' => 'application/x-httpd-php',
'php3' => 'application/x-httpd-php',
'phtml' => 'application/x-httpd-php',
'phps' => 'application/x-httpd-php-source',
'js' => 'application/x-javascript',
'swf' => 'application/x-shockwave-flash',
'sit' => 'application/x-stuffit',
'tar' => 'application/x-tar',
'tgz' => array('application/x-tar', 'application/x-gzip-compressed'),
'xhtml' => 'application/xhtml+xml',
'xht' => 'application/xhtml+xml',
'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'mpga' => 'audio/mpeg',
'mp2' => 'audio/mpeg',
'mp3' => array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'),
'aif' => 'audio/x-aiff',
'aiff' => 'audio/x-aiff',
'aifc' => 'audio/x-aiff',
'ram' => 'audio/x-pn-realaudio',
'rm' => 'audio/x-pn-realaudio',
'rpm' => 'audio/x-pn-realaudio-plugin',
'ra' => 'audio/x-realaudio',
'rv' => 'video/vnd.rn-realvideo',
'wav' => array('audio/x-wav', 'audio/wave', 'audio/wav'),
'bmp' => array('image/bmp', 'image/x-windows-bmp'),
'gif' => 'image/gif',
'jpeg' => array('image/jpeg', 'image/pjpeg'),
'jpg' => array('image/jpeg', 'image/pjpeg'),
'jpe' => array('image/jpeg', 'image/pjpeg'),
'png' => array('image/png', 'image/x-png'),
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'css' => 'text/css',
'html' => 'text/html',
'htm' => 'text/html',
'shtml' => 'text/html',
'txt' => 'text/plain',
'text' => 'text/plain',
'log' => array('text/plain', 'text/x-log'),
'rtx' => 'text/richtext',
'rtf' => 'text/rtf',
'xml' => 'text/xml',
'xsl' => 'text/xml',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'avi' => 'video/x-msvideo',
'movie' => 'video/x-sgi-movie',
'doc' => 'application/msword',
'docx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip'),
'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'),
'word' => array('application/msword', 'application/octet-stream'),
'xl' => 'application/excel',
'eml' => 'message/rfc822',
'json' => array('application/json', 'text/json')
);
/* End of file mimes.php */
/* Location: ./application/config/mimes.php */
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| Profiler Sections
| -------------------------------------------------------------------------
| This file lets you determine whether or not various sections of Profiler
| data are displayed when the Profiler is enabled.
| Please see the user guide for info:
|
| http://codeigniter.com/user_guide/general/profiling.html
|
*/
/* End of file profiler.php */
/* Location: ./application/config/profiler.php */
\ No newline at end of file
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| URI ROUTING
| -------------------------------------------------------------------------
| This file lets you re-map URI requests to specific controller functions.
|
| Typically there is a one-to-one relationship between a URL string
| and its corresponding controller class/method. The segments in a
| URL normally follow this pattern:
|
| example.com/class/method/id/
|
| In some instances, however, you may want to remap this relationship
| so that a different class/function is called than the one
| corresponding to the URL.
|
| Please see the user guide for complete details:
|
| http://codeigniter.com/user_guide/general/routing.html
|
| -------------------------------------------------------------------------
| RESERVED ROUTES
| -------------------------------------------------------------------------
|
| There area two reserved routes:
|
| $route['default_controller'] = 'welcome';
|
| This route indicates which controller class should be loaded if the
| URI contains no data. In the above example, the "welcome" class
| would be loaded.
|
| $route['404_override'] = 'errors/page_missing';
|
| This route will tell the Router what URI segments to use if those provided
| in the URL cannot be matched to a valid route.
|
*/
$route['default_controller'] = "authorized";
$route['404_override'] = '';
/* End of file routes.php */
/* Location: ./application/config/routes.php */
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| SMILEYS
| -------------------------------------------------------------------
| This file contains an array of smileys for use with the emoticon helper.
| Individual images can be used to replace multiple simileys. For example:
| :-) and :) use the same image replacement.
|
| Please see user guide for more info:
| http://codeigniter.com/user_guide/helpers/smiley_helper.html
|
*/
$smileys = array(
// smiley image name width height alt
':-)' => array('grin.gif', '19', '19', 'grin'),
':lol:' => array('lol.gif', '19', '19', 'LOL'),
':cheese:' => array('cheese.gif', '19', '19', 'cheese'),
':)' => array('smile.gif', '19', '19', 'smile'),
';-)' => array('wink.gif', '19', '19', 'wink'),
';)' => array('wink.gif', '19', '19', 'wink'),
':smirk:' => array('smirk.gif', '19', '19', 'smirk'),
':roll:' => array('rolleyes.gif', '19', '19', 'rolleyes'),
':-S' => array('confused.gif', '19', '19', 'confused'),
':wow:' => array('surprise.gif', '19', '19', 'surprised'),
':bug:' => array('bigsurprise.gif', '19', '19', 'big surprise'),
':-P' => array('tongue_laugh.gif', '19', '19', 'tongue laugh'),
'%-P' => array('tongue_rolleye.gif', '19', '19', 'tongue rolleye'),
';-P' => array('tongue_wink.gif', '19', '19', 'tongue wink'),
':P' => array('raspberry.gif', '19', '19', 'raspberry'),
':blank:' => array('blank.gif', '19', '19', 'blank stare'),
':long:' => array('longface.gif', '19', '19', 'long face'),
':ohh:' => array('ohh.gif', '19', '19', 'ohh'),
':grrr:' => array('grrr.gif', '19', '19', 'grrr'),
':gulp:' => array('gulp.gif', '19', '19', 'gulp'),
'8-/' => array('ohoh.gif', '19', '19', 'oh oh'),
':down:' => array('downer.gif', '19', '19', 'downer'),
':red:' => array('embarrassed.gif', '19', '19', 'red face'),
':sick:' => array('sick.gif', '19', '19', 'sick'),
':shut:' => array('shuteye.gif', '19', '19', 'shut eye'),
':-/' => array('hmm.gif', '19', '19', 'hmmm'),
'>:(' => array('mad.gif', '19', '19', 'mad'),
':mad:' => array('mad.gif', '19', '19', 'mad'),
'>:-(' => array('angry.gif', '19', '19', 'angry'),
':angry:' => array('angry.gif', '19', '19', 'angry'),
':zip:' => array('zip.gif', '19', '19', 'zipper'),
':kiss:' => array('kiss.gif', '19', '19', 'kiss'),
':ahhh:' => array('shock.gif', '19', '19', 'shock'),
':coolsmile:' => array('shade_smile.gif', '19', '19', 'cool smile'),
':coolsmirk:' => array('shade_smirk.gif', '19', '19', 'cool smirk'),
':coolgrin:' => array('shade_grin.gif', '19', '19', 'cool grin'),
':coolhmm:' => array('shade_hmm.gif', '19', '19', 'cool hmm'),
':coolmad:' => array('shade_mad.gif', '19', '19', 'cool mad'),
':coolcheese:' => array('shade_cheese.gif', '19', '19', 'cool cheese'),
':vampire:' => array('vampire.gif', '19', '19', 'vampire'),
':snake:' => array('snake.gif', '19', '19', 'snake'),
':exclaim:' => array('exclaim.gif', '19', '19', 'excaim'),
':question:' => array('question.gif', '19', '19', 'question') // no comma after last item
);
/* End of file smileys.php */
/* Location: ./application/config/smileys.php */
\ No newline at end of file
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*TYPOS super admin*/
$config['typos_admin_login'] = 'barbass';
$config['typos_admin_password'] = 'barbass';
$config['typos_admin_email'] = 'barbass@etersoft.ru';
$config['pass']['key_1'] = "ghuHJGOuiар";
$config['pass']['key_2'] = "vD%F&Bv8bcvjnb%65";
$config['pass']['key_3'] = "&^^%$%$*Gposwорапо7д";
$config['error_login_count'] = 3;
$config['error_login_time'] = 600; //10 минут
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| USER AGENT TYPES
| -------------------------------------------------------------------
| This file contains four arrays of user agent data. It is used by the
| User Agent Class to help identify browser, platform, robot, and
| mobile device data. The array keys are used to identify the device
| and the array values are used to set the actual name of the item.
|
*/
$platforms = array (
'windows nt 6.0' => 'Windows Longhorn',
'windows nt 5.2' => 'Windows 2003',
'windows nt 5.0' => 'Windows 2000',
'windows nt 5.1' => 'Windows XP',
'windows nt 4.0' => 'Windows NT 4.0',
'winnt4.0' => 'Windows NT 4.0',
'winnt 4.0' => 'Windows NT',
'winnt' => 'Windows NT',
'windows 98' => 'Windows 98',
'win98' => 'Windows 98',
'windows 95' => 'Windows 95',
'win95' => 'Windows 95',
'windows' => 'Unknown Windows OS',
'os x' => 'Mac OS X',
'ppc mac' => 'Power PC Mac',
'freebsd' => 'FreeBSD',
'ppc' => 'Macintosh',
'linux' => 'Linux',
'debian' => 'Debian',
'sunos' => 'Sun Solaris',
'beos' => 'BeOS',
'apachebench' => 'ApacheBench',
'aix' => 'AIX',
'irix' => 'Irix',
'osf' => 'DEC OSF',
'hp-ux' => 'HP-UX',
'netbsd' => 'NetBSD',
'bsdi' => 'BSDi',
'openbsd' => 'OpenBSD',
'gnu' => 'GNU/Linux',
'unix' => 'Unknown Unix OS'
);
// The order of this array should NOT be changed. Many browsers return
// multiple browser types so we want to identify the sub-type first.
$browsers = array(
'Flock' => 'Flock',
'Chrome' => 'Chrome',
'Opera' => 'Opera',
'MSIE' => 'Internet Explorer',
'Internet Explorer' => 'Internet Explorer',
'Shiira' => 'Shiira',
'Firefox' => 'Firefox',
'Chimera' => 'Chimera',
'Phoenix' => 'Phoenix',
'Firebird' => 'Firebird',
'Camino' => 'Camino',
'Netscape' => 'Netscape',
'OmniWeb' => 'OmniWeb',
'Safari' => 'Safari',
'Mozilla' => 'Mozilla',
'Konqueror' => 'Konqueror',
'icab' => 'iCab',
'Lynx' => 'Lynx',
'Links' => 'Links',
'hotjava' => 'HotJava',
'amaya' => 'Amaya',
'IBrowse' => 'IBrowse'
);
$mobiles = array(
// legacy array, old values commented out
'mobileexplorer' => 'Mobile Explorer',
// 'openwave' => 'Open Wave',
// 'opera mini' => 'Opera Mini',
// 'operamini' => 'Opera Mini',
// 'elaine' => 'Palm',
'palmsource' => 'Palm',
// 'digital paths' => 'Palm',
// 'avantgo' => 'Avantgo',
// 'xiino' => 'Xiino',
'palmscape' => 'Palmscape',
// 'nokia' => 'Nokia',
// 'ericsson' => 'Ericsson',
// 'blackberry' => 'BlackBerry',
// 'motorola' => 'Motorola'
// Phones and Manufacturers
'motorola' => "Motorola",
'nokia' => "Nokia",
'palm' => "Palm",
'iphone' => "Apple iPhone",
'ipad' => "iPad",
'ipod' => "Apple iPod Touch",
'sony' => "Sony Ericsson",
'ericsson' => "Sony Ericsson",
'blackberry' => "BlackBerry",
'cocoon' => "O2 Cocoon",
'blazer' => "Treo",
'lg' => "LG",
'amoi' => "Amoi",
'xda' => "XDA",
'mda' => "MDA",
'vario' => "Vario",
'htc' => "HTC",
'samsung' => "Samsung",
'sharp' => "Sharp",
'sie-' => "Siemens",
'alcatel' => "Alcatel",
'benq' => "BenQ",
'ipaq' => "HP iPaq",
'mot-' => "Motorola",
'playstation portable' => "PlayStation Portable",
'hiptop' => "Danger Hiptop",
'nec-' => "NEC",
'panasonic' => "Panasonic",
'philips' => "Philips",
'sagem' => "Sagem",
'sanyo' => "Sanyo",
'spv' => "SPV",
'zte' => "ZTE",
'sendo' => "Sendo",
// Operating Systems
'symbian' => "Symbian",
'SymbianOS' => "SymbianOS",
'elaine' => "Palm",
'palm' => "Palm",
'series60' => "Symbian S60",
'windows ce' => "Windows CE",
// Browsers
'obigo' => "Obigo",
'netfront' => "Netfront Browser",
'openwave' => "Openwave Browser",
'mobilexplorer' => "Mobile Explorer",
'operamini' => "Opera Mini",
'opera mini' => "Opera Mini",
// Other
'digital paths' => "Digital Paths",
'avantgo' => "AvantGo",
'xiino' => "Xiino",
'novarra' => "Novarra Transcoder",
'vodafone' => "Vodafone",
'docomo' => "NTT DoCoMo",
'o2' => "O2",
// Fallback
'mobile' => "Generic Mobile",
'wireless' => "Generic Mobile",
'j2me' => "Generic Mobile",
'midp' => "Generic Mobile",
'cldc' => "Generic Mobile",
'up.link' => "Generic Mobile",
'up.browser' => "Generic Mobile",
'smartphone' => "Generic Mobile",
'cellphone' => "Generic Mobile"
);
// There are hundreds of bots but these are the most common.
$robots = array(
'googlebot' => 'Googlebot',
'msnbot' => 'MSNBot',
'slurp' => 'Inktomi Slurp',
'yahoo' => 'Yahoo',
'askjeeves' => 'AskJeeves',
'fastcrawler' => 'FastCrawler',
'infoseek' => 'InfoSeek Robot 1.0',
'lycos' => 'Lycos'
);
/* End of file user_agents.php */
/* Location: ./application/config/user_agents.php */
\ No newline at end of file
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Работа с сайтами - администратор
* - удаление пользователей с ответственности за сайт
* - удаление/добавление/редактирование сайтов
**/
class Sites extends CI_Controller {
function __construct() {
parent::__construct();
$this->user_id = $this->mdl_session->getData('user_id');
$this->usertype = $this->mdl_session->getData('usertype');
if ($this->usertype != 'admin') {
redirect('users/typos');
}
$this->load->model('admins/mdl_sites');
}
/*Создаем шаблон*/
function index() {
$views['body']['url'] = "admins/sites";
$views['menu']['url'] = "menu";
$views['menu']['data']['items'] = $this->mdl_menu->admin();
$this->mdl_views->view($views);
return true;
}
function typos() {
$this->index();
return;
}
/**
* Получить сайты
**/
function getListSites() {
$data = $this->mdl_jqgrid->collectionData();
$data['user_id'] = $this->user_id;
echo json_encode($this->mdl_sites->getListSites($data));
return;
}
/**
* Получить пользователей по сайту
**/
function getListUsers() {
$data = $this->mdl_jqgrid->collectionData();
$data['site_id'] = $this->mdl_request->int("id");
$data['user_id'] = $this->user_id;
echo json_encode($this->mdl_sites->getListUsers($data));
return;
}
/**
* Управление сайтами
**/
function panelSites() {
$oper = $this->mdl_request->string('oper');
if ($oper == 'add') {
$data['site'] = Url::getFormatingUrl($this->mdl_request->string('site'));
$data['status'] = $this->mdl_request->int('status');
$result = $this->mdl_validate->validateSite($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
$result = $this->mdl_sites->addSite($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
} elseif ($oper == 'edit') {
$data['site_id'] = $this->mdl_request->int('id');
$data['site'] = Url::getFormatingUrl($this->mdl_request->string('site'));
$data['status'] = $this->mdl_request->int('status');
$result = $this->mdl_validate->validateSite($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
$result = $this->mdl_sites->editSite($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
} elseif ($oper == 'del') {
$data['site_id'] = $this->mdl_request->int('id');
$result = $this->mdl_sites->deleteSite($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
}
return true;
}
/**
* Управление пользователями (ответственность за сайты)
**/
function panelUsers() {
$oper = $this->mdl_request->string('oper');
if ($oper == 'del') {
$this->load->model('admins/mdl_users');
$data['user_id'] = $this->mdl_request->int('id');
$data['site_id'] = $this->mdl_request->int('site_id');
$result = $this->mdl_users->deleteResponsible($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
}
}
}
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Работа с пользователями - администратор*/
class Users extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->model('admins/mdl_users');
$this->user_id = $this->mdl_session->getData('user_id');
$this->usertype = $this->mdl_session->getData('usertype');
if ($this->usertype != 'admin') {
redirect('users/typos');
}
}
/**
* Создаем шаблон
**/
function index() {
$views['body']['url'] = "admins/users";
$views['menu']['url'] = "menu";
$views['menu']['data']['items'] = $this->mdl_menu->admin();
$this->mdl_views->view($views);
return;
}
function users() {
$this->index();
return;
}
/**
* Получить пользователей
**/
function getListUsers() {
$data = $this->mdl_jqgrid->collectionData();
echo json_encode($this->mdl_users->getListUsers($data));
return;
}
/**
* Получить сайты пользователя
**/
function getUserSites() {
$this->load->model('users/mdl_typos');
$data = $this->mdl_jqgrid->collectionData();
$data['user_id'] = $this->mdl_request->int('id');
echo json_encode($this->mdl_typos->getUserSites($data));
return;
}
/**
* Управление пользователями:
* - добавление
* - удаление
* - редактирование
**/
function panelUsers() {
$oper = $this->mdl_request->string('oper');
$data = array();
if ($oper == 'add') {
$data['login'] = $this->mdl_request->string('login');
$data['type'] = $this->mdl_request->string('type');
$data['email'] = $this->mdl_request->string('email');
$data['firstname'] = $this->mdl_request->string('firstname');
$data['middlename'] = $this->mdl_request->string('middlename');
$data['lastname'] = $this->mdl_request->string('lastname');
$data['password'] = $this->mdl_request->string('password');
$data['activity'] = $this->mdl_request->int('activity');
$result = $this->mdl_validate->validateDataUser($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
$result = $this->mdl_users->addUser($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
return;
} elseif ($oper == 'del') {
$data['user_id'] = $this->mdl_request->int('id');
$result = $this->mdl_users->deleteUser($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
return;
} elseif ($oper == 'edit') {
$data['user_id'] = $this->mdl_request->int('id');
$data['login'] = $this->mdl_request->string('login');
$data['type'] = $this->mdl_request->string('type');
$data['email'] = $this->mdl_request->string('email');
$data['firstname'] = $this->mdl_request->string('firstname');
$data['middlename'] = $this->mdl_request->string('middlename');
$data['lastname'] = $this->mdl_request->string('lastname');
$data['password'] = $this->mdl_request->string('password');
$data['activity'] = $this->mdl_request->int('activity');
$result = $this->mdl_validate->validateDataUser($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
$result = $this->mdl_users->editUser($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
return;
}
}
/**
* Получаем сайты для пользователя, кроме уже принадлежащих
* Возвращать должен html-список(select)
**/
function getSites() {
$user_id = $this->mdl_request->int('user_id');
$sites = $this->mdl_users->getSites($user_id);
$select = "<select>";
if (!$sites) {
$select .= "<option disabled selected value='-1'>Сайтов нет</option>";
} else {
foreach($sites as $s) {
$select .= "<option value='".$s['site_id']."'>".$s['site']."</option>";
}
}
$select .= "</select>";
echo $select;
return;
}
/*Управление сайтами пользователя*/
function panelUserSites() {
$oper = $this->mdl_request->string('oper');
if ($oper == 'add') {
$data['user_id'] = $this->mdl_request->int('user_id');
$data['site_id'] = $this->mdl_request->int('site'); //т.к. построение списка сайтов идет на поле site
$data['status'] = $this->mdl_request->int('status');
if ($data['status'] != 1 && $data['status'] != 0) {
echo json_encode(array('success' => 'false', 'message' => 'Не верный статус сайта'));
return;
}
$result = $this->mdl_users->addResponsible($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
return;
} elseif ($oper == 'edit') {
$data['user_id'] = $this->mdl_request->int('user_id');
$data['site_id'] = $this->mdl_request->int('id');
$data['status'] = $this->mdl_request->int('status');
$data['status'] = $this->mdl_request->int('status');
if ($data['status'] != 1 && $data['status'] != 0) {
echo json_encode(array('success' => 'false', 'message' => 'Не верный статус сайта'));
return;
}
$result = $this->mdl_users->editResponsible($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
return;
} elseif ($oper == 'del') {
$data['user_id'] = $this->mdl_request->int('user_id');
$data['site_id'] = $this->mdl_request->int('id');
$result = $this->mdl_users->deleteResponsible($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
return;
}
return true;
}
}
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Авторизация пользователя*/
class Authorized extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->model('mdl_authorized');;
}
function index() {
$this->load->model('mdl_authorized');
$views['body']['url'] = "authorized";
$views['body']['data']['auth_url'] = $this->config->base_url()."authorized/login";
$this->mdl_views->view($views);
}
function login() {
$views['body']['data']['auth_url'] = $this->config->base_url()."authorized/login";
$views['body']['url'] = "authorized";
if (!$this->_validateCountErrorLogin()) {
$views['body']['data']['error_message'] = "Вы превысили число попыток";
$this->mdl_views->view($views);
return;
}
$login = $this->mdl_request->string('login');
$password = $this->mdl_request->string('password');
if ($login == "" || $password == "") {
$views['body']['data']['error_message'] = "Логин/пароль пустой";
$this->mdl_views->view($views);
return;
}
/*Если совпадает с данными администратора по-умолчанию (см. typos_congig.php)*/
if ($this->config->item('typos_admin_login') && $this->config->item('typos_admin_password') && $this->config->item('typos_admin_email')) {
if ($login == $this->config->item('typos_admin_login') && $password == $this->config->item('typos_admin_password')) {
$this->mdl_session->setData('login', $login);
$this->mdl_session->setData('usertype', 'admin');
$this->mdl_session->setData('email', $this->config->item('typos_admin_email'));
$this->mdl_session->setData('user_id', -1);
$this->session->set_userdata('user_id', -1);
redirect('admins/sites/');
}
}
$user_info = $this->mdl_authorized->getInfo($login);
$password = getHashPass($password, $this->config->item('pass'));
if (!$user_info) {
$this->_errorLogin();
$views['body']['data']['error_message'] = "Пароль/логин не верен";
$this->mdl_views->view($views);
return;
} else {
if ($password == $user_info['password']) {
if ((int)$user_info['activity'] == 1) {
$this->mdl_session->setData('login', $login);
$this->mdl_session->setData('usertype', $user_info['type']);
$this->mdl_session->setData('user_id', $user_info['user_id']);
$this->session->set_userdata('user_id', $user_info['user_id']);
/*Перенаправлям в зависимости от типа пользователя*/
if ($user_info['type'] == 'admin') {
redirect('admins/sites/');
} elseif ($user_info['type'] == 'user') {
redirect('users/typos/');
}
}
} else {
$this->_errorLogin();
$views['body']['data']['error_message'] = "Пароль/логин не верен";
$this->mdl_views->view($views);
return;
}
}
}
function logout() {
$this->session->sess_destroy();
$this->mdl_session->deleteAllData();
redirect("authorized");
}
/*Устанавливаем счетчики ошибок входа*/
function _errorLogin() {
$this->mdl_session->setData('error_login', (int)$this->mdl_session->getData('error_login_count') + 1);
$this->mdl_session->setData('error_login_time', time());
$this->session->set_userdata('error_login', (int)$this->session->userdata('error_login') + 1);
$this->session->set_userdata('error_login_time', time());
}
function _validateCountErrorLogin() {
if (!$this->mdl_session->getData('error_login') && !$this->session->userdata('error_login')) {
return true;
} else {
$count_error = max((int)$this->mdl_session->getData('error_login'), (int)$this->session->userdata('error_login'));
$config_count = ($this->config->item('error_login_count')) ? $this->config->item('error_login_count') : 3;
$config_time = ($this->config->item('error_login_time')) ?$this->config->item('error_login_time') : 10000;
$time_error = max((int)$this->mdl_session->getData('error_login_time'), (int)$this->session->userdata('error_login_time'));
$time_error = time() - $time_error;
/*Если время бана прошло, обнуляем*/
if ($time_error > $config_time) {
$this->mdl_session->setData('error_login_count', 0);
$this->session->userdata('error_login_count', 0);
return true;
}
if ($time_error <= $config_time && $count_error >= $config_count) {
return false;
} else {
return true;
}
}
return true;
}
}
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
\ No newline at end of file
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Работа с сайтами - администратор*/
class Server extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->helper('language');
$this->load->model('mdl_server');
$this->load->library('email');
}
function processData() {
/*if (!$this->input->is_ajax_request()) {
return false;
}*/
$this->lang->load('server', 'russian');
$data['link'] = Url::getFormatingUrl($this->mdl_request->string('url', ''));
$data['comment'] = $this->mdl_request->string('comment', '');
$data['text'] = $this->mdl_request->string('text', '');
$data['language'] = $this->mdl_request->string('language', '');
$data['status'] = 0;
$result = $this->mdl_server->validate($data);
if (is_array($result)) {
echo json_encode($result);
return false;
}
$site_array = parse_url($data['link']);
$data['site'] = $site_array['scheme']."://".$site_array['host'];
$result = $this->mdl_server->runProcess($data);
if (is_array($result)) {
echo json_encode($result);
return false;
}
return true;
}
}
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Работа с опечатками - пользователь*/
class Typos extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->model('users/mdl_typos');
$this->user_id = $this->mdl_session->getData('user_id');
}
/*Создаем шаблон*/
function index() {
if ($this->mdl_session->getData('usertype') == 'admin') {
$views['menu']['data']['items'] = $this->mdl_menu->admin();
}
if ($this->mdl_session->getData('usertype') == 'user') {
$views['menu']['data']['items'] = $this->mdl_menu->user();
}
$views['body']['url'] = "users/typos";
$views['menu']['url'] = "menu";
$this->mdl_views->view($views);
return;
}
function typos() {
$this->index();
return;
}
/*Получить список сайтов для пользователя*/
function getListSites() {
$data = $this->mdl_jqgrid->collectionData();
$data['user_id'] = $this->user_id;
echo json_encode($this->mdl_typos->getUserSites($data));
return;
}
/*Получить список сообщений об опечатках для пользователя*/
function getListMessages() {
$data = $this->mdl_jqgrid->collectionData();
$data['site_id'] = $this->mdl_request->int("id");
$data['user_id'] = $this->user_id;
echo json_encode($this->mdl_typos->getListMessages($data));
return;
}
/*Управление сайтами*/
function panelSites() {
$oper = $this->mdl_request->string("oper");
$data['site_id'] = $this->mdl_request->int("id");
$data['status'] = $this->mdl_request->int("rstatus");
$data['user_id'] = $this->user_id;
if ($oper == 'edit') {
if ($data['status'] != 0 && $data['status'] != 1) {
return array('success' => 'false', 'message' => 'Не верный статус сообщения');
}
$this->mdl_typos->updateStatus($data);
return;
}
}
/*Управление сообщениями*/
function panelMessages() {
$oper = $this->mdl_request->string('oper');
$data = array();
if ($oper == 'add') {
$data['site_id'] = $this->mdl_request->int('site_id');
$data['link'] = Url::getFormatingUrl($this->mdl_request->string('link'));
$data['text'] = $this->mdl_request->string('text');
$data['comment'] = $this->mdl_request->string('comment');
$data['status'] = $this->mdl_request->int('status');
$data['user_id'] = $this->user_id;
$result = $this->mdl_validate->validateMessage($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
if (!$this->mdl_validate->validateUserLinkOnSite($data)) {
echo json_encode(array('success' => 'false', 'message' => 'Ссылка не принадлежит данному сайту'));
return;
}
$result = $this->mdl_typos->addMessage($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
return;
} elseif ($oper == 'del') {
$data['message_id'] = $this->mdl_request->int('id');
$data['site_id'] = $this->mdl_request->int('site_id');
$data['user_id'] = $this->user_id;
$result = $this->mdl_typos->deleteMessage($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
return;
} elseif ($oper == 'edit') {
$data['message_id'] = $this->mdl_request->int('id');
$data['site_id'] = $this->mdl_request->int('site_id');
$data['status'] = $this->mdl_request->int('status');
$data['link'] = Url::getFormatingUrl($this->mdl_request->string('link'));
$data['text'] = $this->mdl_request->string('text');
$data['comment'] = $this->mdl_request->string('comment');
$data['user_id'] = $this->user_id;
$result = $this->mdl_validate->validateMessage($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
if (!$this->mdl_validate->validateUserLinkOnSite($data)) {
echo json_encode(array('success' => 'false', 'message' => 'Ссылка не принадлежит данному сайту'));
return;
}
$result = $this->mdl_typos->editMessage($data);
if (is_array($result)) {
echo json_encode($result);
return;
}
return;
}
return;
}
}
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<title>404 Page Not Found</title>
<style type="text/css">
::selection{ background-color: #E13300; color: white; }
::moz-selection{ background-color: #E13300; color: white; }
::webkit-selection{ background-color: #E13300; color: white; }
body {
background-color: #fff;
margin: 40px;
font: 13px/20px normal Helvetica, Arial, sans-serif;
color: #4F5155;
}
a {
color: #003399;
background-color: transparent;
font-weight: normal;
}
h1 {
color: #444;
background-color: transparent;
border-bottom: 1px solid #D0D0D0;
font-size: 19px;
font-weight: normal;
margin: 0 0 14px 0;
padding: 14px 15px 10px 15px;
}
code {
font-family: Consolas, Monaco, Courier New, Courier, monospace;
font-size: 12px;
background-color: #f9f9f9;
border: 1px solid #D0D0D0;
color: #002166;
display: block;
margin: 14px 0 14px 0;
padding: 12px 10px 12px 10px;
}
#container {
margin: 10px;
border: 1px solid #D0D0D0;
-webkit-box-shadow: 0 0 8px #D0D0D0;
}
p {
margin: 12px 15px 12px 15px;
}
</style>
</head>
<body>
<div id="container">
<h1><?php echo $heading; ?></h1>
<?php echo $message; ?>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<title>Database Error</title>
<style type="text/css">
::selection{ background-color: #E13300; color: white; }
::moz-selection{ background-color: #E13300; color: white; }
::webkit-selection{ background-color: #E13300; color: white; }
body {
background-color: #fff;
margin: 40px;
font: 13px/20px normal Helvetica, Arial, sans-serif;
color: #4F5155;
}
a {
color: #003399;
background-color: transparent;
font-weight: normal;
}
h1 {
color: #444;
background-color: transparent;
border-bottom: 1px solid #D0D0D0;
font-size: 19px;
font-weight: normal;
margin: 0 0 14px 0;
padding: 14px 15px 10px 15px;
}
code {
font-family: Consolas, Monaco, Courier New, Courier, monospace;
font-size: 12px;
background-color: #f9f9f9;
border: 1px solid #D0D0D0;
color: #002166;
display: block;
margin: 14px 0 14px 0;
padding: 12px 10px 12px 10px;
}
#container {
margin: 10px;
border: 1px solid #D0D0D0;
-webkit-box-shadow: 0 0 8px #D0D0D0;
}
p {
margin: 12px 15px 12px 15px;
}
</style>
</head>
<body>
<div id="container">
<h1><?php echo $heading; ?></h1>
<?php echo $message; ?>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<title>Error</title>
<style type="text/css">
::selection{ background-color: #E13300; color: white; }
::moz-selection{ background-color: #E13300; color: white; }
::webkit-selection{ background-color: #E13300; color: white; }
body {
background-color: #fff;
margin: 40px;
font: 13px/20px normal Helvetica, Arial, sans-serif;
color: #4F5155;
}
a {
color: #003399;
background-color: transparent;
font-weight: normal;
}
h1 {
color: #444;
background-color: transparent;
border-bottom: 1px solid #D0D0D0;
font-size: 19px;
font-weight: normal;
margin: 0 0 14px 0;
padding: 14px 15px 10px 15px;
}
code {
font-family: Consolas, Monaco, Courier New, Courier, monospace;
font-size: 12px;
background-color: #f9f9f9;
border: 1px solid #D0D0D0;
color: #002166;
display: block;
margin: 14px 0 14px 0;
padding: 12px 10px 12px 10px;
}
#container {
margin: 10px;
border: 1px solid #D0D0D0;
-webkit-box-shadow: 0 0 8px #D0D0D0;
}
p {
margin: 12px 15px 12px 15px;
}
</style>
</head>
<body>
<div id="container">
<h1><?php echo $heading; ?></h1>
<?php echo $message; ?>
</div>
</body>
</html>
\ No newline at end of file
<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">
<h4>A PHP Error was encountered</h4>
<p>Severity: <?php echo $severity; ?></p>
<p>Message: <?php echo $message; ?></p>
<p>Filename: <?php echo $filepath; ?></p>
<p>Line Number: <?php echo $line; ?></p>
</div>
\ No newline at end of file
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
\ No newline at end of file
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
\ No newline at end of file
<?php
//Возвращает хэшированный пароль на основе конфигураций
function getHashPass($password, $pass_keys = array()) {
$password = strval($password);
if (isset($pass_keys['key_1']) && isset($pass_keys['key_2']) && isset($pass_keys['key_3'])) {
return md5($pass_keys['key_2'].$password.$pass_keys['key_3'].$pass_keys['key_1']);
}
return md5($password);
}
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Работа с урлами:
* - валидация
* - приведение к виду: протокол://сайт.домен (www отбрасывается)
*/
class Url {
/*Проверка url-а*/
static function validateUrl($url = '') {
//удаление опасных сиволов
$url = trim(preg_replace("/[^\x20-\xFF]/","",@strval($url)));
//проверяем УРЛ на правильность
if (!preg_match("~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}".
"(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|".
"org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?".
"!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&".
"?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~i", $url)) {
return false;
}
$site_array = parse_url($url);
if (empty($site_array['scheme']) && empty($site_array['host'])) {
return false;
}
return true;
}
static function getFormatingUrl($url = '') {
//удаление опасных сиволов
$url = trim(preg_replace("/[^\x20-\xFF]/","",@strval($url)));
//если нет протокола - добавляет http://
if (!strstr($url,"://")) {
$url = "http://".$url;
}
//если есть www, убираем
$mas = explode("://www.", $url, 2);
if (count($mas) > 1) {
$url = $mas[0]."://".$mas[1];
}
//заменить протокол на нижний регистр: hTtP -> http
$url = preg_replace("~^[a-z]+~ie","strtolower('\\0')", $url);
return $url;
}
}
?>
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
\ No newline at end of file
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Включение сессий*/
class Session {
function __construct() {
if (!session_id()) {
ini_set('session.use_cookies', 'On');
ini_set('session.use_trans_sid', 'Off');
session_set_cookie_params(0, '/');
session_start();
}
}
}
/**/
\ No newline at end of file
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Проверка авторизированности пользователя*/
class Validate_authorized extends CI_Controller {
/*Если не страница авторизации/проверки логина/пароля - перенаправляем на главную*/
function index() {
$class = $this->uri->segment(1);
$method = $this->uri->segment(2);
if ((!$class) ||
($class == 'authorized') ||
($class.'/'.$method == 'authorized/check') ||
($class.'/'.$method == 'authorized/logout') ||
($class.'/'.$method == 'server/processData')
) {
return true;
} else {
if (!$this->session->userdata('user_id')) {
redirect('authorized');
return;
}
}
return;
}
}
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
\ No newline at end of file
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
\ No newline at end of file
<?php
/*Языковые сообщения*/
//Error
$lang['error_time_activity'] = "Вы слишком часто отправляете данные";
$lang['error_connect_database'] = "Ошибка при подключении к базе данных";
$lang['error_database'] = "Ошибка при работе с базой данных";
$lang['error_header'] = "Отсутствуют ip или заголовки ответа";
$lang['error_url'] = "Отсутствует url сайта";
$lang['error_valid_url'] = "Неверный формат url-а сайта";
$lang['error_length_url'] = "Длина ссылки должна быть до %s символов (сейчас: %s)";
$lang['error_text'] = "Длина текста должна быть от %s до %s символов (сейчас: %s)";
$lang['error_comment'] = "Длина комментария должна быть до 30 символов (сейчас: %s)";
$lang['error_support_site'] = "Сайт не поддерживается";
//Success
$lang['text_success'] = "Данные сохранены. Спасибо за внимание!";
//Mail
$lang['mail_subject'] = "Сообщение об опечатке";
$lang['mail_from'] = "Служба опечаток Etersoft";
$lang['mail_error'] = "Ошибка при отправлении письма";
$lang['mail_site'] = "Сайт:";
$lang['mail_url'] = "Ссылка:";
$lang['mail_click_url'] = "нажмите:";
$lang['mail_comment'] = "Комментарий:";
$lang['mail_text'] = "Текст с опечаткой:";
?>
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
\ No newline at end of file
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
\ No newline at end of file
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Работа с сайтами*/
class Mdl_sites extends CI_Model {
/*Получаем сайты*/
function getListSites($data) {
$user_id = $data['user_id'];
/*Данные для pagination jqGrid*/
if ($data['querysearchstring'] != '') {
$data['querysearchstring'] = " WHERE ".$data['querysearchstring']." ";
}
$data['query_count'] = "SELECT COUNT(s.site_id) AS count FROM site AS s ".$data['querysearchstring']." ";
$data_pagination = $this->mdl_jqgrid->Pagination($data);
/**/
$return_data = array(
'page' => $data_pagination['page'],
'total' => $data_pagination['total'],
'records' => $data_pagination['records'],
'rows' => array(),
);
$query_sites = "SELECT s.site_id AS site_id,
s.site AS site,
s.status AS status,
s.datetime_add AS datetime_add
FROM site AS s
".$data['querysearchstring']."
ORDER BY ".$data['sidx']." ".$data['sord']."
LIMIT ".$data_pagination['start']." , ".$data_pagination['limit']." ";
$query = $this->db->query($query_sites);
if ($query->num_rows() > 0) {
foreach($query->result_array() as $row) {
$return_data['rows'][] = array(
'id' => $row['site_id'],
'cell' => array(
$row['site_id'],
$row['site'],
$row['status'],
$row['datetime_add']
),
);
}
}
return $return_data;
}
/*Получаем пользователей по сайту*/
function getListUsers($data) {
$user_id = $data['user_id'];
$site_id = $data['site_id'];
/*Данные для pagination jqGrid*/
if ($data['querysearchstring'] != '') {
$data['querysearchstring'] = " AND ".$data['querysearchstring']." ";
}
$data['query_count'] = "SELECT COUNT(u.user_id) AS count
FROM user AS u
JOIN responsible AS r ON r.user_id = u.user_id
WHERE r.site_id = '".(int)$site_id."'
".$data['querysearchstring']." ";
$data_pagination = $this->mdl_jqgrid->Pagination($data);
/**/
$return_data = array(
'page' => $data_pagination['page'],
'total' => $data_pagination['total'],
'records' => $data_pagination['records'],
'rows' => array(),
);
$query_users = "SELECT u.user_id AS user_id,
u.type AS type,
u.email AS email,
u.datetime_add AS datetime_add,
u.activity AS activity,
u.firstname AS firstname,
u.middlename AS middlename,
u.lastname AS lastname,
u.login AS login,
r.status AS mail,
r.datetime_add AS datetime_add
FROM user AS u
JOIN responsible AS r ON r.user_id = u.user_id
WHERE r.site_id = '".(int)$site_id."'
".$data['querysearchstring']."
ORDER BY ".$data['sidx']." ".$data['sord']."
LIMIT ".$data_pagination['start']." , ".$data_pagination['limit']." ";
$query = $this->db->query($query_users);
if ($query->num_rows() > 0) {
foreach($query->result_array() as $row) {
$return_data['rows'][] = array(
'id' => $row['user_id'],
'cell' => array(
$row['user_id'],
$row['login'],
$row['type'],
$row['email'],
$row['firstname'],
$row['middlename'],
$row['lastname'],
$row['activity'],
$row['mail'],
$row['datetime_add']
)
);
}
}
return $return_data;
}
/*Добавление сайта*/
function addSite($data) {
return $this->mdl_stored_query->insertSite($data);
}
/*Обновление названия*/
function editSite($data) {
return $this->mdl_stored_query->updateSite($data);
}
/*Удаление сайта*/
function deleteSite($data) {
if (!$this->mdl_validate->validateCountResponsibleOnSite($data)) {
return $this->mdl_stored_query->deleteSite($data);
}
return array('success' => 'false', 'message' => 'Сайт нельзя удалить. Количество пользователей не равно 0');
}
}
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Работа с пользователями*/
class Mdl_users extends CI_Model {
/*
* Получаем всех пользователей
**/
function getListUsers($data) {
/*Данные для pagination jqGrid*/
if ($data['querysearchstring'] != "") {
$data['querysearchstring'] = " WHERE ".$data['querysearchstring']." ";
}
$data['query_count'] = "SELECT COUNT(user_id) AS count FROM user ".$data['querysearchstring']." ";
$data_pagination = $this->mdl_jqgrid->Pagination($data);
/**/
$return_data = array(
'page' => $data_pagination['page'],
'total' => $data_pagination['total'],
'records' => $data_pagination['records'],
'rows' => array(),
);
$query_users = "SELECT user_id,
login,
type,
email,
firstname,
middlename,
lastname,
activity,
datetime_add
FROM user AS u
".$data['querysearchstring']."
ORDER BY ".$data['sidx']." ".$data['sord']."
LIMIT ".$data_pagination['start']." , ".$data_pagination['limit']." ";
$query = $this->db->query($query_users);
if ($query->num_rows() > 0) {
foreach($query->result_array() as $row) {
$return_data['rows'][] = array(
'id' => $row['user_id'],
'cell' => array(
$row['user_id'],
$row['login'],
$row['type'],
$row['email'],
'******',
$row['firstname'],
$row['middlename'],
$row['lastname'],
$row['activity'],
$row['datetime_add']
)
);
}
}
return $return_data;
}
/*
* Добавляем пользователя
**/
function addUser($data) {
$data['password'] = getHashPass($data['password'], $this->config->item('pass'));
return $this->mdl_stored_query->insertUser($data);
}
/* Редактирование данных о клиенте
* если пароль не новый (т.е. равен ******), то в запросе не обновляем его
**/
function editUser($data) {
if ($data['password'] != '******') {
$data['password'] = getHashPass($data['password'], $this->config->item('pass'));
}
return $this->mdl_stored_query->updateUser($data);
}
/*
* Удаляем пользователя
**/
function deleteUser($data) {
return $this->mdl_stored_query->deleteUser($data);
}
/*Добавляем ответственного за сайт*/
function addResponsible($data) {
if (!$this->mdl_validate->validateUserOnId($data)) {
return array('success'=> 'false', 'message' => "Пользователь не существует");
}
if (!$this->mdl_validate->validateResponsibleToSite($data)) {
return array('success'=> 'false', 'message' => "Этот сайт уже назначен");
}
if (!$this->mdl_validate->validateSiteOnId($data)) {
return array('success'=> 'false', 'message' => "Сайт не существует");
}
return $this->mdl_stored_query->insertResponsible($data);
}
/*
* Обновляем статус ответственного за сайт (email-рассылка)
**/
function editResponsible($data) {
return $this->mdl_stored_query->updateResponsibleStatus($data);
}
/*
* Снимаем ответсвенного
**/
function deleteResponsible($data) {
return $this->mdl_stored_query->deleteResponsible($data);
}
/*
* Получаем сайты для пользователя, кроме уже принадлежащих
**/
function getSites($user_id) {
$query = $this->db->query("SELECT site_id, site
FROM site
WHERE site_id NOT IN (SELECT site_id
FROM responsible
WHERE user_id = '".(int)$user_id."'
)
");
return ($query->num_rows() > 0) ? $query->result_array() : false;
}
}
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
\ No newline at end of file
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Работа с пользовательскими данными*/
class Mdl_authorized extends CI_Model {
/*Информация о пользователе*/
function getInfo($login) {
$query = "SELECT * FROM user WHERE login = ".$this->db->escape($login)." LIMIT 1";
$query = $this->db->query($query);
if (!$query) {return false;}
if ($query->num_rows > 0) {
return $query->row_array();
}
return false;
}
}
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Построение поискового запроса*/
class Mdl_jqgrid extends CI_Model {
//Построение части запроса (поле->значение)
function createSearch($data) {
$search = $data['search'];
$searchstring = "";
if ($search != "true") {
return $searchstring;
}
$searchField = $data['searchField'];
$searchOper = $data['searchOper'];
$searchString = $data['searchString'];
$s = " ".$searchField." ";
switch ($searchOper) {
case 'eq':
$s .= " = ".$this->db->escape($searchString);
break;
case 'ne':
$s .= " != ".$this->db->escape($searchString);
break;
case 'lt':
$s .= " < ".$this->db->escape($searchString);
break;
case 'le':
$s .= " <= ".$this->db->escape($searchString);
break;
case 'gt':
$s .= " > ".$this->db->escape($searchString);
break;
case 'ge':
$s .= " >= ".$this->db->escape($searchString);
break;
case 'bw':
$s .= "LIKE ".$this->db->escape($searchString."%");
break;
case 'bn':
$s .= "NOT LIKE ".$this->db->escape($searchString."%");
break;
case 'ew':
$s .= "LIKE ".$this->db->escape("%".$searchString);
break;
case 'en':
$s .= "NOT LIKE ".$this->db->escape("%".$searchString);
break;
case 'cn':
$s .= "LIKE ".$this->db->escape("%".$searchString."%");
break;
case 'nc':
$s .= "NOT LIKE ".$this->db->escape("%".$searchString."%");
break;
case 'nu':
$s .= "IS NULL";
break;
case 'nn':
$s .= "IS NOT NULL";
break;
case 'in':
$str_array = explode(',', $searchString);
$str_array = array_map(function($value) {return $this->db->escape($value);}, $str_array);
$string = implode(',', $str_array);
$s .= "IN (".$searchString.")";
break;
case 'ni':
$str_array = explode(',', $searchString);
$str_array = array_map(function($value) {return $this->db->escape($value);}, $str_array);
$string = implode(',', $str_array);
$s .= "NOT IN (".$searchString.")";
break;
default:
$s = "";
break;
}
return $s." ";
}
//Собираем параметры, общие для плагина
function collectionData() {
$data['page'] = $this->mdl_request->int('page', 1);
$data['limit'] = $this->mdl_request->int('rows', 10);
if ($data['limit'] <= 0) {$data['limit'] = 10;}
$data['sord'] = $this->mdl_request->string('sord');
$data['sidx'] = $this->mdl_request->string('sidx');
$data['search'] = $this->mdl_request->string('_search', 'false');
$data['searchField'] = $this->mdl_request->string('searchField');
$data['searchOper'] = $this->mdl_request->string('searchOper');
$data['searchString'] = $this->mdl_request->string('searchString');
$data['querysearchstring'] = $this->createSearch($data);
return $data;
}
function Pagination($data) {
$page = (int)$data['page'];
$limit = (int)$data['limit'];
$sord = $data['sord'];
$sidx = $data['sidx'];
$query = $this->db->query($data['query_count']);
if ($query->num_rows() > 0) {
$count = $query->row_array()['count'];
} else {
$count = 0;
}
if ($count > 0) {
$total_pages = ceil($count/$limit);
} else {
$total_pages = 0;
}
if ($page > $total_pages) {
$page = $total_pages;
}
$start = $limit*$page - $limit;
if ($start < 0) {
$start = 0;
}
return array(
'page' => $page,
'total' => $total_pages,
'records' => $count,
'start' => $start,
'limit' => $limit
);
}
}
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Создание меню*/
class Mdl_menu extends CI_Model {
function admin() {
$data['sites'] = "<a href='".$this->config->base_url()."index.php/admins/sites'>Сайты</a>";
$data['users'] = "<a href='".$this->config->base_url()."index.php/admins/users'>Пользователи</a>";
$data['typos'] = "<a href='".$this->config->base_url()."index.php/users/typos'>Опечатки</a>";
$data['logout'] = "<a href='".$this->config->base_url()."index.php/authorized/logout'>Выйти</a>";
return $data;
}
function user() {
$data['logout'] = "<a href='".$this->config->base_url()."index.php/authorized/logout'>Выйти</a>";
return $data;
}
}
\ No newline at end of file
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Обработка входящих данных*/
class Mdl_request extends CI_Model {
function data($key = '', $default = '') {
if (!$this->input->get_post($key)) {
return $default;
} else {
return $this->input->get_post($key, TRUE);
}
return false;
}
function int($key = '', $default = 0) {
if (!$this->input->get_post($key)) {
return $default;
} else {
return (int)$this->input->get_post($key);
}
return false;
}
function float($key = '', $default = 0) {
if (!$this->input->get_post($key)) {
return $default;
} else {
return (float)$this->input->get_post($key);
}
return false;
}
function string($key, $default = '') {
if (!$this->input->get_post($key)) {
return $default;
} else {
return trim(strval($this->input->get_post($key, TRUE)));
}
return false;
}
function request() {
return $this->input->get_post(NULL, TRUE);
}
}
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Обработка сообщения об опечатке:
* - валидация данных
* - запись в базу
* - отсылка email-ов
**/
class Mdl_server extends CI_Model {
/**
* Проверяем входящие данные
*/
function validate($data) {
if ($this->mdl_session->getData('last_time_activity')) {
if ((time() - $this->mdl_session->getData('last_time_activity')) < 60) {
$error = lang('error_time_activity');
}
}
if ($this->input->ip_address() == '0.0.0.0' || !$this->input->request_headers() || !$this->input->user_agent()) {
$error = lang('error_header');
}
if (!Url::validateUrl($data['link'])) {
$error = lang('error_valid_url');
}
if (strlen($data['link']) > 300) {
$error = sprintf(lang('error_length_url'), 300, strlen($data['link']));
}
if (strlen($data['text']) < 5 || strlen($data['text']) > 30) {
$error = sprintf(lang("error_text"), 5, 30, strlen($data['text']));
}
if (strlen($data['comment']) > 30) {
$error = sprintf(lang("error_comment"), strlen($data['comment']));
}
return (empty($error)) ? true : array('success' => 'false', 'message' => $error);
}
/**
* Проверяем наличие сайта, если сайт существует:
* - записываем данные об опечатке
* - отсылаем email-ы
*/
function runProcess($data) {
$this->mdl_session->setData('last_time_activity', time());
$site_info = $this->getSite($data['site']);
if (!$site_info) {
return array('success' => 'false', 'message' => lang('error_support_site'));
}
$data['site_id'] = $site_info['site_id'];
$responsibles = getResponsibles($site_info['site_id']);
if (!$responsibles) {
return array('success' => 'false', 'message' => lang('error_support_site'));
}
$this->createMessage($data);
$emails = array();
foreach($responsibles as $r) {
if ($r['status'] != 1) {continue;}
$emails[] = $r['email'];
}
if (count($emails) == 0) {
/*TODO: генерировать что-то, если нет пользователей на сайт?*/
} else {
$message = "";
$message = "<p>".lang('mail_site')." <a href=".$data["site"].">".$data['site']."</a></p>";
$message .= "<p>".lang('mail_url')." <a href=".htmlspecialchars($data['link']).">".lang('mail_click_url')."</a>"." (".$data['link'].")"."</p>";
$message .= "<p>".lang('mail_text')." ".htmlspecialchars($data['text'])."</p>";
$message .= "<p>".lang('mail_comment')." ".htmlspecialchars($data['comment'])."</p>";
if (!$this->sendEmail($emails, $message)) {
/*TODO: генерировать что-то, если не удалось отправить сообщение?*/
}
}
return true;
}
/**
* Отправка сообщения
*/
function sendMail($emails, $message) {
$this->email->clear(TRUE);
$this->email->from('your@example.com', lang('mail_from'));
$this->email->subject(lang('mail_subject'));
$this->email->message($message);
$this->email->set_alt_message();
$this->email->to($emails);
return $this->email->send();
}
/**
* Записываем сообщение
*/
function createMessage($data) {
return $this->mdl_stored_query->insertMessage($data);
}
/**
* Получить id сайта по названию (активный сайт)
*/
function getSite($site = '') {
$query = $this->db->query("SELECT s.site_id AS site_id
FROM site AS s
WHERE s.site = ".$this->db->escape($site)."
AND status = 1
LIMIT 1");
return ($query->num_rows() > 0) ? $query->row_array : false;
}
/**
* Получить ответственных за сайт
*/
function getResponsibles($site_id = 0) {
$query = $this->db->query("SELECT *
FROM responsible AS r
JOIN user AS u ON u.user_id = r.user_id
WHERE r.site_id = ".(int)$site_id."");
return ($query->num_rows() > 0) ? $query->result_array : false;
}
}
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Работа с сессиями*/
class Mdl_session extends CI_Model {
function __construct() {
if (!session_id()) {
return false;
}
}
/*Установить данные*/
function setData($key, $value) {
$_SESSION[strval($key)] = serialize($value);
}
/*Получить данные*/
function getData($key) {
if ($this->validateData($key)) {
return unserialize($_SESSION[strval($key)]);
} else {
return false;
}
}
/*Проверить существование данных*/
function validateData($key) {
if (!isset($_SESSION[strval($key)])) {
return false;
} else {
return true;
}
}
/*Удаляем данные*/
function deleteData($key) {
unset($_SESSION[strval($key)]);
}
/*Удаляем все данные сессии*/
function deleteAllData() {
unset($_SESSION);
}
}
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Работа с пользователями*/
class Mdl_stored_query extends CI_Model {
/*Таблица message*/
//Вставка данных об опечатке
function insertMessage($data) {
$query = "INSERT INTO message (message_id, site_id, link, text, comment, datetime_add, status) VALUES (NULL, ?, ?, ?, ?, NOW(), ?)";
if ($this->db->query($query, array($data['site_id'], $data['link'], $data['text'], $data['comment'], $data['status']))) {
return true;
}
return false;
}
//Редактирование данных об опечатке
function updateMessage($data) {
$query = "UPDATE message SET status = ?, link = ?, comment = ?, text = ? WHERE message_id = '".(int)$data['message_id']."' AND site_id = '".(int)$data['site_id']."' ";
if ($this->db->query($query, array($data['status'], $data['link'], $data['comment'], $data['text']))) {
return true;
}
return false;
}
//Удаление данных об опечатке
function deleteMessage($data) {
$query = "DELETE FROM message WHERE message_id = '".(int)$data['message_id']."'";
if ($this->db->query($query)) {
return true;
}
return false;
}
/*************************************************************************************************
*************************************************************************************************/
/*Таблица site*/
//Вставка данных о сайте
function insertSite($data) {
$query = "INSERT INTO site (site_id, site, datetime_add) VALUES(NULL, ?, ?, NOW())";
if ($this->db->query($query, array($data['site'], $data['status']))) {
return true;
}
return false;
}
//Редактирование данных о сайте
function updateSite($data) {
$query = "UPDATE site SET site = ?, status = ? WHERE site_id = '".(int)$data['site_id']."'";
if ($this->db->query($query, array($data['site'], $data['status']))) {
return true;
}
return false;
}
//Удаление данных о сайте
function deleteSite($data) {
$query_m = "DELETE FROM message WHERE site_id = '".(int)$data['message_id']."'";
$query_s = "DELETE FROM site WHERE site_id = '".(int)$data['site_id']."'";
if ($this->db->query($query_m) && $this->db->query($query_s) ) {
return true;
}
return false;
}
/*************************************************************************************************
*************************************************************************************************/
/*Таблица responsible*/
//Создание ответственности пользователя за сайт
function insertResponsible() {
$query = "INSERT INTO responsible (responsible_id, site_id, user_id, status, datetime_add) VALUES (NULL, ?, ?, ?, NOW())";
if ($this->db->query($query, array($data['site_id'], $data['user_id'], $data['status']))) {
return true;
}
return false;
}
//Редактирование статуса подписки на email-рассылку ответственного
function updateResponsibleStatus($data) {
$query = "UPDATE responsible SET status = '".(int)$data['status']."' WHERE site_id = '".(int)$data['site_id']."' AND user_id = '".(int)$data['user_id']."' ";
if ($this->db->query($query)) {
return true;
}
return false;
}
//Удаление ответственности с пользователя за сайт
function deleteResponsible($data) {
$query = "DELETE FROM responsible WHERE site_id = '".(int)$data['site_id']."' AND user_id = '".(int)$data['user_id']."' ";
if ($this->db->query($query)) {
return true;
}
return false;
}
/*************************************************************************************************
*************************************************************************************************/
/*Таблица user*/
//Вставка данных о сайте
function insertUser($data) {
$query = "INSERT INTO user (user_id, login, type, email, password, firstname, middlename, lastname, activity, datetime_add) VALUES(NULL, ?, ?, ?, ?, ?, ?, ?, ?, NOW())";
if ($this->db->query($query, array($data['login'], $data['type'], $data['email'], $data['password'], $data['firstname'], $data['middlename'], $data['lastname'], $data['activity']))) {
return true;
}
return false;
}
//Редактирование данных о сайте
function updateUser($data) {
$query = "UPDATE user SET ";
$query .= " login = ".$this->db->escape($data['login']).", ";
$query .= " type = ".$this->db->escape($data['type']).", ";
$query .= " email = ".$this->db->escape($data['email']).", ";
if ($data['password'] != '******') {
$query .= " password = ".$this->db->escape($data['password'])." , ";
}
$query .= " firstname = ".$this->db->escape($data['firstname']).", ";
$query .= " middlename = ".$this->db->escape($data['middlename']).", ";
$query .= " lastname = ".$this->db->escape($data['lastname']).", ";
$query .= " activity = ".$this->db->escape($data['activity'])." ";
$query .= " WHERE user_id = '".(int)$data['user_id']."' ";
if ($this->db->query($query)) {
return true;
}
return false;
}
//Удаление данных о сайте
function deleteUser($data) {
$query_u = "DELETE FROM user WHERE user_id = '".(int)$data['user_id']."' ";
$query_r = "DELETE FROM responsible WHERE user_id = '".(int)$data['user_id']."' ";
if ($this->db->query($query_r) && $this->db->query($query_u)) {
return true;
}
return false;
}
}
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*Работа с шаблонами*/
class Mdl_views extends CI_Model {
/*Загружаем основные шаблоны*/
function view($data = array()) {
$url = $this->config->item('base_url');
$data['header']['base_url'] = $url;
$data['menu']['base_url'] = $url;
$data['body']['base_url'] = $url;
$data['footer']['base_url'] = $url;
/**/
$this->load->view('header', $data['header']);
if (isset($data['menu']['url']) && isset($data['menu']['data'])) {
$this->load->view($data['menu']['url'], $data['menu']['data']);
}
if (!isset($data['body']['data'])) {
$data['body']['data'] = array();
}
$this->load->view($data['body']['url'], $data['body']['data']);
$this->load->view('footer', $data['footer']);
/**/
}
}
/**/
\ No newline at end of file
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Работа с опечатками
**/
class Mdl_typos extends CI_Model {
/**
* Получаем сайты пользователя
*/
function getUserSites($data) {
$user_id = $data['user_id'];
//Данные для pagination jqGrid
if ($data['querysearchstring'] != '') {
$data['querysearchstring'] = " AND ".$data['querysearchstring']." ";
}
$data['query_count'] = "SELECT COUNT(DISTINCT user_id) AS count
FROM responsible AS r
WHERE user_id = '".(int)$user_id."'
".$data['querysearchstring']." ";
$data_pagination = $this->mdl_jqgrid->Pagination($data);
/**/
$return_data = array(
'page' => $data_pagination['page'],
'total' => $data_pagination['total'],
'records' => $data_pagination['records'],
'rows' => array(),
);
$query_users = "SELECT DISTINCT s.site_id AS site_id,
r.status AS rstatus,
s.site AS site,
s.status AS sstatus,
r.datetime_add AS datetime_add
FROM responsible AS r
JOIN site AS s ON s.site_id = r.site_id
WHERE r.user_id = '".(int)$user_id."'
".$data['querysearchstring']."
ORDER BY ".$data['sidx']." ".$data['sord']."
LIMIT ".$data_pagination['start']." , ".$data_pagination['limit']." ";
$query = $this->db->query($query_users);
if ($query->num_rows() > 0) {
foreach($query->result_array() as $row) {
$return_data['rows'][] = array(
'id' => $row['site_id'],
'cell' => array(
$row['site_id'],
$row['site'],
$row['rstatus'],
$row['sstatus'],
)
);
}
}
return $return_data;
}
/**
* Получаем список сообщений об опечатках для сайта пользователя, если есть права на него у пользователя
**/
function getListMessages($data) {
$site_id = $data["site_id"];
$user_id = $data['user_id'];
if (!$this->mdl_validate->validateRightOnSite($data)) {
return array();
}
//Данные для pagination jqGrid
if ($data['querysearchstring'] != "") {
$data['querysearchstring'] = " AND ".$data['querysearchstring']." ";
}
$data['query_count'] = "SELECT COUNT(m.message_id) AS count
FROM message AS m
JOIN user AS u
JOIN responsible AS r
WHERE m.site_id = '".(int)$site_id."'
AND u.user_id = '".(int)$user_id."'
AND r.site_id = m.site_id
AND r.user_id = u.user_id
".$data['querysearchstring']." ";
$data_pagination = $this->mdl_jqgrid->Pagination($data);
/**/
$return_data = array(
'page' => $data_pagination['page'],
'total' => $data_pagination['total'],
'records' => $data_pagination['records'],
'rows' => array(),
);
$query_messages = "SELECT m.message_id AS message_id,
m.link AS link,
m.text AS text,
m.comment AS comment,
m.datetime_add AS datetime_add,
m.status AS status
FROM message AS m
JOIN user AS u
JOIN responsible AS r
WHERE m.site_id = '".(int)$site_id."'
AND u.user_id = '".(int)$user_id."'
AND r.site_id = m.site_id
AND r.user_id = u.user_id
".$data['querysearchstring']."
ORDER BY ".$data['sidx']." ".$data['sord']."
LIMIT ".$data_pagination['start'].", ".$data_pagination['limit']." ";
$query = $this->db->query($query_messages);
if ($query->num_rows() > 0) {
foreach($query->result_array() as $row) {
$return_data['rows'][] = array(
'id' => $row['message_id'],
'cell' => array(
$row['message_id'],
$row['link'], //anchor($row['link'], 'ссылка', array('class'=>'typos_link', 'target'=>'_blank')),
$row['text'],
$row['comment'],
$row['datetime_add'],
$row['status'],
)
);
}
}
return $return_data;
}
/*
* Обновляем статус для сайта, если есть права на него
**/
function updateStatus($data) {
if ($this->mdl_validate->validateRightOnSite($data)) {
return $this->mdl_stored_query->updateResponsibleStatus($data);
}
return false;
}
/*
* Добавляем новое сообщение, если есть права на него
**/
function addMessage($data) {
if ($this->mdl_validate->validateRightOnSite($data)) {
return $this->mdl_stored_query->insertMessage($data);
}
return array('success' => 'false', 'message' => 'Вы не имеете прав на этот сайт');
}
/*
* Удаляем сообщение, если есть права на него
**/
function deleteMessage($data) {
if ($this->mdl_validate->validateRightOnMessage($data)) {
return $this->mdl_stored_query->deleteMessage($data);
}
return array('success' => 'false', 'message' => 'Вы не имеете прав на этот сайт');
}
/*
* Обновляем статус сообщения, если есть права на него
**/
function editMessage($data) {
if ($this->mdl_validate->validateRightOnMessage($data)) {
return $this->mdl_stored_query->updateMessage($data);
}
return array('success' => 'false', 'message' => 'Вы не имеете прав на этот сайт');
}
}
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
\ No newline at end of file
<div class="body">
<link rel="stylesheet" type="text/css" media="screen" href="<?=$base_url?>javascript/jquery_plugins/jqGrid/4.5.2/css/ui.jqgrid.css" />
<script type="text/javascript" src="<?=$base_url?>javascript/jquery_plugins/jqGrid/4.5.2/js/i18n/grid.locale-ru.js"></script>
<script type="text/javascript" src="<?=$base_url?>javascript/jquery_plugins/jqGrid/4.5.2/js/jquery.jqGrid.min.js"></script>
<script type="text/javascript" src="<?=$base_url?>javascript/jquery_plugins/jqGrid/4.5.2/src/grid.subgrid.js"></script>
<table id="table_sites"></table>
<div id="additional_panel"></div>
<script type="text/javascript">
jQuery("#table_sites").jqGrid({ // Привязка плагина к таблице
url: '<?=$base_url?>admins/sites/getListSites', // Скрипт - обработчик ваших запросов
editurl: '<?=$base_url?>admins/sites/panelSites',
datatype: "json", // Формат скрипта-обработчика
colNames:['Номер', 'Сайт', 'Статус', 'Дата регистрации'],
colModel:[
{name:"site_id", index:'s.site_id', width:10, searchtype:"integer", align:'center'},
{name:"site", index:'s.site', align:'center', width:80, searchtype:"string", editable:true, addtable:true, editrules:{required:true}, editoptions:{size:20, maxlength:150}},
{name:"status", index:"s.status", width:20, sortable:true, searchtype:"integer", align:'center', editable:true, edittype:"checkbox", editoptions: {value:"1:0", defaultValue:'0'}, formatter:'checkbox'},
{name:"datetime_add", index:'s.datetime_add', align:'center', width:20, searchtype:"string"},
],
subGrid : true,
subGridRowExpanded: function(subgrid_id, row_id) {
var subgrid_table_id, pager_id;
subgrid_table_id = subgrid_id+"_t";
pager_id = "p_"+subgrid_table_id;
$("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>");
jQuery("#"+subgrid_table_id).jqGrid({
url: '<?=$base_url?>admins/sites/getListUsers?id='+row_id,
editurl: '<?=$base_url?>admins/sites/panelUsers?site_id='+row_id,
datatype: "json",
colNames: ['Номер', 'Логин', 'Тип', 'Email', 'Имя', 'Отчество', 'Фамилия', 'Статус аккаунта', 'Подписка', 'Дата установки'],
colModel: [
{name:"user_id", index:"u.id", width:80, searchtype:"integer", align:'center', sortable:true},
{name:"login", index:"u.login", width:80, searchtype:"string", align:'center', sortable:true},
{name:"type", index:"u.type", width:80, searchtype:"string", align:'center', sortable:true},
{name:"email", index:"u.email",width:80, sortable:true, searchtype:"string", align:'center'},
{name:"firstname", index:"u.firstname", width:80, sortable:true, searchtype:"string", align:'center'},
{name:"middlename", index:"u.middlename", width:80, sortable:true, searchtype:"string", align:'center'},
{name:"lastname", index:"u.lastname", width:80, sortable:true, searchtype:"string", align:'center'},
{name:"activity", index:"u.activity", width:80, sortable:true, searchtype:"integer", align:'center'},
{name:"status", index:"r.status", width:80, sortable:true, searchtype:"integer", align:'center'},
{name:"datetime_add", index:"r.datetime_add", width:80, sortable:true, searchtype:"string", align:'center'}
],
rowNum:20,
pager: pager_id,
sortname: 'u.datetime_add',
sortorder: 'desc',
height: '100%',
width: 1000
});
jQuery("#"+subgrid_table_id).jqGrid('navGrid', "#"+pager_id,
{edit:false,add:false,del:true},
{},
{},
{
afterSubmit: function(response) {
var json = response.responseText;
try {
var text = window.JSON.parse(json);
if (typeof(text) != 'undefined') {
return [false, text.message];
} else {
return [true, ''];
}
} catch(e) {
return [true, ''];
}
}
}
)
},
caption:"Сайты",
rowNum:10,
rowList:[10,20,30],
width:1200,
height: '100%',
pager: '#additional_panel', // Привязка к таблице тулбара
sortname: 's.site_id',
viewrecords: true,
sortorder: "asc"
});
jQuery("#table_sites").jqGrid('navGrid','#additional_panel', // Управление тулбаром таблицы
{edit:true,add:true,del:true}, // Отключаем от тулбара редактирование, добавление и удаление записей. На тулбаре останутся только две кнопки: "Поиск" и "Обновить"
{afterSubmit: function(response) {
var json = response.responseText;
try {
var text = window.JSON.parse(json);
if (typeof(text) != 'undefined') {
return [false, text.message];
} else {
return [true, ''];
}
} catch(e) {
return [true, ''];
}
}
}, // Опции окон редактирования
{afterSubmit: function(response) {
var json = response.responseText;
try {
var text = window.JSON.parse(json);
if (typeof(text) != 'undefined') {
return [false, text.message];
} else {
return [true, ''];
}
} catch(e) {
return [true, ''];
}
}
},
{afterSubmit: function(response) {
var json = response.responseText;
try {
var text = window.JSON.parse(json);
if (typeof(text) != 'undefined') {
return [false, text.message];
} else {
return [true, ''];
}
} catch(e) {
return [true, ''];
}
}
}
);
</script>
</div>
<div class="body">
<link rel="stylesheet" type="text/css" media="screen" href="<?=$base_url?>javascript/jquery_plugins/jqGrid/4.5.2/css/ui.jqgrid.css" />
<script type="text/javascript" src="<?=$base_url?>javascript/jquery_plugins/jqGrid/4.5.2/js/i18n/grid.locale-ru.js"></script>
<script type="text/javascript" src="<?=$base_url?>javascript/jquery_plugins/jqGrid/4.5.2/js/jquery.jqGrid.min.js"></script>
<script type="text/javascript" src="<?=$base_url?>javascript/jquery_plugins/jqGrid/4.5.2/src/grid.subgrid.js"></script>
<table id="table_users"></table>
<div id="additional_panel"></div>
<script type="text/javascript">
jQuery("#table_users").jqGrid({ // Привязка плагина к таблице
url: '<?=$base_url?>admins/users/getListUsers', // Скрипт - обработчик ваших запросов
editurl: '<?=$base_url?>admins/users/panelUsers',
datatype: "json", // Формат скрипта-обработчика
colNames: ['Номер', 'Логин', 'Тип', 'Email', 'Пароль', 'Имя', 'Отчество', 'Фамилия', 'Статус аккаунта','Дата регистрации'],
colModel: [
{name:"user_id", index:"u.user_id", width:80, searchtype:"integer", align:'center', sortable:true},
{name:"login", index:"u.login", width:80, searchtype:"string", align:'center', sortable:true, editable:true, editrules:{required:true}, editoptions:{size:20, maxlength:100}},
{name:"type", index:"u.type", width:80, searchtype:"string", align:'center', sortable:true, editable:true, edittype:'select', editoptions:{value:{'user':'Пользователь', 'admin':'Администратор'}}, editrules:{required:true}},
{name:"email", index:"u.email",width:80, sortable:true, searchtype:"string", align:'center', editable:true, editrules:{email:true, required:true}, editoptions:{size:20, maxlength:100}},
{name:"password", index:"u.password", width:80, sortable:false, searchtype:"string", align:'center', editable:true, edittype:'password', editrules:{required:true}, editoptions:{size:20, maxlength:100}},
{name:"firstname", index:"u.firstname", width:80, sortable:true, searchtype:"string", align:'center', editable:true, editrules:{required:true}, editoptions:{size:20, maxlength:100}},
{name:"middlename", index:"u.middlename", width:80, sortable:true, searchtype:"string", align:'center', editable:true, editrules:{required:true}, editoptions:{size:20, maxlength:100}},
{name:"lastname", index:"u.lastname", width:80, sortable:true, searchtype:"string", align:'center', editable:true, editrules:{required:true}, editoptions:{size:20, maxlength:100}},
{name:"activity", index:"u.activity", width:80, sortable:true, searchtype:"integer", align:'center', editable:true, edittype:"checkbox", editoptions: {value:"1:0", defaultValue:'0'}, formatter:'checkbox'},
{name:"datetime_add", index:"u.datetime_add", width:120, sortable:true, searchtype:"string", align:'center'},
],
subGrid : true,
subGridRowExpanded: function(subgrid_id, row_id) {
var subgrid_table_id, pager_id;
subgrid_table_id = subgrid_id+"_t";
pager_id = "p_"+subgrid_table_id;
$("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>");
jQuery("#"+subgrid_table_id).jqGrid({
url: '<?=$base_url?>admins/users/getUserSites?id='+row_id,
editurl: '<?=$base_url?>admins/users/panelUserSites?user_id='+row_id,
datatype: "json",
colNames:['Номер', 'Сайт', 'Статус', 'Дата установки'],
colModel:[
{name:"site_id", index:'r.site_id', width:10, searchtype:"integer", align:'center'},
{name:"site", index:'s.site', align:'center', width:120, searchtype:"string", edittype:'select', editable:true, editoptions:{dataUrl:'<?=$base_url?>admins/users/getSites?user_id='+row_id}},
{name:"status", index:'r.status', align:'center', width:20, searchtype:"string", editable:true, edittype:"checkbox", editoptions: {value:"1:0", defaultValue:'1'}, formatter:'checkbox'},
{name:"datetime_add", index:"r.datetime_add", width:80, sortable:true, searchtype:"string", align:'center'},
],
rowNum:20,
pager: pager_id,
sortname: 's.site',
sortorder: 'desc',
height: '100%',
width: 1000
});
jQuery("#"+subgrid_table_id).jqGrid('navGrid', "#"+pager_id,
{edit:true,add:true,del:true},
{afterSubmit: function(response) {
var json = response.responseText;
try {
var text = window.JSON.parse(json);
if (typeof(text) != 'undefined') {
return [false, text.message];
} else {
return [true, ''];
}
} catch(e) {
return [true, ''];
}
},
afterShowForm: function(formid) {
$(formid).find('#tr_site').css('display','none');
},
},
{afterSubmit: function(response) {
var json = response.responseText;
try {
var text = window.JSON.parse(json);
if (typeof(text) != 'undefined') {
return [false, text.message];
} else {
return [true, ''];
}
} catch(e) {
return [true, ''];
}
},
afterShowForm: function(formid) {
$(formid).find('#tr_site').css('display','table-row');
},
},
{afterSubmit: function(response) {
var json = response.responseText;
try {
var text = window.JSON.parse(json);
if (typeof(text) != 'undefined') {
return [false, text.message];
} else {
return [true, ''];
}
} catch(e) {
return [true, ''];
}
}
}
)
},
caption: "Пользователи",
rowNum:10,
rowList:[10,20,30],
width:1200,
height: '100%',
pager: '#additional_panel', // Привязка к таблице тулбара
sortname: 'u.type',
viewrecords: true,
sortorder: "desc"
});
jQuery("#table_users").jqGrid('navGrid','#additional_panel', // Управление тулбаром таблицы
{edit:true,add:true,del:true}, // Отключаем от тулбара редактирование, добавление и удаление записей. На тулбаре останутся только две кнопки: "Поиск" и "Обновить"
{afterSubmit: function(response) {
var json = response.responseText;
try {
var text = window.JSON.parse(json);
if (typeof(text) != 'undefined') {
return [false, text.message];
} else {
return [true, ''];
}
} catch(e) {
return [true, ''];
}
}
}, // Опции окон редактирования
{afterSubmit: function(response) {
var json = response.responseText;
try {
var text = window.JSON.parse(json);
if (typeof(text) != 'undefined') {
return [false, text.message];
} else {
return [true, ''];
}
} catch(e) {
return [true, ''];
}
}
},
{afterSubmit: function(response) {
var json = response.responseText;
try {
var text = window.JSON.parse(json);
if (typeof(text) != 'undefined') {
return [false, text.message];
} else {
return [true, ''];
}
} catch(e) {
return [true, ''];
}
}
}
);
</script>
</div>
<?php if (isset($error_message)) { ?>
<div class="warning"><?php echo $error_message;?></div>
<?php } ?>
<form action="<?php echo $auth_url;?>" method="POST">
<table>
<tr>
<td>Логин:</td>
<td><input name="login" type="text" required/></td>
</tr>
<tr>
<td>Пароль:</td>
<td><input name="password" type="password" required/></td>
</tr>
<tr>
<td><input type="submit" value="Войти"/></td>
</tr>
</table>
</form>
</div>
</div>
<footer id="footer">
<p>Copyright (c) barbass 2012</p>
</footer>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<title>TYPOS@ETERSOFT - Сервис опечаток</title>
<!--Скрипты и стили-->
<!--<script src="<?=$base_url;?>javascript/typos.config.js" type="text/javascript"></script>-->
<script src="<?=$base_url;?>javascript/jquery/jquery-1.9.0.min.js" type="text/javascript"></script>
<script src="<?=$base_url;?>javascript/jquery_plugins/jquery-ui/jquery-ui-1.10.3/ui/minified/jquery-ui.min.js" type="text/javascript"></script>
<link type="text/css" href="<?=$base_url;?>javascript/jquery_plugins/jquery-ui/jquery-ui-1.10.3/themes/ui-lightness/jquery-ui-1.10.3.custom.min.css" rel="stylesheet" />
<link type="text/css" href="<?=$base_url;?>stylesheet/stylesheet.css" rel="stylesheet" />
</head>
<body>
<!-- Шапка -->
<div id="head">
<h3> TYPOS </h3>
</div>
<div id="page">
<div id="content">
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>
\ No newline at end of file
<div class="left">
<div id="menu">
<span class="heading">Меню</span>
<div class="items">
<ul>
<?php
if ($items) {
foreach ($items as $item) {
echo "<li>".$item."</li>";
}
}
?>
</ul>
</div>
</div>
</div>
\ No newline at end of file
<div class="body">
<link rel="stylesheet" type="text/css" media="screen" href="<?=$base_url?>javascript/jquery_plugins/jqGrid/4.5.2/css/ui.jqgrid.css" />
<script type="text/javascript" src="<?=$base_url?>javascript/jquery_plugins/jqGrid/4.5.2/js/i18n/grid.locale-ru.js"></script>
<script type="text/javascript" src="<?=$base_url?>javascript/jquery_plugins/jqGrid/4.5.2/js/jquery.jqGrid.min.js"></script>
<script type="text/javascript" src="<?=$base_url?>javascript/jquery_plugins/jqGrid/4.5.2/src/grid.subgrid.js"></script>
<table id="table_sites"></table>
<div id="additional_panel"></div>
<script type="text/javascript">
jQuery("#table_sites").jqGrid({ //Привязка плагина к таблице
url: "<?=$base_url?>users/typos/getListSites", //Получить список сайтов пользователя
editurl: "<?=$base_url?>users/typos/panelSites",
datatype: "json", //Формат скрипта-обработчика
colNames:['Номер', 'Сайт', 'Подписан', 'Статус'],
colModel:[
{name:"site_id", index:'s.site_id', width:10, searchtype:"integer", align:'center'},
{name:"site", index:'s.site', align:'center', width:80, searchtype:"string"},
{name:"rstatus", index:'r.status', editable: true, align:'center', width:20, edittype:"checkbox", editoptions: {value:"1:0"}, searchtype:"integer", formatter:'checkbox'},
{name:"sstatus", index:'s.status', align:'center', width:20, searchtype:"string", formatter:'checkbox'}
],
//Подтаблица с сообщениями об опечатках
subGrid : true,
subGridRowExpanded: function(subgrid_id, row_id) {
//Дополнительные переменные
var subgrid_table_id, pager_id;
subgrid_table_id = subgrid_id+"_t";
pager_id = "p_"+subgrid_table_id;
$("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>");
jQuery("#"+subgrid_table_id).jqGrid({
url: '<?=$base_url?>users/typos/getListMessages?id='+row_id,
editurl: '<?=$base_url?>users/typos/panelMessages?site_id='+row_id,
datatype: "json",
colNames: ['Номер', 'Ссылка', 'Текст', 'Комментарий', 'Дата добавления', 'Статус сообщения'],
colModel: [
{name:"message_id",index:"m.message_id",width:80, searchtype:"integer", align:'center'},
{name:"link",index:"m.link",width:80, sortable:false, searchtype:"string", align:'center', editable:true, editoptions:{size:20, maxlength:300}},
{name:"text",index:"m.text",width:80, sortable:false, searchtype:"string", align:'center', editable:true, editoptions:{size:20, maxlength:30}},
{name:"comment",index:"m.comment",width:80, sortable:false, searchtype:"string", align:'center', editable:true, editoptions:{size:20, maxlength:30}},
{name:"datetime_add",index:"m.datetime_add",width:120, searchtype:"date", align:'center'},
{name:"status",index:"m.status",width:80, editable:true, edittype:"checkbox", editoptions: {value:"1:0"}, searchtype:"integer", align:'center', formatter:'checkbox'},
],
rowNum:20,
pager: pager_id,
sortname: 'm.datetime_add',
sortorder: 'desc',
height: '100%',
width: 1000
});
jQuery("#"+subgrid_table_id).jqGrid(
'navGrid',"#"+pager_id,
{edit:true,add:true,del:true},
{ //Скрываем ненужные поля при редактировании
/*afterShowForm:function() {
$('#tr_link').css('display','none');
$('#tr_text').css('display','none');
$('#tr_comment').css('display','none');
},*/
afterSubmit: function(response) {
var json = response.responseText;
try {
var text = window.JSON.parse(json);
if (typeof(text) != 'undefined') {
return [false, text.message];
} else {
return [true, ''];
}
} catch(e) {
return [true, ''];
}
}
},
{
//При добавлении показываем поля (т.к. редактирование - скрывает их навсегда)
/*afterShowForm:function() {
$('#tr_link').css('display','table-row');
$('#tr_text').css('display','table-row');
$('#tr_comment').css('display','table-row');
},*/
afterSubmit: function(response) {
var json = response.responseText;
try {
var text = window.JSON.parse(json);
if (typeof(text) != 'undefined') {
return [false, text.message];
} else {
return [true, ''];
}
} catch(e) {
return [true, ''];
}
}
},
{
afterSubmit: function(response) {
var json = response.responseText;
try {
var text = window.JSON.parse(json);
if (typeof(text) != 'undefined') {
return [false, text.message];
} else {
return [true, ''];
}
} catch(e) {
return [true, ''];
}
}
}
)
},
caption: "Сайты",
rowNum:10,
rowList:[10,20,30],
width:1200,
height: '100%',
pager: '#additional_panel', //Привязка к таблице тулбара
sortname: 's.site_id',
viewrecords: true,
sortorder: "asc"
});
jQuery("#table_sites").jqGrid(
'navGrid','#additional_panel', //Управление тулбаром таблицы
{edit:true,add:false,del:false}, //Отключаем от тулбара редактирование, добавление и удаление записей. На тулбаре останутся только две кнопки: "Поиск" и "Обновить"
{
afterSubmit: function(response) {
var json = response.responseText;
try {
var text = window.JSON.parse(json);
if (typeof(text) != 'undefined') {
return [false, text.message];
} else {
return [true, ''];
}
} catch(e) {
return [true, ''];
}
}
}
);
</script>
</div>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome to CodeIgniter</title>
<style type="text/css">
::selection{ background-color: #E13300; color: white; }
::moz-selection{ background-color: #E13300; color: white; }
::webkit-selection{ background-color: #E13300; color: white; }
body {
background-color: #fff;
margin: 40px;
font: 13px/20px normal Helvetica, Arial, sans-serif;
color: #4F5155;
}
a {
color: #003399;
background-color: transparent;
font-weight: normal;
}
h1 {
color: #444;
background-color: transparent;
border-bottom: 1px solid #D0D0D0;
font-size: 19px;
font-weight: normal;
margin: 0 0 14px 0;
padding: 14px 15px 10px 15px;
}
code {
font-family: Consolas, Monaco, Courier New, Courier, monospace;
font-size: 12px;
background-color: #f9f9f9;
border: 1px solid #D0D0D0;
color: #002166;
display: block;
margin: 14px 0 14px 0;
padding: 12px 10px 12px 10px;
}
#body{
margin: 0 15px 0 15px;
}
p.footer{
text-align: right;
font-size: 11px;
border-top: 1px solid #D0D0D0;
line-height: 32px;
padding: 0 10px 0 10px;
margin: 20px 0 0 0;
}
#container{
margin: 10px;
border: 1px solid #D0D0D0;
-webkit-box-shadow: 0 0 8px #D0D0D0;
}
</style>
</head>
<body>
<div id="container">
<h1>Welcome to CodeIgniter!</h1>
<div id="body">
<p>The page you are looking at is being generated dynamically by CodeIgniter.</p>
<p>If you would like to edit this page you'll find it located at:</p>
<code>application/views/welcome_message.php</code>
<p>The corresponding controller for this page is found at:</p>
<code>application/controllers/welcome.php</code>
<p>If you are exploring CodeIgniter for the very first time, you should start by reading the <a href="user_guide/">User Guide</a>.</p>
</div>
<p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds</p>
</div>
</body>
</html>
\ No newline at end of file
<?php
/*
*---------------------------------------------------------------
* APPLICATION ENVIRONMENT
*---------------------------------------------------------------
*
* You can load different configurations depending on your
* current environment. Setting the environment also influences
* things like logging and error reporting.
*
* This can be set to anything, but default usage is:
*
* development
* testing
* production
*
* NOTE: If you change these, also change the error_reporting() code below
*
*/
define('ENVIRONMENT', 'development');
/*
*---------------------------------------------------------------
* ERROR REPORTING
*---------------------------------------------------------------
*
* Different environments will require different levels of error reporting.
* By default development will show errors but testing and live will hide them.
*/
if (defined('ENVIRONMENT'))
{
switch (ENVIRONMENT)
{
case 'development':
error_reporting(E_ALL);
break;
case 'testing':
case 'production':
error_reporting(0);
break;
default:
exit('The application environment is not set correctly.');
}
}
/*
*---------------------------------------------------------------
* SYSTEM FOLDER NAME
*---------------------------------------------------------------
*
* This variable must contain the name of your "system" folder.
* Include the path if the folder is not in the same directory
* as this file.
*
*/
$system_path = 'system';
/*
*---------------------------------------------------------------
* APPLICATION FOLDER NAME
*---------------------------------------------------------------
*
* If you want this front controller to use a different "application"
* folder then the default one you can set its name here. The folder
* can also be renamed or relocated anywhere on your server. If
* you do, use a full server path. For more info please see the user guide:
* http://codeigniter.com/user_guide/general/managing_apps.html
*
* NO TRAILING SLASH!
*
*/
$application_folder = 'application';
/*
* --------------------------------------------------------------------
* DEFAULT CONTROLLER
* --------------------------------------------------------------------
*
* Normally you will set your default controller in the routes.php file.
* You can, however, force a custom routing by hard-coding a
* specific controller class/function here. For most applications, you
* WILL NOT set your routing here, but it's an option for those
* special instances where you might want to override the standard
* routing in a specific front controller that shares a common CI installation.
*
* IMPORTANT: If you set the routing here, NO OTHER controller will be
* callable. In essence, this preference limits your application to ONE
* specific controller. Leave the function name blank if you need
* to call functions dynamically via the URI.
*
* Un-comment the $routing array below to use this feature
*
*/
// The directory name, relative to the "controllers" folder. Leave blank
// if your controller is not in a sub-folder within the "controllers" folder
// $routing['directory'] = '';
// The controller class file name. Example: Mycontroller
// $routing['controller'] = '';
// The controller function you wish to be called.
// $routing['function'] = '';
/*
* -------------------------------------------------------------------
* CUSTOM CONFIG VALUES
* -------------------------------------------------------------------
*
* The $assign_to_config array below will be passed dynamically to the
* config class when initialized. This allows you to set custom config
* items or override any default config values found in the config.php file.
* This can be handy as it permits you to share one application between
* multiple front controller files, with each file containing different
* config values.
*
* Un-comment the $assign_to_config array below to use this feature
*
*/
// $assign_to_config['name_of_config_item'] = 'value of config item';
// --------------------------------------------------------------------
// END OF USER CONFIGURABLE SETTINGS. DO NOT EDIT BELOW THIS LINE
// --------------------------------------------------------------------
/*
* ---------------------------------------------------------------
* Resolve the system path for increased reliability
* ---------------------------------------------------------------
*/
// Set the current directory correctly for CLI requests
if (defined('STDIN'))
{
chdir(dirname(__FILE__));
}
if (realpath($system_path) !== FALSE)
{
$system_path = realpath($system_path).'/';
}
// ensure there's a trailing slash
$system_path = rtrim($system_path, '/').'/';
// Is the system path correct?
if ( ! is_dir($system_path))
{
exit("Your system folder path does not appear to be set correctly. Please open the following file and correct this: ".pathinfo(__FILE__, PATHINFO_BASENAME));
}
/*
* -------------------------------------------------------------------
* Now that we know the path, set the main path constants
* -------------------------------------------------------------------
*/
// The name of THIS file
define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));
// The PHP file extension
// this global constant is deprecated.
define('EXT', '.php');
// Path to the system folder
define('BASEPATH', str_replace("\\", "/", $system_path));
// Path to the front controller (this file)
define('FCPATH', str_replace(SELF, '', __FILE__));
// Name of the "system folder"
define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/'));
// The path to the "application" folder
if (is_dir($application_folder))
{
define('APPPATH', $application_folder.'/');
}
else
{
if ( ! is_dir(BASEPATH.$application_folder.'/'))
{
exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: ".SELF);
}
define('APPPATH', BASEPATH.$application_folder.'/');
}
/*
* --------------------------------------------------------------------
* LOAD THE BOOTSTRAP FILE
* --------------------------------------------------------------------
*
* And away we go...
*
*/
require_once BASEPATH.'core/CodeIgniter.php';
/* End of file index.php */
/* Location: ./index.php */
\ No newline at end of file
/* Плагин: сервис опечаток от компании Etersoft
* email: info@etersoft.ru
* автор: barbass@etersoft.ru
* дата: 2012-04-18
*/
function ETYPOS(options) {
this.init(options);
}
ETYPOS.prototype = {
//время последнего запроса
last_query_time: 0,
//сайт обработки опечаток
server_url: "http://localhost/typoservice/server/processData",
//текст ошибок
error: '',
//язык по умочланияю
default_language: 'ru',
//данные для отправки (сайт страницы, текст с ошибкой, комментарий, язык, броузер)
userdata: {
'url': '',
'text': '',
'comment': '',
'language': this.default_language,
},
//перевод строк по-умолчанию
language: {
'ru': {
'error_url': 'Не определен URL сайта',
'error_text': 'Текст не выделен',
'error_text_length': 'Длина текста должна быть от %s до %s символов (сейчас: %s)',
'error_comment': 'Длина комментария должна быть до 30 символов (сейчас: %s)',
'error_time_activity': 'Вы слишком часто отправляете данные',
'error_response': 'Ошибка при получении ответа',
'error_parse_reposnse': 'Ошибка при обработке ответа',
'error_post_data': 'Ошибка отправки данных. Повторите позже',
'error_userdata': 'userdata is not Object',
'text_post_data': 'Идет отправка данных...',
'text_success': 'Спасибо за ваше внимание!',
}
},
init: function(options) {
this.options = (options) ? options : {};
if (this.options['server_url']) {
this.server_url = this.options['server_url'];
}
if (this.options['language']) {
if (this.language[this.options['language']]) {
this.default_language = this.options['language'];
this.userdata['language'] = this.default_language;
}
}
this.request = new (window.XDomainRequest || window.XMLHttpRequest);
},
/*Получаем выделенный текст*/
getSelectText: function() {
return (window.getSelection()) ? String(window.getSelection()) : '';
},
/*Скрытие/показ окна*/
controlPanel: function() {
(document.querySelector(".e_typos_div").style.display == "block") ? this.closeWindow() : this.openWindow();
},
/*Открытие окна*/
openWindow: function() {
var main_div = document.querySelector(".e_typos_div");
//Определяем на какой позиции X, Y всплывет элемент
var top = window.pageYOffset + window.innerHeight/3;
var left = window.pageXOffset + window.innerWidth/3;
main_div.style.top = top + "px";
main_div.style.left = left + "px";
main_div.style.display = "none";
main_div.querySelector(".e_typos_comment").value = "";
main_div.querySelector(".e_typos_message").innerHTML = "";
main_div.style.display = "block";
},
/*Закрытия окна*/
closeWindow: function() {
document.querySelector(".e_typos_div").style.display = "none";
},
/*Проверка данных перед отправкой*/
validateData: function() {
if (typeof(this.userdata) != 'object') {
throw new Error(this.language[this.default_language]['error_userdata']);
return false;
}
if (this.userdata['url'] == '') {
this.error = this.language[this.default_language]['error_url'];
return false;
}
if (!this.userdata['language']) {
this.userdata['language'] = this.default_language;
}
if (!this.userdata['text']) {
this.error = this.language[this.default_language]['error_text'];
return false;
}
if (this.userdata['text'].length < 5 || this.userdata['text'].length > 30) {
this.error = this.sprintf(this.language[this.default_language]['error_text_length'], [5, 30, this.userdata['text'].length]);
return false;
}
if (this.userdata['comment'].length > 30) {
this.error = this.sprintf(this.language[this.default_language]['error_comment'], [this.userdata['comment'].length]);
return false;
}
return true;
},
/*Сбор данных*/
postData: function() {
this.userdata['url'] = window.location.href;
this.userdata['text'] = this.getSelectText();
this.userdata['comment'] = (document.querySelector(".e_typos_div .e_typos_comment")) ? document.querySelector(".e_typos_div .e_typos_comment").value : '';
try {
if (!this.validateData()) {
this.printMessage('error', this.error);
return false;
}
} catch(error) {
this.printMessage('error', error.message);
return false;
}
this.ajaxQuery();
},
/*Создание формы с данными*/
formData: function() {
if (!FormData()) {
throw new Error("FormData() not found");
return false;
}
var form_data = new FormData();
for(var key in this.userdata) {
form_data.append(key, this.userdata[key]);
}
return form_data;
},
/*Отправка запроса*/
ajaxQuery: function() {
var this_object = this;
try {
var form_data = this.formData();
} catch (error) {
this.printMessage("error", error.message);
return false;
}
if (!this.validateRightTime()) {
this.printMessage("error", this.language[this.default_language]['error_time_activity']);
return false;
} else {
this.last_query_time = this.getTime();
this.setStorage("etypos/"+window.location.hostname+"", this.getTime());
}
this.printMessage("attention", this.language[this.default_language]['text_post_data']);
this.request.open("POST", this.server_url, true);
this.request.onload = function() {
try {
var response = window.JSON.parse(this_object.request.responseText);
if (response['success'] && response['message']) {
if (response['success'] == 'true') {
var success = 'success';
} else {
var success = 'error';
}
this_object.printMessage(success, response['message']);
} else {
this_object.printMessage('attention', this_object.language[this_object.default_language]['error_response']);
}
} catch (e) {
this_object.printMessage('error', this_object.language[this_object.default_language]['error_response_parse']);
}
};
this.request.onerror = function() {
this_object.printMessage("error", this_object.language[this_object.default_language]['error_post_data']);
};
this.request.send(form_data);
return;
},
/*Печатаем сообщение пользователю в окно*/
printMessage: function(status, text) {
document.querySelector(".e_typos_div .e_typos_message").innerHTML = "<span class='"+status+"'>"+text+"</span>";
},
//Вывод текста, выделенного пользователем
printUserText: function(text) {
document.querySelector(".e_typos_div .e_typos_user_text").style.display = "block";
document.querySelector(".e_typos_div .e_typos_user_text").innerHTML = "Ваш текст: "+text;
},
/*Проверяем время, прошедшее с последнего отправления данных*/
validateRightTime: function() {return true;
var prev_time = (parseInt(this.getStorage("etypos/"+window.location.hostname))) ? parseInt(this.getStorage("etypos/"+window.location.hostname)) : parseInt(this.last_query_time);
if (isNaN(prev_time)) {
return true;
}
if ((this.getTime() - prev_time) < 60000) {
return false;
}
return true;
},
/*Получаем текущее время*/
getTime: function() {
return new Date().getTime();
},
/*Получаем из sessionStorage данные*/
getStorage: function(key) {
if (window['sessionStorage']) {
return (sessionStorage.getItem(key)) ? sessionStorage.getItem(key) : false;
} else {
return false;
}
},
/*Устанавливаем в sessionStorage данные*/
setStorage: function(key, data) {
if (window['sessionStorage']) {
sessionStorage.setItem(key+"", data);
return true;
}
return false;
},
/*Элементарный аналог php-ой функции sprintf*/
sprintf: function(string, data) {
if (typeof(string) != 'string') {return false;}
if (typeof(data) != 'object') {return false;}
var str_array = string.split('%s', data.length+1);
if ((str_array.length-1) != data.length) {return false;}
var new_string = '';
for(var i=0; i<(str_array.length); i++) {
if (!data[i]) {data[i] = "";}
new_string += str_array[i]+data[i]+"";
}
return new_string;
}
};
ETYPOS.prototype.language['ru'] = {
'error_url': 'Не определен URL сайта',
'error_text': 'Текст не выделен',
'error_text_length': 'Длина текста должна быть от %s до %s символов (сейчас: %s)',
'error_comment': 'Длина комментария должна быть до 30 символов (сейчас: %s)',
'error_time_activity': 'Вы слишком часто отправляете данные',
'error_response': 'Ошибка при получении ответа',
'error_response_parse': 'Ошибка при обработке ответа',
'error_post_data': 'Ошибка отправки данных. Повторите позже',
'error_userdata': 'userdata is not Object',
'text_post_data': 'Идет отправка данных...',
'text_success': 'Спасибо за ваше внимание!',
};
<html>
<head>
<meta charset="utf-8" />
<title>Сервис опечаток</title>
<script src="etersoft_typos.js"></script>
<script src="etersoft_typos_language-ru.js"></script>
<link type="text/css" href="stylesheet.css" rel="stylesheet" />
</head>
<body>
<script type='text/javascript'>
window.onload = function() {
var typos = new ETYPOS();
document.querySelectorAll('.e_typos_div .e_typos_close')[0].addEventListener('click', function() {typos.closeWindow();}, false);
document.querySelectorAll('.e_typos_div .e_typos_close')[1].addEventListener('click', function() {typos.closeWindow();}, false);
document.querySelector('.e_typos_div .e_typos_post').addEventListener('click', function() {typos.postData();}, false);
window.document.onkeydown = function(e) {
if (e.ctrlKey == 1 && e.keyCode == 13) {
typos.controlPanel();
}
};
}
</script>
<div class="e_typos_div">
<div class="e_typos_title">
<span>Сервис опечаток</span>
<span title="Закрыть окно" class="e_typos_close"><b>х</b></span>
</div>
<p class="e_typos_desc">Выделите текст и нажмите кнопку "Отправить"</p>
<p>
<nobr>Комментарий: <input type="text" class="e_typos_comment" size='19' maxlength="50" placeholder="Должна быть буква..."/></nobr>
</p>
<p class="e_typos_message"></p>
<p class='e_typos_controll_buttons'>
<input type="button" title="Отправить сообщение об опечатке" value="Отправить" class="e_typos_button e_typos_post" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="button" title="Закрыть окно" value="Закрыть" class="e_typos_button e_typos_close" />
</p>
</div>
<div>
Казахста́н (официально Респу́блика Казахста́н, каз. Қазақстан [qɑzɑqˈstɑn]) — государство, располагающееся в центре Евразии, бо́льшая часть которого относится к Азии, а меньшая — к Европе, Казахстан располагается между Каспийским морем, Нижним Поволжьем, Уралом, Сибирью, Китаем и Средней Азией.
По площади территории занимает девятое место среди государств мира (2 млн 724,9 тыс. км²). Расположение: от восточной окраины дельты Волги на западе до Алтайских гор на востоке, от Западно-Сибирской равнины и южной оконечности Урала на севере до Тянь-Шаньской горной системы и пустыни Кызылкум на юге страны.
Граничит на севере и западе с Россией — 7548,1 км, на востоке — с Китаем — 1782,8 км, на юге — с Киргизией — 1241,6 км, Узбекистаном — 2351,4 км и Туркменией — 426,0 км. Общая протяженность сухопутных границ — 13392,6 км[1]. Омывается водами внутриконтинентальных Каспийского и Аральского морей. Казахстан — крупнейшая страна, не имеющая выхода в Мировой океан.
В административно-территориальном отношении делится на 14 областей и 2 города республиканского значения. Экономико-географически делится на Центральный, Западный, Восточный, Северный и Южный регионы
</div>
</body>
.e_typos_div {
display:none;
z-index:10000;
position:absolute;
font-family: Arial, Sans-Serif;
font-size: 15px;
background-color: white;
padding: 1px 3px 3px 3px;
width:350px;
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5);
text-align: center;
-moz-user-select: none;
-webkit-user-select: none;
border: 1px solid #4169e1;
}
.e_typos_div .e_typos_title {
text-align: left;
padding: 0.5em 0.5em 0.5em 1em;
background: #4169e1;
color: white;
margin-top: 2px;
}
.e_typos_div .e_typos_title .e_typos_close {
cursor: pointer;
opacity: 0.5;
margin-left: 190px;
}
.e_typos_div .e_typos_title .e_typos_close:hover {
opacity: 1;
}
.e_typos_div .e_typos_desc {
font-size: 13px;
}
.e_typos_div input {
font-family: Arial, Sans-Serif;
font-size: 13px;
margin-bottom: 5px;
padding: 3px;
}
.e_typos_div .e_typos_message .error {
color: red;
}
.e_typos_div .e_typos_message .success {
color: green;
}
.e_typos_div .e_typos_message .attention {
color: blue;
}
.e_typos_div .e_typos_controll_buttons .e_typos_button {
border-radius: 10px;
border: 1px solid #d0d0d0;
background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0), rgba(0, 0, 0, 0.2));
background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0), rgba(0, 0, 0, 0.2));
background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0), rgba(0, 0, 0, 0.2));
background-image: -ms-linear-gradient(top, rgba(255, 255, 255, 0), rgba(0, 0, 0, 0.2));
background-image: linear-gradient(top, rgba(255, 255, 255, 0), rgba(0, 0, 0, 0.2));
background-color:#FFFFFF !important;
}
.e_typos_div .e_typos_controll_buttons .e_typos_button:hover {
border: 1px solid #d0d0d0;
background-color:#DDDDDD !important;
border-radius: 10px;
}
<?xml version="1.0"?>
<bindings
xmlns="http://www.mozilla.org/xbl"
xmlns:xbl="http://www.mozilla.org/xbl"
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<binding id="ellipsis">
<content>
<xul:window><!-- xul:window tag required for FF2 -->
<xul:description crop="end" xbl:inherits="value=xbl:text"><children/></xul:description>
</xul:window>
</content>
</binding>
</bindings>
;(function($){
/**
* jqGrid Arabic Translation
*
* http://trirand.com/blog/
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
**/
$.jgrid = $.jgrid || {};
$.extend($.jgrid,{
defaults : {
recordtext: "تسجيل {0} - {1} على {2}",
emptyrecords: "لا يوجد تسجيل",
loadtext: "تحميل...",
pgtext : "صفحة {0} على {1}"
},
search : {
caption: "بحث...",
Find: "بحث",
Reset: "إلغاء",
odata: [{ oper:'eq', text:"يساوي"},{ oper:'ne', text:"يختلف"},{ oper:'lt', text:"أقل"},{ oper:'le', text:"أقل أو يساوي"},{ oper:'gt', text:"أكبر"},{ oper:'ge', text:"أكبر أو يساوي"},{ oper:'bw', text:"يبدأ بـ"},{ oper:'bn', text:"لا يبدأ بـ"},{ oper:'in', text:"est dans"},{ oper:'ni', text:"n'est pas dans"},{ oper:'ew', text:"ينته بـ"},{ oper:'en', text:"لا ينته بـ"},{ oper:'cn', text:"يحتوي"},{ oper:'nc', text:"لا يحتوي"}],
groupOps: [ { op: "مع", text: "الكل" }, { op: "أو", text: "لا أحد" } ]
},
edit : {
addCaption: "اضافة",
editCaption: "تحديث",
bSubmit: "تثبيث",
bCancel: "إلغاء",
bClose: "غلق",
saveData: "تغيرت المعطيات هل تريد التسجيل ?",
bYes: "نعم",
bNo: "لا",
bExit: "إلغاء",
msg: {
required: "خانة إجبارية",
number: "سجل رقم صحيح",
minValue: "يجب أن تكون القيمة أكبر أو تساوي 0",
maxValue: "يجب أن تكون القيمة أقل أو تساوي 0",
email: "بريد غير صحيح",
integer: "سجل عدد طبييعي صحيح",
url: "ليس عنوانا صحيحا. البداية الصحيحة ('http://' أو 'https://')",
nodefined : " ليس محدد!",
novalue : " قيمة الرجوع مطلوبة!",
customarray : "يجب على الدالة الشخصية أن تنتج جدولا",
customfcheck : "الدالة الشخصية مطلوبة في حالة التحقق الشخصي"
}
},
view : {
caption: "رأيت التسجيلات",
bClose: "غلق"
},
del : {
caption: "حذف",
msg: "حذف التسجيلات المختارة ?",
bSubmit: "حذف",
bCancel: "إلغاء"
},
nav : {
edittext: " ",
edittitle: "تغيير التسجيل المختار",
addtext:" ",
addtitle: "إضافة تسجيل",
deltext: " ",
deltitle: "حذف التسجيل المختار",
searchtext: " ",
searchtitle: "بحث عن تسجيل",
refreshtext: "",
refreshtitle: "تحديث الجدول",
alertcap: "تحذير",
alerttext: "يرجى إختيار السطر",
viewtext: "",
viewtitle: "إظهار السطر المختار"
},
col : {
caption: "إظهار/إخفاء الأعمدة",
bSubmit: "تثبيث",
bCancel: "إلغاء"
},
errors : {
errcap : "خطأ",
nourl : "لا يوجد عنوان محدد",
norecords: "لا يوجد تسجيل للمعالجة",
model : "عدد العناوين (colNames) <> عدد التسجيلات (colModel)!"
},
formatter : {
integer : {thousandsSeparator: " ", defaultValue: '0'},
number : {decimalSeparator:",", thousandsSeparator: " ", decimalPlaces: 2, defaultValue: '0,00'},
currency : {decimalSeparator:",", thousandsSeparator: " ", decimalPlaces: 2, prefix: "", suffix:"", defaultValue: '0,00'},
date : {
dayNames: [
"الأحد", "الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت",
"الأحد", "الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"
],
monthNames: [
"جانفي", "فيفري", "مارس", "أفريل", "ماي", "جوان", "جويلية", "أوت", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر",
"جانفي", "فيفري", "مارس", "أفريل", "ماي", "جوان", "جويلية", "أوت", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"
],
AmPm : ["صباحا","مساءا","صباحا","مساءا"],
S: function (j) {return j == 1 ? 'er' : 'e';},
srcformat: 'Y-m-d',
newformat: 'd/m/Y',
parseRe : /[Tt\\\/:_;.,\t\s-]/,
masks : {
ISO8601Long:"Y-m-d H:i:s",
ISO8601Short:"Y-m-d",
ShortDate: "n/j/Y",
LongDate: "l, F d, Y",
FullDateTime: "l, F d, Y g:i:s A",
MonthDay: "F d",
ShortTime: "g:i A",
LongTime: "g:i:s A",
SortableDateTime: "Y-m-d\\TH:i:s",
UniversalSortableDateTime: "Y-m-d H:i:sO",
YearMonth: "F, Y"
},
reformatAfterEdit : false
},
baseLinkUrl: '',
showAction: '',
target: '',
checkbox : {disabled:true},
idName : 'id'
}
});
})(jQuery);
;(function($){
/**
* jqGrid Bulgarian Translation
* Tony Tomov tony@trirand.com
* http://trirand.com/blog/
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
**/
$.jgrid = $.jgrid || {};
$.extend($.jgrid,{
defaults : {
recordtext: "{0} - {1} от {2}",
emptyrecords: "Няма запис(и)",
loadtext: "Зареждам...",
pgtext : "Стр. {0} от {1}"
},
search : {
caption: "Търсене...",
Find: "Намери",
Reset: "Изчисти",
odata: [{ oper:'eq', text:"равно"},{ oper:'ne', text:"различно"},{ oper:'lt', text:"по-малко"},{ oper:'le', text:"по-малко или="},{ oper:'gt', text:"по-голямо"},{ oper:'ge', text:"по-голямо или ="},{ oper:'bw', text:"започва с"},{ oper:'bn', text:"не започва с"},{ oper:'in', text:"се намира в"},{ oper:'ni', text:"не се намира в"},{ oper:'ew', text:"завършва с"},{ oper:'en', text:"не завършава с"},{ oper:'cn', text:"съдържа"},{ oper:'nc', text:"не съдържа"}],
groupOps: [ { op: "AND", text: "&nbsp;И " }, { op: "OR", text: "ИЛИ" } ]
},
edit : {
addCaption: "Нов Запис",
editCaption: "Редакция Запис",
bSubmit: "Запиши",
bCancel: "Изход",
bClose: "Затвори",
saveData: "Данните са променени! Да съхраня ли промените?",
bYes : "Да",
bNo : "Не",
bExit : "Отказ",
msg: {
required:"Полето е задължително",
number:"Въведете валидно число!",
minValue:"стойността трябва да е по-голяма или равна от",
maxValue:"стойността трябва да е по-малка или равна от",
email: "не е валиден ел. адрес",
integer: "Въведете валидно цяло число",
date: "Въведете валидна дата",
url: "e невалиден URL. Изискава се префикс('http://' или 'https://')",
nodefined : " е недефинирана!",
novalue : " изисква връщане на стойност!",
customarray : "Потреб. Функция трябва да върне масив!",
customfcheck : "Потребителска функция е задължителна при този тип елемент!"
}
},
view : {
caption: "Преглед запис",
bClose: "Затвори"
},
del : {
caption: "Изтриване",
msg: "Да изтрия ли избраният запис?",
bSubmit: "Изтрий",
bCancel: "Отказ"
},
nav : {
edittext: " ",
edittitle: "Редакция избран запис",
addtext:" ",
addtitle: "Добавяне нов запис",
deltext: " ",
deltitle: "Изтриване избран запис",
searchtext: " ",
searchtitle: "Търсене запис(и)",
refreshtext: "",
refreshtitle: "Обнови таблица",
alertcap: "Предупреждение",
alerttext: "Моля, изберете запис",
viewtext: "",
viewtitle: "Преглед избран запис"
},
col : {
caption: "Избери колони",
bSubmit: "Ок",
bCancel: "Изход"
},
errors : {
errcap : "Грешка",
nourl : "Няма посочен url адрес",
norecords: "Няма запис за обработка",
model : "Модела не съответства на имената!"
},
formatter : {
integer : {thousandsSeparator: " ", defaultValue: '0'},
number : {decimalSeparator:".", thousandsSeparator: " ", decimalPlaces: 2, defaultValue: '0.00'},
currency : {decimalSeparator:".", thousandsSeparator: " ", decimalPlaces: 2, prefix: "", suffix:" лв.", defaultValue: '0.00'},
date : {
dayNames: [
"Нед", "Пон", "Вт", "Ср", "Чет", "Пет", "Съб",
"Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота"
],
monthNames: [
"Яну", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Нов", "Дек",
"Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"
],
AmPm : ["","","",""],
S: function (j) {
if(j==7 || j==8 || j== 27 || j== 28) {
return 'ми';
}
return ['ви', 'ри', 'ти'][Math.min((j - 1) % 10, 2)];
},
srcformat: 'Y-m-d',
newformat: 'd/m/Y',
parseRe : /[Tt\\\/:_;.,\t\s-]/,
masks : {
ISO8601Long:"Y-m-d H:i:s",
ISO8601Short:"Y-m-d",
ShortDate: "n/j/Y",
LongDate: "l, F d, Y",
FullDateTime: "l, F d, Y g:i:s A",
MonthDay: "F d",
ShortTime: "g:i A",
LongTime: "g:i:s A",
SortableDateTime: "Y-m-d\\TH:i:s",
UniversalSortableDateTime: "Y-m-d H:i:sO",
YearMonth: "F, Y"
},
reformatAfterEdit : false
},
baseLinkUrl: '',
showAction: '',
target: '',
checkbox : {disabled:true},
idName : 'id'
}
});
})(jQuery);
;(function($){
/**
* jqGrid Bulgarian Translation
* Tony Tomov tony@trirand.com
* http://trirand.com/blog/
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
**/
$.jgrid = $.jgrid || {};
$.extend($.jgrid,{
defaults : {
recordtext: "{0} - {1} �� {2}",
emptyrecords: "���� �����(�)",
loadtext: "��������...",
pgtext : "���. {0} �� {1}"
},
search : {
caption: "�������...",
Find: "������",
Reset: "�������",
odata : [{ oper:'eq', text:'�����'}, { oper:'ne', text:'��������'}, { oper:'lt', text:'��-�����'}, { oper:'le', text:'��-����� ���='},{ oper:'gt', text:'��-������'},{ oper:'ge', text:'��-������ ��� ='}, { oper:'bw', text:'������� �'},{ oper:'bn', text:'�� ������� �'},{ oper:'in', text:'�� ������ �'},{ oper:'ni', text:'�� �� ������ �'},{ oper:'ew', text:'�������� �'},{ oper:'en', text:'�� ��������� �'},,{ oper:'cn', text:'�������'}, ,{ oper:'nc', text:'�� �������'} ],
groupOps: [ { op: "AND", text: " � " }, { op: "OR", text: "���" } ]
},
edit : {
addCaption: "��� �����",
editCaption: "�������� �����",
bSubmit: "������",
bCancel: "�����",
bClose: "�������",
saveData: "������� �� ���������! �� ������� �� ���������?",
bYes : "��",
bNo : "��",
bExit : "�����",
msg: {
required:"������ � ������������",
number:"�������� ������� �����!",
minValue:"���������� ������ �� � ��-������ ��� ����� ��",
maxValue:"���������� ������ �� � ��-����� ��� ����� ��",
email: "�� � ������� ��. �����",
integer: "�������� ������� ���� �����",
date: "�������� ������� ����",
url: "e ��������� URL. �������� �� �������('http://' ��� 'https://')",
nodefined : " � ������������!",
novalue : " ������� ������� �� ��������!",
customarray : "������. ������� ������ �� ����� �����!",
customfcheck : "������������� ������� � ������������ ��� ���� ��� �������!"
}
},
view : {
caption: "������� �����",
bClose: "�������"
},
del : {
caption: "���������",
msg: "�� ������ �� ��������� �����?",
bSubmit: "������",
bCancel: "�����"
},
nav : {
edittext: " ",
edittitle: "�������� ������ �����",
addtext:" ",
addtitle: "�������� ��� �����",
deltext: " ",
deltitle: "��������� ������ �����",
searchtext: " ",
searchtitle: "������� �����(�)",
refreshtext: "",
refreshtitle: "������ �������",
alertcap: "��������������",
alerttext: "����, �������� �����",
viewtext: "",
viewtitle: "������� ������ �����"
},
col : {
caption: "����� ������",
bSubmit: "��",
bCancel: "�����"
},
errors : {
errcap : "������",
nourl : "���� ������� url �����",
norecords: "���� ����� �� ���������",
model : "������ �� ����������� �� �������!"
},
formatter : {
integer : {thousandsSeparator: " ", defaultValue: '0'},
number : {decimalSeparator:".", thousandsSeparator: " ", decimalPlaces: 2, defaultValue: '0.00'},
currency : {decimalSeparator:".", thousandsSeparator: " ", decimalPlaces: 2, prefix: "", suffix:" ��.", defaultValue: '0.00'},
date : {
dayNames: [
"���", "���", "��", "��", "���", "���", "���",
"������", "����������", "�������", "�����", "���������", "�����", "������"
],
monthNames: [
"���", "���", "���", "���", "���", "���", "���", "���", "���", "���", "���", "���",
"������", "��������", "����", "�����", "���", "���", "���", "������", "���������", "��������", "�������", "��������"
],
AmPm : ["","","",""],
S: function (j) {
if(j==7 || j==8 || j== 27 || j== 28) {
return '��';
}
return ['��', '��', '��'][Math.min((j - 1) % 10, 2)];
},
srcformat: 'Y-m-d',
newformat: 'd/m/Y',
parseRe : /[Tt\\\/:_;.,\t\s-]/,
masks : {
ISO8601Long:"Y-m-d H:i:s",
ISO8601Short:"Y-m-d",
ShortDate: "n/j/Y",
LongDate: "l, F d, Y",
FullDateTime: "l, F d, Y g:i:s A",
MonthDay: "F d",
ShortTime: "g:i A",
LongTime: "g:i:s A",
SortableDateTime: "Y-m-d\\TH:i:s",
UniversalSortableDateTime: "Y-m-d H:i:sO",
YearMonth: "F, Y"
},
reformatAfterEdit : false
},
baseLinkUrl: '',
showAction: '',
target: '',
checkbox : {disabled:true},
idName : 'id'
}
});
})(jQuery);
;(function($){
/**
* jqGrid Catalan Translation
* Traducció jqGrid en Catatà per Faserline, S.L.
* http://www.faserline.com
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
**/
$.jgrid = $.jgrid || {};
$.extend($.jgrid,{
defaults : {
recordtext: "Mostrant {0} - {1} de {2}",
emptyrecords: "Sense registres que mostrar",
loadtext: "Carregant...",
pgtext : "Pàgina {0} de {1}"
},
search : {
caption: "Cerca...",
Find: "Cercar",
Reset: "Buidar",
odata: [{ oper:'eq', text:"equal"},{ oper:'ne', text:"not equal"},{ oper:'lt', text:"less"},{ oper:'le', text:"less or equal"},{ oper:'gt', text:"greater"},{ oper:'ge', text:"greater or equal"},{ oper:'bw', text:"begins with"},{ oper:'bn', text:"does not begin with"},{ oper:'in', text:"is in"},{ oper:'ni', text:"is not in"},{ oper:'ew', text:"ends with"},{ oper:'en', text:"does not end with"},{ oper:'cn', text:"contains"},{ oper:'nc', text:"does not contain"}],
groupOps: [ { op: "AND", text: "tot" }, { op: "OR", text: "qualsevol" } ]
},
edit : {
addCaption: "Afegir registre",
editCaption: "Modificar registre",
bSubmit: "Guardar",
bCancel: "Cancelar",
bClose: "Tancar",
saveData: "Les dades han canviat. Guardar canvis?",
bYes : "Yes",
bNo : "No",
bExit : "Cancel",
msg: {
required:"Camp obligatori",
number:"Introdueixi un nombre",
minValue:"El valor ha de ser major o igual que ",
maxValue:"El valor ha de ser menor o igual a ",
email: "no és una direcció de correu vàlida",
integer: "Introdueixi un valor enter",
date: "Introdueixi una data correcta ",
url: "no és una URL vàlida. Prefix requerit ('http://' or 'https://')",
nodefined : " is not defined!",
novalue : " return value is required!",
customarray : "Custom function should return array!",
customfcheck : "Custom function should be present in case of custom checking!"
}
},
view : {
caption: "Veure registre",
bClose: "Tancar"
},
del : {
caption: "Eliminar",
msg: "¿Desitja eliminar els registres seleccionats?",
bSubmit: "Eliminar",
bCancel: "Cancelar"
},
nav : {
edittext: " ",
edittitle: "Modificar fila seleccionada",
addtext:" ",
addtitle: "Agregar nova fila",
deltext: " ",
deltitle: "Eliminar fila seleccionada",
searchtext: " ",
searchtitle: "Cercar informació",
refreshtext: "",
refreshtitle: "Refrescar taula",
alertcap: "Avís",
alerttext: "Seleccioni una fila",
viewtext: " ",
viewtitle: "Veure fila seleccionada"
},
// setcolumns module
col : {
caption: "Mostrar/ocultar columnes",
bSubmit: "Enviar",
bCancel: "Cancelar"
},
errors : {
errcap : "Error",
nourl : "No s'ha especificat una URL",
norecords: "No hi ha dades per processar",
model : "Les columnes de noms són diferents de les columnes del model"
},
formatter : {
integer : {thousandsSeparator: ".", defaultValue: '0'},
number : {decimalSeparator:",", thousandsSeparator: ".", decimalPlaces: 2, defaultValue: '0,00'},
currency : {decimalSeparator:",", thousandsSeparator: ".", decimalPlaces: 2, prefix: "", suffix:"", defaultValue: '0,00'},
date : {
dayNames: [
"Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds",
"Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte"
],
monthNames: [
"Gen", "Febr", "Març", "Abr", "Maig", "Juny", "Jul", "Ag", "Set", "Oct", "Nov", "Des",
"Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"
],
AmPm : ["am","pm","AM","PM"],
S: function (j) {return j < 11 || j > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((j - 1) % 10, 3)] : 'th'},
srcformat: 'Y-m-d',
newformat: 'd-m-Y',
parseRe : /[Tt\\\/:_;.,\t\s-]/,
masks : {
ISO8601Long:"Y-m-d H:i:s",
ISO8601Short:"Y-m-d",
ShortDate: "n/j/Y",
LongDate: "l, F d, Y",
FullDateTime: "l, F d, Y g:i:s A",
MonthDay: "F d",
ShortTime: "g:i A",
LongTime: "g:i:s A",
SortableDateTime: "Y-m-d\\TH:i:s",
UniversalSortableDateTime: "Y-m-d H:i:sO",
YearMonth: "F, Y"
},
reformatAfterEdit : false
},
baseLinkUrl: '',
showAction: 'show',
target: '',
checkbox : {disabled:true},
idName : 'id'
}
});
})(jQuery);
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment