Commit bd760e55 by 冷斌

init

parent 233855e4
<?php
header("Content-type: text/html; charset=utf-8");
//清文件缓存
$dirs = array('./_runtime/');
//清理缓存
foreach($dirs as $value) {
rmdirr($value);
echo "<div style='border:2px solid green; background:#f1f1f1; padding:20px;margin:20px auto;width:800px;font-weight:bold;color:green;text-align:center;'>\"".$value."\" 成功清除缓存! </div> <br /><br />";
}
@mkdir('_runtime',0777,true);
function rmdirr($dirname) {
if (!file_exists($dirname)) {
return false;
}
if (is_file($dirname) || is_link($dirname)) {
return unlink($dirname);
}
$dir = dir($dirname);
if($dir){
while (false !== $entry = $dir->read()) {
if ($entry == '.' || $entry == '..') {
continue;
}
rmdirr($dirname . DIRECTORY_SEPARATOR . $entry);
}
}
$dir->close();
return rmdir($dirname);
}
function U(){
return false;
}
?>
\ No newline at end of file
{
"name": "eduline/el3-plus",
"description": "eduline-plus",
"require": {
"overtrue/wechat": "~3.1",
"qiniu/php-sdk": "^7.2",
"phpoffice/phpspreadsheet": "^1.1",
"aliyuncs/oss-sdk-php": "^2.3",
"phpoffice/phpword": "^0.16.0",
"baidubce/bce-sdk-php": "0.8.22",
"nelexa/zip": "^3.1",
"obs/esdk-obs-php": "^3.1",
"alibabacloud/client": "^1.5"
},
"repositories": {
"packagist": {
"type": "composer",
"url": "https://php.cnpkg.org"
}
}
}
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "8c264db4c25d1d4bc53a5f69d694f6d6",
"packages": [
{
"name": "adbario/php-dot-notation",
"version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/adbario/php-dot-notation.git",
"reference": "eee4fc81296531e6aafba4c2bbccfc5adab1676e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/adbario/php-dot-notation/zipball/eee4fc81296531e6aafba4c2bbccfc5adab1676e",
"reference": "eee4fc81296531e6aafba4c2bbccfc5adab1676e",
"shasum": ""
},
"require": {
"ext-json": "*",
"php": ">=5.5"
},
"require-dev": {
"phpunit/phpunit": "^4.0|^5.0|^6.0",
"squizlabs/php_codesniffer": "^3.0"
},
"type": "library",
"autoload": {
"files": [
"src/helpers.php"
],
"psr-4": {
"Adbar\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Riku Särkinen",
"email": "riku@adbar.io"
}
],
"description": "PHP dot notation access to arrays",
"homepage": "https://github.com/adbario/php-dot-notation",
"keywords": [
"ArrayAccess",
"dotnotation"
],
"time": "2019-01-01T23:59:15+00:00"
},
{
"name": "alibabacloud/client",
"version": "1.5.18",
"source": {
"type": "git",
"url": "https://github.com/aliyun/openapi-sdk-php-client.git",
"reference": "5dcf7b8fdfa64abdae7a5ca867289baf95e8e12a"
},
"dist": {
"type": "zip",
"url": "https://github-api-proxy.cnpkg.org/repos/aliyun/openapi-sdk-php-client/zipball/5dcf7b8fdfa64abdae7a5ca867289baf95e8e12a",
"reference": "5dcf7b8fdfa64abdae7a5ca867289baf95e8e12a",
"shasum": ""
},
"require": {
"adbario/php-dot-notation": "^2.2",
"clagiordano/weblibs-configmanager": "^1.0",
"danielstjules/stringy": "^3.1",
"ext-curl": "*",
"ext-json": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-openssl": "*",
"ext-simplexml": "*",
"ext-xmlwriter": "*",
"guzzlehttp/guzzle": "^6.3",
"mtdowling/jmespath.php": "^2.4",
"php": ">=5.5"
},
"require-dev": {
"composer/composer": "^1.8",
"drupal/coder": "^8.3",
"ext-dom": "*",
"ext-pcre": "*",
"ext-sockets": "*",
"ext-spl": "*",
"league/climate": "^3.2.4",
"mikey179/vfsstream": "^1.6",
"monolog/monolog": "^1.24",
"phpunit/phpunit": "^4.8.35|^5.4.3",
"psr/cache": "^1.0",
"symfony/dotenv": "^3.4",
"symfony/var-dumper": "^3.4"
},
"suggest": {
"ext-sockets": "To use client-side monitoring"
},
"type": "library",
"autoload": {
"psr-4": {
"AlibabaCloud\\Client\\": "src"
},
"files": [
"src/Functions.php"
]
},
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Alibaba Cloud SDK",
"email": "sdk-team@alibabacloud.com",
"homepage": "http://www.alibabacloud.com"
}
],
"description": "Alibaba Cloud Client for PHP - Use Alibaba Cloud in your PHP project",
"homepage": "https://www.alibabacloud.com/",
"keywords": [
"alibaba",
"alibabacloud",
"aliyun",
"client",
"cloud",
"library",
"sdk",
"tool"
],
"time": "2019-10-11T11:09:47+00:00"
},
{
"name": "aliyuncs/oss-sdk-php",
"version": "v2.3.0",
"source": {
"type": "git",
"url": "https://github.com/aliyun/aliyun-oss-php-sdk.git",
"reference": "e69f57916678458642ac9d2fd341ae78a56996c8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aliyun/aliyun-oss-php-sdk/zipball/e69f57916678458642ac9d2fd341ae78a56996c8",
"reference": "e69f57916678458642ac9d2fd341ae78a56996c8",
"shasum": ""
},
"require": {
"php": ">=5.3"
},
"require-dev": {
"phpunit/phpunit": "~4.0",
"satooshi/php-coveralls": "~1.0"
},
"type": "library",
"autoload": {
"psr-4": {
"OSS\\": "src/OSS"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Aliyuncs",
"homepage": "http://www.aliyun.com"
}
],
"description": "Aliyun OSS SDK for PHP",
"homepage": "http://www.aliyun.com/product/oss/",
"time": "2018-01-08T06:59:35+00:00"
},
{
"name": "baidubce/bce-sdk-php",
"version": "0.8.22",
"source": {
"type": "git",
"url": "https://github.com/baidubce/bce-sdk-php.git",
"reference": "c3164434c8f0fe53b6ffe4479def893465137282"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/baidubce/bce-sdk-php/zipball/c3164434c8f0fe53b6ffe4479def893465137282",
"reference": "c3164434c8f0fe53b6ffe4479def893465137282",
"shasum": ""
},
"require": {
"guzzle/guzzle": "~3.9",
"php": ">=5.3.3",
"psr/log": "^1.0.0"
},
"require-dev": {
"monolog/monolog": "~1.4"
},
"suggest": {
"monolog/monolog": "Adds support for logging HTTP requests and responses"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "0.8.22-dev"
}
},
"autoload": {
"psr-0": {
"BaiduBce": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Baidu BCE",
"homepage": "http://bce.baidu.com"
}
],
"description": "BCE SDK for PHP",
"homepage": "http://bce.baidu.com/sdkforphp",
"keywords": [
"BCE",
"baidu",
"sdk"
],
"time": "2017-03-03T04:28:13+00:00"
},
{
"name": "clagiordano/weblibs-configmanager",
"version": "v1.0.7",
"source": {
"type": "git",
"url": "https://github.com/clagiordano/weblibs-configmanager.git",
"reference": "6ef4c27354368deb2f54b39bbe06601da8c873a0"
},
"dist": {
"type": "zip",
"url": "https://github-api-proxy.cnpkg.org/repos/clagiordano/weblibs-configmanager/zipball/6ef4c27354368deb2f54b39bbe06601da8c873a0",
"reference": "6ef4c27354368deb2f54b39bbe06601da8c873a0",
"shasum": ""
},
"require": {
"php": ">=5.4"
},
"require-dev": {
"clagiordano/phpunit-result-printer": "^1",
"phpunit/phpunit": "^4.8"
},
"type": "library",
"autoload": {
"psr-4": {
"clagiordano\\weblibs\\configmanager\\": "src/"
}
},
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"LGPL-3.0-or-later"
],
"authors": [
{
"name": "Claudio Giordano",
"email": "claudio.giordano@autistici.org",
"role": "Developer"
}
],
"description": "weblibs-configmanager is a tool library for easily read and access to php config array file and direct read/write configuration file / object",
"keywords": [
"clagiordano",
"configuration",
"manager",
"tool",
"weblibs"
],
"time": "2019-09-25T22:10:10+00:00"
},
{
"name": "danielstjules/stringy",
"version": "3.1.0",
"source": {
"type": "git",
"url": "https://github.com/danielstjules/Stringy.git",
"reference": "df24ab62d2d8213bbbe88cc36fc35a4503b4bd7e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/danielstjules/Stringy/zipball/df24ab62d2d8213bbbe88cc36fc35a4503b4bd7e",
"reference": "df24ab62d2d8213bbbe88cc36fc35a4503b4bd7e",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"symfony/polyfill-mbstring": "~1.1"
},
"require-dev": {
"phpunit/phpunit": "~4.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Stringy\\": "src/"
},
"files": [
"src/Create.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Daniel St. Jules",
"email": "danielst.jules@gmail.com",
"homepage": "http://www.danielstjules.com"
}
],
"description": "A string manipulation library with multibyte support",
"homepage": "https://github.com/danielstjules/Stringy",
"keywords": [
"UTF",
"helpers",
"manipulation",
"methods",
"multibyte",
"string",
"utf-8",
"utility",
"utils"
],
"time": "2017-06-12T01:10:27+00:00"
},
{
"name": "doctrine/cache",
"version": "v1.4.4",
"source": {
"type": "git",
"url": "https://github.com/doctrine/cache.git",
"reference": "6433826dd02c9e5be8a127320dc13e7e6625d020"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/cache/zipball/6433826dd02c9e5be8a127320dc13e7e6625d020",
"reference": "6433826dd02c9e5be8a127320dc13e7e6625d020",
"shasum": ""
},
"require": {
"php": ">=5.3.2"
},
"conflict": {
"doctrine/common": ">2.2,<2.4"
},
"require-dev": {
"phpunit/phpunit": ">=3.7",
"predis/predis": "~1.0",
"satooshi/php-coveralls": "~0.6"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.5.x-dev"
}
},
"autoload": {
"psr-0": {
"Doctrine\\Common\\Cache\\": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "Caching library offering an object-oriented API for many cache backends",
"homepage": "http://www.doctrine-project.org",
"keywords": [
"cache",
"caching"
],
"time": "2015-11-02T18:33:51+00:00"
},
{
"name": "guzzle/guzzle",
"version": "v3.9.3",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle3.git",
"reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9",
"reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9",
"shasum": ""
},
"require": {
"ext-curl": "*",
"php": ">=5.3.3",
"symfony/event-dispatcher": "~2.1"
},
"replace": {
"guzzle/batch": "self.version",
"guzzle/cache": "self.version",
"guzzle/common": "self.version",
"guzzle/http": "self.version",
"guzzle/inflection": "self.version",
"guzzle/iterator": "self.version",
"guzzle/log": "self.version",
"guzzle/parser": "self.version",
"guzzle/plugin": "self.version",
"guzzle/plugin-async": "self.version",
"guzzle/plugin-backoff": "self.version",
"guzzle/plugin-cache": "self.version",
"guzzle/plugin-cookie": "self.version",
"guzzle/plugin-curlauth": "self.version",
"guzzle/plugin-error-response": "self.version",
"guzzle/plugin-history": "self.version",
"guzzle/plugin-log": "self.version",
"guzzle/plugin-md5": "self.version",
"guzzle/plugin-mock": "self.version",
"guzzle/plugin-oauth": "self.version",
"guzzle/service": "self.version",
"guzzle/stream": "self.version"
},
"require-dev": {
"doctrine/cache": "~1.3",
"monolog/monolog": "~1.0",
"phpunit/phpunit": "3.7.*",
"psr/log": "~1.0",
"symfony/class-loader": "~2.1",
"zendframework/zend-cache": "2.*,<2.3",
"zendframework/zend-log": "2.*,<2.3"
},
"suggest": {
"guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated."
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.9-dev"
}
},
"autoload": {
"psr-0": {
"Guzzle": "src/",
"Guzzle\\Tests": "tests/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Guzzle Community",
"homepage": "https://github.com/guzzle/guzzle/contributors"
}
],
"description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle",
"homepage": "http://guzzlephp.org/",
"keywords": [
"client",
"curl",
"framework",
"http",
"http client",
"rest",
"web service"
],
"abandoned": "guzzlehttp/guzzle",
"time": "2015-03-18T18:23:50+00:00"
},
{
"name": "guzzlehttp/guzzle",
"version": "6.3.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699",
"reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699",
"shasum": ""
},
"require": {
"guzzlehttp/promises": "^1.0",
"guzzlehttp/psr7": "^1.4",
"php": ">=5.5"
},
"require-dev": {
"ext-curl": "*",
"phpunit/phpunit": "^4.0 || ^5.0",
"psr/log": "^1.0"
},
"suggest": {
"psr/log": "Required for using the Log middleware"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.2-dev"
}
},
"autoload": {
"files": [
"src/functions_include.php"
],
"psr-4": {
"GuzzleHttp\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle is a PHP HTTP client library",
"homepage": "http://guzzlephp.org/",
"keywords": [
"client",
"curl",
"framework",
"http",
"http client",
"rest",
"web service"
],
"time": "2017-06-22T18:50:49+00:00"
},
{
"name": "guzzlehttp/promises",
"version": "v1.3.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"shasum": ""
},
"require": {
"php": ">=5.5.0"
},
"require-dev": {
"phpunit/phpunit": "^4.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Promise\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle promises library",
"keywords": [
"promise"
],
"time": "2016-12-20T10:07:11+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "1.4.2",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
"reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"psr/http-message": "~1.0"
},
"provide": {
"psr/http-message-implementation": "1.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Tobias Schultze",
"homepage": "https://github.com/Tobion"
}
],
"description": "PSR-7 message implementation that also provides common utility methods",
"keywords": [
"http",
"message",
"request",
"response",
"stream",
"uri",
"url"
],
"time": "2017-03-20T17:10:46+00:00"
},
{
"name": "markbaker/complex",
"version": "1.4.7",
"source": {
"type": "git",
"url": "https://github.com/MarkBaker/PHPComplex.git",
"reference": "1ea674a8308baf547cbcbd30c5fcd6d301b7c000"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/1ea674a8308baf547cbcbd30c5fcd6d301b7c000",
"reference": "1ea674a8308baf547cbcbd30c5fcd6d301b7c000",
"shasum": ""
},
"require": {
"php": "^5.6.0|^7.0.0"
},
"require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "^0.4.3",
"phpcompatibility/php-compatibility": "^8.0",
"phpdocumentor/phpdocumentor": "2.*",
"phploc/phploc": "2.*",
"phpmd/phpmd": "2.*",
"phpunit/phpunit": "^4.8.35|^5.4.0",
"sebastian/phpcpd": "2.*",
"squizlabs/php_codesniffer": "^3.3.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Complex\\": "classes/src/"
},
"files": [
"classes/src/functions/abs.php",
"classes/src/functions/acos.php",
"classes/src/functions/acosh.php",
"classes/src/functions/acot.php",
"classes/src/functions/acoth.php",
"classes/src/functions/acsc.php",
"classes/src/functions/acsch.php",
"classes/src/functions/argument.php",
"classes/src/functions/asec.php",
"classes/src/functions/asech.php",
"classes/src/functions/asin.php",
"classes/src/functions/asinh.php",
"classes/src/functions/atan.php",
"classes/src/functions/atanh.php",
"classes/src/functions/conjugate.php",
"classes/src/functions/cos.php",
"classes/src/functions/cosh.php",
"classes/src/functions/cot.php",
"classes/src/functions/coth.php",
"classes/src/functions/csc.php",
"classes/src/functions/csch.php",
"classes/src/functions/exp.php",
"classes/src/functions/inverse.php",
"classes/src/functions/ln.php",
"classes/src/functions/log2.php",
"classes/src/functions/log10.php",
"classes/src/functions/negative.php",
"classes/src/functions/pow.php",
"classes/src/functions/rho.php",
"classes/src/functions/sec.php",
"classes/src/functions/sech.php",
"classes/src/functions/sin.php",
"classes/src/functions/sinh.php",
"classes/src/functions/sqrt.php",
"classes/src/functions/tan.php",
"classes/src/functions/tanh.php",
"classes/src/functions/theta.php",
"classes/src/operations/add.php",
"classes/src/operations/subtract.php",
"classes/src/operations/multiply.php",
"classes/src/operations/divideby.php",
"classes/src/operations/divideinto.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mark Baker",
"email": "mark@lange.demon.co.uk"
}
],
"description": "PHP Class for working with complex numbers",
"homepage": "https://github.com/MarkBaker/PHPComplex",
"keywords": [
"complex",
"mathematics"
],
"time": "2018-10-13T23:28:42+00:00"
},
{
"name": "monolog/monolog",
"version": "1.23.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
"reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"psr/log": "~1.0"
},
"provide": {
"psr/log-implementation": "1.0.0"
},
"require-dev": {
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev",
"graylog2/gelf-php": "~1.0",
"jakub-onderka/php-parallel-lint": "0.9",
"php-amqplib/php-amqplib": "~2.4",
"php-console/php-console": "^3.1.3",
"phpunit/phpunit": "~4.5",
"phpunit/phpunit-mock-objects": "2.3.0",
"ruflin/elastica": ">=0.90 <3.0",
"sentry/sentry": "^0.13",
"swiftmailer/swiftmailer": "^5.3|^6.0"
},
"suggest": {
"aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
"doctrine/couchdb": "Allow sending log messages to a CouchDB server",
"ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
"ext-mongo": "Allow sending log messages to a MongoDB server",
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
"mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
"php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
"php-console/php-console": "Allow sending log messages to Google Chrome",
"rollbar/rollbar": "Allow sending log messages to Rollbar",
"ruflin/elastica": "Allow sending log messages to an Elastic Search server",
"sentry/sentry": "Allow sending log messages to a Sentry server"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Monolog\\": "src/Monolog"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
}
],
"description": "Sends your logs to files, sockets, inboxes, databases and various web services",
"homepage": "http://github.com/Seldaek/monolog",
"keywords": [
"log",
"logging",
"psr-3"
],
"time": "2017-06-19T01:22:40+00:00"
},
{
"name": "mtdowling/jmespath.php",
"version": "2.4.0",
"source": {
"type": "git",
"url": "https://github.com/jmespath/jmespath.php.git",
"reference": "adcc9531682cf87dfda21e1fd5d0e7a41d292fac"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/adcc9531682cf87dfda21e1fd5d0e7a41d292fac",
"reference": "adcc9531682cf87dfda21e1fd5d0e7a41d292fac",
"shasum": ""
},
"require": {
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0"
},
"bin": [
"bin/jp.php"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0-dev"
}
},
"autoload": {
"psr-4": {
"JmesPath\\": "src/"
},
"files": [
"src/JmesPath.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Declaratively specify how to extract elements from a JSON document",
"keywords": [
"json",
"jsonpath"
],
"time": "2016-12-03T22:08:25+00:00"
},
{
"name": "nelexa/zip",
"version": "3.1.12",
"source": {
"type": "git",
"url": "https://github.com/Ne-Lexa/php-zip.git",
"reference": "ca068fa78ff37db9bce0064aed0297079587f43b"
},
"dist": {
"type": "zip",
"url": "https://github-api-proxy.cnpkg.org/repos/Ne-Lexa/php-zip/zipball/ca068fa78ff37db9bce0064aed0297079587f43b",
"reference": "ca068fa78ff37db9bce0064aed0297079587f43b",
"shasum": ""
},
"require": {
"ext-zlib": "*",
"php": "^5.5 || ^7.0",
"psr/http-message": "^1.0"
},
"require-dev": {
"phpunit/phpunit": "~4.8|~5.7",
"zendframework/zend-diactoros": "^1.4"
},
"suggest": {
"ext-bz2": "Needed to support BZIP2 compression",
"ext-fileinfo": "Needed to get mime-type file",
"ext-mcrypt": "Needed to support encrypt zip entries or use ext-openssl",
"ext-openssl": "Needed to support encrypt zip entries or use ext-mcrypt"
},
"type": "library",
"autoload": {
"psr-4": {
"PhpZip\\": "src/PhpZip"
}
},
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ne-Lexa",
"email": "alexey@nelexa.ru",
"role": "Developer"
}
],
"description": "PhpZip is a php-library for extended work with ZIP-archives. Open, create, update, delete, extract and get info tool. Supports appending to existing ZIP files, WinZip AES encryption, Traditional PKWARE Encryption, ZipAlign tool, BZIP2 compression, external file attributes and ZIP64 extensions. Alternative ZipArchive. It does not require php-zip extension.",
"homepage": "https://github.com/Ne-Lexa/php-zip",
"keywords": [
"archive",
"extract",
"unzip",
"winzip",
"zip",
"zipalign",
"ziparchive"
],
"time": "2019-07-25T20:08:42+00:00"
},
{
"name": "obs/esdk-obs-php",
"version": "3.1.3",
"source": {
"type": "git",
"url": "https://github.com/huaweicloud/huaweicloud-sdk-php-obs.git",
"reference": "7172a1b7096828fd26db47e1b2b3a458f96359d2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/huaweicloud/huaweicloud-sdk-php-obs/zipball/7172a1b7096828fd26db47e1b2b3a458f96359d2",
"reference": "7172a1b7096828fd26db47e1b2b3a458f96359d2",
"shasum": ""
},
"require": {
"guzzlehttp/guzzle": "6.3.0",
"guzzlehttp/promises": "1.3.1",
"guzzlehttp/psr7": "1.4.2",
"monolog/monolog": "1.23.0",
"php": ">=5.6.0",
"psr/http-message": "1.0.1",
"psr/log": "1.0.2"
},
"type": "library",
"autoload": {
"psr-4": {
"Obs\\": "Obs/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"description": "OBS PHP SDK",
"keywords": [
"OBS",
"php"
],
"time": "2019-04-18T05:15:06+00:00"
},
{
"name": "overtrue/socialite",
"version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/overtrue/socialite.git",
"reference": "fda55f0acef43a144799b1957a8f93d9f5deffce"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/overtrue/socialite/zipball/fda55f0acef43a144799b1957a8f93d9f5deffce",
"reference": "fda55f0acef43a144799b1957a8f93d9f5deffce",
"shasum": ""
},
"require": {
"guzzlehttp/guzzle": "~5.0|~6.0",
"php": ">=5.4.0",
"symfony/http-foundation": "~2.6|~2.7|~2.8|~3.0"
},
"require-dev": {
"mockery/mockery": "~0.9",
"phpunit/phpunit": "~4.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Overtrue\\Socialite\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "overtrue",
"email": "anzhengchao@gmail.com"
}
],
"description": "A collection of OAuth 2 packages that extracts from laravel/socialite.",
"keywords": [
"login",
"oauth",
"qq",
"social",
"wechat",
"weibo"
],
"time": "2017-08-04T06:28:22+00:00"
},
{
"name": "overtrue/wechat",
"version": "3.3.33",
"source": {
"type": "git",
"url": "https://github.com/overtrue/wechat.git",
"reference": "78e5476df330754040d1c400d0bca640d5b77cb7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/overtrue/wechat/zipball/78e5476df330754040d1c400d0bca640d5b77cb7",
"reference": "78e5476df330754040d1c400d0bca640d5b77cb7",
"shasum": ""
},
"require": {
"doctrine/cache": "1.4.*",
"ext-openssl": "*",
"guzzlehttp/guzzle": "~6.2",
"monolog/monolog": "^1.17",
"overtrue/socialite": "^1.0.25",
"php": ">=5.5.0",
"pimple/pimple": "~3.0",
"symfony/http-foundation": "~2.6|~2.7|~2.8|~3.0",
"symfony/psr-http-message-bridge": "~0.3|^1.0"
},
"require-dev": {
"mockery/mockery": "^0.9.9",
"overtrue/phplint": "dev-master",
"phpunit/phpunit": "~4.0"
},
"type": "library",
"autoload": {
"psr-4": {
"EasyWeChat\\": "src/"
},
"files": [
"src/Payment/helpers.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "overtrue",
"email": "anzhengchao@gmail.com"
}
],
"description": "微信SDK",
"keywords": [
"sdk",
"wechat",
"weixin",
"weixin-sdk"
],
"time": "2018-10-17T12:27:27+00:00"
},
{
"name": "paragonie/random_compat",
"version": "v2.0.18",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
"reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
"reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
"shasum": ""
},
"require": {
"php": ">=5.2.0"
},
"require-dev": {
"phpunit/phpunit": "4.*|5.*"
},
"suggest": {
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
},
"type": "library",
"autoload": {
"files": [
"lib/random.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Paragon Initiative Enterprises",
"email": "security@paragonie.com",
"homepage": "https://paragonie.com"
}
],
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
"keywords": [
"csprng",
"polyfill",
"pseudorandom",
"random"
],
"time": "2019-01-03T20:59:08+00:00"
},
{
"name": "pclzip/pclzip",
"version": "2.8.2",
"source": {
"type": "git",
"url": "https://github.com/ivanlanin/pclzip.git",
"reference": "19dd1de9d3f5fc4d7d70175b4c344dee329f45fd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ivanlanin/pclzip/zipball/19dd1de9d3f5fc4d7d70175b4c344dee329f45fd",
"reference": "19dd1de9d3f5fc4d7d70175b4c344dee329f45fd",
"shasum": ""
},
"type": "library",
"autoload": {
"classmap": [
"pclzip.lib.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-2.1"
],
"authors": [
{
"name": "Vincent Blavet"
}
],
"description": "A PHP library that offers compression and extraction functions for Zip formatted archives",
"homepage": "http://www.phpconcept.net/pclzip",
"keywords": [
"php",
"zip"
],
"time": "2014-06-05T11:42:24+00:00"
},
{
"name": "phpoffice/common",
"version": "0.2.9",
"source": {
"type": "git",
"url": "https://github.com/PHPOffice/Common.git",
"reference": "edb5d32b1e3400a35a5c91e2539ed6f6ce925e4d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPOffice/Common/zipball/edb5d32b1e3400a35a5c91e2539ed6f6ce925e4d",
"reference": "edb5d32b1e3400a35a5c91e2539ed6f6ce925e4d",
"shasum": ""
},
"require": {
"pclzip/pclzip": "^2.8",
"php": ">=5.3.0"
},
"require-dev": {
"phpdocumentor/phpdocumentor": "2.*",
"phploc/phploc": "2.*",
"phpmd/phpmd": "2.*",
"phpunit/phpunit": "^4.8.36 || ^7.0",
"sebastian/phpcpd": "2.*",
"squizlabs/php_codesniffer": "2.*"
},
"type": "library",
"autoload": {
"psr-4": {
"PhpOffice\\Common\\": "src/Common/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL"
],
"authors": [
{
"name": "Mark Baker"
},
{
"name": "Franck Lefevre",
"homepage": "http://rootslabs.net"
}
],
"description": "PHPOffice Common",
"homepage": "http://phpoffice.github.io",
"keywords": [
"common",
"component",
"office",
"php"
],
"time": "2018-07-13T14:12:34+00:00"
},
{
"name": "phpoffice/phpspreadsheet",
"version": "1.5.2",
"source": {
"type": "git",
"url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
"reference": "cd60531c44f580fbdfbd55dfb935af791f09be5d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/cd60531c44f580fbdfbd55dfb935af791f09be5d",
"reference": "cd60531c44f580fbdfbd55dfb935af791f09be5d",
"shasum": ""
},
"require": {
"ext-ctype": "*",
"ext-dom": "*",
"ext-gd": "*",
"ext-iconv": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-simplexml": "*",
"ext-xml": "*",
"ext-xmlreader": "*",
"ext-xmlwriter": "*",
"ext-zip": "*",
"ext-zlib": "*",
"markbaker/complex": "^1.4.1",
"php": "^5.6|^7.0",
"psr/simple-cache": "^1.0"
},
"require-dev": {
"dompdf/dompdf": "^0.8.0",
"friendsofphp/php-cs-fixer": "@stable",
"jpgraph/jpgraph": "^4.0",
"mpdf/mpdf": "^7.0.0",
"phpcompatibility/php-compatibility": "^8.0",
"phpunit/phpunit": "^5.7",
"squizlabs/php_codesniffer": "^3.3",
"tecnickcom/tcpdf": "^6.2"
},
"suggest": {
"dompdf/dompdf": "Option for rendering PDF with PDF Writer",
"jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers",
"mpdf/mpdf": "Option for rendering PDF with PDF Writer",
"tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer"
},
"type": "library",
"autoload": {
"psr-4": {
"PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-2.1-or-later"
],
"authors": [
{
"name": "Erik Tilt"
},
{
"name": "Adrien Crivelli"
},
{
"name": "Maarten Balliauw",
"homepage": "https://blog.maartenballiauw.be"
},
{
"name": "Mark Baker",
"homepage": "https://markbakeruk.net"
},
{
"name": "Franck Lefevre",
"homepage": "https://rootslabs.net"
}
],
"description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
"homepage": "https://github.com/PHPOffice/PhpSpreadsheet",
"keywords": [
"OpenXML",
"excel",
"gnumeric",
"ods",
"php",
"spreadsheet",
"xls",
"xlsx"
],
"time": "2018-11-25T17:40:15+00:00"
},
{
"name": "phpoffice/phpword",
"version": "0.16.0",
"source": {
"type": "git",
"url": "https://github.com/PHPOffice/PHPWord.git",
"reference": "7b7d4e4936014544aa706f4c03d3ac925d74beb9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/7b7d4e4936014544aa706f4c03d3ac925d74beb9",
"reference": "7b7d4e4936014544aa706f4c03d3ac925d74beb9",
"shasum": ""
},
"require": {
"ext-xml": "*",
"php": "^5.3.3 || ^7.0",
"phpoffice/common": "^0.2.9",
"zendframework/zend-escaper": "^2.2"
},
"require-dev": {
"dompdf/dompdf": "0.8.*",
"ext-gd": "*",
"ext-zip": "*",
"friendsofphp/php-cs-fixer": "^2.2",
"mpdf/mpdf": "5.7.4 || 6.* || 7.*",
"php-coveralls/php-coveralls": "1.1.0 || ^2.0",
"phploc/phploc": "2.* || 3.* || 4.*",
"phpmd/phpmd": "2.*",
"phpunit/phpunit": "^4.8.36 || ^7.0",
"squizlabs/php_codesniffer": "^2.9",
"tecnickcom/tcpdf": "6.*"
},
"suggest": {
"dompdf/dompdf": "Allows writing PDF",
"ext-gd2": "Allows adding images",
"ext-xmlwriter": "Allows writing OOXML and ODF",
"ext-xsl": "Allows applying XSL style sheet to headers, to main document part, and to footers of an OOXML template",
"ext-zip": "Allows writing OOXML and ODF"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-develop": "0.17-dev"
}
},
"autoload": {
"psr-4": {
"PhpOffice\\PhpWord\\": "src/PhpWord"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-3.0"
],
"authors": [
{
"name": "Mark Baker"
},
{
"name": "Gabriel Bull",
"email": "me@gabrielbull.com",
"homepage": "http://gabrielbull.com/"
},
{
"name": "Ivan Lanin",
"homepage": "http://ivan.lanin.org"
},
{
"name": "Roman Syroeshko",
"homepage": "http://ru.linkedin.com/pub/roman-syroeshko/34/a53/994/"
},
{
"name": "Franck Lefevre",
"homepage": "https://rootslabs.net/blog/"
},
{
"name": "Antoine de Troostembergh"
}
],
"description": "PHPWord - A pure PHP library for reading and writing word processing documents (OOXML, ODF, RTF, HTML, PDF)",
"homepage": "http://phpoffice.github.io",
"keywords": [
"ISO IEC 29500",
"OOXML",
"Office Open XML",
"OpenDocument",
"OpenXML",
"PhpOffice",
"PhpWord",
"Rich Text Format",
"WordprocessingML",
"doc",
"docx",
"html",
"odf",
"odt",
"office",
"pdf",
"php",
"reader",
"rtf",
"template",
"template processor",
"word",
"writer"
],
"time": "2018-12-30T00:35:03+00:00"
},
{
"name": "pimple/pimple",
"version": "v3.2.3",
"source": {
"type": "git",
"url": "https://github.com/silexphp/Pimple.git",
"reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32",
"reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"psr/container": "^1.0"
},
"require-dev": {
"symfony/phpunit-bridge": "^3.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.2.x-dev"
}
},
"autoload": {
"psr-0": {
"Pimple": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Pimple, a simple Dependency Injection Container",
"homepage": "http://pimple.sensiolabs.org",
"keywords": [
"container",
"dependency injection"
],
"time": "2018-01-21T07:42:36+00:00"
},
{
"name": "psr/container",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Container\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common Container Interface (PHP FIG PSR-11)",
"homepage": "https://github.com/php-fig/container",
"keywords": [
"PSR-11",
"container",
"container-interface",
"container-interop",
"psr"
],
"time": "2017-02-14T16:28:37+00:00"
},
{
"name": "psr/http-message",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for HTTP messages",
"homepage": "https://github.com/php-fig/http-message",
"keywords": [
"http",
"http-message",
"psr",
"psr-7",
"request",
"response"
],
"time": "2016-08-06T14:39:51+00:00"
},
{
"name": "psr/log",
"version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Log\\": "Psr/Log/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for logging libraries",
"homepage": "https://github.com/php-fig/log",
"keywords": [
"log",
"psr",
"psr-3"
],
"time": "2016-10-10T12:19:37+00:00"
},
{
"name": "psr/simple-cache",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/simple-cache.git",
"reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
"reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\SimpleCache\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interfaces for simple caching",
"keywords": [
"cache",
"caching",
"psr",
"psr-16",
"simple-cache"
],
"time": "2017-10-23T01:57:42+00:00"
},
{
"name": "qiniu/php-sdk",
"version": "v7.2.10",
"source": {
"type": "git",
"url": "https://github.com/qiniu/php-sdk.git",
"reference": "d89987163f560ebf9dfa5bb25de9bd9b1a3b2bd8"
},
"dist": {
"type": "zip",
"url": "https://github-api-proxy.cnpkg.org/repos/qiniu/php-sdk/zipball/d89987163f560ebf9dfa5bb25de9bd9b1a3b2bd8",
"reference": "d89987163f560ebf9dfa5bb25de9bd9b1a3b2bd8",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"phpunit/phpunit": "~4.0",
"squizlabs/php_codesniffer": "~2.3"
},
"type": "library",
"autoload": {
"psr-4": {
"Qiniu\\": "src/Qiniu"
},
"files": [
"src/Qiniu/functions.php"
]
},
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Qiniu",
"email": "sdk@qiniu.com",
"homepage": "http://www.qiniu.com"
}
],
"description": "Qiniu Resource (Cloud) Storage SDK for PHP",
"homepage": "http://developer.qiniu.com/",
"keywords": [
"cloud",
"qiniu",
"sdk",
"storage"
],
"time": "2019-10-28T10:23:23+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v2.8.50",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a77e974a5fecb4398833b0709210e3d5e334ffb0",
"reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0",
"shasum": ""
},
"require": {
"php": ">=5.3.9"
},
"require-dev": {
"psr/log": "~1.0",
"symfony/config": "^2.0.5|~3.0.0",
"symfony/dependency-injection": "~2.6|~3.0.0",
"symfony/expression-language": "~2.6|~3.0.0",
"symfony/stopwatch": "~2.3|~3.0.0"
},
"suggest": {
"symfony/dependency-injection": "",
"symfony/http-kernel": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.8-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\EventDispatcher\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
"time": "2018-11-21T14:20:20+00:00"
},
{
"name": "symfony/http-foundation",
"version": "v3.4.33",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "7b4626ab40d8562707e6d1c9a6fab977a86c2037"
},
"dist": {
"type": "zip",
"url": "https://github-api-proxy.cnpkg.org/repos/symfony/http-foundation/zipball/7b4626ab40d8562707e6d1c9a6fab977a86c2037",
"reference": "7b4626ab40d8562707e6d1c9a6fab977a86c2037",
"shasum": ""
},
"require": {
"php": "^5.5.9|>=7.0.8",
"symfony/polyfill-mbstring": "~1.1",
"symfony/polyfill-php70": "~1.6"
},
"require-dev": {
"symfony/expression-language": "~2.8|~3.0|~4.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\HttpFoundation\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
"time": "2019-10-24T15:33:53+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.12.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17"
},
"dist": {
"type": "zip",
"url": "https://github-api-proxy.cnpkg.org/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17",
"reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-mbstring": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Mbstring\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for the Mbstring extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"mbstring",
"polyfill",
"portable",
"shim"
],
"time": "2019-08-06T08:03:45+00:00"
},
{
"name": "symfony/polyfill-php70",
"version": "v1.12.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php70.git",
"reference": "54b4c428a0054e254223797d2713c31e08610831"
},
"dist": {
"type": "zip",
"url": "https://github-api-proxy.cnpkg.org/repos/symfony/polyfill-php70/zipball/54b4c428a0054e254223797d2713c31e08610831",
"reference": "54b4c428a0054e254223797d2713c31e08610831",
"shasum": ""
},
"require": {
"paragonie/random_compat": "~1.0|~2.0|~9.99",
"php": ">=5.3.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php70\\": ""
},
"files": [
"bootstrap.php"
],
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2019-08-06T08:03:45+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
"version": "v1.1.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/psr-http-message-bridge.git",
"reference": "a33352af16f78a5ff4f9d90811536abf210df12b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/a33352af16f78a5ff4f9d90811536abf210df12b",
"reference": "a33352af16f78a5ff4f9d90811536abf210df12b",
"shasum": ""
},
"require": {
"php": "^5.3.3 || ^7.0",
"psr/http-message": "^1.0",
"symfony/http-foundation": "^2.3.42 || ^3.4 || ^4.0"
},
"require-dev": {
"symfony/phpunit-bridge": "^3.4 || ^4.0"
},
"suggest": {
"nyholm/psr7": "For a super lightweight PSR-7/17 implementation"
},
"type": "symfony-bridge",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bridge\\PsrHttpMessage\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "PSR HTTP message bridge",
"homepage": "http://symfony.com",
"keywords": [
"http",
"http-message",
"psr-17",
"psr-7"
],
"time": "2019-04-03T17:09:40+00:00"
},
{
"name": "zendframework/zend-escaper",
"version": "2.6.1",
"source": {
"type": "git",
"url": "https://github.com/zendframework/zend-escaper.git",
"reference": "3801caa21b0ca6aca57fa1c42b08d35c395ebd5f"
},
"dist": {
"type": "zip",
"url": "https://github-api-proxy.cnpkg.org/repos/zendframework/zend-escaper/zipball/3801caa21b0ca6aca57fa1c42b08d35c395ebd5f",
"reference": "3801caa21b0ca6aca57fa1c42b08d35c395ebd5f",
"shasum": ""
},
"require": {
"php": "^5.6 || ^7.0"
},
"require-dev": {
"phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
"zendframework/zend-coding-standard": "~1.0.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.6.x-dev",
"dev-develop": "2.7.x-dev"
}
},
"autoload": {
"psr-4": {
"Zend\\Escaper\\": "src/"
}
},
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs",
"keywords": [
"ZendFramework",
"escaper",
"zf"
],
"time": "2019-09-05T20:03:20+00:00"
}
],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
"platform-dev": []
}
<?php
/*
* 游客访问的黑/白名单,不需要开放的,可以注释掉
* 应用的游客配置,转移到apps/app_name/Conf/access.inc.php下
* 此处只配置不能后台修改的项目
*/
return [
"access" => [
'page/Index/index' => true, // 自定义页面
'basic/Widget/*' => true,
],
'validate' => [
'widget/Upload/save',
'home/User/doAddVideo',
'home/User/doAddLive',
'home/User/doteacherDeatil',
'home/User/doAddTeacherCourse',
]
];
<?php
/**
* 定义扩展的命令
* Martinsun<syh@sunyonghong.com>
*/
// 根命名空间
$base_namespace = 'Console';
return [
$base_namespace . '\Crond',
$base_namespace . '\Padding',
];
<?php
return array(
'DB_TYPE' => 'mysql', // 数据库类型
'DB_HOST' => 'mysql', // 数据库服务器地址
'DB_NAME' => 'eduline', // 数据库名
'DB_USER' => 'eduline', // 数据库用户名
'DB_PWD' => 'pMGwgu686GanCz93', // 数据库密码
'DB_PORT' => '3306', // 数据库端口
'DB_PREFIX' => 'el_', // 数据库表前缀(因为漫游的原因,数据库表前缀必须写在本文件)
'DB_CHARSET' => 'utf8', // 数据库编码
'SECURE_CODE' => '193535e65fe78b8790', // 数据加密密钥
'COOKIE_PREFIX' => 'el_', // COOKIE前缀
'APP_DEBUG' => true, //网站调试模式
'API_NOT_ENCRYPT' => false, //API加密调试模式,开启后,所有API返回数据将不会加密
'API_DEBUG' => false, //API调试模式
'APP_PAGE_LOG' => false, //页面日志加载信息
);
<?php
/**
* 定义计划任务
* Martinsun<syh@sunyonghong.com>
*/
return [
// 计划任务时间解析配置
'crond_time' => [
'*', /*每分钟*/
'*:i', /*每小时 某分*/
'H:i', /*每天 某时:某分*/
'@-w H:i', /*每周-某天 某时:某分 0=周日*/
'*-d H:i', /*每月-某天 某时:某分*/
'm-d H:i', /*某月-某日 某时-某分*/
'Y-m-d H:i', /*某年-某月-某日 某时-某分*/
],
// 计划任务配置
'crond' => [
// 每分钟执行的计划任务
'*' => [
// 添加发送邮件/短信/平台的队列任务
'Job\notify\Check',
// 每分钟检测消息通知队列,如果不存在,每隔1秒检测一次,超过3秒未加入任务,则退出
'cmd::queue:listen --queue=notify --sleep=1 --tries=0 --timeout=null --sleeptime=3',
// 每分钟检测消息通知队列,如果不存在,每隔10秒检测一次,超过3秒未加入任务,则退出
'cmd::queue:listen --queue=sys_notify --sleep=10 --tries=0 --timeout=null --sleeptime=3',
// 监听是否有默认的队列任务
// 'cmd::queue:work --queue=default --sleep=3 --tries=0',
],
// 每小时执行
'*:00' => [
'Job\order\Invalid', // 处理订单失效任务
'Job\assemble\Check', // 处理拼团失败退款任务
],
],
];
<?php
/*
* Eduline升级配置
*
* @var array
**/
return array(
'VERSION' => '4.3.0', // # Eduline 版本
'UPURL' => 'https://demo.51eduline.com/upgrade/entry.php', // # 升级地址
);
<?php
return [
// 自动加载命名空间 格式: 根命名 => 对应的路径目录
'AUTOLOAD_NAMESPACE' => [
'App' => APPS_PATH,
'Library' => ADDON_PATH . DS . 'library',
'Model' => ADDON_PATH . DS . 'model',
'Plugin' => ADDON_PATH . DS . 'plugin',
'Widget' => ADDON_PATH . DS . 'widget',
'Job' => ADDON_PATH . DS . 'job',
'Console' => ADDON_PATH . DS .'console',
],
];
<?php
return array(
/**
* 路由的key必须写全称. 比如: 使用'wap/Index/index', 而非'wap'.
*/
'router' => array(
//一级导航
'classroom/Index/index' => SITE_URL.'/',//首页
'admin/Index/index' => SITE_URL.'/admin.html',//后台首页
'admin/Public/login' => SITE_URL.'/admin/login.html',//后台首页
'course/Album/index' => SITE_URL.'/album.html',//班级
'course/Video/index' => SITE_URL.'/course.html',//课程
'live/Index/index' => SITE_URL.'/live.html',//直播
'school/Index/index' => SITE_URL.'/school.html',//机构
'classroom/Teacher/index' => SITE_URL.'/teacher.html',//讲师
'mall/Goods/index' => SITE_URL.'/mall.html',//积分商城
'wenda/Index/index' => SITE_URL.'/question.html',//问答
'exams/Index/index' => SITE_URL.'/exam.html',//考试
'group/Index/index' => SITE_URL.'/group.html',//小组
'news/Topic/index' => SITE_URL.'/news.html',//资讯
'classroom/Library/index' => SITE_URL.'/library.html',//文库
'course/LineClass/index' => SITE_URL.'/lineclass.html',//线下课
'classroom/Vip/index' => SITE_URL.'/vip.html',//vip
'classroom/CardReceipt/index' => SITE_URL.'/card_receipt/[tab].html',//卡券领取页
//登录/注册
'basic/Passport/login' => SITE_URL.'/login.html',
'basic/Passport/reg' => SITE_URL.'/register.html',
'home/Repwd/index' => SITE_URL.'/repwd.html',
//课程详情
'course/Video/view' => SITE_URL.'/course/[id].html',
'course/Video/watch' => SITE_URL.'/course/watch/[id]_[s_id].html',
'course/PayVideo/coupon' => SITE_URL.'/course/coupon/[id].html',
//直播详情
'live/Index/view' => SITE_URL.'/live/[id].html',
'live/Index/watch' => SITE_URL.'/live/watch/[id].html',
'live/Index/live_teacher' => SITE_URL.'/live/teacher/[id].html',
'live/Index/getLivePlayback' => SITE_URL.'/live/playback/[id]_[type]_[ac].html',
//线下课详情
'course/LineClass/view' => SITE_URL.'/lineclass/[id].html',
//考试详情
'exam/Index/exam' => SITE_URL.'/exams/[id].html',
'exam/UserExam/exam_info' => SITE_URL.'/exams/report/[exam_id]/[paper_id].html',
//机构详情
'school/User/index' => SITE_URL.'/school/set_info.html',
'school/User/setInfo' => SITE_URL.'/school/authentication.html',
'school/User/mount' => SITE_URL.'/school/mount.html',
'school/User/domainName' => SITE_URL.'/school/domain_name.html',
'school/User/finance' => SITE_URL.'/school/finance.html',
'school/User/advertising' => SITE_URL.'/school/advertising.html',
//讲师详情
'classroom/Teacher/view' => SITE_URL.'/teacher/[id].html',
'classroom/Teacher/about' => SITE_URL.'/teacher/index/[id].html',
'classroom/Teacher/course' => SITE_URL.'/teacher/[type]/[id].html',
'classroom/Teacher/review' => SITE_URL.'/teacher/review/[id].html',
'classroom/Teacher/follow' => SITE_URL.'/teacher/follow/[id].html',
//积分商城
'mall/Goods/view' => SITE_URL.'/mall/[id].html',
//资讯详情
'news/Topic/view' => SITE_URL.'/news/[id].html',
//问答详情
'wenda/Index/detail' => SITE_URL.'/question/[id].html',
'wenda/Index/index$' => SITE_URL.'/question/type/[wdtype].html',
'wenda/Index/classifywd' => SITE_URL.'/question/[type]/[tpid]/[wdtype].html',
'wenda/Index/addWenda' => SITE_URL.'/question/add.html',
//管理中心
'home/User/index' => SITE_URL.'/my/index.html',
'home/User/setInfo' => SITE_URL.'/my/set_up/[tab].html',
'home/User/authTeacher' => SITE_URL.'/my/certified_teacher.html',
'home/Home/course' => SITE_URL.'/my/course.html',
'home/Home/live' => SITE_URL.'/my/live.html',
'home/Home/album' => SITE_URL.'/my/album.html',
'home/Home/classes' => SITE_URL.'/my/classes.html',
'home/Home/share' => SITE_URL.'/my/share.html',
'home/Home/group' => SITE_URL.'/my/group.html',
'home/Home/courseLine' => SITE_URL.'/my/lineclass.html',
'home/Home/wenda' => SITE_URL.'/my/question.html',
'home/Home/wenti' => SITE_URL.'/my/put_question.html',
'home/Home/review' => SITE_URL.'/my/comment.html',
'home/Home/note' => SITE_URL.'/my/note.html',
'home/Home/follow' => SITE_URL.'/my/follow.html',
'home/Home/collect' => SITE_URL.'/my/collect.html',
'home/Home/learn' => SITE_URL.'/my/learn.html',
'home/Home/teacher_course' => SITE_URL.'/my/arrange_course.html',
'home/User/teacherVideo' => SITE_URL.'/my/upload.html',
'home/User/uploadVideo' => SITE_URL.'/my/upload_course.html',
'home/User/recharge' => SITE_URL.'/my/recharge.html',
'home/User/account' => SITE_URL.'/my/account.html',
'home/User/credit' => SITE_URL.'/my/credit.html',
'home/User/spilt' => SITE_URL.'/my/spilt.html',
'home/User/card' => SITE_URL.'/my/bank_card.html',
'home/User/alipay' => SITE_URL.'/my/alipay.html',
'home/User/videoCoupon' => SITE_URL.'/my/card_coupons.html',
'home/User/discount' => SITE_URL.'/my/discount.html',
'home/User/vipCard' => SITE_URL.'/my/vip_card.html',
'home/User/rechargeCard' => SITE_URL.'/my/recharge_card.html',
'home/User/courseCard' => SITE_URL.'/my/course_card.html',
'home/User/exchangeCard' => SITE_URL.'/my/recardco.html',
'home/Home/order' => SITE_URL.'/my/order.html',
'home/User/address' => SITE_URL.'/my/address.html',
'home/Home/exams' => SITE_URL.'/my/exams.html',
'home/User/teacherDeatil' => SITE_URL.'/my/teacher_info.html',
'home/User/updateArticle' => SITE_URL.'/my/upload_articles.html',
'home/User/checkDeatil' => SITE_URL.'/my/article_info/[id].html',
'home/User/updateDetails' => SITE_URL.'/my/upload_experience.html',
//个人首页
'home/UserShow/index' => SITE_URL.'/user/index/[uid].html',
'home/UserShow/course' => SITE_URL.'/user/course/[uid].html',
'home/UserShow/live' => SITE_URL.'/user/live/[uid].html',
'home/UserShow/group' => SITE_URL.'/user/group/[uid].html',
'home/UserShow/question' => SITE_URL.'/user/question/[uid].html',
'home/UserShow/wenda' => SITE_URL.'/user/wenda/[uid].html',
'home/UserShow/note' => SITE_URL.'/user/note/[uid].html',
'home/UserShow/fans' => SITE_URL.'/user/fans/[uid].html',
'home/UserShow/follow' => SITE_URL.'/user/follow/[uid].html',
//消息
'basic/Message/index' => SITE_URL.'/message/index.html',
'basic/Message/comment' => SITE_URL.'/message/comment.html',
'basic/Message/notify' => SITE_URL.'/message/notify.html',
'basic/Message/detail' => SITE_URL.'/message/reply/[id]_[type].html',
//单页
'basic/Single/info' => SITE_URL.'/single/[id].html',
'basic/Single/indie' => SITE_URL.'/indie/[ie].html',
//app下载
'home/Index/appdownload' => SITE_URL.'/appdownload.html',
//第三方登录
'basic/Widget/displayAddons' => SITE_URL.'/login_callback/[type]/[addon]/[hook].html',
//结算页-(点、直、班级、线下)
'course/PayVideo/index' => SITE_URL.'/pay/[vst].html',
//3g版发现
'classroom/Index/find' => SITE_URL.'/find.html',
//结算页-购买商品
'mall/Goods/pay' => SITE_URL.'/pay/mall_[vst].html',
//cc视频上传
'basic/Public/ccUpload' => SITE_URL.'/cc/upload.html',
'basic/Public/notify' => SITE_URL.'/cc/notify.html',
//结算页-购买考试
'exams/Index/pay' => SITE_URL.'/pay/exams_[vst].html',
)
);
\ No newline at end of file
indexer
{
mem_limit = 128000000
}
searchd
{
listen = 3312
listen = 9306:mysql41
log = /xampp/coreseek/var/log/searchd.log
query_log = /xampp/coreseek/var/log/query.log
pid_file = /xampp/coreseek/var/log/searchd.pid
read_timeout = 3
max_children = 30
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 0
unlink_old = 1
}
# forum topic & post index #
source ts_forum_post
{
type = mysql
sql_host = 10.88.48.174
sql_user = 3ms_beta
sql_pass = xsw2XSW@
sql_db = forum_beta
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query_range = SELECT min(pid),max(pid) FROM ts_forum_post
sql_range_step = 1000
sql_query = SELECT a.pid, \
20 as indexid, \
a.uid, \
a.maskId, \
crc32(a.maskName) as maskCode, \
a.cTime, \
-1 as gid, \
a.fid as cid, \
-1 as inside, \
istopic as ext1, \
a.title, \
a.content \
FROM ts_forum_post as a,ts_forum_topic as b \
WHERE b.isdel=0 AND a.isdel=0 AND a.tid=b.tid AND a.pid>=$start AND a.pid<=$end
sql_attr_uint = indexid
sql_attr_uint = uid
sql_attr_uint = maskId
sql_attr_uint = maskCode
sql_attr_timestamp = cTime
sql_attr_uint = gid
sql_attr_uint = cid
sql_attr_uint = inside
sql_attr_uint = ext1
}
index ts_forum_post
{
source = ts_forum_post
path = /xampp/coreseek/var/data/ts_forum_post
docinfo = extern
html_strip = 1
html_index_attrs = img=alt,title; a=title;
html_remove_elements = style, script
min_word_len = 2
charset_dictpath = /xampp/coreseek/etc/
charset_type = zh_cn.utf-8
}
\ No newline at end of file
<?php
define('UC_SYNC', 0);
define('UC_CONNECT', 'mysql');
define('UC_DBHOST', 'localhost');
define('UC_DBUSER', 'root');
define('UC_DBPW', '');
define('UC_DBNAME', 'ucenter');
define('UC_DBCHARSET', 'utf8');
define('UC_DBTABLEPRE', '`ucenter`.uc_');
define('UC_DBCONNECT', '0');
define('UC_KEY', '6q0A6h970l57129LbX4R7xdddq0je1dFacfC4H7J9F8P1sdd454Hcv476ybb4r4s');
define('UC_API', 'http://www1.ucenter.com');
define('UC_CHARSET', 'utf-8');
define('UC_IP', '');
define('UC_APPID', '1');
define('UC_PPP', '20');
\ No newline at end of file
#!/bin/sh
. /etc/profile
. /root/.bash_profile
# cd path
cd `dirname $0`
# 执行计划任务
php eduline crond
chown -R www:www ./_runtime
# 监听处理视频队列进程是否存活
ps -fe|grep 'php eduline queue:listen --name v4-single --queue video' |grep -v grep
if [ $? -ne 0 ]
then
php eduline queue:listen --name v4-single --queue 'video' --sleep 5 --memory 128 --timeout null
fi
# 监听处理上传队列进程是否存活
ps -fe|grep 'php eduline queue:listen --name v4-single --queue upload' |grep -v grep
if [ $? -ne 0 ]
then
php eduline queue:listen --name v4-single --queue 'upload' --sleep 10 --memory 128 --timeout null
fi
@echo off
rem 定义需监控程序的进程名和程序路径,可根据需要进行修改
set QueueVideoName=EdulineQueueVideo.exe
set QueueUploadName=EdulineQueueUpload.exe
set AppPath=%~p0core\Command\Windows\
%~d0
cd %~dp0
cls
rem 定义循环体
:startcheck
php eduline crond
echo "^>%date:~0,10% %time:~0,8%"
rem 从进程列表中查找视频转码队列进程
tasklist|findstr /i %QueueVideoName% >nul
rem 变量errorlevel的值等于0表示查找到进程,否则没有查找到进程
if %errorlevel% NEQ 0 (
start %AppPath%%QueueVideoName% 2>nul && echo "^>%date:~0,10% %time:~0,8% 启动视频转码任务监听成功"
)
rem 从进程列表中查找上传进程
tasklist|findstr /i %QueueUploadName% >nul
rem 变量errorlevel的值等于0表示查找到进程,否则没有查找到进程
if %errorlevel% NEQ 0 (
start %AppPath%%QueueUploadName% 2>nul && echo "^>%date:~0,10% %time:~0,8% 启动上传队列任务监听成功"
)
rem 用ping命令来实现延时运行
ping /n 60 127.0.0.1>nul
goto startcheck
echo on
pause
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>
\ No newline at end of file
#!/usr/bin/env php
<?php
header('Content-type:text/html;charset=UTF-8;');
error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED);
//网站根路径设置
define('SITE_PATH', dirname(__FILE__));
// 载入核心文件
require SITE_PATH . '/core/core.php';
// 初始化
\Eduline\Console::init();
\ No newline at end of file
File added
<?php
exec('cd /app/eduline && /usr/bin/git pull 2>&1', $a, $b);
var_dump($a, $b);
#
# httpd.ini
# Eduline
#
[ISAPI_Rewrite]
# 3600 = 1 Hour
CacheClockRate 3600
RepeatLimit 32
# 日志
RewriteRule ^(.*)/app/blog(?:\?(.*))?$ $1/index\.php\?app=blog&mod=Index&act=index&$2 [L]
RewriteRule ^(.*)/app/blog/lastest(?:\?(.*))?$ $1/index\.php\?app=blog&mod=Index&act=news&$2 [L]
RewriteRule ^(.*)/app/blog/following(?:\?(.*))?$ $1/index\.php\?app=blog&mod=Index&act=followsblog&$2 [L]
RewriteRule ^(.*)/app/blog/my(?:\?(.*))?$ $1/index\.php\?app=blog&mod=Index&act=my&$2 [L]
RewriteRule ^(.*)/app/blog/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=blog&mod=Index&act=personal&uid=$2&$3 [L]
RewriteRule ^(.*)/app/blog/detail/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=blog&mod=Index&act=show&id=$2&$3 [L]
# blog/Index/personal节点已存在, 所以去掉本条
# RewriteRule ^(.*)/app/blog/([0-9]+)/category/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=blog&mod=Index&act=personal&uid=$2&cateId=$3&$4 [L]
RewriteRule ^(.*)/app/blog/post(?:\?(.*))?$ $1/index\.php\?app=blog&mod=Index&act=addBlog&$2 [L]
RewriteRule ^(.*)/app/blog/edit/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=blog&mod=Index&act=edit&id=$2&$3 [L]
RewriteRule ^(.*)/app/blog/manage(?:\?(.*))?$ $1/index\.php\?app=blog&mod=Index&act=admin&$2 [L]
# 相册
RewriteRule ^(.*)/app/photo(?:\?(.*))?$ $1/index\.php\?app=photo&mod=Index&act=index&$2 [L]
RewriteRule ^(.*)/app/photo/all_albums(?:\?(.*))?$ $1/index\.php\?app=photo&mod=Index&act=all_albums&$2 [L]
RewriteRule ^(.*)/app/photo/all_photos(?:\?(.*))?$ $1/index\.php\?app=photo&mod=Index&act=all_photos&$2 [L]
RewriteRule ^(.*)/app/photo/albums(?:\?(.*))?$ $1/index\.php\?app=photo&mod=Index&act=albums&$2 [L]
RewriteRule ^(.*)/app/photo/photos(?:\?(.*))?$ $1/index\.php\?app=photo&mod=Index&act=photos&$2 [L]
RewriteRule ^(.*)/app/photo/album/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=photo&mod=Index&act=album&id=$2&$3 [L]
RewriteRule ^(.*)/app/photo/photo/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=photo&mod=Index&act=photo&id=$2&$3 [L]
RewriteRule ^(.*)/app/photo/multi_upload(?:\?(.*))?$ $1/index\.php\?app=photo&mod=Upload&act=flash&$2 [L]
RewriteRule ^(.*)/app/photo/upload(?:\?(.*))?$ $1/index\.php\?app=photo&mod=Upload&act=index&$2 [L]
RewriteRule ^(.*)/app/photo/edit/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=photo&mod=Manage&act=album_edit&id=$2&$3 [L]
RewriteRule ^(.*)/app/photo/order/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=photo&mod=Manage&act=album_order&id=$2&$3 [L]
# 活动
RewriteRule ^(.*)/app/event(?:\?(.*))?$ $1/index\.php\?app=event&mod=Index&act=index&$2 [L]
RewriteRule ^(.*)/app/event/events(?:\?(.*))?$ $1/index\.php\?app=event&mod=Index&act=personal&$2 [L]
RewriteRule ^(.*)/app/event/post(?:\?(.*))?$ $1/index\.php\?app=event&mod=Index&act=addEvent&$2 [L]
RewriteRule ^(.*)/app/event/edit/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=event&mod=Index&act=edit&id=$2&$3 [L]
RewriteRule ^(.*)/app/event/detail/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=event&mod=Index&act=eventDetail&id=$2&$3 [L]
RewriteRule ^(.*)/app/event/member/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=event&mod=Index&act=member&id=$2&$3 [L]
# 投票
RewriteRule ^(.*)/app/vote(?:\?(.*))?$ $1/index\.php\?app=vote&mod=Index&act=index&$2 [L]
RewriteRule ^(.*)/app/vote/my(?:\?(.*))?$ $1/index\.php\?app=vote&mod=Index&act=my&$2 [L]
RewriteRule ^(.*)/app/vote/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=vote&mod=Index&act=personal&uid=$2&$3 [L]
RewriteRule ^(.*)/app/vote/post(?:\?(.*))?$ $1/index\.php\?app=vote&mod=Index&act=addPoll&$2 [L]
RewriteRule ^(.*)/app/vote/detail/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=vote&mod=Index&act=pollDetail&id=$2&$3 [L]
# 礼物
RewriteRule ^(.*)/app/gift(?:\?(.*))?$ $1/index\.php\?app=gift&mod=Index&act=index&$2 [L]
RewriteRule ^(.*)/app/gift/receive(?:\?(.*))?$ $1/index\.php\?app=gift&mod=Index&act=receivebox&$2 [L]
RewriteRule ^(.*)/app/gift/send(?:\?(.*))?$ $1/index\.php\?app=gift&mod=Index&act=sendbox&$2 [L]
RewriteRule ^(.*)/app/gift/([0-9]+)$ $1/index\.php\?app=gift&mod=Index&act=personal&uid=$2&$3 [L]
# 招贴版
RewriteRule ^(.*)/app/poster(?:\?(.*))?$ $1/index\.php\?app=poster&mod=Index&act=index&$2 [L]
RewriteRule ^(.*)/app/poster/posters(?:\?(.*))?$ $1/index\.php\?app=poster&mod=Index&act=personal&$2 [L]
RewriteRule ^(.*)/app/poster/post(?:\?(.*))?$ $1/index\.php\?app=poster&mod=Index&act=addPosterSort&$2 [L]
RewriteRule ^(.*)/app/poster/post/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=poster&mod=Index&act=addPoster&typeId=$2&$3 [L]
RewriteRule ^(.*)/app/poster/edit/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=poster&mod=Index&act=editPoster&id=$2&$3 [L]
RewriteRule ^(.*)/app/poster/detail/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=poster&mod=Index&act=posterDetail&id=$2&$3 [L]
# 群组
RewriteRule ^(.*)/app/group(?:\?(.*))?$ $1/index\.php\?app=group&mod=Index&act=index&$2 [L]
RewriteRule ^(.*)/app/group/index(?:\?(.*))?$ $1/index\.php\?app=group&mod=Index&act=index&$2 [L]
RewriteRule ^(.*)/app/group/my_post(?:\?(.*))?$ $1/index\.php\?app=group&mod=Index&act=post&$2 [L]
RewriteRule ^(.*)/app/group/replied(?:\?(.*))?$ $1/index\.php\?app=group&mod=Index&act=replied&$2 [L]
RewriteRule ^(.*)/app/group/comment(?:\?(.*))?$ $1/index\.php\?app=group&mod=Index&act=comment&$2 [L]
RewriteRule ^(.*)/app/group/atme(?:\?(.*))?$ $1/index\.php\?app=group&mod=Index&act=atme&$2 [L]
RewriteRule ^(.*)/app/group/groups(?:\?(.*))?$ $1/index\.php\?app=group&mod=SomeOne&act=index&$2 [L]
RewriteRule ^(.*)/app/group/class(?:\?(.*))?$ $1/index\.php\?app=group&mod=Index&act=find&$2 [L]
RewriteRule ^(.*)/app/group/search(?:\?(.*))?$ $1/index\.php\?app=group&mod=Index&act=search&$2 [L]
RewriteRule ^(.*)/app/group/add(?:\?(.*))?$ $1/index\.php\?app=group&mod=Index&act=add&$2 [L]
RewriteRule ^(.*)/app/group/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=group&mod=Group&act=index&gid=$2&$3 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/search(?:\?(.*))?$ $1/index\.php\?app=group&mod=Group&act=search&gid=$2&$3 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/detail/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=group&mod=Group&act=detail&gid=$2&feed_id=$3&$4 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/invite(?:\?(.*))?$ $1/index\.php\?app=group&mod=Invite&act=create&gid=$2&$3 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/setting/private(?:\?(.*))?$ $1/index\.php\?app=group&mod=Manage&act=privacy&gid=$2&$3 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/setting/baseinfo(?:\?(.*))?$ $1/index\.php\?app=group&mod=Manage&act=index&gid=$2&$3 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/setting/member(?:\?(.*))?$ $1/index\.php\?app=group&mod=Manage&act=membermanage&gid=$2&$3 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/setting/announcement(?:\?(.*))?$ $1/index\.php\?app=group&mod=Manage&act=announce&gid=$2&$3 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/setting/log(?:\?(.*))?$ $1/index\.php\?app=group&mod=Log&act=index&gid=$2&$3 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/bbs(?:\?(.*))?$ $1/index\.php\?app=group&mod=Topic&act=index&gid=$2&$3 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/bbs/post(?:\?(.*))?$ $1/index\.php\?app=group&mod=Topic&act=add&gid=$2&$3 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/bbs/edit/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=group&mod=Topic&act=edit&gid=$2&tid=$3&$4 [L]
RewriteRule ^(.*)/app/group(?:/([0-9]+))?/bbs_reply/edit(?:/([0-9]+))?$ $1/index\.php\?app=group&mod=Topic&act=editPost&gid=$2&pid=$3&$4 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/bbs/([0-9]+)(?:\?(.*))?$ $1/index\.php\?app=group&mod=Topic&act=topic&gid=$2&tid=$3&$4 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/file(?:\?(.*))?$ $1/index\.php\?app=group&mod=Dir&act=index&gid=$2&$3 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/file/upload(?:\?(.*))?$ $1/index\.php\?app=group&mod=Dir&act=upload&gid=$2&$3 [L]
RewriteRule ^(.*)/app/group/([0-9]+)/member(?:\?(.*))?$ $1/index\.php\?app=group&mod=Member&act=index&gid=$2&$3 [L]
#规则测试
RewriteRule ^(.*)/?rewrite$ $1\/public\/rewrite\.php [L]
#短网址
RewriteRule ^(.*)/?url/([a-zA-Z0-9]+)\?(.*)$ $1\/shorturl\.php\?url=$1 [L]
#自定义页面
RewriteRule ^(.*)/?page/([0-9a-zA-Z_]+)\.html$ $1\/index\.php\?app=page&mod=Index&act=index&page=$1&$2 [L]
#我的首页
RewriteRule ^(.*)/?home\?(.*)$ $1\/index\.php\?app=public&mod=Index&act=index&$2 [L]
RewriteRule ^(.*)/?invite\?(.*)$ $1\/index\.php\?app=public&mod=Invite&act=invite&$2 [L]
RewriteRule ^(.*)/?my(Task|Medal|Rank)\?(.*)$ $1\/index\.php\?app=public&mod=$2&act=index&$2 [L]
RewriteRule ^(.*)/?my(Collection|Mention|Comment)\?(.*)$ $1\/index\.php\?app=public&mod=$2&act=index&$2 [L]
RewriteRule ^(.*)/?myFeed\?(.*)$ $1\/index\.php\?app=public&mod=Index&act=myFeed&$2 [L]
RewriteRule ^(.*)/?myFollowing$ $1\/index\.php\?app=public&mod=Index&act=following&$2 [L]
RewriteRule ^(.*)/?myFollower\?(.*)$ $1\/index\.php\?app=public&mod=Index&act=follower&$2 [L]
RewriteRule ^(.*)/?message$ $1\/index\.php\?app=public&mod=Message&act=index [L]
RewriteRule ^(.*)/?notify$ $1\/index\.php\?app=public&mod=Message&act=notify [L]
RewriteRule ^(.*)/?message/([0-9]+)\?(.*)$ $1\/index\.php\?app=public&mod=Message&act=detail&id=$2&$3 [L]
RewriteRule ^(.*)/?setting/([a-zA-Z0-9_]+)\?(.*)$ $1\/index\.php\?app=public&mod=Account&act=$2&$3 [L]
RewriteRule ^(.*)/?(weibo|feed)/([0-9]+)\?(.*)$ $1\/index\.php\?app=public&mod=Profile&act=feed&feed_id=$2&$3 [L]
RewriteRule ^(.*)/?topic\?(.*)$ $1\/index\.php\?app=public&mod=Topic&act=index&$2 [L]
RewriteRule ^(.*)/?topics/([0-9A-Za-z_\-]*)$ $1\/index\.php\?app=public&mod=Topic&act=index&domain=$2 [L]
#我的空间
RewriteRule ^(.*)/?@([_a-zA-Z0-9]+)/?\?(.*)$ $1\/index\.php\?app=public&mod=Profile&act=index&uid=$2&$3 [L]
RewriteRule ^(.*)/?space/([_a-zA-Z0-9]+)/?\?(.*)$ $1\/index\.php\?app=public&mod=Profile&act=index&uid=$2&$3 [L]
RewriteRule ^(.*)/?space/([_a-zA-Z0-9]+)/profile\?(.*)$ $1\/index\.php\?app=public&mod=Profile&act=data&uid=$2&$3 [L]
RewriteRule ^(.*)/?space/([_a-zA-Z0-9]+)/following\?(.*)$ $1\/index\.php\?app=public&mod=Profile&act=following&uid=$2&$3 [L]
RewriteRule ^(.*)/?space/([_a-zA-Z0-9]+)/follower\?(.*)$ $1\/index\.php\?app=public&mod=Profile&act=follower&uid=$2&$3 [L]
#登录注册
RewriteRule ^(.*)/?login\?(.*)$ $1\/index\.php\?app=public&mod=Passport&act=login&$2 [L]
RewriteRule ^(.*)/?welcome\?(.*)$ $1\/index\.php\?app=public&mod=Passport&act=login&$2 [L]
RewriteRule ^(.*)/?register\?(.*)$ $1\/index\.php\?app=public&mod=Register&act=index&$2 [L]
RewriteRule ^(.*)/?activate/([0-9]+)\?(.*)$ $1\/index\.php\?app=public&mod=Register&act=waitForActivation&uid=$1&$2 [L]
RewriteRule ^(.*)/?review/([0-9]+)\?(.*)$ $1\/index\.php\?app=public&mod=Register&act=waitForAudit&uid=$2&$3 [L]
RewriteRule ^(.*)/?register/upload_photo\?(.*)$ $1\/index\.php\?app=public&mod=Register&act=step2&$2 [L]
RewriteRule ^(.*)/?register/work_information\?(.*)$ $1\/index\.php\?app=public&mod=Register&act=step3&$2 [L]
RewriteRule ^(.*)/?register/follow_interesting$ $1\/index\.php\?app=public&mod=Register&act=step4&$2 [L]
RewriteRule ^(.*)/?wap\?(.*)$ $1\/index\.php\?app=wap&mod=Index&act=index&$2 [L]
RewriteRule ^(.*)/?findfriend/?$ $1\/index\.php\?app=people&mod=Index&act=index&$2 [L]
RewriteRule ^(.*)/?people/?([a-zA-Z0-9_]+)?\?(.*)$ $1\/index\.php\?app=people&mod=Index&act=index&type=$2&$3 [L]
RewriteRule ^(.*)/?channel/?([a-zA-Z0-9_]+)?\?(.*)$ $1\/index\.php\?app=channel&mod=Index&act=index&cid=$2&$3 [L]
#微吧
RewriteRule ^(.*)/?weiba$ $1\/index\.php\?app=weiba&mod=Index&act=index&$2 [L]
RewriteRule ^(.*)/?weiba/weibalist$ $1\/index\.php\?app=weiba&mod=Index&act=weibaList&$2 [L]
RewriteRule ^(.*)/?weiba/postlist$ $1\/index\.php\?app=weiba&mod=Index&act=postList&$2 [L]
RewriteRule ^(.*)/?weiba/my([a-zA-Z]+)$ $1\/index\.php\?app=weiba&mod=Index&act=myWeiba&type=my$2&$3 [L]
RewriteRule ^(.*)/?weiba/([0-9]+)$ $1\/index\.php\?app=weiba&mod=Index&act=detail&weiba_id=$2&$3 [L]
RewriteRule ^(.*)/?weiba/([0-9]+)/digest$ $1\/index\.php\?app=weiba&mod=Index&act=detail&weiba_id=$2&type=digest&$3 [L]
RewriteRule ^(.*)/?weiba/([0-9]+)/post$ $1\/index\.php\?app=weiba&mod=Index&act=post&weiba_id=$2&$3 [L]
RewriteRule ^(.*)/?weiba/post_([0-9]+)/edit$ $1\/index\.php\?app=weiba&mod=Index&act=postEdit&post_id=$2&$3 [L]
RewriteRule ^(.*)/?weiba/post_([0-9]+)$ $1\/index\.php\?app=weiba&mod=Index&act=postDetail&post_id=$2&$3 [L]
RewriteRule ^(.*)/?weiba/reply_([0-9]+)/edit$ $1\/index\.php\?app=weiba&mod=Index&act=replyEdit&reply_id=$2&$3 [L]
RewriteRule ^(.*)/?weiba/([0-9]+)/manage$ $1\/index\.php\?app=weiba&mod=Manage&act=index&weiba_id=$2&$3 [L]
RewriteRule ^(.*)/?weiba/([0-9]+)/manage/member$ $1\/index\.php\?app=weiba&mod=Manage&act=member&weiba_id=$2&$3 [L]
RewriteRule ^(.*)/?weiba/([0-9]+)/manage/notify$ $1\/index\.php\?app=weiba&mod=Manage&act=notify&weiba_id=$2&$3 [L]
RewriteRule ^(.*)/?weiba/([0-9]+)/manage/log$ $1\/index\.php\?app=weiba&mod=Manage&act=log&weiba_id=$2&$3 [L]
\ No newline at end of file
<?php
header('Content-type:text/html;charset=UTF-8;');
/**/
//error_reporting(E_ALL ^ E_NOTICE);
error_reporting(E_ALL);
/**/
/**/
ini_set('session.cookie_path', '/');
ini_set('session.cookie_lifetime', '0');
// 检测是否为IP访问
if (!preg_match('/^(?:(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:1[0-9][0-9]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:2[0-5][0-5])|(?:25[0-5])|(?:1[0-9][0-9])|(?:[1-9][0-9])|(?:[0-9]))$/', $_SERVER['HTTP_HOST'])) {
ini_set('session.cookie_domain', stristr($_SERVER['HTTP_HOST'], '.'));
}
if (empty($_SERVER['HTTP_ORIGIN'])) {
$_SERVER['HTTP_ORIGIN'] = $_SERVER['HTTP_HOST'];
}
//网站根路径设置
define('SITE_PATH', dirname(__FILE__));
// 设置头信息
header('Access-Control-Allow-Origin:'.$_SERVER['HTTP_ORIGIN'] ?:'*');
header('Access-Control-Allow-Credentials:'.'true');
header('Access-Control-Allow-Methods:'.'POST, GET, OPTIONS, DELETE');
header('Access-Control-Max-Age:'.'3600');
header('Access-Control-Allow-Headers:'.'x-requested-with');
//安装检查开始:如果您已安装过eduline,可以删除本段代码
if (is_dir('install/') && !file_exists('install/install.lock')) {
die("<div style='border:2px solid green; background:#f1f1f1; padding:20px;margin:0 auto;width:960px;font-weight:bold;color:green;text-align:center;'>"
. "<h1>您尚未安装Eduline在线教育系统,<a href='/install/index.php'>请点击进入安装页面</a></h1>"
. "</div> <br /><br />");
}
$time_run_start = microtime(true);
$mem_run_start = memory_get_usage();
//载入核心文件
require SITE_PATH . '/core/core.php';
ini_set('display_errors', C('APP_DEBUG') ? 1 : 0);
Eduline\Think::start();
$mem_run_end = memory_get_usage();
$time_run_end = microtime(true);
if (C('APP_PAGE_LOG')) {
//数据库查询信息
echo '<div align="left">';
//缓存使用情况
//print_r(Cache::$log);
echo '<hr>';
echo ' Memories: ' . "<br/>";
echo 'ToTal: ', number_format(($mem_run_end - $mem_include_start) / 1024), 'k', "<br/>";
echo 'Include:', number_format(($mem_run_start - $mem_include_start) / 1024), 'k', "<br/>";
echo 'Run:', number_format(($mem_run_end - $mem_run_start) / 1024), 'k<br/><hr/>';
echo 'Time:<br/>';
echo 'ToTal: ', $time_run_end - $time_include_start, "s<br/>";
echo 'Include:', $time_run_start - $time_include_start, 's', "<br/>";
echo 'Run:', $time_run_end - $time_run_start, 's<br/><br/>';
echo '<hr>';
$log = Eduline\Log::$log;
foreach ($log as $l) {
$l = explode('SQL:', $l);
$l = $l[1];
$l = str_replace(array('RunTime:', 's SQL ='), ' ', $l);
echo $l . '<br/>';
}
$files = get_included_files();
dump($files);
echo '</div>';
}
<?php
phpinfo();
/*
===================
初始化【请勿修改】
===================
*/
body {font-family: Arial, "Microsoft Yahei", Simsun;}
html, body, div, dl, dt, dd, ul, p, th, td, h1, h2, h3, h4, h5, h6, pre,code, form, fieldset, legend {margin: 0;padding: 0;}
cite, em, strong, th {font-style: normal;}
td, th, div {word-break: break-all;word-wrap: break-word;}
form {display: inline;}
table {border-collapse: collapse;border-spacing: 0;}
th {text-align: left;font-weight: 100;}
ol li {list-style: decimal outside;}
ol {padding: 0 0 0 18px;margin: 0;}
li {list-style: none;}
img {border: 0;}
html { -webkit-text-size-adjust: none;overflow-y: scroll;}
/*
===================
html5标签
===================
*/
article, aside, details, figcaption, figure, footer, header, hgroup, nav,section {display: block;}
/*
===================
清除浮动【请勿修改】
>> cc 作用于父模型
>> c 作用于浮动模型后,父模型区域里
===================
*/
.cc {zoom: 1;}
.cc:after {content: '\20';display: block;height: 0;clear: both;visibility: hidden;}
.c {clear: both;height: 0;font: 0/0 Arial;overflow: hidden;width: 0;}
/*
===================
基础样式
>> b 加粗
>> u 下划线
>> i 斜体
>> w 文本不换行
>> tal 文本靠左显示
>> tac 文本居中显示
>> tar 文本靠右显示
>> fl 左浮动
>> fr 右浮动
>> pr 相对定位
>> cp 鼠标点击手势
>> vt 表格内容靠上显示
===================
*/
.b {font-weight: 700 !important;}
.u {text-decoration: underline !important;}
.i {font-style: italic !important;}
.w {white-space: nowrap;}
.tal { text-align: left !important;}
.tac { text-align: center !important;}
.tar {text-align: right !important;}
.fl {float: left !important;}
.fr {float: right !important;}
.pr {position: relative;}
.cp {cursor: pointer;}
.vt {vertical-align: top;}
.dn {display: none;}
/*
===================
字体
>> f10 小字体
>> f12 正常字
>> f14 大字
>> f16 更大
>> f24 标题类
>> fn 文本去粗
===================
*/
.f10 {font-size: 10px;}
.f12 {font-size: 12px !important;}
.f14 {font-size: 14px;}
.f16 {font-size: 16px;}
.f24 {font-size: 24px;font-family: Arial, "Microsoft Yahei", Simsun;}
.fn {font-weight: normal !important;}
.s1 {color: #ff0000;}
/*
===================
全局
===================
*/
body {font: 12px/1.5 Arial, Microsoft Yahei, Simsun;color: #333;background: url(../images/bg.png);}
a:link {color: #246EA5;text-decoration: none;}
a:hover {text-decoration: underline;}
a:visited {color: #762e9c;}
/*
===================
包裹
===================
*/
.wrap {margin: 50px auto 0;box-shadow: 0 0 10px #ccc;width: 750px;background: #fff;}
/*
===================
头部
===================
*/
.header {background: #246fa6 url(../images/header.png) 0 0 repeat-x;}
.header {height: 80px;box-shadow: 0 3px 3px #ddd;position: relative;color: #fff;}
/*
===================
主体
===================
*/
.main {padding-top: 35px;}
/*
===================
底部
===================
*/
.footer {text-align: center;padding: 15px 0 50px;color: #999999;}
.footer a {color: #999;text-decoration: none;}
.bottom {padding: 0 0 25px;}
/*
===================
协议
===================
*/
.pact {
box-shadow: 5px 5px 5px #f7f7f7 inset;
border: 1px solid #bdbcbc;
width: 670px;
height: 350px;
padding: 10px;
overflow: hidden;
display: block;
overflow-y: scroll;
margin: 0 auto;
font-size: 12px;
line-height: 25px;
margin-bottom: 22px;
outline: none;
}
pre {
white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;
word-break: normal;
}
/*
===================
版本号
===================
*/
.version {
float: right;
margin: 50px 25px 0 0;
}
/*
===================
LOGO
===================
*/
.logo {
float: left;
width: 400px;
height: 80px;
line-height: 80px;
font-family: '微软雅黑';
padding-left: 10px;
/* background:url(../images/logo.png) no-repeat;
overflow:hidden;
text-indent:-2000em;*/
}
/*
===================
安装类型文案
===================
*/
.icon_install, .icon_update {
float: left;
margin-top: 35px;
width: 90px;
height: 30px;
overflow: hidden;
text-indent: -2000em;
}
.icon_install {
background: url(../images/icon_install.png) no-repeat;
}
.icon_update {
background: url(../images/icon_update.png) no-repeat;
}
/*
===================
按钮
===================
*/
.btn, .btn_old {
display: inline-block;
width: 100px;
height: 30px;
background: url(../images/btn.png) no-repeat;
font: bold 14px/30px Arial, "Microsoft Yahei", Simsun;
text-decoration: none;
color: #fff !important;
margin: 0 5px;
border: 0 none;
cursor: pointer;
vertical-align: top;
}
.btn:hover {
background-position: 0 -30px;
text-decoration: none;
}
a.btn:visited {
color: #ffffff;
}
.btn_old, .btn_old:hover {
background-position: 0 -60px;
color: #999 !important;
cursor: default;
text-decoration: none;
}
a.btn_old:visited {
color: #999 !important;
}
/*
===================
步骤
===================
*/
.step, .step li em, .step li {
background: url(../images/step.png) repeat-x;
}
.step {
border-bottom: 1px solid #dce1e5;
height: 60px;
background-color: #fff;
}
.step li {
float: left;
height: 60px;
line-height: 60px;
width: 33%;
text-align: center;
font-size: 14px;
color: #6f7885;
font-weight: 700;
}
.step li em {
width: 32px;
height: 32px;
text-align: center;
line-height: 32px;
display: inline-block;
background-position: 0 -70px;
font-size: 20px;
color: #fff;
font-family: Microsoft Yahei;
margin-right: 10px;
vertical-align: 0;
}
.step li.current {
background-position: right -106px;
background-repeat: no-repeat;
color: #246ea5;
}
.step li.current em {
background-position: -35px -70px;
}
.step li.on {
background-position: 0 -176px;
}
.step li.on em {
background-position: -70px -70px;
}
/*
===================
服务器检测/信息输入
===================
*/
.server {
padding: 20px 20px 10px 65px;
}
.server table {
margin-bottom: 20px;
}
.server td {
padding: 3px 5px;
}
.server .td1 {
color: #417b9d;
font-weight: 700;
}
.server .input {
border: 1px solid;
border-color: #e3e9ef;
padding: 3px;
width: 200px;
font-size: 12px;
line-height: 18px;
}
.server .input:hover, .server .input:focus {
border: 1px solid #0e85d5;
outline: none;
}
.gray {
color: #bbb;
}
.server tr:hover .gray {
color: #333;
}
/*
===================
正确错误
===================
*/
.correct_span, .error_span {
display: block;
float: left;
width: 20px;
height: 16px;
text-indent: -2000em;
overflow: hidden;
background: url(../images/icon.png) no-repeat;
margin-right: 5px;
}
.error_span {
background-position: 0 -23px;
}
/*
===================
数据表写入
===================
*/
.install {
box-shadow: 5px 5px 5px #f7f7f7 inset;
border: 1px solid #bdbcbc;
width: 670px;
height: 350px;
padding: 10px;
overflow: hidden;
display: block;
overflow-y: scroll;
margin: 25px auto;
font-size: 12px;
margin-bottom: 22px;
outline: none;
}
.install ul {
line-height: 1.8;
}
/*
===================
成功提示
===================
*/
.success_tip {
/*border:1px solid #e0e9f0;*/
background: #fff url(../images/complete.png) 210px center no-repeat;
padding: 50px 80px 50px 300px;
line-height: 2;
}
.success_tip a, .s4 {
color: #0166a5;
text-decoration: none;
}
.success_tip a:hover {
text-decoration: underline;
}
.error_tip {
background: url(../images/ignore.png) 130px 45px no-repeat;
padding: 50px 80px 60px 230px;
}
/*founder login*/
.login {
border: 1px solid #e0e9f0;
background: #fff;
margin: 30px 120px 130px;
}
/*
===================
操作提示
>> tips 普通
>> tips_error 错误
>> tips_success 正确
>> tips_loading 加载中
使用方法
可独立样式使用,亦可与tips组装,例:
<div class="tips"><span class="tips_error">错误内容</span></div>
可在外出包裹 tips_block 对错误提示进行块级效果展示
===================
*/
.tips, .tips_block span {
line-height: 25px;
padding: 0 6px;
}
.tips {
border: 1px solid #faebd2;
background: #ffffe9;
color: #666;
}
.tips_error, .tips_success {
color: #cc3333;
padding-left: 16px;
background: url(../images/tips_system.png) -20px 2px no-repeat;
display: inline-block;
line-height: 18px;
}
.tips_success {
color: #008800;
background-position: 0 -19px;
}
.tips_loading {
color: #cc3333;
color: #333333;
display: inline-block;
line-height: 20px;
}
/*
===================
loading
===================
*/
.loading {
border-radius: 16px;
width: 100px;
height: 30px;
line-height: 30px;
text-align: center;
background: #000;
background-color: rgba(0, 0, 0, 0.5);
color: white;
position: fixed;
_position: absolute;
left: 50%;
margin-left: -50px;
top: 50%;
margin-top: -15px;
}
.loading span {
background: url(../images/pop_loading.gif) 0 center no-repeat;
padding-left: 24px;
}
/*
===================
升级类型选择
===================
*/
.updata_type {
padding: 20px 30px 40px;
}
.updata_type .hd {
font-size: 16px;
}
/*切换选择*/
.updata_type .tab {
padding-top: 10px;
}
.updata_type .tab li {
float: left;
width: 50%;
display: inline;
}
.updata_type .tab li a {
display: block;
text-decoration: none;
border: 1px solid #ccc;
text-align: center;
height: 60px;
line-height: 60px;
font-weight: 700;
background: #fff url(../images/tab.png);
color: #246EA5;
font-size: 22px;
font-weight: 100;
}
.updata_type .tab li a.fen {
line-height: 50px;
border-right: 0;
}
.updata_type .tab li a span {
display: block;
font-size: 12px;
color: #999;
line-height: 18px;
margin-top: -12px;
font-weight: 100;
}
.updata_type .tab li.current a {
background: #fdfdfd;
color: #6F7885;
border-bottom: 1px solid #fdfdfd;
}
.updata_type .tab_cont {
border: 1px solid #ccc;
border-top: 0 none;
padding: 30px;
background: #fdfdfd;
box-shadow: 1px 1px 1px #fff inset, -1px -1px 1px #fff inset;
}
.updata_type .tab_cont h3 {
font-size: 16px;
margin-bottom: 15px;
}
.updata_type .tab_cont h3 span {
font-size: 12px;
font-weight: 100;
color: #666;
}
.updata_type .tab_cont h4 {
font-size: 14px;
}
.updata_type .tab_cont h4 span {
padding-left: 10px;
font-size: 12px;
font-weight: 100;
color: #f60;
}
.updata_type .tab_cont ol li {
margin-bottom: 10px;
}
.updata_type .tab_cont div {
color: #666;
padding-left: 20px;
}
.updata_type .tab_cont ul li {
margin: 0;
padding-left: 50px;
list-style: none;
color: #666;
}
/*立即升级*/
.once_updata {
text-align: center;
padding: 100px 0;
}
.once_updata button {
font-size: 32px;
font-weight: 700;
background: #186196 url(../images/header.png) repeat-x;
color: #fff;
padding: 30px 80px;
font-weight: 100;
font-family: "Microsoft Yahei";
border: 1px solid #186196;
cursor: pointer;
letter-spacing: 2px;
}
\ No newline at end of file
<?php
header('Content-type:text/html;charset=UTF-8;');
date_default_timezone_set('PRC');
error_reporting(E_ALL & ~E_NOTICE);
@set_time_limit(1000);
if ('5.6.0' > phpversion()) {
exit('您的php版本过低,不能安装本软件,请升级到5.6.0或更高版本再安装!');
}
define('SITEDIR', _dir_path(substr(dirname(__FILE__), 0, -8)));
define("VERSION", 'Version 4.3.0');
$sqlFile = 'install.sql';
if (file_exists("./install.lock")) {
exit('你已经安装过此网站,若需重新安装请手动删除网站目录下install/install.lock文件!');
}
if (!is_readable('./' . $sqlFile)) {
echo '数据库文件无法读取,请检查install/install.sql是否存在!';
exit;
}
$Title = "Eduline在线教育系统";
$Powered = "Powered by Eduline";
$steps = array(
'1' => '安装许可协议',
'2' => '运行环境检测',
'3' => '安装参数设置',
'4' => '安装详细过程',
'5' => '安装完成',
);
$step = isset($_GET['step']) ? $_GET['step'] : 1;
//地址
$scriptName = !empty($_SERVER["REQUEST_URI"]) ? $scriptName = $_SERVER["REQUEST_URI"] : $scriptName = $_SERVER["PHP_SELF"];
$rootpath = @preg_replace("/\/(I|i)nstall\/index\.php(.*)$/", "", $scriptName);
$domain = empty($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
if ((int) $_SERVER['SERVER_PORT'] != 80) {
$domain .= ":" . $_SERVER['SERVER_PORT'];
}
$domain = $domain . $rootpath;
switch ($step) {
case '1':
include_once "./templates/s1.php";
exit();
case '2':
if (phpversion() < 5.6) {
die('本系统需要PHP5.6+MYSQL >=5.5环境,当前PHP版本为:' . phpversion());
}
$phpv = @phpversion();
$os = PHP_OS;
$os = php_uname();
$tmp = function_exists('gd_info') ? gd_info() : array();
$server = $_SERVER["SERVER_SOFTWARE"];
$host = (empty($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_HOST"] : $_SERVER["SERVER_ADDR"]);
$name = $_SERVER["SERVER_NAME"];
$max_execution_time = ini_get('max_execution_time');
$allow_reference = (ini_get('allow_call_time_pass_reference') ? '<font color=green>[√]On</font>' : '<font color=red>[×]Off</font>');
$allow_url_fopen = (ini_get('allow_url_fopen') ? '<font color=green>[√]On</font>' : '<font color=red>[×]Off</font>');
$safe_mode = (ini_get('safe_mode') ? '<font color=red>[×]On</font>' : '<font color=green>[√]Off</font>');
$err = 0;
if (empty($tmp['GD Version'])) {
$gd = '<font color=red>[×]Off</font>';
$err++;
} else {
$gd = '<font color=green>[√]On</font> ' . $tmp['GD Version'];
}
if (function_exists('mysql_connect')) {
$mysql = '<span class="correct_span">&radic;</span> 已安装';
} else {
$mysql = '<span class="correct_span error_span">&radic;</span> 出现错误';
$err++;
}
if (ini_get('file_uploads')) {
$uploadSize = '<span class="correct_span">&radic;</span> ' . ini_get('upload_max_filesize');
} else {
$uploadSize = '<span class="correct_span error_span">&radic;</span>禁止上传';
}
if (function_exists('session_start')) {
$session = '<span class="correct_span">&radic;</span> 支持';
} else {
$session = '<span class="correct_span error_span">&radic;</span> 不支持';
$err++;
}
$folder = array('_runtime/', 'config/', 'data/', 'install/');
include_once "./templates/s2.php";
exit();
case '3':
if ($_GET['testdbpwd']) {
$dbHost = $_POST['dbHost'] . ':' . $_POST['dbPort'];
$conn = @mysql_connect($dbHost, $_POST['dbUser'], $_POST['dbPwd']);
die($conn ? "1" : "");
}
include_once "./templates/s3.php";
exit();
case '4':
if (intval($_GET['install'])) {
$n = intval($_GET['n']);
$arr = array();
$dbHost = trim($_POST['dbhost']);
$dbPort = trim($_POST['dbport']);
$dbName = trim($_POST['dbname']);
$dbHost = empty($dbPort) || $dbPort == 3306 ? $dbHost : $dbHost . ':' . $dbPort;
$dbUser = trim($_POST['dbuser']);
$dbPwd = trim($_POST['dbpw']);
$dbPrefix = empty($_POST['dbprefix']) ? 'el_' : trim($_POST['dbprefix']);
$uname = trim($_POST['manager_email']);
$password = trim($_POST['manager_pwd']);
$randkey = uniqid(rand());
$config = array(
// 数据库常用配置
'DB_TYPE' => 'mysql', // 数据库类型
'DB_HOST' => $dbHost, // 数据库服务器地址
'DB_NAME' => $dbName, // 数据库名
'DB_USER' => $dbUser, // 数据库用户名
'DB_PWD' => $dbPwd, // 数据库密码
'DB_PORT' => $dbPort, // 数据库端口
'DB_PREFIX' => $dbPrefix, // 数据库表前缀(因为漫游的原因,数据库表前缀必须写在本文件)
'DB_CHARSET' => 'utf8', // 数据库编码
'SECURE_CODE' => $randkey, // 数据加密密钥
'COOKIE_PREFIX' => 'el_', // COOKIE前缀
'APP_DEBUG' => false, //网站调试模式
'API_NOT_ENCRYPT' => false, //API加密调试模式,开启后,所有API返回数据将不会加密
'API_DEBUG' => false, //API调试模式
'APP_PAGE_LOG' => false, //页面日志加载信息
);
$conn = @mysql_connect($dbHost, $dbUser, $dbPwd);
if (!$conn) {
$arr['msg'] = "连接数据库失败!";
die(json_encode($arr));
}
mysql_query("SET NAMES 'UTF8'");
$version = mysql_get_server_info($conn);
if ($version < 5.5) {
$arr['msg'] = '数据库版本太低!';
die(json_encode($arr));
}
if (!mysql_select_db($dbName, $conn)) {
//创建数据时同时设置编码
if (!mysql_query("CREATE DATABASE IF NOT EXISTS `" . $dbName . "` DEFAULT CHARACTER SET UTF8;", $conn)) {
$arr['msg'] = '数据库 ' . $dbName . ' 不存在,也没权限创建新的数据库!';
die(json_encode($arr));
}
if (empty($n)) {
$arr['n'] = 1;
$arr['msg'] = "成功创建数据库:{$dbName}<br>";
die(json_encode($arr));
}
mysql_select_db($dbName, $conn);
}
//读取数据文件
$sqldata = file_get_contents('./' . $sqlFile);
$sqlFormat = sql_split($sqldata, $dbPrefix);
//执行SQL语句
$counts = count($sqlFormat);
for ($i = $n; $i < $counts; $i++) {
$sql = trim($sqlFormat[$i]);
if (strstr($sql, 'CREATE TABLE')) {
preg_match('/CREATE TABLE `([^ ]*)`/', $sql, $matches);
mysql_query("DROP TABLE IF EXISTS `$matches[1]");
$ret = mysql_query($sql);
if ($ret) {
$message = '<li><span class="correct_span">&radic;</span>创建数据表' . $matches[1] . ',成功</li> ';
} else {
$message = '<li><span class="correct_span error_span">&radic;</span>创建数据表' . $matches[1] . ',失败</li>';
}
$i++;
$arr = array('n' => $i, 'msg' => $message);
die(json_encode($arr));
} else {
$ret = mysql_query($sql);
$message = '';
$arr = array('n' => $i, 'msg' => $message);
//echo json_encode($arr); exit;
}
}
if ($i == 999999) {
exit;
}
//插入管理员
$password = md5(md5($password) . '11111');
$ip = getIp();
$query = "INSERT INTO `{$dbPrefix}user` (`uid`, `login`, `password`, `login_salt`, `uname`, `email`, `phone`, `sex`, `background_id`, `location`, `is_audit`, `is_active`, `is_init`, `ctime`, `reg_ip`, `browser`, `browser_ver`, `os`, `place`, `identity`, `province`, `city`, `area`, `is_del`, `first_letter`, `intro`, `profession`, `last_login_time`, `search_key`, `invite_code`, `mail_activate`, `login_num`, `phone_activate`, `mhm_id`, `binding_uid`) VALUES ('1', '{$uname}', '{$password}', '11111', '管理员', '{$uname}', '', '2', '0', '北京市 北京市 海淀区', '1', '1', '1', " . time() . ", '{$ip}', NULL, NULL, NULL, NULL, '1', '110000', '110100', '110108', '0', 'E', '', '', '" . time() . "', '管理员 guanliyuan', NULL, '1', '0', '0', '0', '0');";
//将管理员加入“管理员”用户组
$sql_user_group = "INSERT INTO `{$dbPrefix}user_group_link` (`id`,`uid`,`user_group_id`) VALUES ('1', '1','1');";
if (mysql_query($query) && mysql_query($sql_user_group)) {
$quit = true;
} else {
$quit = false;
}
if ($quit) {
$message = '成功添加管理员<br />成功写入配置文件<br>安装完成。';
} else {
$message = '添加管理员失败,请重新安装!';
}
file_put_contents("../config/config.inc.php", ("<?php \r\n return " . var_export($config, true) . "; \r\n ?>"));
$arr = array('n' => 999999, 'msg' => $message);
die(json_encode($arr));
}
include_once "./templates/s4.php";
exit;
case '5':
file_get_contents('../cleancache.php');
include_once "./templates/s5.php";
@touch('./install.lock');
exit;
}
function testwrite($d)
{
$tfile = "_test.txt";
$fp = @fopen($d . "/" . $tfile, "w");
if (!$fp) {
return false;
}
fclose($fp);
$rs = @unlink($d . "/" . $tfile);
if ($rs) {
return true;
}
return false;
}
function sql_execute($sql, $tablepre)
{
$sqls = sql_split($sql, $tablepre);
if (is_array($sqls)) {
foreach ($sqls as $sql) {
if (trim($sql) != '') {
mysql_query($sql);
}
}
} else {
mysql_query($sqls);
}
return true;
}
function sql_split($sql, $tablepre)
{
//此处的前缀必须和sql文件的数据表前缀一致
if ($tablepre != '`el_') {
$sql = str_replace('`el_', '`'.$tablepre, $sql);
}
$sql = preg_replace("/TYPE=(InnoDB|MyISAM|MEMORY)( DEFAULT CHARSET=[^; ]+)?/", "ENGINE=\\1 DEFAULT CHARSET=utf8", $sql);
if ($r_tablepre != $s_tablepre) {
$sql = str_replace($s_tablepre, $r_tablepre, $sql);
}
$sql = str_replace("\r", "\n", $sql);
$ret = array();
$num = 0;
$queriesarray = explode(";\n", trim($sql));
unset($sql);
foreach ($queriesarray as $query) {
$ret[$num] = '';
$queries = explode("\n", trim($query));
$queries = array_filter($queries);
foreach ($queries as $query) {
$str1 = substr($query, 0, 1);
if ($str1 != '#' && $str1 != '-') {
$ret[$num] .= $query;
}
}
$num++;
}
return $ret;
}
function _dir_path($path)
{
$path = str_replace('\\', '/', $path);
if (substr($path, -1) != '/') {
$path = $path . '/';
}
return $path;
}
function dir_create($path, $mode = 0777)
{
if (is_dir($path)) {
return true;
}
$ftp_enable = 0;
$path = dir_path($path);
$temp = explode('/', $path);
$cur_dir = '';
$max = count($temp) - 1;
for ($i = 0; $i < $max; $i++) {
$cur_dir .= $temp[$i] . '/';
if (@is_dir($cur_dir)) {
continue;
}
@mkdir($cur_dir, 0777, true);
@chmod($cur_dir, 0777);
}
return is_dir($path);
}
function dir_path($path)
{
$path = str_replace('\\', '/', $path);
if (substr($path, -1) != '/') {
$path = $path . '/';
}
return $path;
}
/**
+----------------------------------------------------------
* 生成随机字符串
+----------------------------------------------------------
* @param int $length 要生成的随机字符串长度
* @param string $type 随机码类型:0,数字+大写字母;1,数字;2,小写字母;3,大写字母;4,特殊字符;-1,数字+大小写字母+特殊字符
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
function randCode($length = 5, $type = 0)
{
$arr = array(1 => "0123456789", 2 => "abcdefghijklmnopqrstuvwxyz", 3 => "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 4 => "~@#$%^&*(){}[]|");
if ($type == 0) {
array_pop($arr);
$string = implode("", $arr);
} else if ($type == "-1") {
$string = implode("", $arr);
} else {
$string = $arr[$type];
}
$count = strlen($string) - 1;
for ($i = 0; $i < $length; $i++) {
$str[$i] = $string[rand(0, $count)];
$code .= $str[$i];
}
return $code;
}
//获得访客真实ip
function getIp()
{
if (!empty($_SERVER['REMOTE_ADDR']) && !preg_match("/^(10|172\.16|192\.168)\./i", $_SERVER['REMOTE_ADDR'])) {
return $_SERVER['REMOTE_ADDR'];
}
if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
//获取代理ip
$ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
}
if ($ip) {
$ips = array_unshift($ips, $ip);
}
$count = count($ips);
for ($i = 0; $i < $count; $i++) {
if (!preg_match("/^(10|172\.16|192\.168)\./i", $ips[$i])) {
//排除局域网ip
$ip = $ips[$i];
break;
}
}
return $ip;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
/*!
* jQuery Form Plugin
* version: 3.09 (16-APR-2012)
* @requires jQuery v1.3.2 or later
*
* Examples and documentation at: http://malsup.com/jquery/form/
* Project repository: https://github.com/malsup/form
* Dual licensed under the MIT and GPL licenses:
* http://malsup.github.com/mit-license.txt
* http://malsup.github.com/gpl-license-v2.txt
*/
/*global ActiveXObject alert */
;(function($) {
"use strict";
/*
Usage Note:
-----------
Do not use both ajaxSubmit and ajaxForm on the same form. These
functions are mutually exclusive. Use ajaxSubmit if you want
to bind your own submit handler to the form. For example,
$(document).ready(function() {
$('#myForm').on('submit', function(e) {
e.preventDefault(); // <-- important
$(this).ajaxSubmit({
target: '#output'
});
});
});
Use ajaxForm when you want the plugin to manage all the event binding
for you. For example,
$(document).ready(function() {
$('#myForm').ajaxForm({
target: '#output'
});
});
You can also use ajaxForm with delegation (requires jQuery v1.7+), so the
form does not have to exist when you invoke ajaxForm:
$('#myForm').ajaxForm({
delegation: true,
target: '#output'
});
When using ajaxForm, the ajaxSubmit function will be invoked for you
at the appropriate time.
*/
/**
* Feature detection
*/
var feature = {};
feature.fileapi = $("<input type='file'/>").get(0).files !== undefined;
feature.formdata = window.FormData !== undefined;
/**
* ajaxSubmit() provides a mechanism for immediately submitting
* an HTML form using AJAX.
*/
$.fn.ajaxSubmit = function(options) {
/*jshint scripturl:true */
// fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
if (!this.length) {
log('ajaxSubmit: skipping submit process - no element selected');
return this;
}
var method, action, url, $form = this;
if (typeof options == 'function') {
options = { success: options };
}
method = this.attr('method');
action = this.attr('action');
url = (typeof action === 'string') ? $.trim(action) : '';
url = url || window.location.href || '';
if (url) {
// clean url (don't include hash vaue)
url = (url.match(/^([^#]+)/)||[])[1];
}
options = $.extend(true, {
url: url,
success: $.ajaxSettings.success,
type: method || 'GET',
iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
}, options);
// hook for manipulating the form data before it is extracted;
// convenient for use with rich editors like tinyMCE or FCKEditor
var veto = {};
this.trigger('form-pre-serialize', [this, options, veto]);
if (veto.veto) {
log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
return this;
}
// provide opportunity to alter form data before it is serialized
if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
log('ajaxSubmit: submit aborted via beforeSerialize callback');
return this;
}
var traditional = options.traditional;
if ( traditional === undefined ) {
traditional = $.ajaxSettings.traditional;
}
var elements = [];
var qx, a = this.formToArray(options.semantic, elements);
if (options.data) {
options.extraData = options.data;
qx = $.param(options.data, traditional);
}
// give pre-submit callback an opportunity to abort the submit
if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
log('ajaxSubmit: submit aborted via beforeSubmit callback');
return this;
}
// fire vetoable 'validate' event
this.trigger('form-submit-validate', [a, this, options, veto]);
if (veto.veto) {
log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
return this;
}
var q = $.param(a, traditional);
if (qx) {
q = ( q ? (q + '&' + qx) : qx );
}
if (options.type.toUpperCase() == 'GET') {
options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
options.data = null; // data is null for 'get'
}
else {
options.data = q; // data is the query string for 'post'
}
var callbacks = [];
if (options.resetForm) {
callbacks.push(function() { $form.resetForm(); });
}
if (options.clearForm) {
callbacks.push(function() { $form.clearForm(options.includeHidden); });
}
// perform a load on the target only if dataType is not provided
if (!options.dataType && options.target) {
var oldSuccess = options.success || function(){};
callbacks.push(function(data) {
var fn = options.replaceTarget ? 'replaceWith' : 'html';
$(options.target)[fn](data).each(oldSuccess, arguments);
});
}
else if (options.success) {
callbacks.push(options.success);
}
options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
var context = options.context || options; // jQuery 1.4+ supports scope context
for (var i=0, max=callbacks.length; i < max; i++) {
callbacks[i].apply(context, [data, status, xhr || $form, $form]);
}
};
// are there files to upload?
var fileInputs = $('input:file:enabled[value]', this); // [value] (issue #113)
var hasFileInputs = fileInputs.length > 0;
var mp = 'multipart/form-data';
var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);
var fileAPI = feature.fileapi && feature.formdata;
log("fileAPI :" + fileAPI);
var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI;
// options.iframe allows user to force iframe mode
// 06-NOV-09: now defaulting to iframe mode if file input is detected
if (options.iframe !== false && (options.iframe || shouldUseFrame)) {
// hack to fix Safari hang (thanks to Tim Molendijk for this)
// see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
if (options.closeKeepAlive) {
$.get(options.closeKeepAlive, function() {
fileUploadIframe(a);
});
}
else {
fileUploadIframe(a);
}
}
else if ((hasFileInputs || multipart) && fileAPI) {
fileUploadXhr(a);
}
else {
$.ajax(options);
}
// clear element array
for (var k=0; k < elements.length; k++)
elements[k] = null;
// fire 'notify' event
this.trigger('form-submit-notify', [this, options]);
return this;
// XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz)
function fileUploadXhr(a) {
var formdata = new FormData();
for (var i=0; i < a.length; i++) {
formdata.append(a[i].name, a[i].value);
}
if (options.extraData) {
for (var p in options.extraData)
if (options.extraData.hasOwnProperty(p))
formdata.append(p, options.extraData[p]);
}
options.data = null;
var s = $.extend(true, {}, $.ajaxSettings, options, {
contentType: false,
processData: false,
cache: false,
type: 'POST'
});
if (options.uploadProgress) {
// workaround because jqXHR does not expose upload property
s.xhr = function() {
var xhr = jQuery.ajaxSettings.xhr();
if (xhr.upload) {
xhr.upload.onprogress = function(event) {
var percent = 0;
var position = event.loaded || event.position; /*event.position is deprecated*/
var total = event.total;
if (event.lengthComputable) {
percent = Math.ceil(position / total * 100);
}
options.uploadProgress(event, position, total, percent);
};
}
return xhr;
};
}
s.data = null;
var beforeSend = s.beforeSend;
s.beforeSend = function(xhr, o) {
o.data = formdata;
if(beforeSend)
beforeSend.call(this, xhr, o);
};
return $.ajax(s);
}
// private function for handling file uploads (hat tip to YAHOO!)
function fileUploadIframe(a) {
var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle;
var useProp = !!$.fn.prop;
if ($(':input[name=submit],:input[id=submit]', form).length) {
// if there is an input with a name or id of 'submit' then we won't be
// able to invoke the submit fn on the form (at least not x-browser)
alert('Error: Form elements must not have name or id of "submit".');
return;
}
if (a) {
// ensure that every serialized input is still enabled
for (i=0; i < elements.length; i++) {
el = $(elements[i]);
if ( useProp )
el.prop('disabled', false);
else
el.removeAttr('disabled');
}
}
s = $.extend(true, {}, $.ajaxSettings, options);
s.context = s.context || s;
id = 'jqFormIO' + (new Date().getTime());
if (s.iframeTarget) {
$io = $(s.iframeTarget);
n = $io.attr('name');
if (!n)
$io.attr('name', id);
else
id = n;
}
else {
$io = $('<iframe name="' + id + '" src="'+ s.iframeSrc +'" />');
$io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
}
io = $io[0];
xhr = { // mock object
aborted: 0,
responseText: null,
responseXML: null,
status: 0,
statusText: 'n/a',
getAllResponseHeaders: function() {},
getResponseHeader: function() {},
setRequestHeader: function() {},
abort: function(status) {
var e = (status === 'timeout' ? 'timeout' : 'aborted');
log('aborting upload... ' + e);
this.aborted = 1;
$io.attr('src', s.iframeSrc); // abort op in progress
xhr.error = e;
if (s.error)
s.error.call(s.context, xhr, e, status);
if (g)
$.event.trigger("ajaxError", [xhr, s, e]);
if (s.complete)
s.complete.call(s.context, xhr, e);
}
};
g = s.global;
// trigger ajax global events so that activity/block indicators work like normal
if (g && 0 === $.active++) {
$.event.trigger("ajaxStart");
}
if (g) {
$.event.trigger("ajaxSend", [xhr, s]);
}
if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {
if (s.global) {
$.active--;
}
return;
}
if (xhr.aborted) {
return;
}
// add submitting element to data if we know it
sub = form.clk;
if (sub) {
n = sub.name;
if (n && !sub.disabled) {
s.extraData = s.extraData || {};
s.extraData[n] = sub.value;
if (sub.type == "image") {
s.extraData[n+'.x'] = form.clk_x;
s.extraData[n+'.y'] = form.clk_y;
}
}
}
var CLIENT_TIMEOUT_ABORT = 1;
var SERVER_ABORT = 2;
function getDoc(frame) {
var doc = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument ? frame.contentDocument : frame.document;
return doc;
}
// Rails CSRF hack (thanks to Yvan Barthelemy)
var csrf_token = $('meta[name=csrf-token]').attr('content');
var csrf_param = $('meta[name=csrf-param]').attr('content');
if (csrf_param && csrf_token) {
s.extraData = s.extraData || {};
s.extraData[csrf_param] = csrf_token;
}
// take a breath so that pending repaints get some cpu time before the upload starts
function doSubmit() {
// make sure form attrs are set
var t = $form.attr('target'), a = $form.attr('action');
// update form attrs in IE friendly way
form.setAttribute('target',id);
if (!method) {
form.setAttribute('method', 'POST');
}
if (a != s.url) {
form.setAttribute('action', s.url);
}
// ie borks in some cases when setting encoding
if (! s.skipEncodingOverride && (!method || /post/i.test(method))) {
$form.attr({
encoding: 'multipart/form-data',
enctype: 'multipart/form-data'
});
}
// support timout
if (s.timeout) {
timeoutHandle = setTimeout(function() { timedOut = true; cb(CLIENT_TIMEOUT_ABORT); }, s.timeout);
}
// look for server aborts
function checkState() {
try {
var state = getDoc(io).readyState;
log('state = ' + state);
if (state && state.toLowerCase() == 'uninitialized')
setTimeout(checkState,50);
}
catch(e) {
log('Server abort: ' , e, ' (', e.name, ')');
cb(SERVER_ABORT);
if (timeoutHandle)
clearTimeout(timeoutHandle);
timeoutHandle = undefined;
}
}
// add "extra" data to form if provided in options
var extraInputs = [];
try {
if (s.extraData) {
for (var n in s.extraData) {
if (s.extraData.hasOwnProperty(n)) {
extraInputs.push(
$('<input type="hidden" name="'+n+'">').attr('value',s.extraData[n])
.appendTo(form)[0]);
}
}
}
if (!s.iframeTarget) {
// add iframe to doc and submit the form
$io.appendTo('body');
if (io.attachEvent)
io.attachEvent('onload', cb);
else
io.addEventListener('load', cb, false);
}
setTimeout(checkState,15);
form.submit();
}
finally {
// reset attrs and remove "extra" input elements
form.setAttribute('action',a);
if(t) {
form.setAttribute('target', t);
} else {
$form.removeAttr('target');
}
$(extraInputs).remove();
}
}
if (s.forceSync) {
doSubmit();
}
else {
setTimeout(doSubmit, 10); // this lets dom updates render
}
var data, doc, domCheckCount = 50, callbackProcessed;
function cb(e) {
if (xhr.aborted || callbackProcessed) {
return;
}
try {
doc = getDoc(io);
}
catch(ex) {
log('cannot access response document: ', ex);
e = SERVER_ABORT;
}
if (e === CLIENT_TIMEOUT_ABORT && xhr) {
xhr.abort('timeout');
return;
}
else if (e == SERVER_ABORT && xhr) {
xhr.abort('server abort');
return;
}
if (!doc || doc.location.href == s.iframeSrc) {
// response not received yet
if (!timedOut)
return;
}
if (io.detachEvent)
io.detachEvent('onload', cb);
else
io.removeEventListener('load', cb, false);
var status = 'success', errMsg;
try {
if (timedOut) {
throw 'timeout';
}
var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
log('isXml='+isXml);
if (!isXml && window.opera && (doc.body === null || !doc.body.innerHTML)) {
if (--domCheckCount) {
// in some browsers (Opera) the iframe DOM is not always traversable when
// the onload callback fires, so we loop a bit to accommodate
log('requeing onLoad callback, DOM not available');
setTimeout(cb, 250);
return;
}
// let this fall through because server response could be an empty document
//log('Could not access iframe DOM after mutiple tries.');
//throw 'DOMException: not available';
}
//log('response detected');
var docRoot = doc.body ? doc.body : doc.documentElement;
xhr.responseText = docRoot ? docRoot.innerHTML : null;
xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
if (isXml)
s.dataType = 'xml';
xhr.getResponseHeader = function(header){
var headers = {'content-type': s.dataType};
return headers[header];
};
// support for XHR 'status' & 'statusText' emulation :
if (docRoot) {
xhr.status = Number( docRoot.getAttribute('status') ) || xhr.status;
xhr.statusText = docRoot.getAttribute('statusText') || xhr.statusText;
}
var dt = (s.dataType || '').toLowerCase();
var scr = /(json|script|text)/.test(dt);
if (scr || s.textarea) {
// see if user embedded response in textarea
var ta = doc.getElementsByTagName('textarea')[0];
if (ta) {
xhr.responseText = ta.value;
// support for XHR 'status' & 'statusText' emulation :
xhr.status = Number( ta.getAttribute('status') ) || xhr.status;
xhr.statusText = ta.getAttribute('statusText') || xhr.statusText;
}
else if (scr) {
// account for browsers injecting pre around json response
var pre = doc.getElementsByTagName('pre')[0];
var b = doc.getElementsByTagName('body')[0];
if (pre) {
xhr.responseText = pre.textContent ? pre.textContent : pre.innerText;
}
else if (b) {
xhr.responseText = b.textContent ? b.textContent : b.innerText;
}
}
}
else if (dt == 'xml' && !xhr.responseXML && xhr.responseText) {
xhr.responseXML = toXml(xhr.responseText);
}
try {
data = httpData(xhr, dt, s);
}
catch (e) {
status = 'parsererror';
xhr.error = errMsg = (e || status);
}
}
catch (e) {
log('error caught: ',e);
status = 'error';
xhr.error = errMsg = (e || status);
}
if (xhr.aborted) {
log('upload aborted');
status = null;
}
if (xhr.status) { // we've set xhr.status
status = (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ? 'success' : 'error';
}
// ordering of these callbacks/triggers is odd, but that's how $.ajax does it
if (status === 'success') {
if (s.success)
s.success.call(s.context, data, 'success', xhr);
if (g)
$.event.trigger("ajaxSuccess", [xhr, s]);
}
else if (status) {
if (errMsg === undefined)
errMsg = xhr.statusText;
if (s.error)
s.error.call(s.context, xhr, status, errMsg);
if (g)
$.event.trigger("ajaxError", [xhr, s, errMsg]);
}
if (g)
$.event.trigger("ajaxComplete", [xhr, s]);
if (g && ! --$.active) {
$.event.trigger("ajaxStop");
}
if (s.complete)
s.complete.call(s.context, xhr, status);
callbackProcessed = true;
if (s.timeout)
clearTimeout(timeoutHandle);
// clean up
setTimeout(function() {
if (!s.iframeTarget)
$io.remove();
xhr.responseXML = null;
}, 100);
}
var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+)
if (window.ActiveXObject) {
doc = new ActiveXObject('Microsoft.XMLDOM');
doc.async = 'false';
doc.loadXML(s);
}
else {
doc = (new DOMParser()).parseFromString(s, 'text/xml');
}
return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;
};
var parseJSON = $.parseJSON || function(s) {
/*jslint evil:true */
return window['eval']('(' + s + ')');
};
var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4
var ct = xhr.getResponseHeader('content-type') || '',
xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
data = xml ? xhr.responseXML : xhr.responseText;
if (xml && data.documentElement.nodeName === 'parsererror') {
if ($.error)
$.error('parsererror');
}
if (s && s.dataFilter) {
data = s.dataFilter(data, type);
}
if (typeof data === 'string') {
if (type === 'json' || !type && ct.indexOf('json') >= 0) {
data = parseJSON(data);
} else if (type === "script" || !type && ct.indexOf("javascript") >= 0) {
$.globalEval(data);
}
}
return data;
};
}
};
/**
* ajaxForm() provides a mechanism for fully automating form submission.
*
* The advantages of using this method instead of ajaxSubmit() are:
*
* 1: This method will include coordinates for <input type="image" /> elements (if the element
* is used to submit the form).
* 2. This method will include the submit element's name/value data (for the element that was
* used to submit the form).
* 3. This method binds the submit() method to the form for you.
*
* The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely
* passes the options argument along after properly binding events for submit elements and
* the form itself.
*/
$.fn.ajaxForm = function(options) {
options = options || {};
options.delegation = options.delegation && $.isFunction($.fn.on);
// in jQuery 1.3+ we can fix mistakes with the ready state
if (!options.delegation && this.length === 0) {
var o = { s: this.selector, c: this.context };
if (!$.isReady && o.s) {
log('DOM not ready, queuing ajaxForm');
$(function() {
$(o.s,o.c).ajaxForm(options);
});
return this;
}
// is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
return this;
}
if ( options.delegation ) {
$(document)
.off('submit.form-plugin', this.selector, doAjaxSubmit)
.off('click.form-plugin', this.selector, captureSubmittingElement)
.on('submit.form-plugin', this.selector, options, doAjaxSubmit)
.on('click.form-plugin', this.selector, options, captureSubmittingElement);
return this;
}
return this.ajaxFormUnbind()
.bind('submit.form-plugin', options, doAjaxSubmit)
.bind('click.form-plugin', options, captureSubmittingElement);
};
// private event handlers
function doAjaxSubmit(e) {
/*jshint validthis:true */
var options = e.data;
if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
e.preventDefault();
$(this).ajaxSubmit(options);
}
}
function captureSubmittingElement(e) {
/*jshint validthis:true */
var target = e.target;
var $el = $(target);
if (!($el.is(":submit,input:image"))) {
// is this a child element of the submit el? (ex: a span within a button)
var t = $el.closest(':submit');
if (t.length === 0) {
return;
}
target = t[0];
}
var form = this;
form.clk = target;
if (target.type == 'image') {
if (e.offsetX !== undefined) {
form.clk_x = e.offsetX;
form.clk_y = e.offsetY;
} else if (typeof $.fn.offset == 'function') {
var offset = $el.offset();
form.clk_x = e.pageX - offset.left;
form.clk_y = e.pageY - offset.top;
} else {
form.clk_x = e.pageX - target.offsetLeft;
form.clk_y = e.pageY - target.offsetTop;
}
}
// clear form vars
setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
}
// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
$.fn.ajaxFormUnbind = function() {
return this.unbind('submit.form-plugin click.form-plugin');
};
/**
* formToArray() gathers form element data into an array of objects that can
* be passed to any of the following ajax functions: $.get, $.post, or load.
* Each object in the array has both a 'name' and 'value' property. An example of
* an array for a simple login form might be:
*
* [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
*
* It is this array that is passed to pre-submit callback functions provided to the
* ajaxSubmit() and ajaxForm() methods.
*/
$.fn.formToArray = function(semantic, elements) {
var a = [];
if (this.length === 0) {
return a;
}
var form = this[0];
var els = semantic ? form.getElementsByTagName('*') : form.elements;
if (!els) {
return a;
}
var i,j,n,v,el,max,jmax;
for(i=0, max=els.length; i < max; i++) {
el = els[i];
n = el.name;
if (!n) {
continue;
}
if(el.type == 'application/x-shockwave-flash'){
return;
}
if (semantic && form.clk && el.type == "image") {
// handle image inputs on the fly when semantic == true
if(!el.disabled && form.clk == el) {
a.push({name: n, value: $(el).val(), type: el.type });
a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
}
continue;
}
v = $.fieldValue(el, true);
if (v && v.constructor == Array) {
if (elements)
elements.push(el);
for(j=0, jmax=v.length; j < jmax; j++) {
a.push({name: n, value: v[j]});
}
}
else if (feature.fileapi && el.type == 'file' && !el.disabled) {
if (elements)
elements.push(el);
var files = el.files;
if (files.length) {
for (j=0; j < files.length; j++) {
a.push({name: n, value: files[j], type: el.type});
}
}
else {
// #180
a.push({ name: n, value: '', type: el.type });
}
}
else if (v !== null && typeof v != 'undefined') {
if (elements)
elements.push(el);
a.push({name: n, value: v, type: el.type, required: el.required});
}
}
if (!semantic && form.clk) {
// input type=='image' are not found in elements array! handle it here
var $input = $(form.clk), input = $input[0];
n = input.name;
if (n && !input.disabled && input.type == 'image') {
a.push({name: n, value: $input.val()});
a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
}
}
return a;
};
/**
* Serializes form data into a 'submittable' string. This method will return a string
* in the format: name1=value1&amp;name2=value2
*/
$.fn.formSerialize = function(semantic) {
//hand off to jQuery.param for proper encoding
return $.param(this.formToArray(semantic));
};
/**
* Serializes all field elements in the jQuery object into a query string.
* This method will return a string in the format: name1=value1&amp;name2=value2
*/
$.fn.fieldSerialize = function(successful) {
var a = [];
this.each(function() {
var n = this.name;
if (!n) {
return;
}
var v = $.fieldValue(this, successful);
if (v && v.constructor == Array) {
for (var i=0,max=v.length; i < max; i++) {
a.push({name: n, value: v[i]});
}
}
else if (v !== null && typeof v != 'undefined') {
a.push({name: this.name, value: v});
}
});
//hand off to jQuery.param for proper encoding
return $.param(a);
};
/**
* Returns the value(s) of the element in the matched set. For example, consider the following form:
*
* <form><fieldset>
* <input name="A" type="text" />
* <input name="A" type="text" />
* <input name="B" type="checkbox" value="B1" />
* <input name="B" type="checkbox" value="B2"/>
* <input name="C" type="radio" value="C1" />
* <input name="C" type="radio" value="C2" />
* </fieldset></form>
*
* var v = $(':text').fieldValue();
* // if no values are entered into the text inputs
* v == ['','']
* // if values entered into the text inputs are 'foo' and 'bar'
* v == ['foo','bar']
*
* var v = $(':checkbox').fieldValue();
* // if neither checkbox is checked
* v === undefined
* // if both checkboxes are checked
* v == ['B1', 'B2']
*
* var v = $(':radio').fieldValue();
* // if neither radio is checked
* v === undefined
* // if first radio is checked
* v == ['C1']
*
* The successful argument controls whether or not the field element must be 'successful'
* (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
* The default value of the successful argument is true. If this value is false the value(s)
* for each element is returned.
*
* Note: This method *always* returns an array. If no valid value can be determined the
* array will be empty, otherwise it will contain one or more values.
*/
$.fn.fieldValue = function(successful) {
for (var val=[], i=0, max=this.length; i < max; i++) {
var el = this[i];
var v = $.fieldValue(el, successful);
if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {
continue;
}
if (v.constructor == Array)
$.merge(val, v);
else
val.push(v);
}
return val;
};
/**
* Returns the value of the field element.
*/
$.fieldValue = function(el, successful) {
var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
if (successful === undefined) {
successful = true;
}
if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
(t == 'checkbox' || t == 'radio') && !el.checked ||
(t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
tag == 'select' && el.selectedIndex == -1)) {
return null;
}
if (tag == 'select') {
var index = el.selectedIndex;
if (index < 0) {
return null;
}
var a = [], ops = el.options;
var one = (t == 'select-one');
var max = (one ? index+1 : ops.length);
for(var i=(one ? index : 0); i < max; i++) {
var op = ops[i];
if (op.selected) {
var v = op.value;
if (!v) { // extra pain for IE...
v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
}
if (one) {
return v;
}
a.push(v);
}
}
return a;
}
return $(el).val();
};
/**
* Clears the form data. Takes the following actions on the form's input fields:
* - input text fields will have their 'value' property set to the empty string
* - select elements will have their 'selectedIndex' property set to -1
* - checkbox and radio inputs will have their 'checked' property set to false
* - inputs of type submit, button, reset, and hidden will *not* be effected
* - button elements will *not* be effected
*/
$.fn.clearForm = function(includeHidden) {
return this.each(function() {
$('input,select,textarea', this).clearFields(includeHidden);
});
};
/**
* Clears the selected form elements.
*/
$.fn.clearFields = $.fn.clearInputs = function(includeHidden) {
var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i; // 'hidden' is not in this list
return this.each(function() {
var t = this.type, tag = this.tagName.toLowerCase();
if (re.test(t) || tag == 'textarea') {
this.value = '';
}
else if (t == 'checkbox' || t == 'radio') {
this.checked = false;
}
else if (tag == 'select') {
this.selectedIndex = -1;
}
else if (includeHidden) {
// includeHidden can be the valud true, or it can be a selector string
// indicating a special test; for example:
// $('#myForm').clearForm('.special:hidden')
// the above would clean hidden inputs that have the class of 'special'
if ( (includeHidden === true && /hidden/.test(t)) ||
(typeof includeHidden == 'string' && $(this).is(includeHidden)) )
this.value = '';
}
});
};
/**
* Resets the form data. Causes all form elements to be reset to their original value.
*/
$.fn.resetForm = function() {
return this.each(function() {
// guard against an input with the name of 'reset'
// note that IE reports the reset function as an 'object'
if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {
this.reset();
}
});
};
/**
* Enables or disables any matching elements.
*/
$.fn.enable = function(b) {
if (b === undefined) {
b = true;
}
return this.each(function() {
this.disabled = !b;
});
};
/**
* Checks/unchecks any matching checkboxes or radio buttons and
* selects/deselects and matching option elements.
*/
$.fn.selected = function(select) {
if (select === undefined) {
select = true;
}
return this.each(function() {
var t = this.type;
if (t == 'checkbox' || t == 'radio') {
this.checked = select;
}
else if (this.tagName.toLowerCase() == 'option') {
var $sel = $(this).parent('select');
if (select && $sel[0] && $sel[0].type == 'select-one') {
// deselect all other options
$sel.find('option').selected(false);
}
this.selected = select;
}
});
};
// expose debug var
$.fn.ajaxSubmit.debug = false;
// helper fn for console logging
function log() {
if (!$.fn.ajaxSubmit.debug)
return;
var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
if (window.console && window.console.log) {
window.console.log(msg);
}
else if (window.opera && window.opera.postError) {
window.opera.postError(msg);
}
}
})(jQuery);
\ No newline at end of file
/*! jQuery v@1.8.0 jquery.com | jquery.org/license */
(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bX(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bV.length;while(e--){b=bV[e]+c;if(b in a)return b}return d}function bY(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function bZ(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bY(c)&&(e[f]=p._data(c,"olddisplay",cb(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b$(a,b,c){var d=bO.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function b_(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bU[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bU[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bU[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bU[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bU[e]+"Width"))||0));return f}function ca(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bP.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+b_(a,b,c||(f?"border":"content"),e)+"px"}function cb(a){if(bR[a])return bR[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bR[a]=c,c}function ch(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||cd.test(a)?d(a,e):ch(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ch(a+"["+e+"]",b[e],c,d);else d(a,b)}function cy(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cz(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cu;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cz(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cz(a,c,d,e,"*",g)),h}function cA(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cB(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cC(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cK(){try{return new a.XMLHttpRequest}catch(b){}}function cL(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cT(){return setTimeout(function(){cM=b},0),cM=p.now()}function cU(a,b){p.each(b,function(b,c){var d=(cS[b]||[]).concat(cS["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cV(a,b,c){var d,e=0,f=0,g=cR.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cM||cT(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cM||cT(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cW(k,j.opts.specialEasing);for(;e<g;e++){d=cR[e].call(j,a,k,j.opts);if(d)return d}return cU(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cW(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cX(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bY(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cb(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cO.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cY(a,b,c,d,e){return new cY.prototype.init(a,b,c,d,e)}function cZ(a,b){var c,d={height:a},e=0;for(;e<4;e+=2-b)c=bU[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function c_(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=r.test(" ")?/^[\s\xA0]+|[\s\xA0]+$/g:/^\s+|\s+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.0",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":a.toString().replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||f.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete"||e.readyState!=="loading"&&e.addEventListener)setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){p.isFunction(c)&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return typeof a=="object"?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length||!d)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/^(?:\{.*\}|\[.*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||++p.uuid:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")===0&&(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.shift(),e=p._queueHooks(a,b),f=function(){p.dequeue(a,b)};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),delete e.stop,d.call(a,f,e)),!c.length&&e&&e.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)(d=p._data(g[h],a+"queueHooks"))&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)~f.indexOf(" "+b[g]+" ")||(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>-1)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,""+d),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,k,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=[].slice.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click")){g=p(this),g.context=this;for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){i={},k=[],g[0]=f;for(d=0;d<q;d++)l=o[d],m=l.selector,i[m]===b&&(i[m]=g.is(m)),i[m]&&k.push(l);k.length&&u.push({elem:f,matches:k})}}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){j=u[d],c.currentTarget=j.elem;for(e=0;e<j.matches.length&&!c.isImmediatePropagationStopped();e++){l=j.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,h=((p.event.special[l.origType]||{}).handle||l.handler).apply(j.elem,r),h!==b&&(c.result=h,h===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{ready:{setup:p.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bd(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)Z(a,b[e],c,d)}function be(a,b,c,d,e,f){var g,h=$.setFilters[b.toLowerCase()];return h||Z.error(b),(a||!(g=e))&&bd(a||"*",d,g=[],e),g.length>0?h(g,c,f):[]}function bf(a,c,d,e,f){var g,h,i,j,k,l,m,n,p=0,q=f.length,s=L.POS,t=new RegExp("^"+s.source+"(?!"+r+")","i"),u=function(){var a=1,c=arguments.length-2;for(;a<c;a++)arguments[a]===b&&(g[a]=b)};for(;p<q;p++){s.exec(""),a=f[p],j=[],i=0,k=e;while(g=s.exec(a)){n=s.lastIndex=g.index+g[0].length;if(n>i){m=a.slice(i,g.index),i=n,l=[c],B.test(m)&&(k&&(l=k),k=e);if(h=H.test(m))m=m.slice(0,-5).replace(B,"$&*");g.length>1&&g[0].replace(t,u),k=be(m,g[1],g[2],l,k,h)}}k?(j=j.concat(k),(m=a.slice(i))&&m!==")"?B.test(m)?bd(m,j,d,e):Z(m,c,d,e?e.concat(k):k):o.apply(d,j)):Z(a,c,d,e)}return q===1?d:Z.uniqueSort(d)}function bg(a,b,c){var d,e,f,g=[],i=0,j=D.exec(a),k=!j.pop()&&!j.pop(),l=k&&a.match(C)||[""],m=$.preFilter,n=$.filter,o=!c&&b!==h;for(;(e=l[i])!=null&&k;i++){g.push(d=[]),o&&(e=" "+e);while(e){k=!1;if(j=B.exec(e))e=e.slice(j[0].length),k=d.push({part:j.pop().replace(A," "),captures:j});for(f in n)(j=L[f].exec(e))&&(!m[f]||(j=m[f](j,b,c)))&&(e=e.slice(j.shift().length),k=d.push({part:f,captures:j}));if(!k)break}}return k||Z.error(a),g}function bh(a,b,e){var f=b.dir,g=m++;return a||(a=function(a){return a===e}),b.first?function(b,c){while(b=b[f])if(b.nodeType===1)return a(b,c)&&b}:function(b,e){var h,i=g+"."+d,j=i+"."+c;while(b=b[f])if(b.nodeType===1){if((h=b[q])===j)return b.sizset;if(typeof h=="string"&&h.indexOf(i)===0){if(b.sizset)return b}else{b[q]=j;if(a(b,e))return b.sizset=!0,b;b.sizset=!1}}}}function bi(a,b){return a?function(c,d){var e=b(c,d);return e&&a(e===!0?c:e,d)}:b}function bj(a,b,c){var d,e,f=0;for(;d=a[f];f++)$.relative[d.part]?e=bh(e,$.relative[d.part],b):(d.captures.push(b,c),e=bi(e,$.filter[d.part].apply(null,d.captures)));return e}function bk(a){return function(b,c){var d,e=0;for(;d=a[e];e++)if(d(b,c))return!0;return!1}}var c,d,e,f,g,h=a.document,i=h.documentElement,j="undefined",k=!1,l=!0,m=0,n=[].slice,o=[].push,q=("sizcache"+Math.random()).replace(".",""),r="[\\x20\\t\\r\\n\\f]",s="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",t=s.replace("w","w#"),u="([*^$|!~]?=)",v="\\["+r+"*("+s+")"+r+"*(?:"+u+r+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+t+")|)|)"+r+"*\\]",w=":("+s+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|((?:[^,]|\\\\,|(?:,(?=[^\\[]*\\]))|(?:,(?=[^\\(]*\\))))*))\\)|)",x=":(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\)|)(?=[^-]|$)",y=r+"*([\\x20\\t\\r\\n\\f>+~])"+r+"*",z="(?=[^\\x20\\t\\r\\n\\f])(?:\\\\.|"+v+"|"+w.replace(2,7)+"|[^\\\\(),])+",A=new RegExp("^"+r+"+|((?:^|[^\\\\])(?:\\\\.)*)"+r+"+$","g"),B=new RegExp("^"+y),C=new RegExp(z+"?(?="+r+"*,|$)","g"),D=new RegExp("^(?:(?!,)(?:(?:^|,)"+r+"*"+z+")*?|"+r+"*(.*?))(\\)|$)"),E=new RegExp(z.slice(19,-6)+"\\x20\\t\\r\\n\\f>+~])+|"+y,"g"),F=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,G=/[\x20\t\r\n\f]*[+~]/,H=/:not\($/,I=/h\d/i,J=/input|select|textarea|button/i,K=/\\(?!\\)/g,L={ID:new RegExp("^#("+s+")"),CLASS:new RegExp("^\\.("+s+")"),NAME:new RegExp("^\\[name=['\"]?("+s+")['\"]?\\]"),TAG:new RegExp("^("+s.replace("[-","[-\\*")+")"),ATTR:new RegExp("^"+v),PSEUDO:new RegExp("^"+w),CHILD:new RegExp("^:(only|nth|last|first)-child(?:\\("+r+"*(even|odd|(([+-]|)(\\d*)n|)"+r+"*(?:([+-]|)"+r+"*(\\d+)|))"+r+"*\\)|)","i"),POS:new RegExp(x,"ig"),needsContext:new RegExp("^"+r+"*[>+~]|"+x,"i")},M={},N=[],O={},P=[],Q=function(a){return a.sizzleFilter=!0,a},R=function(a){return function(b){return b.nodeName.toLowerCase()==="input"&&b.type===a}},S=function(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}},T=function(a){var b=!1,c=h.createElement("div");try{b=a(c)}catch(d){}return c=null,b},U=T(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),V=T(function(a){a.id=q+0,a.innerHTML="<a name='"+q+"'></a><div name='"+q+"'></div>",i.insertBefore(a,i.firstChild);var b=h.getElementsByName&&h.getElementsByName(q).length===2+h.getElementsByName(q+0).length;return g=!h.getElementById(q),i.removeChild(a),b}),W=T(function(a){return a.appendChild(h.createComment("")),a.getElementsByTagName("*").length===0}),X=T(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==j&&a.firstChild.getAttribute("href")==="#"}),Y=T(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||a.getElementsByClassName("e").length===0?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length!==1)}),Z=function(a,b,c,d){c=c||[],b=b||h;var e,f,g,i,j=b.nodeType;if(j!==1&&j!==9)return[];if(!a||typeof a!="string")return c;g=ba(b);if(!g&&!d)if(e=F.exec(a))if(i=e[1]){if(j===9){f=b.getElementById(i);if(!f||!f.parentNode)return c;if(f.id===i)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(i))&&bb(b,f)&&f.id===i)return c.push(f),c}else{if(e[2])return o.apply(c,n.call(b.getElementsByTagName(a),0)),c;if((i=e[3])&&Y&&b.getElementsByClassName)return o.apply(c,n.call(b.getElementsByClassName(i),0)),c}return bm(a,b,c,d,g)},$=Z.selectors={cacheLength:50,match:L,order:["ID","TAG"],attrHandle:{},createPseudo:Q,find:{ID:g?function(a,b,c){if(typeof b.getElementById!==j&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==j&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==j&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:W?function(a,b){if(typeof b.getElementsByTagName!==j)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(K,""),a[3]=(a[4]||a[5]||"").replace(K,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||Z.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&Z.error(a[0]),a},PSEUDO:function(a){var b,c=a[4];return L.CHILD.test(a[0])?null:(c&&(b=D.exec(c))&&b.pop()&&(a[0]=a[0].slice(0,b[0].length-c.length-1),c=b[0].slice(0,-1)),a.splice(2,3,c||a[3]),a)}},filter:{ID:g?function(a){return a=a.replace(K,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(K,""),function(b){var c=typeof b.getAttributeNode!==j&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(K,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=M[a];return b||(b=M[a]=new RegExp("(^|"+r+")"+a+"("+r+"|$)"),N.push(a),N.length>$.cacheLength&&delete M[N.shift()]),function(a){return b.test(a.className||typeof a.getAttribute!==j&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return b?function(d){var e=Z.attr(d,a),f=e+"";if(e==null)return b==="!=";switch(b){case"=":return f===c;case"!=":return f!==c;case"^=":return c&&f.indexOf(c)===0;case"*=":return c&&f.indexOf(c)>-1;case"$=":return c&&f.substr(f.length-c.length)===c;case"~=":return(" "+f+" ").indexOf(c)>-1;case"|=":return f===c||f.substr(0,c.length+1)===c+"-"}}:function(b){return Z.attr(b,a)!=null}},CHILD:function(a,b,c,d){if(a==="nth"){var e=m++;return function(a){var b,f,g=0,h=a;if(c===1&&d===0)return!0;b=a.parentNode;if(b&&(b[q]!==e||!a.sizset)){for(h=b.firstChild;h;h=h.nextSibling)if(h.nodeType===1){h.sizset=++g;if(h===a)break}b[q]=e}return f=a.sizset-d,c===0?f===0:f%c===0&&f/c>=0}}return function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b,c,d){var e=$.pseudos[a]||$.pseudos[a.toLowerCase()];return e||Z.error("unsupported pseudo: "+a),e.sizzleFilter?e(b,c,d):e}},pseudos:{not:Q(function(a,b,c){var d=bl(a.replace(A,"$1"),b,c);return function(a){return!d(a)}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!$.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},contains:Q(function(a){return function(b){return(b.textContent||b.innerText||bc(b)).indexOf(a)>-1}}),has:Q(function(a){return function(b){return Z(a,b).length>0}}),header:function(a){return I.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:R("radio"),checkbox:R("checkbox"),file:R("file"),password:R("password"),image:R("image"),submit:S("submit"),reset:S("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return J.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b,c){return c?a.slice(1):[a[0]]},last:function(a,b,c){var d=a.pop();return c?a:[d]},even:function(a,b,c){var d=[],e=c?1:0,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},odd:function(a,b,c){var d=[],e=c?0:1,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},lt:function(a,b,c){return c?a.slice(+b):a.slice(0,+b)},gt:function(a,b,c){return c?a.slice(0,+b+1):a.slice(+b+1)},eq:function(a,b,c){var d=a.splice(+b,1);return c?a:d}}};$.setFilters.nth=$.setFilters.eq,$.filters=$.pseudos,X||($.attrHandle={href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}}),V&&($.order.push("NAME"),$.find.NAME=function(a,b){if(typeof b.getElementsByName!==j)return b.getElementsByName(a)}),Y&&($.order.splice(1,0,"CLASS"),$.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!==j&&!c)return b.getElementsByClassName(a)});try{n.call(i.childNodes,0)[0].nodeType}catch(_){n=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}var ba=Z.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},bb=Z.contains=i.compareDocumentPosition?function(a,b){return!!(a.compareDocumentPosition(b)&16)}:i.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc=Z.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=bc(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=bc(b);return c};Z.attr=function(a,b){var c,d=ba(a);return d||(b=b.toLowerCase()),$.attrHandle[b]?$.attrHandle[b](a):U||d?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},Z.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},[0,0].sort(function(){return l=0}),i.compareDocumentPosition?e=function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:(e=function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],g=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return f(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)g.unshift(j),j=j.parentNode;c=e.length,d=g.length;for(var l=0;l<c&&l<d;l++)if(e[l]!==g[l])return f(e[l],g[l]);return l===c?f(a,g[l],-1):f(e[l],b,1)},f=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),Z.uniqueSort=function(a){var b,c=1;if(e){k=l,a.sort(e);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1)}return a};var bl=Z.compile=function(a,b,c){var d,e,f,g=O[a];if(g&&g.context===b)return g;e=bg(a,b,c);for(f=0;d=e[f];f++)e[f]=bj(d,b,c);return g=O[a]=bk(e),g.context=b,g.runs=g.dirruns=0,P.push(a),P.length>$.cacheLength&&delete O[P.shift()],g};Z.matches=function(a,b){return Z(a,null,null,b)},Z.matchesSelector=function(a,b){return Z(b,null,null,[a]).length>0};var bm=function(a,b,e,f,g){a=a.replace(A,"$1");var h,i,j,k,l,m,p,q,r,s=a.match(C),t=a.match(E),u=b.nodeType;if(L.POS.test(a))return bf(a,b,e,f,s);if(f)h=n.call(f,0);else if(s&&s.length===1){if(t.length>1&&u===9&&!g&&(s=L.ID.exec(t[0]))){b=$.find.ID(s[1],b,g)[0];if(!b)return e;a=a.slice(t.shift().length)}q=(s=G.exec(t[0]))&&!s.index&&b.parentNode||b,r=t.pop(),m=r.split(":not")[0];for(j=0,k=$.order.length;j<k;j++){p=$.order[j];if(s=L[p].exec(m)){h=$.find[p]((s[1]||"").replace(K,""),q,g);if(h==null)continue;m===r&&(a=a.slice(0,a.length-r.length)+m.replace(L[p],""),a||o.apply(e,n.call(h,0)));break}}}if(a){i=bl(a,b,g),d=i.dirruns++,h==null&&(h=$.find.TAG("*",G.test(a)&&b.parentNode||b));for(j=0;l=h[j];j++)c=i.runs++,i(l,b)&&e.push(l)}return e};h.querySelectorAll&&function(){var a,b=bm,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[],f=[":active"],g=i.matchesSelector||i.mozMatchesSelector||i.webkitMatchesSelector||i.oMatchesSelector||i.msMatchesSelector;T(function(a){a.innerHTML="<select><option selected></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+r+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),T(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+r+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=e.length&&new RegExp(e.join("|")),bm=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a)))if(d.nodeType===9)try{return o.apply(f,n.call(d.querySelectorAll(a),0)),f}catch(i){}else if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){var j=d.getAttribute("id"),k=j||q,l=G.test(a)&&d.parentNode||d;j?k=k.replace(c,"\\$&"):d.setAttribute("id",k);try{return o.apply(f,n.call(l.querySelectorAll(a.replace(C,"[id='"+k+"'] $&")),0)),f}catch(i){}finally{j||d.removeAttribute("id")}}return b(a,d,f,g,h)},g&&(T(function(b){a=g.call(b,"div");try{g.call(b,"[test!='']:sizzle"),f.push($.match.PSEUDO)}catch(c){}}),f=new RegExp(f.join("|")),Z.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!ba(b)&&!f.test(c)&&(!e||!e.test(c)))try{var h=g.call(b,c);if(h||a||b.document&&b.document.nodeType!==11)return h}catch(i){}return Z(c,null,null,[b]).length>0})}(),Z.attr=p.attr,p.find=Z,p.expr=Z.selectors,p.expr[":"]=p.expr.pseudos,p.unique=Z.uniqueSort,p.text=Z.getText,p.isXMLDoc=Z.isXML,p.contains=Z.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=(c[0]||c).ownerDocument||c[0]||c,typeof c.createDocumentFragment=="undefined"&&(c=e),a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=0,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(g=b===e&&bA;(h=a[s])!=null;s++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{g=g||bk(b),l=l||g.appendChild(b.createElement("div")),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(f=n.length-1;f>=0;--f)p.nodeName(n[f],"tbody")&&!n[f].childNodes.length&&n[f].parentNode.removeChild(n[f])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l=g.lastChild}h.nodeType?t.push(h):t=p.merge(t,h)}l&&(g.removeChild(l),h=l=g=null);if(!p.support.appendChecked)for(s=0;(h=t[s])!=null;s++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(s=0;(h=t[s])!=null;s++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[s+1,0].concat(r)),s+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^margin/,bO=new RegExp("^("+q+")(.*)$","i"),bP=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bQ=new RegExp("^([-+])=("+q+")","i"),bR={},bS={position:"absolute",visibility:"hidden",display:"block"},bT={letterSpacing:0,fontWeight:400,lineHeight:1},bU=["Top","Right","Bottom","Left"],bV=["Webkit","O","Moz","ms"],bW=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return bZ(this,!0)},hide:function(){return bZ(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bW.apply(this,arguments):this.each(function(){(c?a:bY(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bX(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bQ.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bX(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bT&&(f=bT[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(a,b){var c,d,e,f,g=getComputedStyle(a,null),h=a.style;return g&&(c=g[b],c===""&&!p.contains(a.ownerDocument.documentElement,a)&&(c=p.style(a,b)),bP.test(c)&&bN.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=c,c=g.width,h.width=d,h.minWidth=e,h.maxWidth=f)),c}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bP.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0||bH(a,"display")!=="none"?ca(a,b,d):p.swap(a,bS,function(){return ca(a,b,d)})},set:function(a,c,d){return b$(a,c,d?b_(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bP.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bU[d]+b]=e[d]||e[d-2]||e[0];return f}},bN.test(a)||(p.cssHooks[a+b].set=b$)});var cc=/%20/g,cd=/\[\]$/,ce=/\r?\n/g,cf=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,cg=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||cg.test(this.nodeName)||cf.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(ce,"\r\n")}}):{name:b.name,value:c.replace(ce,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ch(d,a[d],c,f);return e.join("&").replace(cc,"+")};var ci,cj,ck=/#.*$/,cl=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cm=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,cn=/^(?:GET|HEAD)$/,co=/^\/\//,cp=/\?/,cq=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cr=/([?&])_=[^&]*/,cs=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,ct=p.fn.load,cu={},cv={},cw=["*/"]+["*"];try{ci=f.href}catch(cx){ci=e.createElement("a"),ci.href="",ci=ci.href}cj=cs.exec(ci.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&ct)return ct.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cq,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cA(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cA(a,b),a},ajaxSettings:{url:ci,isLocal:cm.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cw},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cy(cu),ajaxTransport:cy(cv),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cB(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cC(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=""+(c||y),k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cl.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(ck,"").replace(co,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=cs.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]==cj[1]&&i[2]==cj[2]&&(i[3]||(i[1]==="http:"?80:443))==(cj[3]||(cj[1]==="http:"?80:443)))),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cz(cu,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!cn.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cp.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cr,"$1_="+z);l.url=A+(A===l.url?(cp.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cw+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cz(cv,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cD=[],cE=/\?/,cF=/(=)\?(?=&|$)|\?\?/,cG=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cD.pop()||p.expando+"_"+cG++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cF.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cF.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cF,"$1"+f):m?c.data=i.replace(cF,"$1"+f):k&&(c.url+=(cE.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cD.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cH,cI=a.ActiveXObject?function(){for(var a in cH)cH[a](0,1)}:!1,cJ=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cK()||cL()}:cK,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cI&&delete cH[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cJ,cI&&(cH||(cH={},p(a).unload(cI)),cH[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cM,cN,cO=/^(?:toggle|show|hide)$/,cP=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cQ=/queueHooks$/,cR=[cX],cS={"*":[function(a,b){var c,d,e,f=this.createTween(a,b),g=cP.exec(b),h=f.cur(),i=+h||0,j=1;if(g){c=+g[2],d=g[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&i){i=p.css(f.elem,a,!0)||c||1;do e=j=j||".5",i=i/j,p.style(f.elem,a,i+d),j=f.cur()/h;while(j!==1&&j!==e)}f.unit=d,f.start=i,f.end=g[1]?i+(g[1]+1)*c:c}return f}]};p.Animation=p.extend(cV,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cS[c]=cS[c]||[],cS[c].unshift(b)},prefilter:function(a,b){b?cR.unshift(a):cR.push(a)}}),p.Tween=cY,cY.prototype={constructor:cY,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cY.propHooks[this.prop];return a&&a.get?a.get(this):cY.propHooks._default.get(this)},run:function(a){var b,c=cY.propHooks[this.prop];return this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration),this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cY.propHooks._default.set(this),this}},cY.prototype.init.prototype=cY.prototype,cY.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cY.propHooks.scrollTop=cY.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(cZ(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bY).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cV(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cQ.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:cZ("show"),slideUp:cZ("hide"),slideToggle:cZ("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cY.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cN&&(cN=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cN),cN=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c$=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j,k,l,m=this[0],n=m&&m.ownerDocument;if(!n)return;return(e=n.body)===m?p.offset.bodyOffset(m):(d=n.documentElement,p.contains(d,m)?(c=m.getBoundingClientRect(),f=c_(n),g=d.clientTop||e.clientTop||0,h=d.clientLeft||e.clientLeft||0,i=f.pageYOffset||d.scrollTop,j=f.pageXOffset||d.scrollLeft,k=c.top+i-g,l=c.left+j-h,{top:k,left:l}):{top:0,left:0})},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c$.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c$.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=c_(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
\ No newline at end of file
/**
* jQuery Validation Plugin @VERSION
*
* http://bassistance.de/jquery-plugins/jquery-plugin-validation/
* http://docs.jquery.com/Plugins/Validation
*
* Copyright (c) 2006 - 2011 Jörn Zaefferer
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* @Modify : linhao87@gmail.com
* @Descript : remote ajax验证,判断response的state标头,提示内容在response.message[0];remote验证时的startRequest方法下移;验证码错误&刷新;param.ignoreRepeat 登录安全问题答案
* $Id: validate.js 15186 2012-08-01 08:57:18Z hao.lin $
*/
(function($) {
$.extend($.fn, {
// http://docs.jquery.com/Plugins/Validation/validate
validate: function( options ) {
// if nothing is selected, return nothing; can't chain anyway
if (!this.length) {
options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );
return;
}
// check if a validator for this form was already created
var validator = $.data(this[0], 'validator');
if ( validator ) {
return validator;
}
validator = new $.validator( options, this[0] );
$.data(this[0], 'validator', validator);
if ( validator.settings.onsubmit ) {
// allow suppresing validation by adding a cancel class to the submit button
this.find("input, button").filter(".cancel").click(function() {
validator.cancelSubmit = true;
});
// when a submitHandler is used, capture the submitting button
if (validator.settings.submitHandler) {
this.find("input, button").filter(":submit").click(function() {
validator.submitButton = this;
});
}
// validate the form on submit
this.submit( function( event ) {
if ( validator.settings.debug )
// prevent form submit to be able to see console output
event.preventDefault();
function handle() {
if ( validator.settings.submitHandler ) {
if (validator.submitButton) {
// insert a hidden input as a replacement for the missing submit button
var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);
}
validator.settings.submitHandler.call( validator, validator.currentForm );
if (validator.submitButton) {
// and clean up afterwards; thanks to no-block-scope, hidden can be referenced
hidden.remove();
}
return false;
}
return true;
}
// prevent submit for invalid forms or custom submit handlers
if ( validator.cancelSubmit ) {
validator.cancelSubmit = false;
return handle();
}
if ( validator.form() ) {//console.log(validator.pendingRequest);
if ( validator.pendingRequest ) {
validator.formSubmitted = true;
return false;
}
return handle();
} else {
validator.focusInvalid();
return false;
}
});
}
return validator;
},
// http://docs.jquery.com/Plugins/Validation/valid
valid: function() {
if ( $(this[0]).is('form')) {
return this.validate().form();
} else {
var valid = true;
var validator = $(this[0].form).validate();
this.each(function() {
valid &= validator.element(this);
});
return valid;
}
},
// attributes: space seperated list of attributes to retrieve and remove
removeAttrs: function(attributes) {
var result = {},
$element = this;
$.each(attributes.split(/\s/), function(index, value) {
result[value] = $element.attr(value);
$element.removeAttr(value);
});
return result;
},
// http://docs.jquery.com/Plugins/Validation/rules
rules: function(command, argument) {
var element = this[0];
if (command) {
var settings = $.data(element.form, 'validator').settings;
var staticRules = settings.rules;
var existingRules = $.validator.staticRules(element);
switch(command) {
case "add":
$.extend(existingRules, $.validator.normalizeRule(argument));
staticRules[element.name] = existingRules;
if (argument.messages)
settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
break;
case "remove":
if (!argument) {
delete staticRules[element.name];
return existingRules;
}
var filtered = {};
$.each(argument.split(/\s/), function(index, method) {
filtered[method] = existingRules[method];
delete existingRules[method];
});
return filtered;
}
}
var data = $.validator.normalizeRules(
$.extend(
{},
$.validator.metadataRules(element),
$.validator.classRules(element),
$.validator.attributeRules(element),
$.validator.staticRules(element)
), element);
// make sure required is at front
if (data.required) {
var param = data.required;
delete data.required;
data = $.extend({required: param}, data);
}
return data;
}
});
// Custom selectors
$.extend($.expr[":"], {
// http://docs.jquery.com/Plugins/Validation/blank
blank: function(a) {return !$.trim("" + a.value);},
// http://docs.jquery.com/Plugins/Validation/filled
filled: function(a) {return !!$.trim("" + a.value);},
// http://docs.jquery.com/Plugins/Validation/unchecked
unchecked: function(a) {return !a.checked;}
});
// constructor for validator
$.validator = function( options, form ) {
this.settings = $.extend( true, {}, $.validator.defaults, options );
this.currentForm = form;
this.init();
};
$.validator.format = function(source, params) {
if ( arguments.length == 1 )
return function() {
var args = $.makeArray(arguments);
args.unshift(source);
return $.validator.format.apply( this, args );
};
if ( arguments.length > 2 && params.constructor != Array ) {
params = $.makeArray(arguments).slice(1);
}
if ( params.constructor != Array ) {
params = [ params ];
}
$.each(params, function(i, n) {
source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
});
return source;
};
$.extend($.validator, {
defaults: {
messages: {},
groups: {},
rules: {},
errorClass: "error",
validClass: "valid",
errorElement: "label",
focusInvalid: true,
errorContainer: $( [] ),
errorLabelContainer: $( [] ),
onsubmit: true,
ignore: [],
ignoreTitle: false,
onfocusin: function(element) {
this.lastActive = element;
// hide error label and remove error class on focus if enabled
if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
this.addWrapper(this.errorsFor(element)).hide();
}
},
onfocusout: function(element) {
if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
this.element(element);
}
},
onkeyup: function(element) {
if ( element.name in this.submitted || element == this.lastElement ) {
this.element(element);
}
},
onclick: function(element) {
// click on selects, radiobuttons and checkboxes
if ( element.name in this.submitted )
this.element(element);
// or option elements, check parent select in that case
else if (element.parentNode.name in this.submitted)
this.element(element.parentNode);
},
highlight: function(element, errorClass, validClass) {
if (element.type === 'radio') {
this.findByName(element.name).addClass(errorClass).removeClass(validClass);
} else {
$(element).addClass(errorClass).removeClass(validClass);
}
},
unhighlight: function(element, errorClass, validClass) {
if (element.type === 'radio') {
this.findByName(element.name).removeClass(errorClass).addClass(validClass);
} else {
$(element).removeClass(errorClass).addClass(validClass);
}
}
},
// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults
setDefaults: function(settings) {
$.extend( $.validator.defaults, settings );
},
messages: {
required: "This field is required.",
remote: "Please fix this field.",
email: "Please enter a valid email address.",
url: "Please enter a valid URL.",
date: "Please enter a valid date.",
dateISO: "Please enter a valid date (ISO).",
number: "Please enter a valid number.",
digits: "Please enter only digits.",
creditcard: "Please enter a valid credit card number.",
equalTo: "Please enter the same value again.",
accept: "Please enter a value with a valid extension.",
maxlength: $.validator.format("Please enter no more than {0} characters."),
minlength: $.validator.format("Please enter at least {0} characters."),
rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
range: $.validator.format("Please enter a value between {0} and {1}."),
max: $.validator.format("Please enter a value less than or equal to {0}."),
min: $.validator.format("Please enter a value greater than or equal to {0}.")
},
autoCreateRanges: false,
prototype: {
init: function() {
this.labelContainer = $(this.settings.errorLabelContainer);
this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );
this.submitted = {};
this.valueCache = {};
this.pendingRequest = 0;
this.pending = {};
this.invalid = {};
this.reset();
var groups = (this.groups = {});
$.each(this.settings.groups, function(key, value) {
$.each(value.split(/\s/), function(index, name) {
groups[name] = key;
});
});
var rules = this.settings.rules;
$.each(rules, function(key, value) {
rules[key] = $.validator.normalizeRule(value);
});
function delegate(event) {
var validator = $.data(this[0].form, "validator"),
eventType = "on" + event.type.replace(/^validate/, "");
validator.settings[eventType] && validator.settings[eventType].call(validator, this[0] );
}
$(this.currentForm)
.validateDelegate(":text, :password, :file, select, textarea", "focusin focusout keyup", delegate)
.validateDelegate(":radio, :checkbox, select, option", "click", delegate);
if (this.settings.invalidHandler)
$(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
},
// http://docs.jquery.com/Plugins/Validation/Validator/form
form: function() {
this.checkForm();
$.extend(this.submitted, this.errorMap);
this.invalid = $.extend({}, this.errorMap);
if (!this.valid())
$(this.currentForm).triggerHandler("invalid-form", [this]);
this.showErrors();
return this.valid();
},
checkForm: function() {
this.prepareForm();
for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
this.check( elements[i] );
}
return this.valid();
},
// http://docs.jquery.com/Plugins/Validation/Validator/element
element: function( element ) {
element = this.clean( element );
this.lastElement = element;
this.prepareElement( element );
this.currentElements = $(element);
var result = this.check( element );
if ( result ) {
delete this.invalid[element.name];
} else {
this.invalid[element.name] = true;
}
if ( !this.numberOfInvalids() ) {
// Hide error containers on last error
this.toHide = this.toHide.add( this.containers );
}
this.showErrors();
return result;
},
// http://docs.jquery.com/Plugins/Validation/Validator/showErrors
showErrors: function(errors) {
if(errors) {
// add items to error list and map
$.extend( this.errorMap, errors );
this.errorList = [];
for ( var name in errors ) {
this.errorList.push({
message: errors[name],
element: this.findByName(name)[0]
});
}
// remove items from success list
this.successList = $.grep( this.successList, function(element) {
return !(element.name in errors);
});
}
this.settings.showErrors
? this.settings.showErrors.call( this, this.errorMap, this.errorList )
: this.defaultShowErrors();
},
// http://docs.jquery.com/Plugins/Validation/Validator/resetForm
resetForm: function() {
if ( $.fn.resetForm )
$( this.currentForm ).resetForm();
this.submitted = {};
this.prepareForm();
this.hideErrors();
this.elements().removeClass( this.settings.errorClass );
},
numberOfInvalids: function() {
return this.objectLength(this.invalid);
},
objectLength: function( obj ) {
var count = 0;
for ( var i in obj )
count++;
return count;
},
hideErrors: function() {
this.addWrapper( this.toHide ).hide();
},
valid: function() {
return this.size() == 0;
},
size: function() {
return this.errorList.length;
},
focusInvalid: function() {
if( this.settings.focusInvalid ) {
try {
$(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])
.filter(":visible")
.focus()
// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
.trigger("focusin");
//验证码错误&刷新
$.each(this.invalidElements(), function(i, o){
if($(this).data('id') === 'code') {
$('#J_code_img').click();
}
});
} catch(e) {
// ignore IE throwing errors when focusing hidden elements
}
}
},
findLastActive: function() {
var lastActive = this.lastActive;
return lastActive && $.grep(this.errorList, function(n) {
return n.element.name == lastActive.name;
}).length == 1 && lastActive;
},
elements: function() {
var validator = this,
rulesCache = {};
// select all valid inputs inside the form (no submit or reset buttons)
return $(this.currentForm)
.find("input, select, textarea")
.not(":submit, :reset, :image, [disabled]")
.not( this.settings.ignore )
.filter(function() {
!this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
// select only the first element for each name, and only those with rules specified
if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
return false;
rulesCache[this.name] = true;
return true;
});
},
clean: function( selector ) {
return $( selector )[0];
},
errors: function() {
return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );
},
reset: function() {
this.successList = [];
this.errorList = [];
this.errorMap = {};
this.toShow = $([]);
this.toHide = $([]);
this.currentElements = $([]);
},
prepareForm: function() {
this.reset();
this.toHide = this.errors().add( this.containers );
},
prepareElement: function( element ) {
this.reset();
this.toHide = this.errorsFor(element);
},
check: function( element ) {
element = this.clean( element );
// if radio/checkbox, validate first element in group instead
if (this.checkable(element)) {
element = this.findByName( element.name ).not(this.settings.ignore)[0];
}
var rules = $(element).rules();
var dependencyMismatch = false;
for (var method in rules ) {
var rule = { method: method, parameters: rules[method] };
try {
var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );
// if a method indicates that the field is optional and therefore valid,
// don't mark it as valid when there are no other rules
if ( result == "dependency-mismatch" ) {
dependencyMismatch = true;
continue;
}
dependencyMismatch = false;
if ( result == "pending" ) {
this.toHide = this.toHide.not( this.errorsFor(element) );
return;
}
if( !result ) {
this.formatAndAdd( element, rule );
return false;
}
} catch(e) {
this.settings.debug && window.console && console.log("exception occured when checking element " + element.id
+ ", check the '" + rule.method + "' method", e);
throw e;
}
}
if (dependencyMismatch)
return;
if ( this.objectLength(rules) )
this.successList.push(element);
return true;
},
// return the custom message for the given element and validation method
// specified in the element's "messages" metadata
customMetaMessage: function(element, method) {
if (!$.metadata)
return;
var meta = this.settings.meta
? $(element).metadata()[this.settings.meta]
: $(element).metadata();
return meta && meta.messages && meta.messages[method];
},
// return the custom message for the given element name and validation method
customMessage: function( name, method ) {
var m = this.settings.messages[name];
return m && (m.constructor == String
? m
: m[method]);
},
// return the first defined argument, allowing empty strings
findDefined: function() {
for(var i = 0; i < arguments.length; i++) {
if (arguments[i] !== undefined)
return arguments[i];
}
return undefined;
},
defaultMessage: function( element, method) {
return this.findDefined(
this.customMessage( element.name, method ),
this.customMetaMessage( element, method ),
// title is never undefined, so handle empty string as undefined
!this.settings.ignoreTitle && element.title || undefined,
$.validator.messages[method],
"<strong>Warning: No message defined for " + element.name + "</strong>"
);
},
formatAndAdd: function( element, rule ) {
var message = this.defaultMessage( element, rule.method ),
theregex = /\$?\{(\d+)\}/g;
if ( typeof message == "function" ) {
message = message.call(this, rule.parameters, element);
} else if (theregex.test(message)) {
message = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters);
}
this.errorList.push({
message: message,
element: element
});
this.errorMap[element.name] = message;
this.submitted[element.name] = message;
},
addWrapper: function(toToggle) {
if ( this.settings.wrapper )
toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
return toToggle;
},
defaultShowErrors: function() {
for ( var i = 0; this.errorList[i]; i++ ) {
var error = this.errorList[i];
this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
this.showLabel( error.element, error.message );
}
if( this.errorList.length ) {
this.toShow = this.toShow.add( this.containers );
}
if (this.settings.success) {
for ( var i = 0; this.successList[i]; i++ ) {
this.showLabel( this.successList[i] );
}
}
if (this.settings.unhighlight) {
for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {
this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );
}
}
this.toHide = this.toHide.not( this.toShow );
this.hideErrors();
this.addWrapper( this.toShow ).show();
},
validElements: function() {
return this.currentElements.not(this.invalidElements());
},
invalidElements: function() {
return $(this.errorList).map(function() {
return this.element;
});
},
showLabel: function(element, message) {
var label = this.errorsFor( element );
if ( label.length ) {
// refresh error/success class
label.removeClass().addClass( this.settings.errorClass );
// check if we have a generated label, replace the message then
label.attr("generated") && label.html(message);
} else {
// create label
label = $("<" + this.settings.errorElement + "/>")
.attr({"for": this.idOrName(element), generated: true})
.addClass(this.settings.errorClass)
.html(message || "");
if ( this.settings.wrapper ) {
// make sure the element is visible, even in IE
// actually showing the wrapped element is handled elsewhere
label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
}
if ( !this.labelContainer.append(label).length )
this.settings.errorPlacement
? this.settings.errorPlacement(label, $(element) )
: label.insertAfter(element);
}
if ( !message && this.settings.success ) {
label.text("");
typeof this.settings.success == "string"
? label.addClass( this.settings.success )
: this.settings.success( label );
}
this.toShow = this.toShow.add(label);
},
errorsFor: function(element) {
var name = this.idOrName(element);
return this.errors().filter(function() {
return $(this).attr('for') == name;
});
},
idOrName: function(element) {
return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);
},
checkable: function( element ) {
return /radio|checkbox/i.test(element.type);
},
findByName: function( name ) {
// select by name and filter by form for performance over form.find("[name=...]")
var form = this.currentForm;
return $(document.getElementsByName(name)).map(function(index, element) {
return element.form == form && element.name == name && element || null;
});
},
getLength: function(value, element) {
switch( element.nodeName.toLowerCase() ) {
case 'select':
return $("option:selected", element).length;
case 'input':
if( this.checkable( element) )
return this.findByName(element.name).filter(':checked').length;
}
return value.length;
},
depend: function(param, element) {
return this.dependTypes[typeof param]
? this.dependTypes[typeof param](param, element)
: true;
},
dependTypes: {
"boolean": function(param, element) {
return param;
},
"string": function(param, element) {
return !!$(param, element.form).length;
},
"function": function(param, element) {
return param(element);
}
},
optional: function(element) {
return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";
},
startRequest: function(element) {
if (!this.pending[element.name]) {
this.pendingRequest++;
this.pending[element.name] = true;
}
},
stopRequest: function(element, valid) {
this.pendingRequest--;
// sometimes synchronization fails, make sure pendingRequest is never < 0
if (this.pendingRequest < 0)
this.pendingRequest = 0;
delete this.pending[element.name];
if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {
$(this.currentForm).submit();
this.formSubmitted = false;
} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {
$(this.currentForm).triggerHandler("invalid-form", [this]);
this.formSubmitted = false;
}
},
previousValue: function(element) {
return $.data(element, "previousValue") || $.data(element, "previousValue", {
old: null,
valid: true,
message: this.defaultMessage( element, "remote" )
});
}
},
classRuleSettings: {
required: {required: true},
email: {email: true},
url: {url: true},
date: {date: true},
dateISO: {dateISO: true},
dateDE: {dateDE: true},
number: {number: true},
numberDE: {numberDE: true},
digits: {digits: true},
creditcard: {creditcard: true}
},
addClassRules: function(className, rules) {
className.constructor == String ?
this.classRuleSettings[className] = rules :
$.extend(this.classRuleSettings, className);
},
classRules: function(element) {
var rules = {};
var classes = $(element).attr('class');
classes && $.each(classes.split(' '), function() {
if (this in $.validator.classRuleSettings) {
$.extend(rules, $.validator.classRuleSettings[this]);
}
});
return rules;
},
attributeRules: function(element) {
var rules = {};
var $element = $(element);
for (var method in $.validator.methods) {
var value = $element.attr(method);
if (value) {
rules[method] = value;
}
}
// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs
if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
delete rules.maxlength;
}
return rules;
},
metadataRules: function(element) {
if (!$.metadata) return {};
var meta = $.data(element.form, 'validator').settings.meta;
return meta ?
$(element).metadata()[meta] :
$(element).metadata();
},
staticRules: function(element) {
var rules = {};
var validator = $.data(element.form, 'validator');
if (validator.settings.rules) {
rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};
}
return rules;
},
normalizeRules: function(rules, element) {
// handle dependency check
$.each(rules, function(prop, val) {
// ignore rule when param is explicitly false, eg. required:false
if (val === false) {
delete rules[prop];
return;
}
if (val.param || val.depends) {
var keepRule = true;
switch (typeof val.depends) {
case "string":
keepRule = !!$(val.depends, element.form).length;
break;
case "function":
keepRule = val.depends.call(element, element);
break;
}
if (keepRule) {
rules[prop] = val.param !== undefined ? val.param : true;
} else {
delete rules[prop];
}
}
});
// evaluate parameters
$.each(rules, function(rule, parameter) {
rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;
});
// clean number parameters
$.each(['minlength', 'maxlength', 'min', 'max'], function() {
if (rules[this]) {
rules[this] = Number(rules[this]);
}
});
$.each(['rangelength', 'range'], function() {
if (rules[this]) {
rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
}
});
if ($.validator.autoCreateRanges) {
// auto-create ranges
if (rules.min && rules.max) {
rules.range = [rules.min, rules.max];
delete rules.min;
delete rules.max;
}
if (rules.minlength && rules.maxlength) {
rules.rangelength = [rules.minlength, rules.maxlength];
delete rules.minlength;
delete rules.maxlength;
}
}
// To support custom messages in metadata ignore rule methods titled "messages"
if (rules.messages) {
delete rules.messages;
}
return rules;
},
// Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
normalizeRule: function(data) {
if( typeof data == "string" ) {
var transformed = {};
$.each(data.split(/\s/), function() {
transformed[this] = true;
});
data = transformed;
}
return data;
},
// http://docs.jquery.com/Plugins/Validation/Validator/addMethod
addMethod: function(name, method, message) {
$.validator.methods[name] = method;
$.validator.messages[name] = message != undefined ? message : $.validator.messages[name];
if (method.length < 3) {
$.validator.addClassRules(name, $.validator.normalizeRule(name));
}
},
methods: {
// http://docs.jquery.com/Plugins/Validation/Methods/required
required: function(value, element, param) {
// check if dependency is met
if ( !this.depend(param, element) )
return "dependency-mismatch";
switch( element.nodeName.toLowerCase() ) {
case 'select':
// could be an array for select-multiple or a string, both are fine this way
var val = $(element).val();
return val && val.length > 0;
case 'input':
if ( this.checkable(element) )
return this.getLength(value, element) > 0;
default:
return $.trim(value).length > 0;
}
},
// http://docs.jquery.com/Plugins/Validation/Methods/remote
remote: function(value, element, param) {
if ( this.optional(element) )
return "dependency-mismatch";
var previous = this.previousValue(element);
if (!this.settings.messages[element.name] )
this.settings.messages[element.name] = {};
previous.originalMessage = this.settings.messages[element.name].remote;
this.settings.messages[element.name].remote = previous.message;
param = typeof param == "string" && {url:param} || param;
if ( this.pending[element.name] ) {
return "pending";
}
if ( previous.old === value || param.ignoreRepeat) {
//if ( previous.old === value) {
return previous.valid;
}
previous.old = value;
var validator = this;
var data = {};
data[element.name] = value;
$.ajax($.extend(true, {
url: param,
beforeSend : function() {
validator.startRequest(element); //“请求统计”下移到此处,防止自定义ajax验证无法调用stopRequest;
},
mode: "abort",
port: "validate" + element.name,
dataType: "json",
data: data,
success: function(response) {
validator.settings.messages[element.name].remote = previous.originalMessage;
var valid = (response.state === 'success' ? true : false); //修改ajax成功标识 by linhao origin: var valid = response === true
if ( valid ) {
var submitted = validator.formSubmitted;
validator.prepareElement(element);
validator.formSubmitted = submitted;
validator.successList.push(element);
validator.showErrors();
} else {
var errors = {};
var message = response.message[0] || validator.defaultMessage( element, "remote" ); //修改ajax提示内容 by linhao 'response.message' origin: 'response'
errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;
validator.showErrors(errors);
}
previous.valid = valid;
validator.stopRequest(element, valid);
}
}, param));
return "pending";
},
// http://docs.jquery.com/Plugins/Validation/Methods/minlength
minlength: function(value, element, param) {
return this.optional(element) || this.getLength($.trim(value), element) >= param;
},
// http://docs.jquery.com/Plugins/Validation/Methods/maxlength
maxlength: function(value, element, param) {
return this.optional(element) || this.getLength($.trim(value), element) <= param;
},
// http://docs.jquery.com/Plugins/Validation/Methods/rangelength
rangelength: function(value, element, param) {
var length = this.getLength($.trim(value), element);
return this.optional(element) || ( length >= param[0] && length <= param[1] );
},
// http://docs.jquery.com/Plugins/Validation/Methods/min
min: function( value, element, param ) {
return this.optional(element) || value >= param;
},
// http://docs.jquery.com/Plugins/Validation/Methods/max
max: function( value, element, param ) {
return this.optional(element) || value <= param;
},
// http://docs.jquery.com/Plugins/Validation/Methods/range
range: function( value, element, param ) {
return this.optional(element) || ( value >= param[0] && value <= param[1] );
},
// http://docs.jquery.com/Plugins/Validation/Methods/email
pwd: function(value, element) {
// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
return this.optional(element) || /^[0-9a-zA-Z_]{6,15}$/.test(value);
},
// http://docs.jquery.com/Plugins/Validation/Methods/email
email: function(value, element) {
// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
return this.optional(element) || /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(value);
},
// http://docs.jquery.com/Plugins/Validation/Methods/url
url: function(value, element) {
// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
},
// http://docs.jquery.com/Plugins/Validation/Methods/date
date: function(value, element) {
return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
},
// http://docs.jquery.com/Plugins/Validation/Methods/dateISO
dateISO: function(value, element) {
return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
},
// http://docs.jquery.com/Plugins/Validation/Methods/number
number: function(value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
},
// http://docs.jquery.com/Plugins/Validation/Methods/digits
digits: function(value, element) {
return this.optional(element) || /^\d+$/.test(value);
},
// http://docs.jquery.com/Plugins/Validation/Methods/creditcard
// based on http://en.wikipedia.org/wiki/Luhn
creditcard: function(value, element) {
if ( this.optional(element) )
return "dependency-mismatch";
// accept only digits and dashes
if (/[^0-9-]+/.test(value))
return false;
var nCheck = 0,
nDigit = 0,
bEven = false;
value = value.replace(/\D/g, "");
for (var n = value.length - 1; n >= 0; n--) {
var cDigit = value.charAt(n);
var nDigit = parseInt(cDigit, 10);
if (bEven) {
if ((nDigit *= 2) > 9)
nDigit -= 9;
}
nCheck += nDigit;
bEven = !bEven;
}
return (nCheck % 10) == 0;
},
// http://docs.jquery.com/Plugins/Validation/Methods/accept
accept: function(value, element, param) {
param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i"));
},
// http://docs.jquery.com/Plugins/Validation/Methods/equalTo
equalTo: function(value, element, param) {
// bind to the blur event of the target in order to revalidate whenever the target field is updated
// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead
var target = $(param).unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {
$(element).valid();
});
return value == target.val();
}
}
});
// deprecated, use $.validator.format instead
$.format = $.validator.format;
})(jQuery);
// ajax mode: abort
// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
;(function($) {
var pendingRequests = {};
// Use a prefilter if available (1.5+)
if ( $.ajaxPrefilter ) {
$.ajaxPrefilter(function(settings, _, xhr) {
var port = settings.port;
if (settings.mode == "abort") {
if ( pendingRequests[port] ) {
pendingRequests[port].abort();
}
pendingRequests[port] = xhr;
}
});
} else {
// Proxy ajax
var ajax = $.ajax;
$.ajax = function(settings) {
var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode,
port = ( "port" in settings ? settings : $.ajaxSettings ).port;
if (mode == "abort") {
if ( pendingRequests[port] ) {
pendingRequests[port].abort();
}
return (pendingRequests[port] = ajax.apply(this, arguments));
}
return ajax.apply(this, arguments);
};
}
})(jQuery);
// provides cross-browser focusin and focusout events
// IE has native support, in other browsers, use event caputuring (neither bubbles)
// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target
;(function($) {
// only implement if not provided by jQuery core (since 1.4)
// TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs
if (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {
$.each({
focus: 'focusin',
blur: 'focusout'
}, function( original, fix ){
$.event.special[fix] = {
setup:function() {
this.addEventListener( original, handler, true );
},
teardown:function() {
this.removeEventListener( original, handler, true );
},
handler: function(e) {
arguments[0] = $.event.fix(e);
arguments[0].type = fix;
return $.event.handle.apply(this, arguments);
}
};
function handler(e) {
e = $.event.fix(e);
e.type = fix;
return $.event.handle.call(this, e);
}
});
};
$.extend($.fn, {
validateDelegate: function(delegate, type, handler) {
return this.bind(type, function(event) {
var target = $(event.target);
if (target.is(delegate)) {
return handler.apply(target, arguments);
}
});
}
});
})(jQuery);
//自定义validate扩展
jQuery.extend(jQuery.validator.messages, {
required: "必选字段",
remote: "请修正该字段",
email: "请输入正确格式的电子邮件",
url: "请输入合法的网址",
date: "请输入合法的日期",
dateISO: "请输入合法的日期 (ISO).",
number: "请输入合法的数字",
digits: "只能输入整数",
creditcard: "请输入合法的信用卡号",
equalTo: "请再次输入相同的值",
accept: "请输入拥有合法后缀名的字符串",
maxlength: jQuery.validator.format("请输入一个长度最多是 {0} 的字符串"),
minlength: jQuery.validator.format("请输入一个长度最少是 {0} 的字符串"),
rangelength: jQuery.validator.format("请输入一个长度介于 {0} 和 {1} 之间的字符串"),
range: jQuery.validator.format("请输入一个介于 {0} 和 {1} 之间的值"),
max: jQuery.validator.format("请输入一个最大为 {0} 的值"),
min: jQuery.validator.format("请输入一个最小为 {0} 的值")
});
jQuery.validator.addMethod("regularExpression", function(value, element, param) {
if (element) {
var reg=new RegExp(param);
return reg.test(value);
}
else {
return false;
}
}, "");
jQuery.validator.addMethod("byteRangeLength", function(value, element, param) {
var length = value.length;
for (var i = 0; i < value.length; i++) {
if (value.charCodeAt(i) > 127) {
length++;
}
}
return this.optional(element) || (length >= param[0] && length <= param[1]);
}, "请确保输入的值在个字节之间(一个中文字算2个字节)");
jQuery.validator.addMethod("isMobile", function(value, element) {
var length = value.length;
return this.optional(element) || (length == 11 && /^(13[0-9]|15[0-9]|18[0-9])\d{8}$/.test(value));
}, "请正确填写您的手机号码");
jQuery.validator.addMethod("telphone", function(value, element) {
var length = value.length;
return this.optional(element) || ( /^[\d|-]+$/.test(value));
}, '格式错误,仅支持数字和符号“-”');
jQuery.validator.addMethod("zipcode", function(value, element) {
var length = value.length;
return this.optional(element) || ( /^[0-9]{6}$/.test(value));
}, '格式错误,仅支持6位数字');
\ No newline at end of file
<div class="footer"> &copy; 2015-<?php echo date('Y');?> <a href="http://51eduline.com" target="_blank">Eduline</a> </div>
\ No newline at end of file
<div class="header">
<h1 class="logo">Eduline在线教育系统</h1>
<div class="icon_install">安装向导</div>
<div class="version"><?php echo VERSION;?></div>
</div>
\ No newline at end of file
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title><?php echo $Title; ?> - <?php echo $Powered; ?></title>
<link rel="stylesheet" href="./css/install.css?v=9.0" />
</head>
<body>
<div class="wrap">
<?php require './templates/header.php'; ?>
<div class="section">
<div class="main cc">
<pre class="pact" readonly="readonly">
版权所有 (C) 2015-<?php echo date('Y');?><a href="http://51eduline.com" target="_blank">Eduline</a>保留所有权利。
<b>Eduline</b>是基于ThinkSNS核心组件独立开发的在线教育程序,基于PHP脚本和MySQL数据库。
官方网址: <a href="http://51eduline.com" target="_blank">www.51eduline.com</a> 在线演示: <a href="http://demo.51eduline.com" target="_blank">demo.51eduline.com</a>
为了使你正确并合法的使用本软件,请你在使用前务必阅读清楚下面的协议条款:
感谢您选择“Eduline在线教育系统”(简称Eduline),Eduline在线教育系统致力于为用户提供全面的在线教育、视频及社交的解决方案。
赛新科技有限公司为Eduline在线教育系统产品的开发商,依法独立拥有Eduline在线教育系统产品著作权。赛新科技有限公司网址为<a href="http://www.seition.com" target="_blank">http://www.seition.com</a>,Eduline在线教育系统官方网站网址为<a href="http://51eduline.com" target="_blank">www.51eduline.com</a>
Eduline在线教育系统著作权已在中华人民共和国国家版权局注册,著作权受到法律和国际公约保护。使用者:无论个人或组织、盈利与否、用途如何(包括以学习和研究为目的),均需仔细阅读本协议,在理解、同意、并遵守本协议的全部条款后,方可开始使用 Eduline在线教育系统。
赛新科技有限公司拥有对本授权协议的最终解释权。
<b>协议许可的权利</b>
1)您可以在协议规定的约束和限制范围内修改 Eduline在线教育系统 源代码或界面风格以适应您的网站要求;
2)您拥有使用本系统构建的社区中全部会员资料、文章及相关信息的所有权,并独立承担与文章内容的相关法律义务;
3)获得商业授权之后,您可以将本系统应用于商业用途,同时依据所购买的授权类型中确定的技术支持期限、技术支持方式和技术支持内容,自购买时刻起, 在技术支持期限内拥有通过指定的方式获得指定范围内的技术支持服务。商业授权用户享有反映和提出意见的权力,相关意见将被作为首要考虑,但没有一定被采纳的承诺或保证。
4)不得对本系统或与之关联的商业授权进行出租、出售、抵押或发放子许可证;
5)如果您未能遵守本协议的条款,您的授权将被终止,所被许可的权利将被收回,并承担相应法律责任。
<b>有限担保和免责声明</b>
1)本系统及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的;
2)用户出于自愿而使用本系统,您必须了解使用本系统的风险,在尚未购买产品技术服务之前,我们不承诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任;
3)赛新科技有限公司不对使用本系统构建的社区中的文章或信息承担责任。
有关Eduline在线教育系统最终用户授权协议、商业授权与技术服务的详细内容,均由Eduline在线教育系统官方网站独家提供。赛新科技有限公司拥有在不事先通知的情况下,修改授权协议和服务价目表的权力,修改后的协议或价目表对自改变之日起的新授权用户生效。
电子文本形式的授权协议如同双方书面签署的协议一样,具有完全的和等同的法律效力。您一旦开始安装Eduline在线教育系统,即被视为完全理解并接受本协议的各项条款,在享有上述条款授予的权力的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。
</pre>
</div>
<div class="bottom tac"> <a href="./index.php?step=2" class="btn">接 受</a> </div>
</div>
</div>
<?php require './templates/footer.php'; ?>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title><?php echo $Title; ?> - <?php echo $Powered; ?></title>
<link rel="stylesheet" href="./css/install.css?v=9.0" />
</head>
<body>
<div class="wrap">
<?php require './templates/header.php';?>
<section class="section">
<div class="step">
<ul>
<li class="current"><em>1</em>检测环境</li>
<li><em>2</em>创建数据</li>
<li><em>3</em>完成安装</li>
</ul>
</div>
<div class="server">
<table width="100%">
<tr>
<td class="td1">环境检测</td>
<td class="td1" width="25%">推荐配置</td>
<td class="td1" width="25%">当前状态</td>
<td class="td1" width="25%">最低要求</td>
</tr>
<tr>
<td>操作系统</td>
<td>类UNIX</td>
<td><span class="correct_span">&radic;</span> <?php echo $os; ?></td>
<td>不限制</td>
</tr>
<tr>
<td>PHP版本</td>
<td>>5.6.x</td>
<td><span class="correct_span">&radic;</span> <?php echo $phpv; ?></td>
<td>>=5.6</td>
</tr>
<tr>
<td>Mysql版本(client)</td>
<td>>5.6.x</td>
<td><?php echo $mysql; ?></td>
<td>>=5.6</td>
</tr>
<tr>
<td>附件上传</td>
<td>>2M</td>
<td><?php echo $uploadSize; ?></td>
<td>不限制</td>
</tr>
<tr>
<td>session</td>
<td>开启</td>
<td><?php echo $session; ?></td>
<td>开启</td>
</tr>
</table>
<table width="100%">
<tr>
<td class="td1">目录、文件权限检查</td>
<td class="td1" width="25%">写入</td>
<td class="td1" width="25%">读取</td>
</tr>
<?php
foreach($folder as $dir){
$Testdir = SITEDIR.$dir;
dir_create($Testdir);
if(TestWrite($Testdir)){
$w = '<span class="correct_span">&radic;</span>可写 ';
}else{
$w = '<span class="correct_span error_span">&radic;</span>不可写 ';
$err++;
}
if(is_readable($Testdir)){
$r = '<span class="correct_span">&radic;</span>可读' ;
}else{
$r = '<span class="correct_span error_span">&radic;</span>不可读';
$err++;
}
?>
<tr>
<td><?php echo $dir; ?></td>
<td><?php echo $w; ?></td>
<td><?php echo $r; ?></td>
</tr>
<?php
}
?>
</table>
</div>
<div class="bottom tac"> <a href="./index.php?step=2" class="btn">重新检测</a><a href="./index.php?step=3" class="btn">下一步</a> </div>
</section>
</div>
<?php require './templates/footer.php';?>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title><?php echo $Title; ?> - <?php echo $Powered; ?></title>
<link rel="stylesheet" href="./css/install.css?v=9.0" />
</head>
<body>
<div class="wrap">
<?php require './templates/header.php'; ?>
<section class="section">
<div class="step">
<ul>
<li class="on"><em>1</em>检测环境</li>
<li class="current"><em>2</em>创建数据</li>
<li><em>3</em>完成安装</li>
</ul>
</div>
<form id="J_install_form" action="index.php?step=4" method="post">
<input type="hidden" name="force" value="0" />
<div class="server">
<table width="100%">
<tr>
<td class="td1" width="100">数据库信息</td>
<td class="td1" width="200">&nbsp;</td>
<td class="td1">&nbsp;</td>
</tr>
<tr>
<td class="tar">数据库服务器:</td>
<td><input type="text" name="dbhost" id="dbhost" value="localhost" class="input"></td>
<td><div id="J_install_tip_dbhost"><span class="gray">数据库服务器地址,一般为localhost</span></div></td>
</tr>
<tr>
<td class="tar">数据库端口:</td>
<td><input type="text" name="dbport" id="dbport" value="3306" class="input"></td>
<td><div id="J_install_tip_dbport"><span class="gray">数据库服务器端口,一般为3306</span></div></td>
</tr>
<tr>
<td class="tar">数据库用户名:</td>
<td><input type="text" name="dbuser" id="dbuser" value="root" class="input"></td>
<td><div id="J_install_tip_dbuser"><span class="gray">连接数据库的用户名</span></div></td>
</tr>
<tr>
<td class="tar">数据库密码:</td>
<td><input type="password" name="dbpw" id="dbpw" value="" class="input" autoComplete="off" onblur="TestDbPwd()"></td>
<td><div id="J_install_tip_dbpw"><span class="gray">连接数据库的密码</span></div></td>
</tr>
<tr>
<td class="tar">数据库名:</td>
<td><input type="text" name="dbname" id="dbname" value="eduline" class="input"></td>
<td><div id="J_install_tip_dbname"></div></td>
</tr>
<tr>
<td class="tar">数据库表前缀:</td>
<td><input type="text" name="dbprefix" id="dbprefix" value="el_" class="input"></td>
<td><div id="J_install_tip_dbprefix"><span class="gray">建议使用默认,同一数据库安装多个网站时需修改</span></div></td>
</tr>
</table>
<table width="100%">
<tr>
<td class="td1" width="100">管理员信息</td>
<td class="td1" width="200">&nbsp;</td>
<td class="td1">&nbsp;</td>
</tr>
<tr>
<td class="tar">管理员帐号:</td>
<td><input type="text" name="manager_email" class="input" value="admin@admin.com"></td>
<td><div id="J_install_tip_manager_email">管理员账号</div></td>
</tr>
<tr>
<td class="tar">管理员密码:</td>
<td><input type="password" name="manager_pwd" id="J_manager_pwd" class="input" autoComplete="off"></td>
<td><div id="J_install_tip_manager_pwd"></div></td>
</tr>
<tr>
<td class="tar">重复密码:</td>
<td><input type="password" name="manager_ckpwd" class="input" autoComplete="off"></td>
<td><div id="J_install_tip_manager_ckpwd"></div></td>
</tr>
</table>
<input type="hidden" name="webPath" value="<?php echo $rootpath?>/" />
<div id="J_response_tips" style="display:none;"></div>
</div>
<div class="bottom tac"> <a href="./index.php?step=2" class="btn">上一步</a>
<button type="submit" class="btn btn_submit J_install_btn">创建数据</button>
</div>
</form>
</section>
<div style="width:0;height:0;overflow:hidden;"> <img src="./images/pop_loading.gif"> </div>
<script src="./js/jquery.js?v=9.0"></script>
<script src="./js/validate.js?v=9.0"></script>
<script src="./js/ajaxForm.js?v=9.0"></script>
<script>
function TestDbPwd()
{
var dbHost = $('#dbhost').val();
var dbUser = $('#dbuser').val();
var dbPwd = $('#dbpw').val();
var dbName = $('#dbname').val();
var dbPort = $('#dbport').val();
data={'dbHost':dbHost,'dbUser':dbUser,'dbPwd':dbPwd,'dbName':dbName,'dbPort':dbPort};
var url = "./index.php?step=3&testdbpwd=1";
$.ajax({
type: "POST",
url: url,
data: data,
beforeSend:function(){
},
success: function(msg){
if(msg){
}else{
$('#dbpw').val("");
$('#J_install_tip_dbpw').html('<span for="dbname" generated="true" class="tips_error" style="">数据库链接配置失败</span>');
}
},
complete:function(){
},
error:function(){
$('#J_install_tip_dbpw').html('<span for="dbname" generated="true" class="tips_error" style="">数据库链接配置失败</span>');
$('#dbpw').val("");
}
});
}
$(function(){
//聚焦时默认提示
var focus_tips = {
dbhost : '数据库服务器地址,一般为localhost',
dbport : '数据库服务器端口,一般为3306',
dbuser : '连接数据库的用户名',
dbpw : '连接数据库的密码',
dbname : '',
dbprefix : '建议使用默认,同一数据库安装多个时需修改',
manager : '创始人帐号,拥有站点后台所有管理权限',
manager_pwd : '',
manager_ckpwd : '',
sitename : '',
siteurl : '请以“/”结尾',
sitekeywords : '',
siteinfo : '',
manager_email : ''
};
var install_form = $("#J_install_form"),
reg_username = $('#J_reg_username'), //用户名表单
reg_password = $('#J_reg_password'), //密码表单
reg_tip_password = $('#J_reg_tip_password'), //密码提示区
response_tips = $('#J_response_tips'); //后端返回提示
//validate插件修改了remote ajax验证返回的response处理方式;增加密码强度提示 passwordRank
install_form.validate({
//debug : true,
//onsubmit : false,
errorPlacement: function(error, element) {
//错误提示容器
$('#J_install_tip_'+ element[0].name).html(error);
},
errorElement: 'span',
//invalidHandler : , 未验证通过 回调
//ignore : '.ignore' 忽略验证
//onkeyup : true,
errorClass : 'tips_error',
validClass : 'tips_error',
onkeyup : false,
focusInvalid : false,
rules: {
dbhost: {
required : true
},
dbport:{
required : true
},
dbuser: {
required : true
},
/*dbpw: {
required : true
},*/
dbname: {
required : true
},
dbprefix : {
required : true
},
manager: {
required : true
},
manager_pwd: {
required : true,
pwd : true
},
manager_ckpwd: {
required : true,
equalTo : '#J_manager_pwd'
},
manager_email: {
required : true,
email : true
}
},
highlight : false,
unhighlight : function(element, errorClass, validClass) {
var tip_elem = $('#J_install_tip_'+ element.name);
tip_elem.html('<span class="'+ validClass +'" data-text="text"><span>');
},
onfocusin : function(element){
var name = element.name;
$('#J_install_tip_'+ name).html('<span data-text="text">'+ focus_tips[name] +'</span>');
$(element).parents('tr').addClass('current');
},
onfocusout : function(element){
var _this = this;
$(element).parents('tr').removeClass('current');
if(element.name === 'email') {
//邮箱匹配点击后,延时处理
setTimeout(function(){
_this.element(element);
}, 150);
}else{
_this.element(element);
}
},
messages: {
dbhost: {
required : '数据库服务器地址不能为空'
},
dbport:{
required : '数据库服务器端口不能为空'
},
dbuser: {
required : '数据库用户名不能为空'
},
dbpw: {
required : '数据库密码不能为空'
},
dbname: {
required : '数据库名不能为空'
},
dbprefix : {
required : '数据库表前缀不能为空'
},
manager: {
required : '管理员帐号不能为空'
},
manager_pwd: {
required : '密码不能为空',
pwd : '密码由6-15位字母、数字、下划线组成'
},
manager_ckpwd: {
required : '重复密码不能为空',
equalTo : '两次输入的密码不一致。请重新输入'
},
manager_email: {
required : '管理员账号不能为空',
email : '邮箱格式不正确'
}
},
submitHandler:function(form) {
form.submit();
return true;
}
});
var _data = {};
});
</script>
</div>
<?php require './templates/footer.php'; ?>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title><?php echo $Title; ?> - <?php echo $Powered; ?></title>
<link rel="stylesheet" href="./css/install.css?v=9.0" />
<script src="./js/jquery.js?v=9.0"></script>
</head>
<body>
<div class="wrap">
<?php require './templates/header.php';?>
<section class="section">
<div class="step">
<ul>
<li class="on"><em>1</em>检测环境</li>
<li class="on"><em>2</em>创建数据</li>
<li class="current"><em>3</em>完成安装</li>
</ul>
</div>
<div class="install" id="log">
<ul id="loginner">
</ul>
</div>
<div class="bottom tac"> <a href="javascript:;" class="btn_old"><img src="./images/loading.gif" align="absmiddle" />&nbsp;正在安装...</a> </div>
</section>
<script type="text/javascript">
var n=0;
var data = <?php echo json_encode($_POST);?>;
$.ajaxSetup ({ cache: false });
function reloads(n) {
var url = "./index.php?step=4&install=1&n="+n;
$.ajax({
type: "POST",
url: url,
data: data,
dataType: 'json',
beforeSend:function(){
},
success: function(msg){
if(msg.n=='999999'){
$('#dosubmit').attr("disabled",false);
$('#dosubmit').removeAttr("disabled");
$('#dosubmit').removeClass("nonext");
setTimeout('gonext()',2000);
}
if(msg.n){
$('#loginner').prepend(msg.msg);
reloads(msg.n);
}else{
//alert('指定的数据库不存在,系统也无法创建,请先通过其他方式建立好数据库!');
alert(msg.msg);
}
}
});
}
function gonext(){
window.location.href='./index.php?step=5';
}
$(document).ready(function(){
reloads(n);
})
</script>
</div>
<?php require './templates/footer.php';?>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title><?php echo $Title; ?> - <?php echo $Powered; ?></title>
<link rel="stylesheet" href="./css/install.css?v=9.0" />
</head>
<body>
<div class="wrap">
<?php require './templates/header.php'; ?>
<section class="section">
<div class="">
<div class="success_tip cc"> <a href="/" class="f16 b">安装完成,点击这里体验Eduline吧</a>
</div>
<div class=""> </div>
</div>
</section>
</div>
<?php require './templates/footer.php'; ?>
</body>
</html>
\ No newline at end of file
<?php
/**
获取网卡的MAC地址原码;目前支持WIN/LINUX系统
获取机器网卡的物理(MAC)地址
**/
class GetmacAddr
{
public $result = array(); // 返回带有MAC地址的字串数组
public $macAddr;
/*构造*/
public function __construct($osType)
{
switch (strtolower($osType)) {
case "unix":break;
case "solaris":break;
case "aix":break;
case "linux":{
$this->for_linux_os();
}break;
default:{
$this->for_windows_os();
}break;
}
$temp_array = array();
foreach ($this->result as $value) {
if (preg_match("/[0-9a-f][0-9a-f][:-]" . "[0-9a-f][0-9a-f][:-]" . "[0-9a-f][0-9a-f][:-]" . "[0-9a-f][0-9a-f][:-]" . "[0-9a-f][0-9a-f][:-]" . "[0-9a-f][0-9a-f]/i", $value,
$temp_array)) {
$this->macAddr = $temp_array[0];
break;
}
}
}
/*linux系统中获取方法*/
public function for_linux_os()
{
@exec("/sbin/ifconfig -a", $this->result);
return $this->result;
}
/*win系统中的获取方法*/
public function for_windows_os()
{
print_r($_SERVER);
@exec("ipconfig /all", $this->result);
if ($this->result) {
return $this->result;
} else {
$ipconfig = $_SERVER["WINDIR"] . "\system32\ipconfig.exe";
if (is_file($ipconfig)) {
@exec($ipconfig . " /all", $this->result);
} else {
@exec($_SERVER["WINDIR"] . "\system\ipconfig.exe /all", $this->result);
return $this->result;
}
}
}
}
$res = new GetmacAddr(PHP_OS);
echo $res->macAddr;
var_dump(PHP_OS, $res->macAddr);
exec("/sbin/ifconfig -a", $a, $b);
var_dump($a, $b);
##
# 将以下内容拷贝到相应的配置下面,只在根目录下安装Eduline有效,具体用法和服务器配置有关,请百度
##
location / {
#
# Nginx.txt
# eduline
#
# API新版规则
rewrite ^/?service/(.*)$ /index.php?app=service&service_name=$1&$args last;
#一级导航
rewrite ^/?$ /index.php?app=classroom&mod=Index&act=index&$args last;
rewrite ^/?admin.html$ /index.php?app=admin&mod=Index&act=index&$args last;
rewrite ^/?admin/login.html$ /index.php?app=admin&mod=Public&act=login&$args last;
rewrite ^/?course.html$ /index.php?app=course&mod=Video&act=index&$args last;
rewrite ^/?album.html$ /index.php?app=course&mod=Album&act=index&$args last;
rewrite ^/?live.html$ /index.php?app=live&mod=Index&act=index&$args last;
rewrite ^/?school.html$ /index.php?app=school&mod=Index&act=index&$args last;
rewrite ^/?teacher.html$ /index.php?app=classroom&mod=Teacher&act=index&$args last;
rewrite ^/?mall.html$ /index.php?app=mall&mod=Goods&act=index&$args last;
rewrite ^/?question.html$ /index.php?app=wenda&mod=Index&act=index&$args last;
rewrite ^/?exam.html$ /index.php?app=exams&mod=Index&act=index&$args last;
rewrite ^/?group.html$ /index.php?app=group&mod=Index&act=index&$args last;
rewrite ^/?event.html$ /index.php?app=event&mod=Index&act=index&$args last;
rewrite ^/?news.html$ /index.php?app=news&mod=Topic&act=index&$args last;
rewrite ^/?crow.html$ /index.php?app=classroom&mod=Crow&act=index&$args last;
rewrite ^/?library.html$ /index.php?app=classroom&mod=Library&act=index&$args last;
rewrite ^/?changecity/init.html$ /index.php?app=public&mod=ChangeCity&act=index&$args last;
rewrite ^/?lineclass.html$ /index.php?app=course&mod=LineClass&act=index&$args last;
rewrite ^/?vip.html$ /index.php?app=classroom&mod=Vip&act=index&$args last;
rewrite ^/?card_receipt/(.*).html$ /index.php?app=classroom&mod=CardReceipt&act=index&tab=$1&$args last;
rewrite ^/?messageBoard.html$ /index.php?app=classroom&mod=MessageBoard&act=index&$args last;
#登录/注册
rewrite ^/?login.html$ /index.php?app=basic&mod=Passport&act=login&$args last;
rewrite ^/?register.html$ /index.php?app=basic&mod=Passport&act=reg&$args last;
rewrite ^/?repwd.html$ /index.php?app=home&mod=Repwd&act=index&$args last;
#课程详情
rewrite ^/?course/([0-9]+).html$ /index.php?app=course&mod=Video&act=view&id=$1&$args last;
rewrite ^/?course/watch/([0-9]+)_([0-9]+).html$ /index.php?app=course&mod=Video&act=watch&id=$1&s_id=$2&$args last;
rewrite ^/?watch_wx/([0-9]+)_([0-9]+)_([0-9]+).html$ /index.php?app=course&mod=Video&act=watch&id=$1&s_id=$2&wx=$3&$args last;
rewrite ^/?course/coupon/([0-9]+).html$ /index.php?app=course&mod=PayVideo&act=coupon&id=$1&$args last;
#直播详情
rewrite ^/?live/([0-9]+).html$ /index.php?app=live&mod=Index&act=view&id=$1&$args last;
rewrite ^/?live/watch/([0-9]+).html$ /index.php?app=live&mod=Index&act=watch&id=$1&$args last;
rewrite ^/?live/teacher/([0-9]+).html$ /index.php?app=live&mod=Index&act=live_teacher&id=$1&$args last;
rewrite ^/?live/playback/([0-9]+)_([0-9]+)_(.*).html$ /index.php?app=live&mod=Index&act=getLivePlayback&id=$1&type=$2&ac=$3&$args last;
#班级详情
rewrite ^/?album/([0-9]+).html$ /index.php?app=course&mod=Album&act=view&id=$1&$args last;
#线下课详情
rewrite ^/?lineclass/([0-9]+).html$ /index.php?app=course&mod=LineClass&act=view&id=$1&$args last;
#考试详情
rewrite ^/?exam/([0-9]+).html$ /index.php?app=exams&mod=Index&act=exam&id=$1&$args last;
rewrite ^/?exam/report/([0-9]+)/([0-9]+).html$ /index.php?app=exams&mod=UserExam&act=exam_info&exam_id=$1&paper_id=$2&$args last;
#机构详情
#rewrite ^/?school/([0-9]+)_(\w+).html$ /index.php?app=school&mod=School&act=index&id=$1&doadmin=$2&$args last;
rewrite ^/?school/set_info.html$ /index.php?app=school&mod=User&act=index&$args last;
rewrite ^/?school/authentication.html$ /index.php?app=school&mod=User&act=setInfo&$args last;
rewrite ^/?school/domain_name.html$ /index.php?app=school&mod=User&act=domainName&$args last;
rewrite ^/?school/finance.html$ /index.php?app=school&mod=User&act=finance&$args last;
rewrite ^/?school/advertising.html$ /index.php?app=school&mod=User&act=advertising&$args last;
#讲师详情
rewrite ^/?teacher/([0-9]+).html$ /index.php?app=classroom&mod=Teacher&act=view&id=$1&$args last;
rewrite ^/?teacher/index/([0-9]+).html$ /index.php?app=classroom&mod=Teacher&act=about&id=$1&$args last;
rewrite ^/?teacher/review/([0-9]+).html$ /index.php?app=classroom&mod=Teacher&act=review&id=$1&$args last;
rewrite ^/?teacher/follow/([0-9]+).html$ /index.php?app=classroom&mod=Teacher&act=follow&id=$1&$args last;
rewrite ^/?teacher/(.*)/([0-9]+).html$ /index.php?app=classroom&mod=Teacher&act=course&type=$1&id=$2&$args last;
#积分商城
rewrite ^/?mall/([0-9]+).html$ /index.php?app=mall&mod=Goods&act=view&id=$1&$args last;
#资讯详情
rewrite ^/?news/([0-9]+).html$ /index.php?app=news&mod=Topic&act=view&id=$1&$args last;
#问答详情
rewrite ^/?question/([0-9]+).html$ /index.php?app=wenda&mod=Index&act=detail&id=$1&$args last;
rewrite ^/?question/type/([0-9]+).html$ /index.php?app=wenda&mod=Index&act=index&wdtype=$1&$args last;
rewrite ^/?question/([0-9]+)/([0-9]+)/([0-9]+).html$ /index.php?app=wenda&mod=Index&act=classifywd&type=$1&tpid=$2&wdtype=$3&$args last;
rewrite ^/?question/add.html$ /index.php?app=wenda&mod=Index&act=addWenda&$args last;
#管理中心
rewrite ^/?my/index.html$ /index.php?app=home&mod=User&act=index&$args last;
rewrite ^/?my/set_up/(.*).html$ /index.php?app=home&mod=User&act=setInfo&tab=$1&$args last;
rewrite ^/?my/certified_teacher.html$ /index.php?app=home&mod=User&act=authTeacher&$args last;
rewrite ^/?my/course.html$ /index.php?app=home&mod=Home&act=course&$args last;
rewrite ^/?my/live.html$ /index.php?app=home&mod=Home&act=live&$args last;
rewrite ^/?my/lineclass.html$ /index.php?app=home&mod=Home&act=courseLine&$args last;
rewrite ^/?my/classes.html$ /index.php?app=home&mod=Home&act=classes&$args last;
rewrite ^/?my/album.html$ /index.php?app=home&mod=Home&act=album&$args last;
rewrite ^/?my/share.html$ /index.php?app=home&mod=Home&act=share&$args last;
rewrite ^/?my/group.html$ /index.php?app=home&mod=Home&act=group&$args last;
rewrite ^/?my/course.html$ /index.php?app=home&mod=Home&act=course&$args last;
rewrite ^/?my/question.html$ /index.php?app=home&mod=Home&act=wenda&$args last;
rewrite ^/?my/put_question.html$ /index.php?app=home&mod=Home&act=wenti&$args last;
rewrite ^/?my/comment.html$ /index.php?app=home&mod=Home&act=review&$args last;
rewrite ^/?my/note.html$ /index.php?app=home&mod=Home&act=note&$args last;
rewrite ^/?my/follow.html$ /index.php?app=home&mod=Home&act=follow&$args last;
rewrite ^/?my/collect.html$ /index.php?app=home&mod=Home&act=collect&$args last;
rewrite ^/?my/learn.html$ /index.php?app=home&mod=Home&act=learn&$args last;
rewrite ^/?my/goods.html$ /index.php?app=home&mod=Home&act=goods&$args last;
rewrite ^/?my/arrange_course.html$ /index.php?app=home&mod=Home&act=teacher_course&$args last;
rewrite ^/?my/upload.html$ /index.php?app=home&mod=User&act=teacherVideo&$args last;
rewrite ^/?my/upload_course.html$ /index.php?app=home&mod=User&act=uploadVideo&$args last;
rewrite ^/?my/recharge/(.*)/(.*).html$ /index.php?app=home&mod=User&act=recharge&wpay=$1&ppn=$2&$args last;
rewrite ^/?my/recharge.html$ /index.php?app=home&mod=User&act=recharge&$args last;
rewrite ^/?my/account.html$ /index.php?app=home&mod=User&act=account&$args last;
rewrite ^/?my/account/(.*)/(.*).html$ /index.php?app=home&mod=User&act=account&wpay=$1&ppn=$2&$args last;
rewrite ^/?my/credit.html$ /index.php?app=home&mod=User&act=credit&$args last;
rewrite ^/?my/member.html$ /index.php?app=home&mod=User&act=member&$args last;
rewrite ^/?my/spilt.html$ /index.php?app=home&mod=User&act=spilt&$args last;
rewrite ^/?my/alipay.html$ /index.php?app=home&mod=User&act=alipay&$args last;
rewrite ^/?my/bank_card.html$ /index.php?app=home&mod=User&act=card&$args last;
rewrite ^/?my/card_coupons.html$ /index.php?app=home&mod=User&act=videoCoupon&$args last;
rewrite ^/?my/discount.html$ /index.php?app=home&mod=User&act=discount&$args last;
rewrite ^/?my/vip_card.html$ /index.php?app=home&mod=User&act=vipCard&$args last;
rewrite ^/?my/recharge_card.html$ /index.php?app=home&mod=User&act=rechargeCard&$args last;
rewrite ^/?my/course_card.html$ /index.php?app=home&mod=User&act=courseCard&$args last;
rewrite ^/?my/recardco.html$ /index.php?app=home&mod=User&act=exchangeCard&$args last;
rewrite ^/?my/order.html$ /index.php?app=home&mod=Home&act=order&$args last;
rewrite ^/?my/address.html$ /index.php?app=home&mod=User&act=address&$args last;
rewrite ^/?my/exams.html$ /index.php?app=home&mod=Home&act=exams&$args last;
rewrite ^/?my/teacher_info.html$ /index.php?app=home&mod=User&act=teacherDeatil&$args last;
rewrite ^/?my/upload_articles.html$ /index.php?app=home&mod=User&act=updateArticle&$args last;
rewrite ^/?my/article_info/([0-9]+).html$ /index.php?app=home&mod=User&act=checkDeatil&id=$1&$args last;
rewrite ^/?my/upload_experience.html$ /index.php?app=home&mod=User&act=updateDetails&$args last;
rewrite ^/?my/changepsw.html$ /index.php?app=home&mod=User&act=changepsw&$args last;
#个人首页
rewrite ^/?user/index/([0-9]+).html$ /index.php?app=home&mod=UserShow&act=index&uid=$1&$args last;
rewrite ^/?user/course/([0-9]+).html$ /index.php?app=home&mod=UserShow&act=course&uid=$1&$args last;
rewrite ^/?user/live/([0-9]+).html$ /index.php?app=home&mod=UserShow&act=live&uid=$1&$args last;
rewrite ^/?user/group/([0-9]+).html$ /index.php?app=home&mod=UserShow&act=group&uid=$1&$args last;
rewrite ^/?user/question/([0-9]+).html$ /index.php?app=home&mod=UserShow&act=question&uid=$1&$args last;
rewrite ^/?user/follow/([0-9]+).html$ /index.php?app=home&mod=UserShow&act=follow&uid=$1&$args last;
rewrite ^/?user/wenda/([0-9]+).html$ /index.php?app=home&mod=UserShow&act=wenda&uid=$1&$args last;
rewrite ^/?user/note/([0-9]+).html$ /index.php?app=home&mod=UserShow&act=note&uid=$1&$args last;
rewrite ^/?user/fans/([0-9]+).html$ /index.php?app=home&mod=UserShow&act=fans&uid=$1&$args last;
rewrite ^/?user/follow/([0-9]+).html$ /index.php?app=home&mod=UserShow&act=follow&uid=$1&$args last;
#消息
rewrite ^/?message/index.html$ /index.php?app=basic&mod=Message&act=index&$args last;
rewrite ^/?message/comment.html$ /index.php?app=basic&mod=Message&act=comment&$args last;
rewrite ^/?message/notify.html$ /index.php?app=basic&mod=Message&act=notify&$args last;
rewrite ^/?message/reply/([0-9]+)_([0-9]+).html$ /index.php?app=basic&mod=Message&act=detail&id=$1&type=$2&$args last;
#单页
rewrite ^/?single/(.*).html$ /index.php?app=basic&mod=Single&act=info&id=$1&$args last;
rewrite ^/?indie/(.*).html$ /index.php?app=basic&mod=Single&act=indie&ie=$1&$args last;
#第三方登录
rewrite ^/?login_callback/(.*)/(.*)/(.*).html$ /index.php?app=basic&mod=Widget&act=displayAddons&type=$1&addon=$2&hook=$3&$args last;
#app下载
rewrite ^/?appdownload.html$ /index.php?app=home&mod=Index&act=appDownload&$args last;
#筛选优化
rewrite ^/?course/((?:[a-zA-z]+\d+)+).html$ /index.php?app=classroom&mod=Video&act=index&squery=$1&$args last;
rewrite ^/?(live|wenda|exams)/((?:[a-zA-z]+\d+)+).html$ /index.php?app=$1&mod=Index&act=index&squery=$2&$args last;
#3g版发现(底部导航)
rewrite ^/?find.html /index.php?app=classroom&mod=Index&act=find&$args last;
#购买商品
rewrite ^/?pay/mall_(.*).html /index.php?app=mall&mod=Goods&act=pay&vst=$1&$args last;
#购买考试
rewrite ^/?pay/exams_(.*)/(.*)/(.*).html$ /index.php?app=exams&mod=Index&act=pay&vst=$1&wpay=$2&ppn=$3&$args last;
rewrite ^/?pay/exams_(.*).html /index.php?app=exams&mod=Index&act=pay&vst=$1&$args last;
#点播、直播、班级、线下课购买页
rewrite ^/?pay/video.html$ /index.php?app=course&mod=PayVideo&act=payLibrary&$args last;
rewrite ^/?pay/(.*)/(.*)/(.*).html$ /index.php?app=course&mod=PayVideo&act=index&vst=$1&wpay=$2&ppn=$3&$args last;
rewrite ^/?pay/(.*).html$ /index.php?app=course&mod=PayVideo&act=index&vst=$1&$args last;
#支付宝购买课程回调
rewrite ^/?alipay_alinu.html$ /index.php?app=basic&mod=Thirdparty&act=alinu&$args last;
rewrite ^/?alipay_aliru/(.*).html /index.php?app=course&mod=PayVideo&act=aliru&passback_params=$1&$args last;
rewrite ^/?link/(.*)/(.*)$ /index.php?app=course&mod=TradeRefundAndQuery&act=tradeRefundAndQuery&type=$1&tno=$2&$args last;
rewrite ^/?wxpay_sunu.html$ /index.php?app=basic&mod=Thirdparty&act=wxpaySuccess&$args last;
rewrite ^/?appwxpay_sunu.html$ /index.php?app=basic&mod=Thirdparty&act=appWxpaySuccess&$args last;
rewrite ^/?xcxwxpay_sunu.html$ /index.php?app=basic&mod=Thirdparty&act=xcxWxpaySuccess&$args last;
#充值积分/会员
rewrite ^/?alipay_alinu_scvp.html$ /index.php?app=basic&mod=Thirdparty&act=alinu_&$args last;
rewrite ^/?alipay_aliru_scvp.html /index.php?app=classroom&mod=Pay&act=aliru&$args last;
rewrite ^/?wxpay_success.html$ /index.php?app=basic&mod=Thirdparty&act=wxpaySuccess_&$args last;
rewrite ^/?appwxpay_success.html$ /index.php?app=basic&mod=Thirdparty&act=appWxpaySuccess_&$args last;
#验证微吼直播key
rewrite ^/?whlive_fail.html$ /index.php?app=live&mod=Index&act=authWhLiveFail&$args last;
rewrite ^/?auth_whlive.html$ /index.php?app=basic&mod=Thirdparty&act=authWhLiveKey&$args last;
# 七牛处理回调
rewrite ^/?qiniu/persistent/pipelineToHLS$ /index.php?app=basic&mod=Qiniu&act=persistentNotifyUrlForHLS&$args last;
# HLS站点key值获取
rewrite ^/?qiniu/getVideoKey$ /index.php?app=basic&mod=Qiniu&act=getVideoKey&$args last;
rewrite ^/?getVideoKey/(.*)$ /index.php?app=basic&mod=Public&act=getVideoKey&token=$1&args last;
# cc视频上传
rewrite ^/?cc/notify.html$ /index.php?app=basic&mod=Public&act=notify&$args last;
rewrite ^/?cc/upload.html$ /index.php?app=basic&mod=Public&act=ccUpload&$args last;
# 微信公众号消息地址
rewrite ^/?wx/message$ /index.php?app=basic&mod=Thirdparty&act=wxValid last;
# 保利威播放验证和跑马灯接口
rewrite ^/?baoliwei_oauth.html$ /index.php?app=course&mod=Video&act=bailiweiOauth last;
}
\ No newline at end of file
<?php
define('SITE_PATH',dirname(__FILE__));
date_default_timezone_set('PRC');
error_reporting(0);
session_start();
//$encrypt = 1;
$check_time = 120; //10分钟检查一次
$online_time = 1800; //统计30分钟的在线用户
$app = t($_GET['app'])?t($_GET['app']):'public';
$mod = t($_GET['mod'])?t($_GET['mod']):'Index';
$act = t($_GET['act'])?t($_GET['act']):'index';
$action = $app."/".$mod."/".$act;
$uid = isset($_GET['uid'])?intval($_GET['uid']):0;
$uname = t($_GET['uname'])?t($_GET['uname']):'guest';
$agent = getBrower();
$ip = getClientIp();
$refer = addslashes($_SERVER['HTTP_REFERER']);
$isGuest = ($uid==-1 || $uid==0)?1:0;
$isIntranet = (substr($ip,0,2)=='10.')?1:0;
$cTime = time();
$ext = '';
//全局配置
$config = require(SITE_PATH.'/config/config.inc.php');
//数据库配置
$db_config = !empty($config['ONLINE_DB']) ? array_merge($config,$config['ONLINE_DB']) : $config;
$dbconfig = array();
$dbconfig['DB_TYPE'] = $db_config['DB_TYPE'];
$dbconfig['DB_HOST'] = $db_config['DB_HOST'];
$dbconfig['DB_NAME'] = $db_config['DB_NAME'];
$dbconfig['DB_USER'] = $db_config['DB_USER'];
$dbconfig['DB_PWD'] = $db_config['DB_PWD'];
$dbconfig['DB_PORT'] = $db_config['DB_PORT'];
$dbconfig['DB_PREFIX'] = $db_config['DB_PREFIX'];
$dbconfig['DB_CHARSET'] = $db_config['DB_CHARSET'];
$db = new Db($dbconfig);
//记录在线统计.
if($_GET['action']=='trace'){
/* ===================================== step 1 record track ========================================== */
$sql = "INSERT INTO ".$config['DB_PREFIX']."online_logs
(day,uid,uname,action,refer,isGuest,isIntranet,ip,agent,ext,create_time)
VALUES ( CURRENT_DATE,'$uid','$uname','$action','$refer','$isGuest','$isIntranet','$ip','$agent','$ext',$cTime);";
$result = $db->execute("$sql");
/* ===================================== step 2 update hits ========================================== */
//memcached更新.写入全局点击量.每个应用的点击量.每个版块的点击量.
/* ===================================== step 3 update heartbeat ========================================== */
if( ( cookie('online_update') + $check_time ) < $cTime ){
//刷新用户在线时间
//设置10分钟过期
cookie('online_update',$cTime,7200);
//$_SESSION['online_pageviews'] = 0;
//判断是否存在记录.
if($uid>0){
$where = "WHERE (uid='$uid')";
}else{
$where = "WHERE (uid=0 AND ip='$ip')";
}
$sql = "SELECT uid FROM ".$config['DB_PREFIX']."online ".$where;
$result = $db->query("$sql");
//如果没有记录.添加记录.
if($result){
// 当天首次登陆
// if()
$sql = "UPDATE ".$config['DB_PREFIX']."online SET activeTime=$cTime,ip='$ip' ".$where;
$result = $db->execute("$sql");
}else{
$sql = "INSERT INTO ".$config['DB_PREFIX']."online (uid,uname,app,ip,agent,activeTime) VALUES ('$uid','{$uname}','$app','$ip','$agent',$cTime);";
$result = $db->execute("$sql");
}
}
if($result){
echo 'var onlineclick = "ok";';
}
}
/* ===================================== 公共部分 ========================================== */
// 获取客户端IP地址
function getClientIp() {
if (getenv ( "HTTP_CLIENT_IP" ) && strcasecmp ( getenv ( "HTTP_CLIENT_IP" ), "unknown" ))
$ip = getenv ( "HTTP_CLIENT_IP" );
else if (getenv ( "HTTP_X_FORWARDED_FOR" ) && strcasecmp ( getenv ( "HTTP_X_FORWARDED_FOR" ), "unknown" ))
$ip = getenv ( "HTTP_X_FORWARDED_FOR" );
else if (getenv ( "REMOTE_ADDR" ) && strcasecmp ( getenv ( "REMOTE_ADDR" ), "unknown" ))
$ip = getenv ( "REMOTE_ADDR" );
else if (isset ( $_SERVER ['REMOTE_ADDR'] ) && $_SERVER ['REMOTE_ADDR'] && strcasecmp ( $_SERVER ['REMOTE_ADDR'], "unknown" ))
$ip = $_SERVER ['REMOTE_ADDR'];
else
$ip = "unknown";
return addslashes($ip);
}
// 过滤非法html标签
function t($text) {
//过滤标签
$text = nl2br($text);
$text = real_strip_tags($text);
$text = addslashes($text);
$text = trim($text);
return addslashes($text);
}
function real_strip_tags($str, $allowable_tags="") {
$str = stripslashes(htmlspecialchars_decode($str));
return strip_tags($str, $allowable_tags);
}
// 获取用户浏览器型号。新加浏览器,修改代码,增加特征字符串.把IE加到12.0 可以使用5-10年了.
function getBrower(){
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Maxthon')) {
$browser = 'Maxthon';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 12.0')) {
$browser = 'IE12.0';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 11.0')) {
$browser = 'IE11.0';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 10.0')) {
$browser = 'IE10.0';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 9.0')) {
$browser = 'IE9.0';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 8.0')) {
$browser = 'IE8.0';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 7.0')) {
$browser = 'IE7.0';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.0')) {
$browser = 'IE6.0';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'NetCaptor')) {
$browser = 'NetCaptor';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Netscape')) {
$browser = 'Netscape';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Lynx')) {
$browser = 'Lynx';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Opera')) {
$browser = 'Opera';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome')) {
$browser = 'Google';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
$browser = 'Firefox';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Safari')) {
$browser = 'Safari';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'iphone') || strpos($_SERVER['HTTP_USER_AGENT'], 'ipod')) {
$browser = 'iphone';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'ipad')) {
$browser = 'iphone';
} elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'android')) {
$browser = 'android';
} else {
$browser = 'other';
}
return addslashes($browser);
}
// 浏览器友好的变量输出
function dump($var) {
ob_start();
var_dump($var);
$output = ob_get_clean();
if(!extension_loaded('xdebug')) {
$output = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $output);
$output = '<pre style="text-align:left">'. $label. htmlspecialchars($output, ENT_QUOTES). '</pre>';
}
echo($output);
}
// 设置cookie
function cookie($name,$value='',$option=null)
{
// 默认设置
$config = array(
'prefix' => $GLOBALS['config']['COOKIE_PREFIX'], // cookie 名称前缀
'expire' => $GLOBALS['config']['COOKIE_EXPIRE'], // cookie 保存时间
'path' => '/', // cookie 保存路径
'domain' => '', // cookie 有效域名
);
// 参数设置(会覆盖黙认设置)
if (!empty($option)) {
if (is_numeric($option)) {
$option = array('expire'=>$option);
}else if( is_string($option) ) {
parse_str($option,$option);
}
$config = array_merge($config,array_change_key_case($option));
}
// 清除指定前缀的所有cookie
if (is_null($name)) {
if (empty($_COOKIE)) return;
// 要删除的cookie前缀,不指定则删除config设置的指定前缀
$prefix = empty($value)? $config['prefix'] : $value;
if (!empty($prefix))// 如果前缀为空字符串将不作处理直接返回
{
foreach($_COOKIE as $key=>$val) {
if (0 === stripos($key,$prefix)){
setcookie($_COOKIE[$key],'',time()-3600,$config['path'],$config['domain']);
unset($_COOKIE[$key]);
}
}
}
return;
}
$name = $config['prefix'].$name;
if (''===$value){
//return isset($_COOKIE[$name]) ? unserialize($_COOKIE[$name]) : null;// 获取指定Cookie
return isset($_COOKIE[$name]) ? ($_COOKIE[$name]) : null;// 获取指定Cookie
}else {
if (is_null($value)) {
setcookie($name,'',time()-3600,$config['path'],$config['domain']);
unset($_COOKIE[$name]);// 删除指定cookie
}else {
// 设置cookie
$expire = !empty($config['expire'])? time()+ intval($config['expire']):0;
//setcookie($name,serialize($value),$expire,$config['path'],$config['domain']);
setcookie($name,($value),$expire,$config['path'],$config['domain'],false,true);
//$_COOKIE[$name] = ($value);
}
}
}
/**
+------------------------------------------------------------------------------
* ThinkPHP 简洁模式数据库中间层实现类
* 只支持mysql
+------------------------------------------------------------------------------
*/
class Db
{
static private $_instance = null;
// 是否显示调试信息 如果启用会在日志文件记录sql语句
public $debug = false;
// 是否使用永久连接
protected $pconnect = false;
// 当前SQL指令
protected $queryStr = '';
// 最后插入ID
protected $lastInsID = null;
// 返回或者影响记录数
protected $numRows = 0;
// 返回字段数
protected $numCols = 0;
// 事务指令数
protected $transTimes = 0;
// 错误信息
protected $error = '';
// 当前连接ID
protected $linkID = null;
// 当前查询ID
protected $queryID = null;
// 是否已经连接数据库
protected $connected = false;
// 数据库连接参数配置
protected $config = '';
// SQL 执行时间记录
protected $beginTime;
/**
+----------------------------------------------------------
* 架构函数
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param array $config 数据库配置数组
+----------------------------------------------------------
*/
public function __construct($config=''){
if ( !extension_loaded('mysql') ) {
echo('not support mysql');
}
$this->config = $this->parseConfig($config);
}
/**
+----------------------------------------------------------
* 连接数据库方法
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @throws ThinkExecption
+----------------------------------------------------------
*/
public function connect() {
if(!$this->connected) {
$config = $this->config;
// 处理不带端口号的socket连接情况
$host = $config['hostname'].($config['hostport']?":{$config['hostport']}":'');
if($this->pconnect) {
$this->linkID = mysql_pconnect( $host, $config['username'], $config['password']);
}else{
$this->linkID = mysql_connect( $host, $config['username'], $config['password'],true);
}
if ( !$this->linkID || (!empty($config['database']) && !mysql_select_db($config['database'], $this->linkID)) ) {
echo(mysql_error());
}
$dbVersion = mysql_get_server_info($this->linkID);
if ($dbVersion >= "4.1") {
//使用UTF8存取数据库 需要mysql 4.1.0以上支持
mysql_query("SET NAMES 'UTF8'", $this->linkID);
}
//设置 sql_model
if($dbVersion >'5.0.1'){
mysql_query("SET sql_mode=''",$this->linkID);
}
// 标记连接成功
$this->connected = true;
// 注销数据库连接配置信息
unset($this->config);
}
}
/**
+----------------------------------------------------------
* 释放查询结果
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
*/
public function free() {
mysql_free_result($this->queryID);
$this->queryID = 0;
}
/**
+----------------------------------------------------------
* 执行查询 主要针对 SELECT, SHOW 等指令
* 返回数据集
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param string $str sql指令
+----------------------------------------------------------
* @return mixed
+----------------------------------------------------------
* @throws ThinkExecption
+----------------------------------------------------------
*/
public function query($str='') {
$this->connect();
if ( !$this->linkID ) return false;
if ( $str != '' ) $this->queryStr = $str;
//释放前次的查询结果
if ( $this->queryID ) { $this->free(); }
$this->Q(1);
$this->queryID = mysql_query($this->queryStr, $this->linkID);
$this->debug();
if ( !$this->queryID ) {
if ( $this->debug )
echo($this->error());
else
return false;
} else {
$this->numRows = mysql_num_rows($this->queryID);
return $this->getAll();
}
}
/**
+----------------------------------------------------------
* 执行语句 针对 INSERT, UPDATE 以及DELETE
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param string $str sql指令
+----------------------------------------------------------
* @return integer
+----------------------------------------------------------
* @throws ThinkExecption
+----------------------------------------------------------
*/
public function execute($str='') {
$this->connect();
if ( !$this->linkID ) return false;
if ( $str != '' ) $this->queryStr = $str;
//释放前次的查询结果
if ( $this->queryID ) { $this->free(); }
$this->W(1);
$result = mysql_query($this->queryStr, $this->linkID) ;
$this->debug();
if ( false === $result) {
if ( $this->debug )
echo($this->error());
else
return false;
} else {
$this->numRows = mysql_affected_rows($this->linkID);
$this->lastInsID = mysql_insert_id($this->linkID);
return $this->numRows;
}
}
/**
+----------------------------------------------------------
* 获得所有的查询数据
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @return array
+----------------------------------------------------------
* @throws ThinkExecption
+----------------------------------------------------------
*/
public function getAll() {
if ( !$this->queryID ) {
echo($this->error());
return false;
}
//返回数据集
$result = array();
if($this->numRows >0) {
while($row = mysql_fetch_assoc($this->queryID)){
$result[] = $row;
}
mysql_data_seek($this->queryID,0);
}
return $result;
}
/**
+----------------------------------------------------------
* 关闭数据库
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @throws ThinkExecption
+----------------------------------------------------------
*/
public function close() {
if (!empty($this->queryID))
mysql_free_result($this->queryID);
if ($this->linkID && !mysql_close($this->linkID)){
echo($this->error());
}
$this->linkID = 0;
}
/**
+----------------------------------------------------------
* 数据库错误信息
* 并显示当前的SQL语句
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
public function error() {
$this->error = mysql_error($this->linkID);
if($this->queryStr!=''){
$this->error .= "\n [ SQL语句 ] : ".$this->queryStr;
}
return $this->error;
}
/**
+----------------------------------------------------------
* SQL指令安全过滤
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param string $str SQL字符串
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
public function escape_string($str) {
$res = @mysql_escape_string($str);
$res === false && $res = $str;
return $res;
}
/**
+----------------------------------------------------------
* 析构方法
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
*/
public function __destruct()
{
// 关闭连接
$this->close();
}
/**
+----------------------------------------------------------
* 取得数据库类实例
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return mixed 返回数据库驱动类
+----------------------------------------------------------
*/
public static function getInstance($db_config='')
{
if ( self::$_instance==null ){
self::$_instance = new Db($db_config);
}
return self::$_instance;
}
/**
+----------------------------------------------------------
* 分析数据库配置信息,支持数组和DSN
+----------------------------------------------------------
* @access private
+----------------------------------------------------------
* @param mixed $db_config 数据库配置信息
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
private function parseConfig($_db_config='') {
// 如果配置为空,读取配置文件设置
$db_config = array (
'dbms' => $_db_config['DB_TYPE'],
'username' => $_db_config['DB_USER'],
'password' => $_db_config['DB_PWD'],
'hostname' => $_db_config['DB_HOST'],
'hostport' => $_db_config['DB_PORT'],
'database' => $_db_config['DB_NAME'],
'dsn' => $_db_config['DB_DSN'],
'params' => $_db_config['DB_PARAMS'],
);
return $db_config;
}
/**
+----------------------------------------------------------
* 数据库调试 记录当前SQL
+----------------------------------------------------------
* @access protected
+----------------------------------------------------------
*/
protected function debug() {
// 记录操作结束时间
if ( $this->debug ) {
$runtime = number_format(microtime(TRUE) - $this->beginTime, 6);
Log::record(" RunTime:".$runtime."s SQL = ".$this->queryStr,Log::SQL);
}
}
/**
+----------------------------------------------------------
* 查询次数更新或者查询
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param mixed $times
+----------------------------------------------------------
* @return void
+----------------------------------------------------------
*/
public function Q($times='') {
static $_times = 0;
if(empty($times)) {
return $_times;
}else{
$_times++;
// 记录开始执行时间
$this->beginTime = microtime(TRUE);
}
}
/**
+----------------------------------------------------------
* 写入次数更新或者查询
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param mixed $times
+----------------------------------------------------------
* @return void
+----------------------------------------------------------
*/
public function W($times='') {
static $_times = 0;
if(empty($times)) {
return $_times;
}else{
$_times++;
// 记录开始执行时间
$this->beginTime = microtime(TRUE);
}
}
/**
+----------------------------------------------------------
* 获取最近一次查询的sql语句
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
public function getLastSql() {
return $this->queryStr;
}
}//类定义结束
?>
\ No newline at end of file
####感谢您购买Eduline-互动话在线教育系统,为了保证您的系统能够正常使用,请准备以下资料并在网站后台相关配置项配置
1,短信接口 申请地址:http://www.sms.cn/
2,七牛账号, 申请地址:http://www.qiniu.com
3,支付宝在线支付账号 申请地址:http://www.alipay.com
4,银联在线支付账号
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<!--# API新版规则-->
<rule name="Eduline 1" stopProcessing="true">
<match url="^service/(.*)$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=service&amp;service_name={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#一级导航-->
<rule name="Eduline 2" stopProcessing="true">
<match url="^$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=classroom&amp;mod=Index&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 3" stopProcessing="true">
<match url="^admin.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=admin&amp;mod=Index&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 4" stopProcessing="true">
<match url="^admin/login.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=admin&amp;mod=Public&amp;act=login&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 5" stopProcessing="true">
<match url="^course.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=course&amp;mod=Video&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 6" stopProcessing="true">
<match url="^album.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=course&amp;mod=Album&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 7" stopProcessing="true">
<match url="^live.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=live&amp;mod=Index&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 8" stopProcessing="true">
<match url="^school.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=school&amp;mod=Index&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 9" stopProcessing="true">
<match url="^teacher.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=classroom&amp;mod=Teacher&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 10" stopProcessing="true">
<match url="^mall.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=mall&amp;mod=Goods&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 11" stopProcessing="true">
<match url="^question.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=wenda&amp;mod=Index&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 12" stopProcessing="true">
<match url="^exam.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=exams&amp;mod=Index&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 13" stopProcessing="true">
<match url="^group.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=group&amp;mod=Index&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 14" stopProcessing="true">
<match url="^event.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=event&amp;mod=Index&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 15" stopProcessing="true">
<match url="^news.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=news&amp;mod=Topic&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 16" stopProcessing="true">
<match url="^library.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=classroom&amp;mod=Library&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 17" stopProcessing="true">
<match url="^changecity/init.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=public&amp;mod=ChangeCity&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 18" stopProcessing="true">
<match url="^lineclass.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=course&amp;mod=LineClass&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 19" stopProcessing="true">
<match url="^vip.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=classroom&amp;mod=Vip&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 20" stopProcessing="true">
<match url="^card_receipt/(.*).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=classroom&amp;mod=CardReceipt&amp;act=index&amp;tab={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 21" stopProcessing="true">
<match url="^messageBoard.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=classroom&amp;mod=MessageBoard&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#登录/注册-->
<rule name="Eduline 22" stopProcessing="true">
<match url="^login.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Passport&amp;act=login&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 23" stopProcessing="true">
<match url="^register.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Passport&amp;act=reg&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 24" stopProcessing="true">
<match url="^repwd.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Repwd&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#课程详情-->
<rule name="Eduline 25" stopProcessing="true">
<match url="^course/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=course&amp;mod=Video&amp;act=view&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 26" stopProcessing="true">
<match url="^course/watch/([0-9]+)_([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=course&amp;mod=Video&amp;act=watch&amp;id={R:1}&amp;s_id={R:2}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 27" stopProcessing="true">
<match url="^watch_wx/([0-9]+)_([0-9]+)_([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=course&amp;mod=Video&amp;act=watch&amp;id={R:1}&amp;s_id={R:2}&amp;wx={R:3}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 28" stopProcessing="true">
<match url="^course/coupon/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=course&amp;mod=PayVideo&amp;act=coupon&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#直播详情-->
<rule name="Eduline 29" stopProcessing="true">
<match url="^live/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=live&amp;mod=Index&amp;act=view&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 30" stopProcessing="true">
<match url="^live/watch/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=live&amp;mod=Index&amp;act=watch&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 31" stopProcessing="true">
<match url="^live/teacher/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=live&amp;mod=Index&amp;act=live_teacher&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 32" stopProcessing="true">
<match url="^live/playback/([0-9]+)_([0-9]+)_(.*).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=live&amp;mod=Index&amp;act=getLivePlayback&amp;id={R:1}&amp;type={R:2}&amp;ac={R:3}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#班级详情-->
<rule name="Eduline 33" stopProcessing="true">
<match url="^album/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=course&amp;mod=Album&amp;act=view&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#线下课详情-->
<rule name="Eduline 34" stopProcessing="true">
<match url="^lineclass/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=course&amp;mod=LineClass&amp;act=view&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#考试详情-->
<rule name="Eduline 35" stopProcessing="true">
<match url="^exam/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=exams&amp;mod=Index&amp;act=exam&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 36" stopProcessing="true">
<match url="^exam/report/([0-9]+)/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=exams&amp;mod=UserExam&amp;act=exam_info&amp;exam_id={R:1}&amp;paper_id={R:2}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#机构详情-->
<!--#RewriteRule ^/?school/([0-9]+)_(\w+).html$ /index.php?app=school&mod=School&act=index&id=$1&doadmin=$2&%{QUERY_STRING} [L]-->
<rule name="Eduline 37" stopProcessing="true">
<match url="^school/set_info.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=school&amp;mod=User&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 38" stopProcessing="true">
<match url="^school/authentication.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=school&amp;mod=User&amp;act=setInfo&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 39" stopProcessing="true">
<match url="^school/domain_name.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=school&amp;mod=User&amp;act=domainName&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 40" stopProcessing="true">
<match url="^school/finance.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=school&amp;mod=User&amp;act=finance&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 41" stopProcessing="true">
<match url="^school/advertising.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=school&amp;mod=User&amp;act=advertising&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#讲师详情-->
<rule name="Eduline 42" stopProcessing="true">
<match url="^teacher/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=classroom&amp;mod=Teacher&amp;act=view&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 43" stopProcessing="true">
<match url="^teacher/index/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=classroom&amp;mod=Teacher&amp;act=about&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 44" stopProcessing="true">
<match url="^teacher/review/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=classroom&amp;mod=Teacher&amp;act=review&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 45" stopProcessing="true">
<match url="^teacher/follow/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=classroom&amp;mod=Teacher&amp;act=follow&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 46" stopProcessing="true">
<match url="^teacher/(.*)/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=classroom&amp;mod=Teacher&amp;act=course&amp;type={R:1}&amp;id={R:2}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#积分商城-->
<rule name="Eduline 47" stopProcessing="true">
<match url="^mall/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=mall&amp;mod=Goods&amp;act=view&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#资讯详情-->
<rule name="Eduline 48" stopProcessing="true">
<match url="^news/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=news&amp;mod=Topic&amp;act=view&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#问答详情-->
<rule name="Eduline 49" stopProcessing="true">
<match url="^question/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=wenda&amp;mod=Index&amp;act=detail&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 50" stopProcessing="true">
<match url="^question/type/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=wenda&amp;mod=Index&amp;act=index&amp;wdtype={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 51" stopProcessing="true">
<match url="^question/([0-9]+)/([0-9]+)/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=wenda&amp;mod=Index&amp;act=classifywd&amp;type={R:1}&amp;tpid={R:2}&amp;wdtype={R:3}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 52" stopProcessing="true">
<match url="^question/add.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=wenda&amp;mod=Index&amp;act=addWenda&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#管理中心-->
<rule name="Eduline 53" stopProcessing="true">
<match url="^my/index.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 54" stopProcessing="true">
<match url="^my/set_up/(.*).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=setInfo&amp;tab={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 55" stopProcessing="true">
<match url="^my/certified_teacher.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=authTeacher&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 56" stopProcessing="true">
<match url="^my/course.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=course&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 57" stopProcessing="true">
<match url="^my/live.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=live&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 58" stopProcessing="true">
<match url="^my/lineclass.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=courseLine&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 59" stopProcessing="true">
<match url="^my/album.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=album&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 60" stopProcessing="true">
<match url="^my/share.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=share&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 61" stopProcessing="true">
<match url="^my/group.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=group&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 62" stopProcessing="true">
<match url="^my/course.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=course&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 63" stopProcessing="true">
<match url="^my/question.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=wenda&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 64" stopProcessing="true">
<match url="^my/put_question.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=wenti&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 65" stopProcessing="true">
<match url="^my/comment.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=review&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 66" stopProcessing="true">
<match url="^my/note.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=note&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 67" stopProcessing="true">
<match url="^my/follow.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=follow&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 68" stopProcessing="true">
<match url="^my/collect.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=collect&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 69" stopProcessing="true">
<match url="^my/learn.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=learn&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 70" stopProcessing="true">
<match url="^my/goods.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=goods&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 71" stopProcessing="true">
<match url="^my/arrange_course.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=teacher_course&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 72" stopProcessing="true">
<match url="^my/upload.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=teacherVideo&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 73" stopProcessing="true">
<match url="^my/upload_course.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=uploadVideo&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 74" stopProcessing="true">
<match url="^my/recharge/(.*)/(.*).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=recharge&amp;wpay={R:1}&amp;ppn={R:2}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 75" stopProcessing="true">
<match url="^my/recharge.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=recharge&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 76" stopProcessing="true">
<match url="^my/account.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=account&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 77" stopProcessing="true">
<match url="^my/account/(.*)/(.*).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=account&amp;wpay={R:1}&amp;ppn={R:2}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 78" stopProcessing="true">
<match url="^my/credit.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=credit&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 79" stopProcessing="true">
<match url="^my/member.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=member&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 80" stopProcessing="true">
<match url="^my/spilt.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=spilt&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 81" stopProcessing="true">
<match url="^my/alipay.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=alipay&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 82" stopProcessing="true">
<match url="^my/bank_card.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=card&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 83" stopProcessing="true">
<match url="^my/card_coupons.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=videoCoupon&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 84" stopProcessing="true">
<match url="^my/discount.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=discount&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 85" stopProcessing="true">
<match url="^my/vip_card.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=vipCard&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 86" stopProcessing="true">
<match url="^my/recharge_card.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=rechargeCard&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 87" stopProcessing="true">
<match url="^my/course_card.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=courseCard&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 88" stopProcessing="true">
<match url="^my/recardco.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=exchangeCard&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 89" stopProcessing="true">
<match url="^my/order.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=order&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 90" stopProcessing="true">
<match url="^my/address.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=address&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 91" stopProcessing="true">
<match url="^my/exams.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Home&amp;act=exams&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 92" stopProcessing="true">
<match url="^my/teacher_info.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=teacherDeatil&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 93" stopProcessing="true">
<match url="^my/upload_articles.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=updateArticle&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 94" stopProcessing="true">
<match url="^my/article_info/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=checkDeatil&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 95" stopProcessing="true">
<match url="^my/upload_experience.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=updateDetails&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 96" stopProcessing="true">
<match url="^my/changepsw.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=User&amp;act=changepsw&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#个人首页-->
<rule name="Eduline 97" stopProcessing="true">
<match url="^user/index/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=UserShow&amp;act=index&amp;uid={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 98" stopProcessing="true">
<match url="^user/course/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=UserShow&amp;act=course&amp;uid={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 99" stopProcessing="true">
<match url="^user/live/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=UserShow&amp;act=live&amp;uid={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 100" stopProcessing="true">
<match url="^user/group/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=UserShow&amp;act=group&amp;uid={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 101" stopProcessing="true">
<match url="^user/question/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=UserShow&amp;act=question&amp;uid={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 102" stopProcessing="true">
<match url="^user/follow/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=UserShow&amp;act=follow&amp;uid={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 103" stopProcessing="true">
<match url="^user/wenda/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=UserShow&amp;act=wenda&amp;uid={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 104" stopProcessing="true">
<match url="^user/note/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=UserShow&amp;act=note&amp;uid={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 105" stopProcessing="true">
<match url="^user/fans/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=UserShow&amp;act=fans&amp;uid={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 106" stopProcessing="true">
<match url="^user/follow/([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=UserShow&amp;act=follow&amp;uid={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#消息-->
<rule name="Eduline 107" stopProcessing="true">
<match url="^message/index.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Message&amp;act=index&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 108" stopProcessing="true">
<match url="^message/comment.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Message&amp;act=comment&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 109" stopProcessing="true">
<match url="^message/notify.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Message&amp;act=notify&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 110" stopProcessing="true">
<match url="^message/reply/([0-9]+)_([0-9]+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Message&amp;act=detail&amp;id={R:1}&amp;type={R:2}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#单页-->
<rule name="Eduline 111" stopProcessing="true">
<match url="^single/(.*).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Single&amp;act=info&amp;id={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 112" stopProcessing="true">
<match url="^indie/(.*).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Single&amp;act=indie&amp;ie={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#第三方登录-->
<rule name="Eduline 113" stopProcessing="true">
<match url="^login_callback/(.*)/(.*)/(.*).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Widget&amp;act=displayAddons&amp;type={R:1}&amp;addon={R:2}&amp;hook={R:3}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#app下载-->
<rule name="Eduline 114" stopProcessing="true">
<match url="^appdownload.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=home&amp;mod=Index&amp;act=appDownload&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#筛选优化-->
<rule name="Eduline 115" stopProcessing="true">
<match url="^course/((?:[a-zA-z]+\d+)+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=classroom&amp;mod=Video&amp;act=index&amp;squery={R:1}{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 116" stopProcessing="true">
<match url="^(exam|live|wenda|exams)/((?:[a-zA-z]+\d+)+).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app={R:1}&amp;mod=Index&amp;act=index&amp;squery={R:2}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#3g版发现(底部导航)-->
<rule name="Eduline 117" stopProcessing="true">
<match url="^find.html" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=classroom&amp;mod=Index&amp;act=find&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--# 购买商品-->
<rule name="Eduline 118" stopProcessing="true">
<match url="^pay/mall_(.*).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=mall&amp;mod=Goods&amp;act=pay&amp;vst={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#点播、直播、班级、线下课购买页-->
<rule name="Eduline 119" stopProcessing="true">
<match url="^pay/video.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=course&amp;mod=PayVideo&amp;act=payLibrary&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 120" stopProcessing="true">
<match url="^pay/(.*)/(.*)/(.*).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=course&amp;mod=PayVideo&amp;act=index&amp;vst={R:1}&amp;wpay={R:2}&amp;ppn={R:3}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 121" stopProcessing="true">
<match url="^pay/(.*).html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=course&amp;mod=PayVideo&amp;act=index&amp;vst={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#支付宝购买课程回调-->
<rule name="Eduline 122" stopProcessing="true">
<match url="^alipay_alinu.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Thirdparty&amp;act=alinu&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 123" stopProcessing="true">
<match url="^alipay_aliru/(.*).html" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=course&amp;mod=PayVideo&amp;act=aliru&amp;passback_params={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 124" stopProcessing="true">
<match url="^link/(.*)/(.*)" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=course&amp;mod=TradeRefundAndQuery&amp;act=tradeRefundAndQuery&amp;type={R:1}&amp;tno={R:2}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 125" stopProcessing="true">
<match url="^wxpay_sunu.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Thirdparty&amp;act=wxpaySuccess&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 126" stopProcessing="true">
<match url="^appwxpay_sunu.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Thirdparty&amp;act=appWxpaySuccess&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 127" stopProcessing="true">
<match url="^xcxwxpay_sunu.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Thirdparty&amp;act=xcxWxpaySuccess&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#充值积分/会员-->
<rule name="Eduline 128" stopProcessing="true">
<match url="^alipay_alinu_scvp.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Thirdparty&amp;act=alinu_&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 129" stopProcessing="true">
<match url="^alipay_aliru_scvp.html" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=classroom&amp;mod=Pay&amp;act=aliru&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 130" stopProcessing="true">
<match url="^wxpay_success.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Thirdparty&amp;act=wxpaySuccess_&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 131" stopProcessing="true">
<match url="^appwxpay_success.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Thirdparty&amp;act=appWxpaySuccess_&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--#验证微吼直播key-->
<rule name="Eduline 132" stopProcessing="true">
<match url="^whlive_fail.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=live&amp;mod=Index&amp;act=authWhLiveFail&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 133" stopProcessing="true">
<match url="^auth_whlive.html$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Thirdparty&amp;act=authWhLiveKey&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--# 七牛处理回调-->
<rule name="Eduline 134" stopProcessing="true">
<match url="^qiniu/persistent/pipelineToHLS$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Qiniu&amp;act=persistentNotifyUrlForHLS&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--# HLS站点key值获取-->
<rule name="Eduline 135" stopProcessing="true">
<match url="^qiniu/getVideoKey$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Qiniu&amp;act=getVideoKey&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 136" stopProcessing="true">
<match url="^getVideoKey/(.*)$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Public&amp;act=getVideoKey&amp;token={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--# cc视频上传-->
<rule name="Eduline 137" stopProcessing="true">
<match url="^cc/notify.html$" ignoreCase="false" />
<action type="Rewrite" url="/core/OpenSociax/Api/video/cc/notify.php?{QUERY_STRING}" appendQueryString="false" />
</rule>
<rule name="Eduline 138" stopProcessing="true">
<match url="^cc/getuploadurl.html$" ignoreCase="false" />
<action type="Rewrite" url="/core/OpenSociax/Api/video/cc/getuploadurl.php?{QUERY_STRING}" appendQueryString="false" />
</rule>
<!--# 微信公众号消息-->
<rule name="Eduline 139" stopProcessing="true">
<match url="^wx/message$" ignoreCase="false" />
<action type="Rewrite" url="/index.php?app=basic&amp;mod=Thirdparty&amp;act=wxValid" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
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