From 0b4818c36e994aa66ae48a32b09089101821c0df Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 24 Nov 2016 00:03:37 +0100 Subject: [PATCH 001/434] sql: new coins fields for stratum/pow settings Also some more fields to cache the available balance (to allow triggers) --- sql/2016-11-23-coins.sql | 13 +++++++++++ web/yaamp/models/db_coinsModel.php | 2 ++ web/yaamp/modules/site/coin_form.php | 32 +++++++++++++++++++++++++++- 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 sql/2016-11-23-coins.sql diff --git a/sql/2016-11-23-coins.sql b/sql/2016-11-23-coins.sql new file mode 100644 index 000000000..ca49abf7f --- /dev/null +++ b/sql/2016-11-23-coins.sql @@ -0,0 +1,13 @@ +-- Recent additions to add after db init (.gz) +-- mysql yaamp -p < file.sql + +-- don't forget to restart memcached service to refresh the db structure + +ALTER TABLE `coins` ADD `powend_height` INT(11) NULL AFTER `target_height`; +ALTER TABLE `coins` ADD `mature_blocks` INT(11) NULL AFTER `reward_mul`; +ALTER TABLE `coins` ADD `block_time` INT(11) NULL AFTER `payout_max`; +ALTER TABLE `coins` ADD `available` DOUBLE NULL AFTER `balance`; +ALTER TABLE `coins` ADD `cleared` DOUBLE NULL AFTER `balance`; +ALTER TABLE `coins` ADD `immature` DOUBLE NULL AFTER `balance`; +ALTER TABLE `coins` ADD `max_miners` INT(11) NULL AFTER `visible`; +ALTER TABLE `coins` ADD `max_shares` INT(11) NULL AFTER `max_miners`; diff --git a/web/yaamp/models/db_coinsModel.php b/web/yaamp/models/db_coinsModel.php index 46b620200..fef6b58cd 100644 --- a/web/yaamp/models/db_coinsModel.php +++ b/web/yaamp/models/db_coinsModel.php @@ -37,6 +37,8 @@ public function attributeLabels() 'txfee' => 'Tx Fee', 'program' => 'Process name', 'conf_folder' => 'Conf. folder', + 'mature_blocks' => 'PoW Confirmations', + 'powend_height' => 'End of PoW', 'rpchost' => 'RPC Host', 'rpcport' => 'RPC Port', 'rpcuser' => 'RPC User', diff --git a/web/yaamp/modules/site/coin_form.php b/web/yaamp/modules/site/coin_form.php index 18cf44577..4e24934b9 100644 --- a/web/yaamp/modules/site/coin_form.php +++ b/web/yaamp/modules/site/coin_form.php @@ -86,7 +86,25 @@ echo CUFHtml::openActiveCtrlHolder($coin, 'target_height'); echo CUFHtml::activeLabelEx($coin, 'target_height'); echo CUFHtml::activeTextField($coin, 'target_height', array('maxlength'=>32,'style'=>'width: 120px;')); -echo '

'; +echo '

Known height of the network

'; +echo CUFHtml::closeCtrlHolder(); + +echo CUFHtml::openActiveCtrlHolder($coin, 'powend_height'); +echo CUFHtml::activeLabelEx($coin, 'powend_height'); +echo CUFHtml::activeTextField($coin, 'powend_height', array('maxlength'=>32,'style'=>'width: 120px;')); +echo '

Height of the end of PoW mining

'; +echo CUFHtml::closeCtrlHolder(); + +echo CUFHtml::openActiveCtrlHolder($coin, 'mature_blocks'); +echo CUFHtml::activeLabelEx($coin, 'mature_blocks'); +echo CUFHtml::activeTextField($coin, 'mature_blocks', array('maxlength'=>32,'style'=>'width: 120px;')); +echo '

Required block count to mature

'; +echo CUFHtml::closeCtrlHolder(); + +echo CUFHtml::openActiveCtrlHolder($coin, 'block_time'); +echo CUFHtml::activeLabelEx($coin, 'block_time'); +echo CUFHtml::activeTextField($coin, 'block_time', array('maxlength'=>32,'style'=>'width: 120px;')); +echo '

Average block time (sec)

'; echo CUFHtml::closeCtrlHolder(); echo CUFHtml::openActiveCtrlHolder($coin, 'errors'); @@ -141,6 +159,18 @@ echo '

Merged mining

'; echo CUFHtml::closeCtrlHolder(); +echo CUFHtml::openActiveCtrlHolder($coin, 'max_miners'); +echo CUFHtml::activeLabelEx($coin, 'max_miners'); +echo CUFHtml::activeTextField($coin, 'max_miners', array('maxlength'=>32,'style'=>'width: 120px;')); +echo '

Miners allowed by the stratum

'; +echo CUFHtml::closeCtrlHolder(); + +echo CUFHtml::openActiveCtrlHolder($coin, 'max_shares'); +echo CUFHtml::activeLabelEx($coin, 'max_shares'); +echo CUFHtml::activeTextField($coin, 'max_shares', array('maxlength'=>32,'style'=>'width: 120px;')); +echo '

Auto restart stratum after this amount of shares

'; +echo CUFHtml::closeCtrlHolder(); + echo CUFHtml::openActiveCtrlHolder($coin, 'master_wallet'); echo CUFHtml::activeLabelEx($coin, 'master_wallet'); echo CUFHtml::activeTextField($coin, 'master_wallet', array('maxlength'=>200)); From f31dd15d4e22ed9f05f158b938c3f48308c90682 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 24 Nov 2016 00:38:32 +0100 Subject: [PATCH 002/434] stratum: link new limits db fields the share counter will allow you to auto restart the stratum, if required. --- stratum/db.cpp | 4 +++- stratum/share.cpp | 1 + stratum/stratum.cpp | 13 +++++++++++++ stratum/stratum.h | 3 +++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/stratum/db.cpp b/stratum/db.cpp index e3037b926..80e3e451a 100644 --- a/stratum/db.cpp +++ b/stratum/db.cpp @@ -158,7 +158,7 @@ void db_update_coinds(YAAMP_DB *db) db_query(db, "SELECT id, name, rpchost, rpcport, rpcuser, rpcpasswd, rpcencoding, master_wallet, reward, price, " "hassubmitblock, txmessage, enable, auto_ready, algo, pool_ttf, charity_address, charity_amount, charity_percent, " "reward_mul, symbol, auxpow, actual_ttf, network_ttf, usememorypool, hasmasternodes, algo, symbol2, " - "rpccurl, rpcssl, rpccert, account, multialgos " + "rpccurl, rpcssl, rpccert, account, multialgos, max_miners, max_shares " "FROM coins WHERE enable AND auto_ready AND algo='%s' ORDER BY index_avg", g_stratum_algo); MYSQL_RES *result = mysql_store_result(&db->mysql); @@ -256,6 +256,8 @@ void db_update_coinds(YAAMP_DB *db) if(row[31]) strcpy(coind->account, row[31]); if(row[32]) coind->multialgos = atoi(row[32]); + if(row[33] && atoi(row[33]) > 0) g_stratum_max_cons = atoi(row[33]); + if(row[34] && atol(row[34]) > 0) g_max_shares = atol(row[34]); // force the right rpcencoding for DCR if(!strcmp(coind->symbol, "DCR") && strcmp(coind->rpcencoding, "DCR")) diff --git a/stratum/share.cpp b/stratum/share.cpp index 1c733845c..ce637b3c2 100644 --- a/stratum/share.cpp +++ b/stratum/share.cpp @@ -78,6 +78,7 @@ static void share_add_worker(YAAMP_CLIENT *client, YAAMP_JOB *job, bool valid, c void share_add(YAAMP_CLIENT *client, YAAMP_JOB *job, bool valid, char *extranonce2, char *ntime, char *nonce, double share_diff, int error_number) { // check_job(job); + g_shares_counter++; share_add_worker(client, job, valid, ntime, share_diff, error_number); YAAMP_SHARE *share = new YAAMP_SHARE; diff --git a/stratum/stratum.cpp b/stratum/stratum.cpp index 886e60b09..3c0e92b2e 100644 --- a/stratum/stratum.cpp +++ b/stratum/stratum.cpp @@ -33,6 +33,9 @@ bool g_stratum_reconnect; bool g_stratum_renting; bool g_autoexchange = true; +uint64_t g_max_shares = 0; +uint64_t g_shares_counter = 0; + time_t g_last_broadcasted = 0; YAAMP_DB *g_db = NULL; @@ -308,6 +311,16 @@ void *monitor_thread(void *p) stratumlog("%s dead lock, exiting...\n", g_current_algo->name); exit(1); } + + if(g_max_shares > 0 && g_shares_counter > g_max_shares) { + g_exiting = true; + stratumlog("%s need a restart, exiting...\n", g_current_algo->name); + exit(1); + } + + if((g_shares_counter % 10000u) == 0) { + stratumlog("%s %luK shares...\n", g_current_algo->name, (unsigned long) (g_max_shares/10000u)); + } } } diff --git a/stratum/stratum.h b/stratum/stratum.h index 6c5eabd99..ea7874976 100644 --- a/stratum/stratum.h +++ b/stratum/stratum.h @@ -83,6 +83,9 @@ extern int g_stratum_max_ttf; extern bool g_stratum_reconnect; extern bool g_stratum_renting; +extern uint64_t g_max_shares; +extern uint64_t g_shares_counter; + extern time_t g_last_broadcasted; extern struct ifaddrs *g_ifaddr; From 81518c4c7d91b247ca9c230bbd53b95ec58bf191 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 24 Nov 2016 01:13:35 +0100 Subject: [PATCH 003/434] backend: auto stop mining at pow end & fill mature_blocks --- web/yaamp/core/backend/blocks.php | 5 +++++ web/yaamp/core/backend/coins.php | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/web/yaamp/core/backend/blocks.php b/web/yaamp/core/backend/blocks.php index 6c6c77cc9..968f0cb32 100644 --- a/web/yaamp/core/backend/blocks.php +++ b/web/yaamp/core/backend/blocks.php @@ -44,6 +44,11 @@ function BackendBlockNew($coin, $db_block) { $earning->mature_time = time(); $earning->status = 1; + // auto update mature_blocks + if ($db_block->confirmations < $coin->mature_blocks || !intval($coin->mature_blocks)) { + $coin->mature_blocks = $db_block->confirmations; + $coin->save(); + } } else // immature $earning->status = 0; diff --git a/web/yaamp/core/backend/coins.php b/web/yaamp/core/backend/coins.php index 7f177ed84..e8d89457a 100644 --- a/web/yaamp/core/backend/coins.php +++ b/web/yaamp/core/backend/coins.php @@ -232,6 +232,13 @@ function BackendCoinsUpdate() $coin->version = $info['version']; $coin->block_height = $info['blocks']; + if($coin->powend_height > 0 && $coin->block_height > $coin->powend_height) { + if ($coin->auto_ready) { + $coin->auto_ready = false; + $coin->errors = 'PoW end reached'; + } + } + $coin->save(); // debuglog(" end $coin->name"); From ad3f2e27146a024c6e3e4e8705eb789a12715230 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 24 Nov 2016 02:20:26 +0100 Subject: [PATCH 004/434] backend: move mature_blocks update at a better place --- web/yaamp/core/backend/blocks.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/web/yaamp/core/backend/blocks.php b/web/yaamp/core/backend/blocks.php index 968f0cb32..002676a70 100644 --- a/web/yaamp/core/backend/blocks.php +++ b/web/yaamp/core/backend/blocks.php @@ -44,11 +44,6 @@ function BackendBlockNew($coin, $db_block) { $earning->mature_time = time(); $earning->status = 1; - // auto update mature_blocks - if ($db_block->confirmations < $coin->mature_blocks || !intval($coin->mature_blocks)) { - $coin->mature_blocks = $db_block->confirmations; - $coin->save(); - } } else // immature $earning->status = 0; @@ -225,11 +220,18 @@ function BackendBlocksUpdate($coinid = NULL) $block->category = $category; $block->save(); - if($category == 'generate') - dborun("update earnings set status=1, mature_time=UNIX_TIMESTAMP() where blockid=$block->id"); + if($category == 'generate') { + dborun("UPDATE earnings SET status=1, mature_time=UNIX_TIMESTAMP() WHERE blockid=".intval($block->id)); + // auto update mature_blocks + if ($block->confirmations > 0 && $block->confirmations < $coin->mature_blocks || empty($coin->mature_blocks)) { + debuglog("{$coin->symbol} mature_blocks updated to {$block->confirmations}"); + $coin->mature_blocks = $block->confirmations; + $coin->save(); + } + } else if($category != 'immature') - dborun("delete from earnings where blockid=$block->id"); + dborun("DELETE FROM earnings WHERE blockid=".intval($block->id)); } $d1 = microtime(true) - $t1; From a4af6b856f8dac74427accd7757394ee097948df Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Fri, 25 Nov 2016 04:23:27 +0100 Subject: [PATCH 005/434] cron: update new coin balance fields (from db) --- web/yaamp/core/backend/blocks.php | 36 +++++++++++++++++++ .../modules/thread/CronjobController.php | 1 + 2 files changed, 37 insertions(+) diff --git a/web/yaamp/core/backend/blocks.php b/web/yaamp/core/backend/blocks.php index 002676a70..1c1dd378d 100644 --- a/web/yaamp/core/backend/blocks.php +++ b/web/yaamp/core/backend/blocks.php @@ -65,6 +65,7 @@ function BackendBlockNew($coin, $db_block) } ///////////////////////////////////////////////////////////////////////////////////////////////// +// Import new blocks (notified by the stratum) function BackendBlockFind1($coinid = NULL) { @@ -144,6 +145,7 @@ function BackendBlockFind1($coinid = NULL) } ///////////////////////////////////////////////////////////////////////////////// +// Refresh immature blocks status (confirmations) function BackendBlocksUpdate($coinid = NULL) { @@ -239,9 +241,12 @@ function BackendBlocksUpdate($coinid = NULL) } //////////////////////////////////////////////////////////////////////////////////////////// +// Search new block transactions function BackendBlockFind2($coinid = NULL) { + $t1 = microtime(true); + $sqlFilter = $coinid ? "id=".intval($coinid) : 'enable=1'; $coins = getdbolist('db_coins', $sqlFilter); @@ -325,8 +330,39 @@ function BackendBlockFind2($coinid = NULL) $coin->save(); } + + $d1 = microtime(true) - $t1; + controller()->memcache->add_monitoring_function(__FUNCTION__, $d1); + //debuglog(__FUNCTION__." took ".round($d1,3)." sec"); +} + +//////////////////////////////////////////////////////////////////////////////////////////// +// Update coin totals from the db blocks/earnings (allow triggers and easier balance sums) + +function BackendUpdatePoolBalances($coinid = NULL) +{ + $t1 = microtime(true); + + $sqlFilter = $coinid ? "id=".intval($coinid) : 'enable=1'; + + $coins = getdbolist('db_coins', $sqlFilter); + foreach($coins as $coin) + { + $coin->immature = (double) dboscalar("SELECT SUM(amount) FROM blocks WHERE category='immature' AND coin_id=".intval($coin->id)); + $coin->cleared = (double) dboscalar("SELECT SUM(balance) FROM accounts WHERE coinid=".intval($coin->id)); + $pending = (double) dboscalar("SELECT SUM(amount) FROM earnings WHERE status=1 AND coinid=".intval($coin->id)); // (to be cleared) + $coin->available = (double) $coin->balance - $coin->cleared - $pending; + //if ($pending) debuglog("{$coin->symbol} immature {$coin->immature}, cleared {$coin->cleared}, pending {$pending}, available {$coin->available}"); + $coin->save(); + } + + $d1 = microtime(true) - $t1; + controller()->memcache->add_monitoring_function(__FUNCTION__, $d1); + //debuglog(__FUNCTION__." took ".round($d1,3)." sec"); } +//////////////////////////////////////////////////////////////////////////////////////////// + function MonitorBTC() { // debuglog(__FUNCTION__); diff --git a/web/yaamp/modules/thread/CronjobController.php b/web/yaamp/modules/thread/CronjobController.php index 87d0f6447..362c97e99 100644 --- a/web/yaamp/modules/thread/CronjobController.php +++ b/web/yaamp/modules/thread/CronjobController.php @@ -164,6 +164,7 @@ public function actionRun() case 6: BackendBlockFind2(); + BackendUpdatePoolBalances(); break; case 7: From 8d8be55101087ab33a5978bd28505128a1db4f20 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Fri, 25 Nov 2016 06:06:21 +0100 Subject: [PATCH 006/434] admin: rework ui of the wallet balances --- web/yaamp/modules/site/admin_results.php | 66 +++++++++++++----------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/web/yaamp/modules/site/admin_results.php b/web/yaamp/modules/site/admin_results.php index 7c745331e..4d253081a 100644 --- a/web/yaamp/modules/site/admin_results.php +++ b/web/yaamp/modules/site/admin_results.php @@ -1,5 +1,13 @@ ${1}', $html); + return $html; +} + ///////////////////////////////////////////////////////////////////////////////////// echo << end; @@ -32,15 +41,15 @@ Name Server -Diff/Height -Profit - -Owed/BTC -Balance/Mint -Price +Difficulty
Height +Profit
Pool Net +Bid Price
Ask Price + +Immature
Cleared +Balance
Available BTC USD -Win/Market +Win
Market @@ -127,12 +136,20 @@ // echo "$network_ttf
$actual_ttf"; // echo "$pool_ttf
"; + echo ''; if($ss1 > 50) - echo ''.$btcmhd.'
'.$percent_pool1.''; + echo ''.$btcmhd.'
'.$percent_pool1.''; else - echo ''.$btcmhd.'
'.$percent_pool1; + echo ''.$btcmhd.'
'.$percent_pool1; + echo ' '.$percent_pool2.''; + + $price = bitcoinvaluetoa($coin->price); + $price2 = bitcoinvaluetoa($coin->price2); - echo ' '.$percent_pool2.''; + if($coin->dontsell && YAAMP_ALLOW_EXCHANGE) + echo "$price
$price2"; + else + echo "$price
$price2"; // $stakebtc = bitcoinvaluetoa($coin->stake*$coin->price); // if ($coin->stake) @@ -140,32 +157,23 @@ // else // echo ''; - $owed = (double) dboscalar("SELECT sum(balance) FROM accounts WHERE coinid={$coin->id}"); - $owed_btc = bitcoinvaluetoa($owed*$coin->price); - $owed_data = $owed ? bitcoinvaluetoa($owed).'
'.bitcoinvaluetoa($owed_btc) : ''; + $cell = valuetocell($coin->mint).'
'.valuetocell($coin->cleared); - if($coin->balance+$coin->mint < $owed) - echo ''.$owed_data.''; + if($coin->balance+$coin->mint < $coin->cleared) + echo ''.$cell.''; else - echo ''.$owed_data.''; + echo ''.$cell.''; - echo ''.$coin->balance.'
'.$coin->mint.''; - - $price = bitcoinvaluetoa($coin->price); - $price2 = bitcoinvaluetoa($coin->price2); - - if($coin->dontsell && YAAMP_ALLOW_EXCHANGE) - echo "$price
$price2"; - else - echo "$price
$price2"; + $cell = valuetocell($coin->balance).'
'.valuetocell($coin->available); + echo ''.$cell.''; $btc = bitcoinvaluetoa($coin->balance * $coin->price); - $mint = bitcoinvaluetoa($coin->mint * $coin->price); - echo ''.$btc.'
'.$mint.''; + $available = bitcoinvaluetoa($coin->available * $coin->price); + echo ''.$btc.'
'.$available.''; $fiat = round($coin->balance * $coin->price * $mining->usdbtc, 2). ' $'; - $mint = round($coin->mint * $coin->price * $mining->usdbtc, 2). ' $'; - echo ''.$fiat.'
'.$mint.''; + $available = round($coin->available * $coin->price * $mining->usdbtc, 2). ' $'; + echo ''.$fiat.'
'.$available.''; $marketname = ''; $bestmarket = getBestMarket($coin); From 11c8d5b7678068a727779e61341c132fd9309943 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Mon, 28 Nov 2016 06:09:31 +0100 Subject: [PATCH 007/434] stratum: shares counter log mistake --- stratum/stratum.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stratum/stratum.cpp b/stratum/stratum.cpp index 3c0e92b2e..f47449904 100644 --- a/stratum/stratum.cpp +++ b/stratum/stratum.cpp @@ -319,7 +319,7 @@ void *monitor_thread(void *p) } if((g_shares_counter % 10000u) == 0) { - stratumlog("%s %luK shares...\n", g_current_algo->name, (unsigned long) (g_max_shares/10000u)); + stratumlog("%s %luK shares...\n", g_current_algo->name, (unsigned long) (g_shares_counter/10000u)); } } } From ff136d53af615a11d5e56fc126a117c3f51875f4 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Tue, 29 Nov 2016 04:51:13 +0100 Subject: [PATCH 008/434] stratum: skip screen instances if there is no .conf --- rc.local | 2 +- stratum/config/run.sh | 2 +- stratum/stratum.cpp | 17 ++++++++++------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/rc.local b/rc.local index 474b70b73..3db476a1e 100644 --- a/rc.local +++ b/rc.local @@ -17,7 +17,7 @@ screen -dmS loop2 $WEB_DIR/loop2.sh screen -dmS blocks $WEB_DIR/blocks.sh screen -dmS debug tail -f $LOG_DIR/debug.log -# Stratum ports +# Stratum instances (skipped/exit if no .conf) screen -dmS c11 $STRATUM_DIR/run.sh c11 screen -dmS x11 $STRATUM_DIR/run.sh x11 diff --git a/stratum/config/run.sh b/stratum/config/run.sh index be3fe2aaa..c0039f3d2 100755 --- a/stratum/config/run.sh +++ b/stratum/config/run.sh @@ -4,7 +4,7 @@ ulimit -n 10240 ulimit -u 10240 cd /var/stratum -while true; do +while [ -e config/${1}.conf ]; do gzip -f config/${1}.log ./stratum config/$1 sleep 1 diff --git a/stratum/stratum.cpp b/stratum/stratum.cpp index f47449904..b868dda9e 100644 --- a/stratum/stratum.cpp +++ b/stratum/stratum.cpp @@ -312,14 +312,17 @@ void *monitor_thread(void *p) exit(1); } - if(g_max_shares > 0 && g_shares_counter > g_max_shares) { - g_exiting = true; - stratumlog("%s need a restart, exiting...\n", g_current_algo->name); - exit(1); - } + if(g_max_shares && g_shares_counter) { + + if((g_shares_counter % 5000u) == 0) { + stratumlog("%s %luK shares...\n", g_current_algo->name, (g_shares_counter/10000u)); + } - if((g_shares_counter % 10000u) == 0) { - stratumlog("%s %luK shares...\n", g_current_algo->name, (unsigned long) (g_shares_counter/10000u)); + if(g_shares_counter > g_max_shares) { + g_exiting = true; + stratumlog("%s need a restart (%lu shares), exiting...\n", g_current_algo->name, g_max_shares); + exit(1); + } } } } From 4386b09c3e6d924b85b99e3aabd234bf4a553f0b Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sat, 3 Dec 2016 09:07:08 +0100 Subject: [PATCH 009/434] decred: refresh blocknotify.go for 0.6.1+ The notify interface was changed to raw bytes :/ --- blocknotify-dcr/blocknotify.go | 73 +++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 24 deletions(-) diff --git a/blocknotify-dcr/blocknotify.go b/blocknotify-dcr/blocknotify.go index 3b65caa96..d97ab8a15 100644 --- a/blocknotify-dcr/blocknotify.go +++ b/blocknotify-dcr/blocknotify.go @@ -1,10 +1,10 @@ -// Copyright (c) 2016 The btcsuite developers -// Copyright (c) 2015-2016 The Decred developers +// Copyright (c) 2015-2016 The Decred developers, YiiMP // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. // Sample blocknofify tool compatible with decred // will call the standard blocknotify yiimp tool on new block event. +// Note: this tool is connected directly to dcrd, not to the wallet! package main @@ -13,9 +13,13 @@ import ( "log" "os/exec" "path/filepath" - "time" - "github.com/decred/dcrd/chaincfg/chainhash" +// "time" // dcrd < 0.6 +// "github.com/decred/dcrd/chaincfg/chainhash" + + "bytes" // dcrd > 0.6+ + "github.com/decred/dcrd/wire" + "github.com/decred/dcrrpcclient" // "github.com/decred/dcrutil" ) @@ -25,8 +29,8 @@ const ( stratumDest = "yaamp.com:5744" // stratum host:port coinId = "1574" // decred database coin id - walletUser = "yiimprpc" - walletPass = "myDecredPassword" + dcrdUser = "yiimprpc" + dcrdPass = "myDcrdPassword" debug = false ) @@ -37,27 +41,48 @@ func main() { // for notifications. See the documentation of the dcrrpcclient // NotificationHandlers type for more details about each handler. ntfnHandlers := dcrrpcclient.NotificationHandlers{ - OnBlockConnected: func(hash *chainhash.Hash, height int32, time time.Time, vb uint16) { - // Find the process path. - str := hash.String() - args := []string{ stratumDest, coinId, str } - out, err := exec.Command(processName, args...).Output() - if err != nil { - log.Printf("err %s", err) - } else if debug { - log.Printf("out %s", out) - } - - if (debug) { - log.Printf("Block connected: %s %d", hash, height) + OnBlockConnected: func(blockHeader []byte, transactions [][]byte) { + // log.Printf("Block bytes: %v %v", blockHeader, transactions) + var bhead wire.BlockHeader + err := bhead.Deserialize(bytes.NewReader(blockHeader)) + if err == nil { + str := bhead.BlockSha().String(); + args := []string{ stratumDest, coinId, str } + out, err := exec.Command(processName, args...).Output() + if err != nil { + log.Printf("err %s", err) + } else if debug { + log.Printf("out %s", out) + } + if (debug) { + log.Printf("Block connected: %s", str) + } } }, + + // broken since 0.6.1 (Nov 2016): + // OnBlockConnected: func(hash *chainhash.Hash, height int32, time time.Time, vb uint16) { + // + // Find the process path. + // str := hash.String() + // args := []string{ stratumDest, coinId, str } + // out, err := exec.Command(processName, args...).Output() + // if err != nil { + // log.Printf("err %s", err) + // } else if debug { + // log.Printf("out %s", out) + // } + + // if (debug) { + // log.Printf("Block connected: %s %d", hash, height) + // } + //}, } // Connect to local dcrd RPC server using websockets. - // dcrwHomeDir := dcrutil.AppDataDir("dcrwallet", false) - // folder := dcrwHomeDir + // dcrdHomeDir := dcrutil.AppDataDir("dcrd", false) + // folder := dcrdHomeDir folder := "" certs, err := ioutil.ReadFile(filepath.Join(folder, "rpc.cert")) if err != nil { @@ -66,11 +91,11 @@ func main() { } connCfg := &dcrrpcclient.ConnConfig{ - Host: "127.0.0.1:15740", + Host: "127.0.0.1:9109", Endpoint: "ws", // websocket - User: walletUser, - Pass: walletPass, + User: dcrdUser, + Pass: dcrdPass, DisableTLS: (certs == nil), Certificates: certs, From 3801d3d5392fee776f020d567fbd909bc3063f0a Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sat, 3 Dec 2016 09:19:22 +0100 Subject: [PATCH 010/434] New config to toggle new coin mail notification --- web/serverconfig.sample.php | 1 + web/yaamp/core/backend/rawcoins.php | 5 +++-- web/yaamp/defaultconfig.php | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/web/serverconfig.sample.php b/web/serverconfig.sample.php index 2e9600e46..bd0ded8c4 100644 --- a/web/serverconfig.sample.php +++ b/web/serverconfig.sample.php @@ -34,6 +34,7 @@ define('YAAMP_SITE_NAME', 'YiiMP'); define('YAAMP_ADMIN_EMAIL', 'yiimp@spam.la'); define('YAAMP_ADMIN_IP', '127.0.0.1,80.236.118.26'); +define('YAAMP_NOTIFY_NEW_COINS', true); define('YAAMP_USE_NGINX', false); diff --git a/web/yaamp/core/backend/rawcoins.php b/web/yaamp/core/backend/rawcoins.php index eed513fc6..bfb45bb04 100644 --- a/web/yaamp/core/backend/rawcoins.php +++ b/web/yaamp/core/backend/rawcoins.php @@ -249,7 +249,7 @@ function updateRawCoin($marketname, $symbol, $name='unknown') } } - if ($marketname == 'nova') { + if ($marketname == 'nova' || $marketname == 'askcoin') { // don't polute too much the db return; } @@ -270,7 +270,8 @@ function updateRawCoin($marketname, $symbol, $name='unknown') $coin->save(); $url = getMarketUrl($coin, $marketname); - mail(YAAMP_ADMIN_EMAIL, "New coin $symbol", "new coin $symbol ($name) on $marketname\r\n$url"); + if (YAAMP_NOTIFY_NEW_COINS) + mail(YAAMP_ADMIN_EMAIL, "New coin $symbol", "new coin $symbol ($name) on $marketname\r\n\r\n$url"); sleep(30); } diff --git a/web/yaamp/defaultconfig.php b/web/yaamp/defaultconfig.php index f6f98d3ce..4187003c9 100644 --- a/web/yaamp/defaultconfig.php +++ b/web/yaamp/defaultconfig.php @@ -45,6 +45,7 @@ if (!defined('YAAMP_DEFAULT_ALGO')) define('YAAMP_DEFAULT_ALGO', 'x11'); if (!defined('YAAMP_ADMIN_EMAIL')) define('YAAMP_ADMIN_EMAIL', 'yiimp@spam.la'); if (!defined('YAAMP_ADMIN_IP')) define('YAAMP_ADMIN_IP', '127.0.0.1'); +if (!defined('YAAMP_NOTIFY_NEW_COINS')) define('YAAMP_NOTIFY_NEW_COINS', true); if (!defined('YAAMP_LIMIT_ESTIMATE')) define('YAAMP_LIMIT_ESTIMATE', false); if (!defined('YAAMP_RENTAL')) define('YAAMP_RENTAL', false); From 8a034edf2909136b0959eeb523b49721ae0106e6 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sat, 24 Dec 2016 01:09:38 +0100 Subject: [PATCH 011/434] triggers: handle rpc commands move the text query parser used in web console in the wallet rpc class --- web/yaamp/core/backend/notify.php | 32 ++++++++++ web/yaamp/core/rpc/wallet-rpc.php | 59 +++++++++++++++++++ web/yaamp/modules/site/coin_console.php | 54 ++--------------- web/yaamp/modules/site/coin_triggers.php | 4 +- .../modules/site/results/wallet_results.php | 4 +- 5 files changed, 100 insertions(+), 53 deletions(-) diff --git a/web/yaamp/core/backend/notify.php b/web/yaamp/core/backend/notify.php index cceef5fb5..89e8c63e5 100644 --- a/web/yaamp/core/backend/notify.php +++ b/web/yaamp/core/backend/notify.php @@ -77,6 +77,16 @@ function NotifyCheckRules() $message .= "Field: {$field}\n"; $message .= "Value: {$value} at ".strftime("%Y-%m-%d %T %z", $time)."\n"; + // replace some possible vars in message (description) + $message = str_replace('$X', $value, $message); + $message = str_replace('$F', $field, $message); + $message = str_replace('$T', $conditiontype, $message); + $message = str_replace('$V', $conditionvalue, $message); + $message = str_replace('$N', $coin->name, $message); + $message = str_replace('$SYM', $coin->symbol, $message); + $message = str_replace('$S2', $coin->symbol2, $message); + $message = str_replace('$A', $coin->master_wallet, $message); + $dest = YAAMP_ADMIN_EMAIL; if (!empty($rule->notifycmd) && strstr($notifycmd, "@")) { $dest = $rule->notifycmd; @@ -87,6 +97,27 @@ function NotifyCheckRules() debuglog("notify: unable to send mail to {$dest}!"); break; + case 'rpc': + + $command = $rule->notifycmd; + + // replace some possible vars in user command + $command = str_replace('$X', $value, $command); + $command = str_replace('$F', $field, $command); + $command = str_replace('$T', $conditiontype, $command); + $command = str_replace('$V', $conditionvalue, $command); + $command = str_replace('$N', $coin->name, $command); + $command = str_replace('$SYM', $coin->symbol, $command); + $command = str_replace('$S2', $coin->symbol2, $command); + $command = str_replace('$A', $coin->master_wallet, $command); + + $remote = new WalletRPC($coin); + + $res = $remote->execute($command); + if ($res === false) + debuglog("notify: rpc error {$coin->symbol} {$command}"); + break; + case 'system': $command = $rule->notifycmd; @@ -99,6 +130,7 @@ function NotifyCheckRules() $command = str_replace('$N', $coin->name, $command); $command = str_replace('$SYM', $coin->symbol, $command); $command = str_replace('$S2', $coin->symbol2, $command); + $command = str_replace('$A', $coin->master_wallet, $command); $res = system($command); if ($res === false) diff --git a/web/yaamp/core/rpc/wallet-rpc.php b/web/yaamp/core/rpc/wallet-rpc.php index 5bf1f0f12..5a304bd72 100644 --- a/web/yaamp/core/rpc/wallet-rpc.php +++ b/web/yaamp/core/rpc/wallet-rpc.php @@ -324,4 +324,63 @@ function __set($prop, $value) $this->rpc->$prop = $value; } + function execute($query) + { + $result = ''; + + if (!empty($query)) try { + $params = explode(' ', trim($query)); + $command = array_shift($params); + + $p = array(); + foreach ($params as $param) { + if ($param === 'true' || $param === 'false') { + $param = $param === 'true' ? true : false; + } + else if (strpos($param, '0x') === 0) + $param = "$param"; // eth hex crap + else + $param = (is_numeric($param)) ? 0 + $param : trim($param,'"'); + $p[] = $param; + } + + switch (count($params)) { + case 0: + $result = $this->$command(); + break; + case 1: + $result = $this->$command($p[0]); + break; + case 2: + $result = $this->$command($p[0], $p[1]); + break; + case 3: + $result = $this->$command($p[0], $p[1], $p[2]); + break; + case 4: + $result = $this->$command($p[0], $p[1], $p[2], $p[3]); + break; + case 5: + $result = $this->$command($p[0], $p[1], $p[2], $p[3], $p[4]); + break; + case 6: + $result = $this->$command($p[0], $p[1], $p[2], $p[3], $p[4], $p[5]); + break; + case 7: + $result = $this->$command($p[0], $p[1], $p[2], $p[3], $p[4], $p[5], $p[6]); + break; + case 8: + $result = $this->$command($p[0], $p[1], $p[2], $p[3], $p[4], $p[5], $p[6], $p[7]); + break; + default: + $result = 'error: too much parameters'; + } + + } catch (Exception $e) { + $result = false; + } + + return $result; + } + } diff --git a/web/yaamp/modules/site/coin_console.php b/web/yaamp/modules/site/coin_console.php index 7e4518bd4..47ddfbf95 100644 --- a/web/yaamp/modules/site/coin_console.php +++ b/web/yaamp/modules/site/coin_console.php @@ -118,57 +118,11 @@ function main_json_links() { end; $result = ''; - -if (!empty($query)) try { - $params = explode(' ', trim($query)); - $command = array_shift($params); - - $p = array(); - foreach ($params as $param) { - if ($param === 'true' || $param === 'false') { - $param = $param === 'true' ? true : false; - } - else if (strpos($param, '0x') === 0) - $param = "$param"; // eth hex crap - else - $param = (is_numeric($param)) ? 0 + $param : trim($param,'"'); - $p[] = $param; +if (!empty($query)) { + $result = $remote->execute($query); + if ($result === false) { + $result = $remote->error; } - - switch (count($params)) { - case 0: - $result = $remote->$command(); - break; - case 1: - $result = $remote->$command($p[0]); - break; - case 2: - $result = $remote->$command($p[0], $p[1]); - break; - case 3: - $result = $remote->$command($p[0], $p[1], $p[2]); - break; - case 4: - $result = $remote->$command($p[0], $p[1], $p[2], $p[3]); - break; - case 5: - $result = $remote->$command($p[0], $p[1], $p[2], $p[3], $p[4]); - break; - case 6: - $result = $remote->$command($p[0], $p[1], $p[2], $p[3], $p[4], $p[5]); - break; - case 7: - $result = $remote->$command($p[0], $p[1], $p[2], $p[3], $p[4], $p[5], $p[6]); - break; - case 8: - $result = $remote->$command($p[0], $p[1], $p[2], $p[3], $p[4], $p[5], $p[6], $p[7]); - break; - default: - $result = 'error: too much parameters'; - } - -} catch (Exception $e) { - $result = $remote->error; } if (!empty($remote->error) && $remote->error != $result) { diff --git a/web/yaamp/modules/site/coin_triggers.php b/web/yaamp/modules/site/coin_triggers.php index c39820e2a..bce9c93fa 100644 --- a/web/yaamp/modules/site/coin_triggers.php +++ b/web/yaamp/modules/site/coin_triggers.php @@ -93,9 +93,10 @@

- +

@@ -113,6 +114,7 @@
  • \$SYM coin symbol
  • \$S2 coin symbol2
  • \$N coin name
  • +
  • \$A wallet address
  • diff --git a/web/yaamp/modules/site/results/wallet_results.php b/web/yaamp/modules/site/results/wallet_results.php index 0113b8436..ebbeba03e 100644 --- a/web/yaamp/modules/site/results/wallet_results.php +++ b/web/yaamp/modules/site/results/wallet_results.php @@ -276,8 +276,8 @@ function WriteBoxHeader($title) - Some wallets (LYB) have a problem and don't confirm a transaction in the requested time.
    - Please be honest and continue mining to handle these extra transactions sent to you.
    + Some wallets (UFO,LYB) have a problem and don't always confirm a transaction in the requested time.
    +
    From 91932aef32c011dc6b57305d9d25d073976fd35d Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sat, 24 Dec 2016 01:20:43 +0100 Subject: [PATCH 012/434] triggers: show command in the trigger list --- web/yaamp/modules/site/coin_triggers.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/web/yaamp/modules/site/coin_triggers.php b/web/yaamp/modules/site/coin_triggers.php index bce9c93fa..b71cef675 100644 --- a/web/yaamp/modules/site/coin_triggers.php +++ b/web/yaamp/modules/site/coin_triggers.php @@ -27,6 +27,7 @@ .help ul { width: 10px; margin: 6px 4px; padding: 0; overflow:hidden; width:390px; -moz-column-count: 2; -webkit-column-count: 2; column-count: 2; } .help li { list-style-type: none; width: 140px; } .page .footer { width: auto; } +span.cmd { color: gray; } end; @@ -47,7 +48,7 @@ Type Condition Value -Description +Description / Command Status Last check Operations @@ -71,12 +72,16 @@ $status = ''; } + $description = $rule->description; + if (!empty($description) && !empty($rule->notifycmd)) $description .= '
    '; + $description .= ''.$rule->notifycmd.''; + echo ''; echo ''.$rule->notifytype.''; echo ''.$rule->conditiontype.''; echo ''.$rule->conditionvalue.''; - echo ''.$rule->description.''; + echo ''.$description.''; echo ''.$status.''; echo ''.datetoa2($rule->lastchecked).''; echo ''.$operations.''; @@ -105,7 +110,7 @@
    -System command variables: +Command variables:
    - -









    -



















    end; diff --git a/web/yaamp/modules/site/results/mining_results.php b/web/yaamp/modules/site/results/mining_results.php index 67fa6d154..f75b55f3d 100644 --- a/web/yaamp/modules/site/results/mining_results.php +++ b/web/yaamp/modules/site/results/mining_results.php @@ -141,7 +141,9 @@ function WriteBoxHeader($title) else echo ""; - echo ""; + echo ''; + echo $coin->createExplorerLink(''); + echo ''; $owed = dboscalar("select sum(balance) from accounts where coinid=$coin->id"); if($coin->balance+$coin->mint < $owed*0.9) From 9b2d591bd5d523a22b6417077f5609395d5bb71b Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Mon, 27 Feb 2017 11:32:04 +0100 Subject: [PATCH 049/434] benchs: show H/W and remove Cost in last records --- web/yaamp/modules/bench/index.php | 40 +++++++++++++++++-------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/web/yaamp/modules/bench/index.php b/web/yaamp/modules/bench/index.php index 1cb403cc6..071ac1eac 100644 --- a/web/yaamp/modules/bench/index.php +++ b/web/yaamp/modules/bench/index.php @@ -40,10 +40,11 @@ include('functions.php'); +$filtered = false; $algo = user()->getState('bench-algo'); if (empty($algo)) $algo = 'all'; -if (empty($idchip)) $idchip = NULL; -if (empty($vid)) $vid = NULL; +if (empty($idchip)) $idchip = NULL; else $filtered = true; +if (empty($vid)) $vid = NULL; else $filtered = true; $this->pageTitle = "Benchmarks"; @@ -117,7 +118,7 @@ Int. Freq W -Cost +H/W Client OS Driver / Compiler @@ -133,7 +134,7 @@ echo ''; - $hashrate = Itoa2(1000*round($row['khps'],3),3).'H'; + $hashrate = Itoa2(1000*round($row['khps'],3),2).'H'; $age = datetoa2($row['time']); echo ''.CHtml::link($row['algo'],'/bench?algo='.$row['algo']).''; @@ -156,7 +157,7 @@ else if ($algo == 'neoscrypt') echo ''.$row['throughput'].'*'; else - echo ''.$row['intensity'].''; + echo ''.($row['intensity']?$row['intensity']:'-').''; // freqs $title = ''; $class = ''; @@ -174,7 +175,8 @@ // power $title = ''; $class = ''; - $content = $row['power'] ? $row['power'] : '-'; + $power = (double) $row['power']; + $content = $power>0 ? $power : '-'; if ($row['plimit']) { $title = 'Power limit '.$row['plimit'].'W'; $class = 'limited'; @@ -182,7 +184,7 @@ $props = array('title'=>$title,'class'=>$class); echo CHtml::tag('td', $props, $content, true); - echo ''.(empty($row['power']) ? '-' : mbitcoinvaluetoa(powercost_mBTC($row['power']))).''; + echo ''.($power>0 ? Itoa2(1000*round($row['khps'] / $power, 3),2) : '-').''; echo ''.formatClientName($row['client']).''; echo ''.$row['os'].''; echo ''.$row['driver'].''; @@ -201,9 +203,9 @@ if ($idchip) $sqlFilter .= ' AND idchip='.intval($idchip); - $avg = dborow("SELECT AVG(khps) as khps, AVG(power) as power, AVG(intensity) as intensity, AVG(freq) as freq, ". + $avg = dborow("SELECT AVG(khps) as khps, AVG(power) as power, AVG(B.intensity) as intensity, AVG(freq) as freq, ". "COUNT(*) as records ". - "FROM benchmarks B WHERE algo=:algo AND power > 5 AND $sqlFilter", array(':algo'=>$algo) + "FROM benchmarks B WHERE algo=:algo AND B.intensity > 0 AND power > 5 AND $sqlFilter", array(':algo'=>$algo) ); if (arraySafeVal($avg, 'records') == 0) { @@ -221,19 +223,21 @@ echo 'Average ('.$avg["records"].' records)'; - echo ''.Itoa2(1000*round($avg['khps'],3),3).'H'; + echo ''.Itoa2(1000*round($avg['khps'],3),2).'H'; echo ''.($avg['intensity'] ? round($avg['intensity'],1) : '').''; echo ''.($avg['freq'] ? round($avg['freq']) : '').''; - echo ''.($avg['power'] ? round($avg['power']) : '').''; - echo ''.($avg['power'] ? mbitcoinvaluetoa(powercost_mBTC($avg['power'])) : '').''; - $hpw = 0; - if (floatval($avg['power']) > 0) { - $hpw = floatval($avg['khps']) / floatval($avg['power']); - } - echo ''.($hpw ? Itoa2(1000*round($hpw,3),3).'H/W' : '').''; + $power = (double) $avg['power']; + echo ''.($power>0 ? round($power) : '').''; - echo ' '; + $hpw = ($power>0) ? $hpw = floatval($avg['khps']) / $power : 0; + echo ''.($hpw ? Itoa2(1000*round($hpw,3),2) : '').''; + + echo ''; + echo ($power>0 ? mbitcoinvaluetoa(powercost_mBTC($power)).' mBTC/day' : '').''; + + echo ' '; + if ($this->admin) echo ' '; // admin ops echo ''; } From ca022f2628247ded3de90aece039cdd9bc811f96 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Mon, 20 Feb 2017 23:48:54 +0100 Subject: [PATCH 050/434] stratum: add deep, timetravel and hmq1725 algos Signed-off-by: Tanguy Pruvot --- rc.local | 4 + stratum/algos/deep.c | 29 +++ stratum/algos/deep.h | 17 ++ stratum/algos/hmq17.c | 218 ++++++++++++++++++ stratum/algos/hmq17.h | 16 ++ stratum/algos/makefile | 4 +- stratum/algos/timetravel.c | 178 ++++++++++++++ stratum/algos/timetravel.h | 16 ++ stratum/client_submit.cpp | 13 +- stratum/config.sample/deep.conf | 16 ++ stratum/config.sample/hmq1725.conf | 16 ++ stratum/config.sample/timetravel.conf | 16 ++ stratum/stratum.cpp | 3 + stratum/stratum.h | 3 + web/yaamp/core/functions/yaamp.php | 9 + .../modules/site/results/miners_results.php | 2 + 16 files changed, 555 insertions(+), 5 deletions(-) create mode 100644 stratum/algos/deep.c create mode 100644 stratum/algos/deep.h create mode 100644 stratum/algos/hmq17.c create mode 100644 stratum/algos/hmq17.h create mode 100644 stratum/algos/timetravel.c create mode 100644 stratum/algos/timetravel.h create mode 100644 stratum/config.sample/deep.conf create mode 100644 stratum/config.sample/hmq1725.conf create mode 100644 stratum/config.sample/timetravel.conf diff --git a/rc.local b/rc.local index 3dbca3aba..972650453 100644 --- a/rc.local +++ b/rc.local @@ -20,6 +20,8 @@ screen -dmS debug tail -f $LOG_DIR/debug.log # Stratum instances (skipped/exit if no .conf) screen -dmS c11 $STRATUM_DIR/run.sh c11 +screen -dmS deep $STRATUM_DIR/run.sh deep + screen -dmS x11 $STRATUM_DIR/run.sh x11 screen -dmS x11evo $STRATUM_DIR/run.sh x11evo screen -dmS x13 $STRATUM_DIR/run.sh x13 @@ -27,6 +29,8 @@ screen -dmS x14 $STRATUM_DIR/run.sh x14 screen -dmS x15 $STRATUM_DIR/run.sh x15 screen -dmS x17 $STRATUM_DIR/run.sh x17 screen -dmS xevan $STRATUM_DIR/run.sh xevan +screen -dmS timetravel $STRATUM_DIR/run.sh timetravel +screen -dmS hmq1725 $STRATUM_DIR/run.sh hmq1725 screen -dmS sha $STRATUM_DIR/run.sh sha screen -dmS scrypt $STRATUM_DIR/run.sh scrypt diff --git a/stratum/algos/deep.c b/stratum/algos/deep.c new file mode 100644 index 000000000..9b572ac27 --- /dev/null +++ b/stratum/algos/deep.c @@ -0,0 +1,29 @@ +#include +#include + +#include +#include +#include + +void deep_hash(const char* input, char* output, uint32_t len) +{ + sph_luffa512_context ctx_luffa; + sph_cubehash512_context ctx_cubehash; + sph_echo512_context ctx_echo; + + char hash1[64], hash2[64]; + + sph_luffa512_init(&ctx_luffa); + sph_luffa512(&ctx_luffa, (const void*) input, len); + sph_luffa512_close(&ctx_luffa, (void*) &hash1); + + sph_cubehash512_init(&ctx_cubehash); + sph_cubehash512(&ctx_cubehash, (const void*) &hash1, 64); + sph_cubehash512_close(&ctx_cubehash, (void*) &hash2); + + sph_echo512_init(&ctx_echo); + sph_echo512(&ctx_echo, (const void*) &hash2, 64); + sph_echo512_close(&ctx_echo, (void*) &hash1); + + memcpy(output, &hash1, 32); +} diff --git a/stratum/algos/deep.h b/stratum/algos/deep.h new file mode 100644 index 000000000..d15db00f4 --- /dev/null +++ b/stratum/algos/deep.h @@ -0,0 +1,17 @@ +#ifndef DEEP_H +#define DEEP_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +void deep_hash(const char* input, char* output, uint32_t len); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/stratum/algos/hmq17.c b/stratum/algos/hmq17.c new file mode 100644 index 000000000..17ed4baae --- /dev/null +++ b/stratum/algos/hmq17.c @@ -0,0 +1,218 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct +{ + sph_blake512_context blake1, blake2; + sph_bmw512_context bmw1, bmw2, bmw3; + sph_groestl512_context groestl1, groestl2; + sph_skein512_context skein1, skein2; + sph_jh512_context jh1, jh2; + sph_keccak512_context keccak1, keccak2; + sph_luffa512_context luffa1, luffa2; + sph_cubehash512_context cubehash; + sph_shavite512_context shavite1, shavite2; + sph_simd512_context simd1, simd2; + sph_echo512_context echo1, echo2; + sph_hamsi512_context hamsi; + sph_fugue512_context fugue1, fugue2; + sph_shabal512_context shabal; + sph_whirlpool_context whirlpool1, whirlpool2, whirlpool3, whirlpool4; + sph_sha512_context sha1, sha2; + sph_haval256_5_context haval1, haval2; +} hmq_contexts; + +static __thread hmq_contexts base_contexts; +static __thread int hmq_context_init = 0; + +static void init_contexts(hmq_contexts *ctx) +{ + sph_bmw512_init(&ctx->bmw1); + sph_bmw512_init(&ctx->bmw2); + sph_bmw512_init(&ctx->bmw2); + sph_bmw512_init(&ctx->bmw3); + sph_whirlpool_init(&ctx->whirlpool1); + sph_whirlpool_init(&ctx->whirlpool2); + sph_whirlpool_init(&ctx->whirlpool3); + sph_whirlpool_init(&ctx->whirlpool4); + sph_groestl512_init(&ctx->groestl1); + sph_groestl512_init(&ctx->groestl2); + sph_skein512_init(&ctx->skein1); + sph_skein512_init(&ctx->skein2); + sph_jh512_init(&ctx->jh1); + sph_jh512_init(&ctx->jh2); + sph_keccak512_init(&ctx->keccak1); + sph_keccak512_init(&ctx->keccak2); + sph_blake512_init(&ctx->blake1); + sph_blake512_init(&ctx->blake2); + sph_luffa512_init(&ctx->luffa1); + sph_luffa512_init(&ctx->luffa2); + sph_cubehash512_init(&ctx->cubehash); + sph_shavite512_init(&ctx->shavite1); + sph_shavite512_init(&ctx->shavite2); + sph_simd512_init(&ctx->simd1); + sph_simd512_init(&ctx->simd2); + sph_echo512_init(&ctx->echo1); + sph_echo512_init(&ctx->echo2); + sph_hamsi512_init(&ctx->hamsi); + sph_fugue512_init(&ctx->fugue1); + sph_fugue512_init(&ctx->fugue2); + sph_shabal512_init(&ctx->shabal); + sph_sha512_init(&ctx->sha1); + sph_sha512_init(&ctx->sha2); + sph_haval256_5_init(&ctx->haval1); + sph_haval256_5_init(&ctx->haval2); +} + +void hmq17_hash(const char* input, char* output, uint32_t len) +{ + uint32_t hash[32]; + + const uint32_t mask = 24; + + hmq_contexts ctx; + + if (!hmq_context_init) { + init_contexts(&base_contexts); + hmq_context_init = 1; + } + memcpy(&ctx, &base_contexts, sizeof(hmq_contexts)); + + sph_bmw512(&ctx.bmw1, input, len); + sph_bmw512_close(&ctx.bmw1, hash); + + sph_whirlpool(&ctx.whirlpool1, hash, 64); + sph_whirlpool_close(&ctx.whirlpool1, hash); + + if (hash[0] & mask) { + sph_groestl512(&ctx.groestl1, hash, 64); + sph_groestl512_close(&ctx.groestl1, hash); + } else { + sph_skein512(&ctx.skein1, hash, 64); + sph_skein512_close(&ctx.skein1, hash); + } + + sph_jh512(&ctx.jh1, hash, 64); + sph_jh512_close(&ctx.jh1, hash); + + sph_keccak512(&ctx.keccak1, hash, 64); + sph_keccak512_close(&ctx.keccak1, hash); + + if (hash[0] & mask) { + sph_blake512(&ctx.blake1, hash, 64); + sph_blake512_close(&ctx.blake1, hash); + } else { + sph_bmw512 (&ctx.bmw2, hash, 64); + sph_bmw512_close(&ctx.bmw2, hash); + } + + sph_luffa512(&ctx.luffa1, hash, 64); + sph_luffa512_close(&ctx.luffa1, hash); + + sph_cubehash512(&ctx.cubehash, hash, 64); + sph_cubehash512_close(&ctx.cubehash, hash); + + if (hash[0] & mask) { + sph_keccak512(&ctx.keccak2, hash, 64); + sph_keccak512_close(&ctx.keccak2, hash); + } else { + sph_jh512(&ctx.jh2, hash, 64); + sph_jh512_close(&ctx.jh2, hash); + } + + sph_shavite512(&ctx.shavite1, hash, 64); + sph_shavite512_close(&ctx.shavite1, hash); + + sph_simd512(&ctx.simd1, hash, 64); + sph_simd512_close(&ctx.simd1, hash); + + if (hash[0] & mask) { + sph_whirlpool(&ctx.whirlpool2, hash, 64); + sph_whirlpool_close(&ctx.whirlpool2, hash); + } else { + sph_haval256_5(&ctx.haval1, hash, 64); + sph_haval256_5_close(&ctx.haval1, hash); + memset(&hash[8], 0, 32); + } + + sph_echo512(&ctx.echo1, hash, 64); + sph_echo512_close(&ctx.echo1, hash); + + sph_blake512(&ctx.blake2, hash, 64); + sph_blake512_close(&ctx.blake2, hash); + + if (hash[0] & mask) { + sph_shavite512(&ctx.shavite2, hash, 64); + sph_shavite512_close(&ctx.shavite2, hash); + } else { + sph_luffa512 (&ctx.luffa2, hash, 64); + sph_luffa512_close(&ctx.luffa2, hash); + } + + sph_hamsi512(&ctx.hamsi, hash, 64); + sph_hamsi512_close(&ctx.hamsi, hash); + + sph_fugue512(&ctx.fugue1, hash, 64); + sph_fugue512_close(&ctx.fugue1, hash); + + if (hash[0] & mask) { + sph_echo512(&ctx.echo2, hash, 64); + sph_echo512_close(&ctx.echo2, hash); + } else { + sph_simd512(&ctx.simd2, hash, 64); + sph_simd512_close(&ctx.simd2, hash); + } + + sph_shabal512(&ctx.shabal, hash, 64); + sph_shabal512_close(&ctx.shabal, hash); + + sph_whirlpool(&ctx.whirlpool3, hash, 64); + sph_whirlpool_close(&ctx.whirlpool3, hash); + + if (hash[0] & mask) { + sph_fugue512(&ctx.fugue2, hash, 64); + sph_fugue512_close(&ctx.fugue2, hash); + } else { + sph_sha512(&ctx.sha1, hash, 64); + sph_sha512_close(&ctx.sha1, hash); + } + + sph_groestl512(&ctx.groestl2, hash, 64); + sph_groestl512_close(&ctx.groestl2, hash); + + sph_sha512(&ctx.sha2, hash, 64); + sph_sha512_close(&ctx.sha2, hash); + + if (hash[0] & mask) { + sph_haval256_5(&ctx.haval2, hash, 64); + sph_haval256_5_close(&ctx.haval2, hash); + memset(&hash[8], 0, 32); + } else { + sph_whirlpool(&ctx.whirlpool4, hash, 64); + sph_whirlpool_close(&ctx.whirlpool4, hash); + } + + sph_bmw512(&ctx.bmw3, hash, 64); + sph_bmw512_close(&ctx.bmw3, hash); + + memcpy(output, hash, 32); +} diff --git a/stratum/algos/hmq17.h b/stratum/algos/hmq17.h new file mode 100644 index 000000000..99847379d --- /dev/null +++ b/stratum/algos/hmq17.h @@ -0,0 +1,16 @@ +#ifndef HMQ17_H +#define HMQ17_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +void hmq17_hash(const char* input, char* output, uint32_t len); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/stratum/algos/makefile b/stratum/algos/makefile index f886585ec..9684caed1 100644 --- a/stratum/algos/makefile +++ b/stratum/algos/makefile @@ -9,9 +9,9 @@ CFLAGS= $(CXXFLAGS) -std=gnu99 LDFLAGS=-O2 -lgmp SOURCES=lyra2re.c lyra2v2.c Lyra2.c lyra2z.c Lyra2z.c Sponge.c \ - blake.c scrypt.c c11.c x11.c x13.c sha256.c keccak.c \ + blake.c scrypt.c c11.c x11.c x13.c sha256.c keccak.c deep.c \ x14.c x15.c x17.c nist5.c fresh.c quark.c neoscrypt.c scryptn.c qubit.c skein.c groestl.c \ - xevan.c \ + timetravel.c xevan.c hmq17.c \ skein2.c zr5.c bmw.c luffa.c pentablake.c whirlpool.c whirlpoolx.c blakecoin.c \ blake2.c \ yescrypt.c yescrypt-opt.c sha256_Y.c lbry.c \ diff --git a/stratum/algos/timetravel.c b/stratum/algos/timetravel.c new file mode 100644 index 000000000..9c2ab7589 --- /dev/null +++ b/stratum/algos/timetravel.c @@ -0,0 +1,178 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define HASH_FUNC_BASE_TIMESTAMP 1389040865 // Machinecoin: Genesis Timestamp +#define HASH_FUNC_COUNT 8 // Machinecoin: HASH_FUNC_COUNT of 11 +#define HASH_FUNC_COUNT_PERMUTATIONS 40320 // Machinecoin: HASH_FUNC_COUNT! + +#define _ALIGN(x) __attribute__ ((aligned(x))) + +// helpers +inline void swap(int *a, int *b) { + int c = *a; + *a = *b; + *b = c; +} + +static void reverse(int *pbegin, int *pend) { + while ( (pbegin != pend) && (pbegin != --pend) ) + swap(pbegin++, pend); +} + +static void next_permutation(int *pbegin, int *pend) { + if (pbegin == pend) + return; + + int *i = pbegin; + ++i; + if (i == pend) + return; + + i = pend; + --i; + + while (1) { + int *j = i; + --i; + + if (*i < *j) { + int *k = pend; + + while (!(*i < *--k)) + /* pass */; + + swap(i, k); + reverse(j, pend); + return; // true + } + + if (i == pbegin) { + reverse(pbegin, pend); + return; // false + } + } +} +// helpers + +void timetravel_hash(const char* input, char* output, uint32_t len) +{ + uint32_t _ALIGN(64) hash[128]; // 16 bytes * HASH_FUNC_COUNT + uint32_t *hashA, *hashB; + uint32_t dataLen = 64; + uint32_t *work_data = (uint32_t *)input; + const uint32_t timestamp = work_data[17]; + + + sph_blake512_context ctx_blake; + sph_bmw512_context ctx_bmw; + sph_groestl512_context ctx_groestl; + sph_skein512_context ctx_skein; + sph_jh512_context ctx_jh; + sph_keccak512_context ctx_keccak; + sph_luffa512_context ctx_luffa; + sph_cubehash512_context ctx_cubehash; + sph_shavite512_context ctx_shavite; + sph_simd512_context ctx_simd; + sph_echo512_context ctx_echo; + + // We want to permute algorithms. To get started we + // initialize an array with a sorted sequence of unique + // integers where every integer represents its own algorithm. + uint32_t permutation[HASH_FUNC_COUNT]; + for (uint32_t i = 0; i < HASH_FUNC_COUNT; i++) { + permutation[i]=i; + } + + // Compute the next permuation + uint32_t steps = (timestamp - HASH_FUNC_BASE_TIMESTAMP) % HASH_FUNC_COUNT_PERMUTATIONS; + for (uint32_t i = 0; i < steps; i++) { + next_permutation(permutation, permutation + HASH_FUNC_COUNT); + } + + for (uint32_t i = 0; i < HASH_FUNC_COUNT; i++) { + if (i == 0) { + dataLen = len; + hashA = work_data; + } else { + dataLen = 64; + hashA = &hash[16 * (i - 1)]; + } + hashB = &hash[16 * i]; + + switch(permutation[i]) { + case 0: + sph_blake512_init(&ctx_blake); + sph_blake512(&ctx_blake, hashA, dataLen); + sph_blake512_close(&ctx_blake, hashB); + break; + case 1: + sph_bmw512_init(&ctx_bmw); + sph_bmw512 (&ctx_bmw, hashA, dataLen); + sph_bmw512_close(&ctx_bmw, hashB); + break; + case 2: + sph_groestl512_init(&ctx_groestl); + sph_groestl512 (&ctx_groestl, hashA, dataLen); + sph_groestl512_close(&ctx_groestl, hashB); + break; + case 3: + sph_skein512_init(&ctx_skein); + sph_skein512 (&ctx_skein, hashA, dataLen); + sph_skein512_close(&ctx_skein, hashB); + break; + case 4: + sph_jh512_init(&ctx_jh); + sph_jh512 (&ctx_jh, hashA, dataLen); + sph_jh512_close(&ctx_jh, hashB); + break; + case 5: + sph_keccak512_init(&ctx_keccak); + sph_keccak512 (&ctx_keccak, hashA, dataLen); + sph_keccak512_close(&ctx_keccak, hashB); + break; + case 6: + sph_luffa512_init(&ctx_luffa); + sph_luffa512 (&ctx_luffa, hashA, dataLen); + sph_luffa512_close(&ctx_luffa, hashB); + break; + case 7: + sph_cubehash512_init(&ctx_cubehash); + sph_cubehash512 (&ctx_cubehash, hashA, dataLen); + sph_cubehash512_close(&ctx_cubehash, hashB); + break; + case 8: + sph_shavite512_init(&ctx_shavite); + sph_shavite512(&ctx_shavite, hashA, dataLen); + sph_shavite512_close(&ctx_shavite, hashB); + break; + case 9: + sph_simd512_init(&ctx_simd); + sph_simd512 (&ctx_simd, hashA, dataLen); + sph_simd512_close(&ctx_simd, hashB); + break; + case 10: + sph_echo512_init(&ctx_echo); + sph_echo512 (&ctx_echo, hashA, dataLen); + sph_echo512_close(&ctx_echo, hashB); + break; + default: + break; + } + } + + memcpy(output, &hash[16 * (HASH_FUNC_COUNT - 1)], 32); +} + diff --git a/stratum/algos/timetravel.h b/stratum/algos/timetravel.h new file mode 100644 index 000000000..4a6cae1fe --- /dev/null +++ b/stratum/algos/timetravel.h @@ -0,0 +1,16 @@ +#ifndef TIMETRAVEL_H +#define TIMETRAVEL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +void timetravel_hash(const char* input, char* output, uint32_t len); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/stratum/client_submit.cpp b/stratum/client_submit.cpp index d54b426b2..af631ed6d 100644 --- a/stratum/client_submit.cpp +++ b/stratum/client_submit.cpp @@ -392,10 +392,17 @@ bool client_submit(YAAMP_CLIENT *client, json_value *json_params) return true; } - if(strcmp(ntime, templ->ntime) && !ntime_valid_range(ntime)) + if(strcmp(ntime, templ->ntime)) { - client_submit_error(client, job, 23, "Invalid time rolling", extranonce2, ntime, nonce); - return true; + if (!ntime_valid_range(ntime)) { + client_submit_error(client, job, 23, "Invalid time rolling", extranonce2, ntime, nonce); + return true; + } + // these algos permutations change over time (can lead to different speeds) + if (!strcmp(g_current_algo->name,"x11evo") || !strcmp(g_current_algo->name,"timetravel")) { + client_submit_error(client, job, 23, "Invalid ntime (rolling not allowed)", extranonce2, ntime, nonce); + return true; + } } YAAMP_SHARE *share = share_find(job->id, extranonce2, ntime, nonce, client->extranonce1); diff --git a/stratum/config.sample/deep.conf b/stratum/config.sample/deep.conf new file mode 100644 index 000000000..1cf1c8933 --- /dev/null +++ b/stratum/config.sample/deep.conf @@ -0,0 +1,16 @@ +[TCP] +server = yaamp.com +port = 3535 +password = tu8tu5 + +[SQL] +host = yaampdb +database = yaamp +username = root +password = patofpaq + +[STRATUM] +algo = deep +difficulty = 0.0128 +max_ttf = 200000000000000 + diff --git a/stratum/config.sample/hmq1725.conf b/stratum/config.sample/hmq1725.conf new file mode 100644 index 000000000..08f348472 --- /dev/null +++ b/stratum/config.sample/hmq1725.conf @@ -0,0 +1,16 @@ +[TCP] +server = yaamp.com +port = 3747 +password = tu8tu5 + +[SQL] +host = yaampdb +database = yaamp +username = root +password = patofpaq + +[STRATUM] +algo = hmq1725 +difficulty = 8 +max_ttf = 50000 + diff --git a/stratum/config.sample/timetravel.conf b/stratum/config.sample/timetravel.conf new file mode 100644 index 000000000..3114dee95 --- /dev/null +++ b/stratum/config.sample/timetravel.conf @@ -0,0 +1,16 @@ +[TCP] +server = yaamp.com +port = 3555 +password = tu8tu5 + +[SQL] +host = yaampdb +database = yaamp +username = root +password = patofpaq + +[STRATUM] +algo = timetravel +difficulty = 0.125 +max_ttf = 50000 + diff --git a/stratum/stratum.cpp b/stratum/stratum.cpp index 740c28580..de7336acc 100644 --- a/stratum/stratum.cpp +++ b/stratum/stratum.cpp @@ -103,6 +103,8 @@ YAAMP_ALGO g_algos[] = {"x11evo", x11evo_hash, 1, 0, 0}, {"xevan", xevan_hash, 0x100, 0, 0}, + {"timetravel", timetravel_hash, 0x100, 0, 0}, // Waaaaahhh + {"hmq1725", hmq17_hash, 0x10000, 0, 0}, {"lyra2", lyra2re_hash, 0x80, 0, 0}, {"lyra2v2", lyra2v2_hash, 0x100, 0, 0}, @@ -114,6 +116,7 @@ YAAMP_ALGO g_algos[] = {"vanilla", blakecoin_hash, 1, 0 }, {"decred", decred_hash, 1, 0 }, + {"deep", deep_hash, 1, 0, 0}, {"fresh", fresh_hash, 0x100, 0, 0}, {"quark", quark_hash, 1, 0, 0}, {"nist5", nist5_hash, 1, 0, 0}, diff --git a/stratum/stratum.h b/stratum/stratum.h index 6c14d1a4e..a40b433f0 100644 --- a/stratum/stratum.h +++ b/stratum/stratum.h @@ -136,6 +136,7 @@ void sha256_double_hash_hex(const char *input, char *output, unsigned int len); #include "algos/x15.h" #include "algos/x17.h" #include "algos/xevan.h" +#include "algos/hmq17.h" #include "algos/nist5.h" #include "algos/fresh.h" #include "algos/quark.h" @@ -150,8 +151,10 @@ void sha256_double_hash_hex(const char *input, char *output, unsigned int len); #include "algos/groestl.h" #include "algos/skein.h" #include "algos/keccak.h" +#include "algos/timetravel.h" #include "algos/bmw.h" +#include "algos/deep.h" #include "algos/lbry.h" #include "algos/luffa.h" #include "algos/pentablake.h" diff --git a/web/yaamp/core/functions/yaamp.php b/web/yaamp/core/functions/yaamp.php index b0808eaf5..014a81581 100755 --- a/web/yaamp/core/functions/yaamp.php +++ b/web/yaamp/core/functions/yaamp.php @@ -12,6 +12,8 @@ function yaamp_get_algos() 'blakecoin', 'blake2s', 'decred', + 'deep', + 'hmq1725', 'keccak', 'lbry', 'luffa', @@ -38,6 +40,7 @@ function yaamp_get_algos() 'sib', 'skein', 'skein2', + 'timetravel', 'vanilla', 'veltor', 'velvet', @@ -110,6 +113,7 @@ function getAlgoColors($algo) 'scryptn' => '#d0d0d0', 'c11' => '#a0a0d0', 'decred' => '#f0f0f0', + 'deep' => '#e0ffff', 'x11' => '#f0f0a0', 'x11evo' => '#c0f0c0', 'x13' => '#ffd880', @@ -123,6 +127,7 @@ function getAlgoColors($algo) 'groestl' => '#d0a0a0', 'dmd-gr' => '#a0c0f0', 'myr-gr' => '#a0c0f0', + 'hmq1725' => '#ffa0a0', 'keccak' => '#c0f0c0', 'lbry' => '#b0d0e0', 'luffa' => '#a0c0c0', @@ -137,6 +142,7 @@ function getAlgoColors($algo) 'sib' => '#a0a0c0', 'skein' => '#80a0a0', 'skein2' => '#c8a060', + 'timetravel' => '#f0b0d0', 'vanilla' => '#f0f0f0', 'velvet' => '#aac0cc', 'whirlpool' => '#d0e0e0', @@ -159,13 +165,16 @@ function getAlgoPort($algo) 'sha256' => 3333, 'lbry' => 3334, 'scrypt' => 3433, + 'timetravel' => 3555, 'c11' => 3573, + 'deep' => 3535, 'x11' => 3533, 'x11evo' => 3553, 'x13' => 3633, 'x15' => 3733, 'x17' => 3737, 'xevan' => 3739, + 'hmq1725' => 3747, 'nist5' => 3833, 'x14' => 3933, 'quark' => 4033, diff --git a/web/yaamp/modules/site/results/miners_results.php b/web/yaamp/modules/site/results/miners_results.php index e7af4e637..68833526b 100644 --- a/web/yaamp/modules/site/results/miners_results.php +++ b/web/yaamp/modules/site/results/miners_results.php @@ -59,6 +59,8 @@ function WriteBoxHeader($title) $hashrate = dboscalar("select sum(difficulty) * $target / $interval / 1000 from shares where valid and time>$delay and workerid IN (select id from workers where algo=:algo and version=:version)", array(':algo'=>$algo, ':version'=>$version)); + if (!$hashrate && !$this->admin) continue; + $invalid = dboscalar("select sum(difficulty) * $target / $interval / 1000 from shares where not valid and time>$delay and workerid IN (select id from workers where algo=:algo and version=:version)", array(':algo'=>$algo, ':version'=>$version)); From f412d68338327063d70b22aad94711b99ed784fb Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Wed, 1 Mar 2017 02:39:07 +0100 Subject: [PATCH 051/434] coin/console: handle raw json queries --- web/yaamp/core/rpc/easybitcoin.php | 66 +++++++++++++++++++++++++++++- web/yaamp/core/rpc/wallet-rpc.php | 12 ++++++ 2 files changed, 76 insertions(+), 2 deletions(-) diff --git a/web/yaamp/core/rpc/easybitcoin.php b/web/yaamp/core/rpc/easybitcoin.php index 1a650dfcd..0ad69cc05 100644 --- a/web/yaamp/core/rpc/easybitcoin.php +++ b/web/yaamp/core/rpc/easybitcoin.php @@ -202,10 +202,9 @@ function __call($method, $params) } if (isset($this->response['error']) && $this->response['error']) { - // If bitcoind returned an error, put that in $this->error + // store wallet error $this->error = strtolower($this->response['error']['message']); } - elseif ($this->status != 200) { // If bitcoind didn't return a nice error message, we need to make our own switch ($this->status) { @@ -230,4 +229,67 @@ function __call($method, $params) return $this->response['result']; } + + // direct json.. + public function request_json($json) + { + $this->status = null; + $this->error = null; + $this->response = null; + $this->raw_response = null; + + $data = json_decode($json); + $data->id = $this->id++; + debuglog($json); + + $ch = curl_init("{$this->proto}://{$this->username}:{$this->password}@{$this->host}:{$this->port}/{$this->url}"); + $options = array( + CURLOPT_CONNECTTIMEOUT => 20, + CURLOPT_TIMEOUT => 30, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_MAXREDIRS => 10, + CURLOPT_HTTPHEADER => array('Content-type: application/json'), + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => json_encode($data) + ); + curl_setopt_array($ch, $options); + + $this->raw_response = curl_exec($ch); + $this->response = json_decode($this->raw_response, true); + $this->status = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $curl_error = curl_error($ch); + + if (!empty($curl_error)) { + $this->error = $curl_error; + } + + if (isset($this->response['error']) && $this->response['error']) { + // store wallet error + $this->error = strtolower($this->response['error']['message']); + } + elseif ($this->status != 200) { + switch ($this->status) { + case 400: + $this->error = 'HTTP_BAD_REQUEST'; + break; + case 401: + $this->error = 'HTTP_UNAUTHORIZED'; + break; + case 403: + $this->error = 'HTTP_FORBIDDEN'; + break; + case 404: + $this->error = 'HTTP_NOT_FOUND'; + break; + } + } + + if ($this->error) { + return false; + } + + return $this->response['result']; + } + } diff --git a/web/yaamp/core/rpc/wallet-rpc.php b/web/yaamp/core/rpc/wallet-rpc.php index 63975243f..2229a8fd0 100644 --- a/web/yaamp/core/rpc/wallet-rpc.php +++ b/web/yaamp/core/rpc/wallet-rpc.php @@ -393,6 +393,18 @@ function execute($query) $result = ''; if (!empty($query)) try { + + // if its a raw json query... + if (strpos($query,"{") !== false && json_decode($query)) { + try { + debuglog($query); + $result = $this->rpc->request_json($query); + } catch (Exception $e) { + $result = false; + } + return $result; + } + $params = explode(' ', trim($query)); $command = array_shift($params); From 495e3a51df977ec296f6a02d59c0403e962cca10 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Tue, 28 Feb 2017 23:00:00 +0100 Subject: [PATCH 052/434] stratum: handle new DASH masternode template #86 tested ok on the testnet... + XZC fix (coinbase tx dest count) --- stratum/coinbase.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/stratum/coinbase.cpp b/stratum/coinbase.cpp index 312adf5e0..bb78eee99 100644 --- a/stratum/coinbase.cpp +++ b/stratum/coinbase.cpp @@ -115,7 +115,7 @@ void coinbase_create(YAAMP_COIND *coind, YAAMP_JOB_TEMPLATE *templ, json_value * if (strlen(coind->charity_address) == 0) sprintf(coind->charity_address, "aHu897ivzmeFuLNB6956X6gyGeVNHUBRgD"); - strcat(templ->coinb2, "02"); + strcat(templ->coinb2, "06"); job_pack_tx(coind, templ->coinb2, available, NULL); base58_decode("aCAgTPgtYcA4EysU4UKC86EQd5cTtHtCcr", script_payee); job_pack_tx(coind, templ->coinb2, charity_amount/5, script_payee); @@ -203,7 +203,50 @@ void coinbase_create(YAAMP_COIND *coind, YAAMP_JOB_TEMPLATE *templ, json_value * } } - if(coind->hasmasternodes) /* DASH style */ + if(strcmp(coind->symbol, "DASH") == 0 || strcmp(coind->symbol, "DASH-TESTNET") == 0) // Dash 12.1 + { + char script_dests[2048] = { 0 }; + char script_payee[128] = { 0 }; + char payees[4]; // addresses count + int npayees = 1; + bool masternode_enabled = json_get_bool(json_result, "masternode_payments_enforced"); + bool superblocks_enabled = json_get_bool(json_result, "superblocks_enabled"); + json_value* superblock = json_get_array(json_result, "superblock"); + json_value* masternode = json_get_object(json_result, "masternode"); + if(superblocks_enabled && superblock) { + for(int i = 0; i < superblock->u.array.length; i++) { + const char *payee = json_get_string(superblock->u.array.values[i], "payee"); + json_int_t amount = json_get_int(superblock->u.array.values[i], "amount"); + if (payee && amount) { + npayees++; + available -= amount; + base58_decode(payee, script_payee); + job_pack_tx(coind, script_dests, amount, script_payee); + //debuglog("%s superblock %s %u\n", coind->symbol, payee, amount); + } + } + } + if (masternode_enabled && masternode) { + const char *payee = json_get_string(masternode, "payee"); + json_int_t amount = json_get_int(masternode, "amount"); + if (payee && amount) { + npayees++; + available -= amount; + base58_decode(payee, script_payee); + job_pack_tx(coind, script_dests, amount, script_payee); + } + } + sprintf(payees, "%02x", npayees); + strcat(templ->coinb2, payees); + strcat(templ->coinb2, script_dests); + job_pack_tx(coind, templ->coinb2, available, NULL); + strcat(templ->coinb2, "00000000"); // locktime + coind->reward = (double)available/100000000*coind->reward_mul; + //debuglog("%s %d dests %s\n", coind->symbol, npayees, script_dests); + return; + } + + else if(coind->hasmasternodes) /* OLD DASH style */ { char charity_payee[256] = { 0 }; const char *payee = json_get_string(json_result, "payee"); From be1064a25bb09c7b8df0d6c216407fe541e78abf Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Tue, 7 Mar 2017 16:08:12 +0100 Subject: [PATCH 053/434] sha256t algo + fix sha/decred pool hashrate axis --- rc.local | 1 + stratum/algos/makefile | 2 +- stratum/algos/sha256t.c | 28 +++++++++++++++++++ stratum/algos/sha256t.h | 16 +++++++++++ stratum/config.sample/sha256t.conf | 17 +++++++++++ stratum/stratum.cpp | 2 ++ stratum/stratum.h | 1 + web/yaamp/core/functions/yaamp.php | 4 +++ .../site/results/graph_hashrate_results.php | 6 +++- 9 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 stratum/algos/sha256t.c create mode 100644 stratum/algos/sha256t.h create mode 100644 stratum/config.sample/sha256t.conf diff --git a/rc.local b/rc.local index 972650453..5e4cc4ff9 100644 --- a/rc.local +++ b/rc.local @@ -33,6 +33,7 @@ screen -dmS timetravel $STRATUM_DIR/run.sh timetravel screen -dmS hmq1725 $STRATUM_DIR/run.sh hmq1725 screen -dmS sha $STRATUM_DIR/run.sh sha +screen -dmS sha256t $STRATUM_DIR/run.sh sha256t screen -dmS scrypt $STRATUM_DIR/run.sh scrypt screen -dmS scryptn $STRATUM_DIR/run.sh scryptn screen -dmS luffa $STRATUM_DIR/run.sh luffa diff --git a/stratum/algos/makefile b/stratum/algos/makefile index 9684caed1..7968e654c 100644 --- a/stratum/algos/makefile +++ b/stratum/algos/makefile @@ -9,7 +9,7 @@ CFLAGS= $(CXXFLAGS) -std=gnu99 LDFLAGS=-O2 -lgmp SOURCES=lyra2re.c lyra2v2.c Lyra2.c lyra2z.c Lyra2z.c Sponge.c \ - blake.c scrypt.c c11.c x11.c x13.c sha256.c keccak.c deep.c \ + blake.c scrypt.c c11.c x11.c x13.c sha256.c sha256t.c keccak.c deep.c \ x14.c x15.c x17.c nist5.c fresh.c quark.c neoscrypt.c scryptn.c qubit.c skein.c groestl.c \ timetravel.c xevan.c hmq17.c \ skein2.c zr5.c bmw.c luffa.c pentablake.c whirlpool.c whirlpoolx.c blakecoin.c \ diff --git a/stratum/algos/sha256t.c b/stratum/algos/sha256t.c new file mode 100644 index 000000000..fcbd6cfc5 --- /dev/null +++ b/stratum/algos/sha256t.c @@ -0,0 +1,28 @@ + +#include +#include +#include +#include + +#include "sha256.h" + +#include + +void sha256t_hash(const char* input, char* output, uint32_t len) +{ + unsigned char hash[64]; + + SHA256_CTX ctx_sha256; + SHA256_Init(&ctx_sha256); + SHA256_Update(&ctx_sha256, input, len); + SHA256_Final(hash, &ctx_sha256); + + SHA256_Init(&ctx_sha256); + SHA256_Update(&ctx_sha256, hash, 32); + SHA256_Final(hash, &ctx_sha256); + + SHA256_Init(&ctx_sha256); + SHA256_Update(&ctx_sha256, hash, 32); + SHA256_Final((unsigned char*)output, &ctx_sha256); +} + diff --git a/stratum/algos/sha256t.h b/stratum/algos/sha256t.h new file mode 100644 index 000000000..421770f06 --- /dev/null +++ b/stratum/algos/sha256t.h @@ -0,0 +1,16 @@ +#ifndef SHA256T_H +#define SHA256T_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +void sha256t_hash(const char* input, char* output, uint32_t len); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/stratum/config.sample/sha256t.conf b/stratum/config.sample/sha256t.conf new file mode 100644 index 000000000..f542ac0d1 --- /dev/null +++ b/stratum/config.sample/sha256t.conf @@ -0,0 +1,17 @@ +[TCP] +server = yaamp.com +port = 3339 +password = tu8tu5 + +[SQL] +host = yaampdb +database = yaamp +username = root +password = patofpaq + +[STRATUM] +algo = sha256t +difficulty = 1 +max_ttf = 40000 +reconnect = 1 + diff --git a/stratum/stratum.cpp b/stratum/stratum.cpp index de7336acc..dca2ea375 100644 --- a/stratum/stratum.cpp +++ b/stratum/stratum.cpp @@ -141,6 +141,8 @@ YAAMP_ALGO g_algos[] = {"velvet", velvet_hash, 0x10000, 0, 0}, {"argon2", argon2_hash, 0x10000, 0, sha256_hash_hex }, + {"sha256t", sha256t_hash, 1, 0, 0}, // sha256 3x + {"sib", sib_hash, 1, 0, 0}, {"whirlcoin", whirlpool_hash, 1, 0, sha256_hash_hex }, /* old sha merkleroot */ diff --git a/stratum/stratum.h b/stratum/stratum.h index a40b433f0..4d66cf6ad 100644 --- a/stratum/stratum.h +++ b/stratum/stratum.h @@ -151,6 +151,7 @@ void sha256_double_hash_hex(const char *input, char *output, unsigned int len); #include "algos/groestl.h" #include "algos/skein.h" #include "algos/keccak.h" +#include "algos/sha256t.h" #include "algos/timetravel.h" #include "algos/bmw.h" diff --git a/web/yaamp/core/functions/yaamp.php b/web/yaamp/core/functions/yaamp.php index 014a81581..56d4c74f9 100755 --- a/web/yaamp/core/functions/yaamp.php +++ b/web/yaamp/core/functions/yaamp.php @@ -5,6 +5,7 @@ function yaamp_get_algos() /* Toggle Site Algos Here */ return array( 'sha256', + 'sha256t', 'scrypt', 'scryptn', 'argon2', @@ -56,6 +57,7 @@ function yaamp_algo_mBTC_factor($algo) { switch($algo) { case 'sha256': + case 'sha256t': case 'blake': case 'blakecoin': case 'blake2s': @@ -108,6 +110,7 @@ function getAlgoColors($algo) { $a = array( 'sha256' => '#d0d0a0', + 'sha256t' => '#d0d0f0', 'scrypt' => '#c0c0e0', 'neoscrypt' => '#a0d0f0', 'scryptn' => '#d0d0d0', @@ -163,6 +166,7 @@ function getAlgoPort($algo) { $a = array( 'sha256' => 3333, + 'sha256t' => 3339, 'lbry' => 3334, 'scrypt' => 3433, 'timetravel' => 3555, diff --git a/web/yaamp/modules/site/results/graph_hashrate_results.php b/web/yaamp/modules/site/results/graph_hashrate_results.php index 2de85a8b8..1741dd9f2 100644 --- a/web/yaamp/modules/site/results/graph_hashrate_results.php +++ b/web/yaamp/modules/site/results/graph_hashrate_results.php @@ -1,7 +1,10 @@ getState('yaamp-algo'); +$factor = yaamp_algo_mBTC_factor($algo); // 1000 sha (GH/s), 1 for normal MH/s $step = 15*60; $t = time() - 24*60*60; @@ -22,7 +25,8 @@ foreach($stats as $n) { - $m = round($n->hashrate/1000000, 3); + $r = $n->hashrate/1000000; + $m = round($r / $factor, 3); $d = date('Y-m-d H:i:s', $n->time); $json .= "[\"$d\",$m],"; From eae758e308950abcc23e847103f92592f38c6dda Mon Sep 17 00:00:00 2001 From: crackfoo Date: Wed, 8 Mar 2017 13:46:53 -0400 Subject: [PATCH 054/434] stratum: add support for ARC 12.1 & superblocks (#89) * stratum: add support for ARC 12.1 & superblocks --- stratum/coinbase.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/stratum/coinbase.cpp b/stratum/coinbase.cpp index bb78eee99..08f7243b6 100644 --- a/stratum/coinbase.cpp +++ b/stratum/coinbase.cpp @@ -245,6 +245,49 @@ void coinbase_create(YAAMP_COIND *coind, YAAMP_JOB_TEMPLATE *templ, json_value * //debuglog("%s %d dests %s\n", coind->symbol, npayees, script_dests); return; } + + else if(strcmp(coind->symbol, "ARC") == 0) + { + char script_dests[2048] = { 0 }; + char script_payee[128] = { 0 }; + char payees[4]; + int npayees = 1; + bool masternode_enabled = json_get_bool(json_result, "goldminenode_payments_enforced"); + bool superblocks_enabled = json_get_bool(json_result, "superblocks_enabled"); + json_value* superblock = json_get_array(json_result, "superblock"); + json_value* masternode = json_get_object(json_result, "goldminenode"); + if(superblocks_enabled && superblock) { + for(int i = 0; i < superblock->u.array.length; i++) { + const char *payee = json_get_string(superblock->u.array.values[i], "payee"); + json_int_t amount = json_get_int(superblock->u.array.values[i], "amount"); + if (payee && amount) { + npayees++; + available -= amount; + base58_decode(payee, script_payee); + job_pack_tx(coind, script_dests, amount, script_payee); + //debuglog("%s superblock %s %u\n", coind->symbol, payee, amount); + } + } + } + if (masternode_enabled && masternode) { + const char *payee = json_get_string(masternode, "payee"); + json_int_t amount = json_get_int(masternode, "amount"); + if (payee && amount) { + npayees++; + available -= amount; + base58_decode(payee, script_payee); + job_pack_tx(coind, script_dests, amount, script_payee); + } + } + sprintf(payees, "%02x", npayees); + strcat(templ->coinb2, payees); + strcat(templ->coinb2, script_dests); + job_pack_tx(coind, templ->coinb2, available, NULL); + strcat(templ->coinb2, "00000000"); // locktime + coind->reward = (double)available/100000000*coind->reward_mul; + //debuglog("%s %d dests %s\n", coind->symbol, npayees, script_dests); + return; + } else if(coind->hasmasternodes) /* OLD DASH style */ { From acdb0bd6fd4bc688379484bd686d53a2cfb38d01 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 9 Mar 2017 18:01:08 +0100 Subject: [PATCH 055/434] handle bastion algo --- stratum/algos/bastion.c | 102 +++++++++++++++++++++++++++++ stratum/algos/bastion.h | 16 +++++ stratum/algos/makefile | 2 +- stratum/config.sample/bastion.conf | 16 +++++ stratum/sha3/makefile | 2 +- stratum/stratum.cpp | 1 + stratum/stratum.h | 1 + web/yaamp/core/functions/yaamp.php | 3 + 8 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 stratum/algos/bastion.c create mode 100644 stratum/algos/bastion.h create mode 100644 stratum/config.sample/bastion.conf diff --git a/stratum/algos/bastion.c b/stratum/algos/bastion.c new file mode 100644 index 000000000..839f0541e --- /dev/null +++ b/stratum/algos/bastion.c @@ -0,0 +1,102 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define _ALIGN(x) __attribute__ ((aligned(x))) + +void bastion_hash(const char* input, char* output, uint32_t len) +{ + unsigned char _ALIGN(128) hash[64] = { 0 }; + + sph_echo512_context ctx_echo; + sph_luffa512_context ctx_luffa; + sph_fugue512_context ctx_fugue; + sph_whirlpool_context ctx_whirlpool; + sph_shabal512_context ctx_shabal; + sph_skein512_context ctx_skein; + sph_hamsi512_context ctx_hamsi; + + HEFTY1(input, len, hash); + + sph_luffa512_init(&ctx_luffa); + sph_luffa512(&ctx_luffa, hash, 64); + sph_luffa512_close(&ctx_luffa, hash); + + if (hash[0] & 0x8) + { + sph_fugue512_init(&ctx_fugue); + sph_fugue512(&ctx_fugue, hash, 64); + sph_fugue512_close(&ctx_fugue, hash); + } else { + sph_skein512_init(&ctx_skein); + sph_skein512(&ctx_skein, hash, 64); + sph_skein512_close(&ctx_skein, hash); + } + + sph_whirlpool_init(&ctx_whirlpool); + sph_whirlpool(&ctx_whirlpool, hash, 64); + sph_whirlpool_close(&ctx_whirlpool, hash); + + sph_fugue512_init(&ctx_fugue); + sph_fugue512(&ctx_fugue, hash, 64); + sph_fugue512_close(&ctx_fugue, hash); + + if (hash[0] & 0x8) + { + sph_echo512_init(&ctx_echo); + sph_echo512(&ctx_echo, hash, 64); + sph_echo512_close(&ctx_echo, hash); + } else { + sph_luffa512_init(&ctx_luffa); + sph_luffa512(&ctx_luffa, hash, 64); + sph_luffa512_close(&ctx_luffa, hash); + } + + sph_shabal512_init(&ctx_shabal); + sph_shabal512(&ctx_shabal, hash, 64); + sph_shabal512_close(&ctx_shabal, hash); + + sph_skein512_init(&ctx_skein); + sph_skein512(&ctx_skein, hash, 64); + sph_skein512_close(&ctx_skein, hash); + + if (hash[0] & 0x8) + { + sph_shabal512_init(&ctx_shabal); + sph_shabal512(&ctx_shabal, hash, 64); + sph_shabal512_close(&ctx_shabal, hash); + } else { + sph_whirlpool_init(&ctx_whirlpool); + sph_whirlpool(&ctx_whirlpool, hash, 64); + sph_whirlpool_close(&ctx_whirlpool, hash); + } + + sph_shabal512_init(&ctx_shabal); + sph_shabal512(&ctx_shabal, hash, 64); + sph_shabal512_close(&ctx_shabal, hash); + + if (hash[0] & 0x8) + { + sph_hamsi512_init(&ctx_hamsi); + sph_hamsi512(&ctx_hamsi, hash, 64); + sph_hamsi512_close(&ctx_hamsi, hash); + } else { + sph_luffa512_init(&ctx_luffa); + sph_luffa512(&ctx_luffa, hash, 64); + sph_luffa512_close(&ctx_luffa, hash); + } + + memcpy(output, hash, 32); +} + diff --git a/stratum/algos/bastion.h b/stratum/algos/bastion.h new file mode 100644 index 000000000..4de219ad0 --- /dev/null +++ b/stratum/algos/bastion.h @@ -0,0 +1,16 @@ +#ifndef BASTION_H +#define BASTION_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +void bastion_hash(const char* input, char* output, uint32_t len); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/stratum/algos/makefile b/stratum/algos/makefile index 7968e654c..b3f53de47 100644 --- a/stratum/algos/makefile +++ b/stratum/algos/makefile @@ -11,7 +11,7 @@ LDFLAGS=-O2 -lgmp SOURCES=lyra2re.c lyra2v2.c Lyra2.c lyra2z.c Lyra2z.c Sponge.c \ blake.c scrypt.c c11.c x11.c x13.c sha256.c sha256t.c keccak.c deep.c \ x14.c x15.c x17.c nist5.c fresh.c quark.c neoscrypt.c scryptn.c qubit.c skein.c groestl.c \ - timetravel.c xevan.c hmq17.c \ + timetravel.c xevan.c bastion.c hmq17.c \ skein2.c zr5.c bmw.c luffa.c pentablake.c whirlpool.c whirlpoolx.c blakecoin.c \ blake2.c \ yescrypt.c yescrypt-opt.c sha256_Y.c lbry.c \ diff --git a/stratum/config.sample/bastion.conf b/stratum/config.sample/bastion.conf new file mode 100644 index 000000000..ed2b1dbcd --- /dev/null +++ b/stratum/config.sample/bastion.conf @@ -0,0 +1,16 @@ +[TCP] +server = yaamp.com +port = 6433 +password = tu8tu5 + +[SQL] +host = yaampdb +database = yaamp +username = root +password = patofpaq + +[STRATUM] +algo = bastion +difficulty = 0.02 +max_ttf = 4000000 + diff --git a/stratum/sha3/makefile b/stratum/sha3/makefile index 1d3f69fe4..ab83f61da 100644 --- a/stratum/sha3/makefile +++ b/stratum/sha3/makefile @@ -6,7 +6,7 @@ LDFLAGS=-O2 SOURCES=sph_jh.c sph_blake.c sph_bmw.c sph_groestl.c sph_skein.c sph_keccak.c sph_luffa.c sph_cubehash.c sph_shavite.c \ sph_simd.c sph_echo.c sph_fugue.c sph_hamsi.c sph_shabal.c sph_whirlpool.c \ - sph_haval.c sph_ripemd.c sph_sha2.c sph_sha2big.c sph_tiger.c \ + sph_haval.c sph_hefty1.c sph_ripemd.c sph_sha2.c sph_sha2big.c sph_tiger.c \ blake2s.c OBJECTS=$(SOURCES:.c=.o) diff --git a/stratum/stratum.cpp b/stratum/stratum.cpp index dca2ea375..4f05d9acf 100644 --- a/stratum/stratum.cpp +++ b/stratum/stratum.cpp @@ -110,6 +110,7 @@ YAAMP_ALGO g_algos[] = {"lyra2v2", lyra2v2_hash, 0x100, 0, 0}, {"lyra2z", lyra2z_hash, 0x100, 0, 0}, + {"bastion", bastion_hash, 1, 0 }, {"blake", blake_hash, 1, 0 }, {"blakecoin", blakecoin_hash, 1 /*0x100*/, 0, sha256_hash_hex }, {"blake2s", blake2s_hash, 1, 0 }, diff --git a/stratum/stratum.h b/stratum/stratum.h index 4d66cf6ad..6d35a56f1 100644 --- a/stratum/stratum.h +++ b/stratum/stratum.h @@ -154,6 +154,7 @@ void sha256_double_hash_hex(const char *input, char *output, unsigned int len); #include "algos/sha256t.h" #include "algos/timetravel.h" +#include "algos/bastion.h" #include "algos/bmw.h" #include "algos/deep.h" #include "algos/lbry.h" diff --git a/web/yaamp/core/functions/yaamp.php b/web/yaamp/core/functions/yaamp.php index 56d4c74f9..b11cdf99c 100755 --- a/web/yaamp/core/functions/yaamp.php +++ b/web/yaamp/core/functions/yaamp.php @@ -9,6 +9,7 @@ function yaamp_get_algos() 'scrypt', 'scryptn', 'argon2', + 'bastion', 'blake', 'blakecoin', 'blake2s', @@ -125,6 +126,7 @@ function getAlgoColors($algo) 'x17' => '#f0b0a0', 'xevan' => '#f0b0a0', 'argon2' => '#e0d0e0', + 'bastion' => '#e0b0b0', 'blake' => '#f0f0f0', 'blakecoin' => '#f0f0f0', 'groestl' => '#d0a0a0', @@ -212,6 +214,7 @@ function getAlgoPort($algo) 'veltor' => 5034, 'velvet' => 6133, 'yescrypt' => 6233, + 'bastion' => 6433, ); global $configCustomPorts; From 74cda705ff8a081dc5376ed1a4827221d4f288f9 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 16 Mar 2017 16:25:13 +0100 Subject: [PATCH 056/434] bittrex: use marketsummaries api in bulk --- web/yaamp/core/backend/markets.php | 53 +++++++++++++++++++++-------- web/yaamp/core/exchange/bittrex.php | 1 + 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/web/yaamp/core/backend/markets.php b/web/yaamp/core/backend/markets.php index de26bfb1f..8b41576f0 100644 --- a/web/yaamp/core/backend/markets.php +++ b/web/yaamp/core/backend/markets.php @@ -354,10 +354,10 @@ function updateBittrexMarkets($force = false) $list = bittrex_api_query('public/getcurrencies'); if(!is_object($list)) return; - foreach($list->result as $currency) { - if($currency->Currency == 'BTC') continue; + $market = objSafeVal($currency,'Currency',''); + if(empty($market) || $market == 'BTC') continue; $coin = getdbosql('db_coins', "symbol=:sym", array(':sym'=>$currency->Currency)); if(!$coin) continue; @@ -365,30 +365,53 @@ function updateBittrexMarkets($force = false) $market = getdbosql('db_markets', "coinid={$coin->id} AND name='$exchange'"); if(!$market) continue; - $market->txfee = $currency->TxFee; + $market->txfee = $currency->TxFee; // withdraw cost, not a percent! $market->message = $currency->Notice; - if($market->disabled < 9) $market->disabled = !$currency->IsActive; + $market->save(); + + //if($market->disabled || $market->deleted) continue; + //$pair = "BTC-{$coin->symbol}"; + //$ticker = bittrex_api_query('public/getticker', "&market=$pair"); + //if(!$ticker || !$ticker->success || !$ticker->result) continue; + //$price2 = ($ticker->result->Bid+$ticker->result->Ask)/2; + //$market->price2 = AverageIncrement($market->price2, $price2); + //$market->price = AverageIncrement($market->price, $ticker->result->Bid); + //$market->pricetime = time(); + //$market->save(); + + } + + sleep(1); + + $list = bittrex_api_query('public/getmarketsummaries'); + if(!is_object($list)) return; + + foreach($list->result as $m) + { + $a = explode('-', $m->MarketName); + if(!isset($a[1])) continue; + if($a[0] != 'BTC') continue; + $symbol = $a[1]; + if($symbol == 'BTC') continue; + + $coin = getdbosql('db_coins', "symbol=:sym", array(':sym'=>$symbol)); + if(!$coin) continue; + + $market = getdbosql('db_markets', "coinid={$coin->id} AND name='$exchange'"); + if(!$market) continue; + if (market_get($exchange, $coin->symbol, "disabled")) { $market->disabled = 1; $market->deleted = 1; $market->message = 'disabled from settings'; } - $market->save(); - if($market->disabled || $market->deleted) continue; - - $pair = "BTC-{$coin->symbol}"; - - $ticker = bittrex_api_query('public/getticker', "&market=$pair"); - if(!$ticker || !$ticker->success || !$ticker->result) continue; - - $price2 = ($ticker->result->Bid+$ticker->result->Ask)/2; + $price2 = ($m->Bid + $m->Ask)/2; $market->price2 = AverageIncrement($market->price2, $price2); - $market->price = AverageIncrement($market->price, $ticker->result->Bid); + $market->price = AverageIncrement($market->price, $m->Bid); $market->pricetime = time(); - $market->save(); // deposit address diff --git a/web/yaamp/core/exchange/bittrex.php b/web/yaamp/core/exchange/bittrex.php index 36e247e58..0da5f7bb5 100644 --- a/web/yaamp/core/exchange/bittrex.php +++ b/web/yaamp/core/exchange/bittrex.php @@ -20,6 +20,7 @@ function bittrex_api_query($method, $params='') curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_HTTPHEADER, array("apisign:$sign")); $execResult = curl_exec($ch); From 093c884c2790c74c42a1cf66878efecd46fc54f8 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 16 Mar 2017 23:05:52 +0100 Subject: [PATCH 057/434] cryptopia: remove old option, add timeout --- web/yaamp/core/exchange/cryptopia.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/yaamp/core/exchange/cryptopia.php b/web/yaamp/core/exchange/cryptopia.php index 86fd66f53..91ac714d2 100644 --- a/web/yaamp/core/exchange/cryptopia.php +++ b/web/yaamp/core/exchange/cryptopia.php @@ -52,9 +52,9 @@ function cryptopia_api_user($method, $params=NULL) curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); - curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; Cryptopia API PHP client; '.php_uname('s').'; PHP/'.phpversion().')'); From ef1cd062e11bf66c12cb09548d029b6ca06ce724 Mon Sep 17 00:00:00 2001 From: Tristian Date: Fri, 17 Mar 2017 12:55:32 +0100 Subject: [PATCH 058/434] Livecoin trading #68 Insert balance row if it is missing use tabs + restore public api function for users without keys --- web/yaamp/commands/ExchangeCommand.php | 5 +- web/yaamp/core/backend/markets.php | 7 +- web/yaamp/core/exchange/livecoin.php | 311 ++++++++++++++------ web/yaamp/core/trading/livecoin_trading.php | 287 ++++++++++++++++-- web/yaamp/core/trading/trading.php | 9 +- 5 files changed, 497 insertions(+), 122 deletions(-) diff --git a/web/yaamp/commands/ExchangeCommand.php b/web/yaamp/commands/ExchangeCommand.php index cb752eb38..038716531 100644 --- a/web/yaamp/commands/ExchangeCommand.php +++ b/web/yaamp/commands/ExchangeCommand.php @@ -164,8 +164,9 @@ public function testApiKeys() echo("kraken btc: ".json_encode($balance)."\n"); } if (!empty(EXCH_LIVECOIN_KEY)) { - $balance = livecoin_api_user('payment/balance', array('currency'=>'BTC')); - if (!is_object($balance)) echo("livecoin error\n"); + $livecoin = new LiveCoinApi; + $balance = $livecoin->getBalances('BTC'); + if (!$balance) echo("livecoin error\n"); else echo("livecoin btc: ".json_encode($balance)."\n"); // {"type":"available","currency":"BTC","value":0} } diff --git a/web/yaamp/core/backend/markets.php b/web/yaamp/core/backend/markets.php index 8b41576f0..871e57da2 100644 --- a/web/yaamp/core/backend/markets.php +++ b/web/yaamp/core/backend/markets.php @@ -21,7 +21,7 @@ function BackendPricesUpdate() updateBterMarkets(); //updateEmpoexMarkets(); updateJubiMarkets(); - updateLivecoinMarkets(); + updateLiveCoinMarkets(); updateNovaMarkets(); updateShapeShiftMarkets(); @@ -1015,7 +1015,7 @@ function updateEmpoexMarkets() } } -function updateLivecoinMarkets() +function updateLiveCoinMarkets() { $exchange = 'livecoin'; if (exchange_get($exchange, 'disabled')) return; @@ -1064,7 +1064,8 @@ function updateLivecoinMarkets() if(empty($market->deposit_address) && !$last_checked) { sleep(1); - $data = livecoin_api_user('payment/get/address', array('currency'=>$coin->symbol)); + $livecoin = new LiveCoinApi(); + $data = $livecoin->getDepositAddress($coin->symbol); if(!empty($data) && objSafeVal($data, 'wallet', '') != '') { $addr = arraySafeVal($data, 'wallet'); if (!empty($addr) && $addr != $market->deposit_address) { diff --git a/web/yaamp/core/exchange/livecoin.php b/web/yaamp/core/exchange/livecoin.php index a5d3a6791..19fa08548 100644 --- a/web/yaamp/core/exchange/livecoin.php +++ b/web/yaamp/core/exchange/livecoin.php @@ -1,131 +1,256 @@ api_key", + "Sign: $signature" + ); - $execResult = curl_exec($ch); - $obj = json_decode($execResult); + if ($post) { + $ch = curl_init($url); + curl_setopt($ch, CURLOPT_POST, 'POST'); + curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); + } else { + $ch = curl_init($url."?".$fields); + } + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; LiveCoin PHP client; '.php_uname('s').'; PHP/'.phpversion().')'); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->timeout/2); + curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout); - return $obj; -} + $response = curl_exec($ch); + if ($response) { + $a = json_decode($response); + $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); + if (!$a) { + debuglog("LiveCoin: Auth API failed ($status) ".strip_data($response).' '.curl_error($ch)); + } + } + curl_close($ch); -// payment/balance + return isset($a) ? $a : false; + } -function livecoin_api_user($method, $params=NULL) -{ - require_once('/etc/yiimp/keys.php'); - if (!defined('EXCH_LIVECOIN_SECRET')) define('EXCH_LIVECOIN_SECRET', ''); - if (empty(EXCH_LIVECOIN_KEY) || empty(EXCH_LIVECOIN_SECRET)) return false; - $apikey = EXCH_LIVECOIN_KEY; + protected function jsonGet($url, $params=array()) + { - $exchange = "livecoin"; + $fields = http_build_query($params, '', '&'); + $ch = curl_init($url."?".$fields); - if (empty($params)) $params = array(); - ksort($params); - $fields = http_build_query($params, '', '&'); - $signature = strtoupper(hash_hmac('sha256', $fields, EXCH_LIVECOIN_SECRET)); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; LiveCoin PHP client; '.php_uname('s').'; PHP/'.phpversion().')'); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->timeout/2); + curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout); - $headers = array( - 'Content-Type: application/json; charset=utf-8', - 'Api-key: '.$apikey, - 'Sign: '.$signature, - ); + $response = curl_exec($ch); - $url = "https://api.livecoin.net/$method?$fields"; + if ($response) { + $a = json_decode($response); + $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); + if (!$a) { + debuglog("LiveCoin: Auth API failed ($status) ".strip_data($response).' '.curl_error($ch)); + } + } + curl_close($ch); - $ch = curl_init($url); + return isset($a) ? $a : false; + } - curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); - //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); - //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); - curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; YiiMP API PHP client; '.php_uname('s').'; PHP/'.phpversion().')'); - curl_setopt($ch, CURLOPT_ENCODING , ''); + // Public data + public function getTickerInfo($pair=false) + { + $params = array(); + if ($pair) { + $params['currencyPair'] = $pair; + } - $res = curl_exec($ch); - if($res === false) + return $this->jsonGet($this->api_url.'/exchange/ticker', $params); + } + + public function getLastTrades($pair, $minorhr='false', $type='flase') { - $e = curl_error($ch); - debuglog("$exchange: $e"); - curl_close($ch); - return false; + $params = array( + 'currencyPair' => $pair, + 'minutesOrHour' => $minorhr, + 'type' => $type + ); + return $this->jsonGet($this->api_url.'/exchange/last_trades', $params); } - $result = json_decode($res); - if(!is_object($result) && !is_array($result)) { - $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); - debuglog("$exchange: $method failed ($status) $res"); + public function getOrderBook($pair, $group='false', $depth=10) + { + $params = array('currencyPair' => $pair, 'groupByPrice' => $group, 'depth' => $depth); + return $this->jsonGet($this->api_url.'/exchange/order_book', $params); } - curl_close($ch); + public function getAllOrderBook($group='false', $depth=10) + { + $params = array('groupByPrice' => $group, 'depth' => $depth); + return $this->jsonGet($this->api_url.'/exchange/all/order_book', $params); + } - return $result; -} + public function getMaxMin($pair=false) + { + $params = array(); + if ($pair) { + $params['currencyPair'] = $pair; + } -// untested yet + return $this->jsonGet($this->api_url.'/exchange/maxbid_minask', $params); + } -function livecoin_api_post($method, $params=NULL) -{ - require_once('/etc/yiimp/keys.php'); - if (!defined('EXCH_LIVECOIN_SECRET')) define('EXCH_LIVECOIN_SECRET', ''); - if (empty(EXCH_LIVECOIN_KEY) || empty(EXCH_LIVECOIN_SECRET)) return false; - $apikey = EXCH_LIVECOIN_KEY; + public function getRestrictions() + { + return $this->jsonGet($this->api_url.'/exchange/restrictions'); + } + + public function getCoinInfo() + { + return $this->jsonGet($this->api_url.'/info/coininfo'); + } - $exchange = "livecoin"; - $url = "https://api.livecoin.net/$method"; + // Private user data + public function getTrades($pair=false, $order='true', $limit=100, $offset=0) + { + $params = array( + 'orderDesc' => $order, + 'limit' => $limit, + 'offset' => $offset + ); + if ($pair) { + $params['currencyPair'] = $pair; + } - if (empty($params)) $params = array(); - ksort($params); - $postFields = http_build_query($params, '', '&'); - $signature = strtoupper(hash_hmac('sha256', $postFields, EXCH_LIVECOIN_SECRET)); + return $this->jsonAuth($this->api_url.'/exchange/trades', $params); + } - $headers = array( - 'Content-Type: application/json; charset=utf-8', - 'Api-key: '.$apikey, - 'Sign: '.$signature, - ); + public function getClientOrders($pair=false, $open='ALL', $from=false, $to=false, $start=0, $end=2147483646) + { + $params = array( + 'open' => $open, + 'start' => $start, + 'end' => $end + ); + if ($pair) { + $params['currencyPair'] = $pair; + } + if ($from) { + $params['issuedFrom'] = $from; + } + if ($to) { + $params['issuedTo'] = $to; + } - $ch = curl_init($url); + return $this->jsonAuth($this->api_url.'/exchange/client_orders', $params); + } - curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); - curl_setopt($ch, CURLOPT_POST, true); - curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields); - curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); - //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); - //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); - curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; YiiMP API PHP client; '.php_uname('s').'; PHP/'.phpversion().')'); - curl_setopt($ch, CURLOPT_ENCODING , ''); + public function getOrder($id) + { + $params = array('orderId' => $id); + return $this->jsonAuth($this->api_url.'/exchange/order', $params); + } - $res = curl_exec($ch); - if($res === false) + public function getBalances($currency=false) { - $e = curl_error($ch); - debuglog("$exchange: $e"); - curl_close($ch); - return false; + $params = array(); + if ($currency) { + $params['currency'] = $currency; + } + return $this->jsonAuth($this->api_url.'/payment/balances', $params); + } + + public function getTransactions($start, $end, $types='BUY,SELL,DEPOSIT,WITHDRAWAL', $limit=100, $offset=0) + { + $params = array( + 'start' => $start, + 'end' => $end, + 'types' => $types, + 'limit' => $limit, + 'offset' => $offset + ); + return $this->jsonAuth($this->api_url.'/payment/history/transactions', $params); + } + + + // Orders + public function buyLimit($pair, $price, $quantity) + { + $params = array( + 'currencyPair' => $pair, + 'price' => $price, + 'quantity' => $quantity + ); + return $this->jsonAuth($this->api_url.'/exchange/buylimit', $params, true); + } + + public function sellLimit($pair, $price, $quantity) + { + $params = array( + 'currencyPair' => $pair, + 'price' => $price, + 'quantity' => $quantity + ); + return $this->jsonAuth($this->api_url.'/exchange/selllimit', $params, true); } - $result = json_decode($res); - if(!is_object($result) && !is_array($result)) { - $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); - debuglog("$exchange: $method failed ($status) $res"); + public function cancelLimitOrder($pair, $id) + { + $params = array( + 'currencyPair' => $pair, + 'orderId' => $id + ); + return $this->jsonAuth($this->api_url.'/exchange/cancellimit', $params, true); } - curl_close($ch); + // Deposit and Withdrawal + public function getDepositAddress($symbol) { + $params = array('currency' => $symbol); + return $this->jsonAuth($this->api_url.'/payment/get/address', $params); + } + + public function withdrawCoin($amnt, $currency, $wallet) + { + $params = array( + 'amount' => $amnt, + 'currency' => $currency, + 'wallet' => $wallet + ); + return $this->jsonAuth($this->api_url.'/payment/out/coin', $params, true); + } +} - return $result; +// public api +// https://api.livecoin.net/exchange/ticker +function livecoin_api_query($method, $params='') +{ + $uri = "https://api.livecoin.net/$method"; + if (!empty($params)) + $uri .= "/$params"; + $ch = curl_init($uri); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); + $execResult = curl_exec($ch); + $obj = json_decode($execResult); + return $obj; } diff --git a/web/yaamp/core/trading/livecoin_trading.php b/web/yaamp/core/trading/livecoin_trading.php index d256861ee..920bf39be 100644 --- a/web/yaamp/core/trading/livecoin_trading.php +++ b/web/yaamp/core/trading/livecoin_trading.php @@ -1,30 +1,60 @@ cancelLimitOrder($pair, $id); + + if ($res->success == 'true') { + $db_order = getdbosql( + 'db_orders', + 'market=:market AND uuid=:uuid', + array(':market'=>'livecoin', ':uuid'=>$id) + ); + + if ($db_order) { + $db_order->delete(); + } + } +} + +function doLiveCoinTrading($quick = false) +{ + $exchange = 'livecoin'; + $updatebalances = true; - // https://www.livecoin.net/api/userdata#paymentbalances - $balances = livecoin_api_user('payment/balances'); + if (exchange_get($exchange, 'disabled')) { + return; + } - if(!$balances || !is_array($balances)) return; + $livecoin = new LiveCoinApi; $savebalance = getdbosql('db_balances', "name='$exchange'"); if (is_object($savebalance)) { $savebalance->balance = 0; $savebalance->save(); + } else { + dborun("INSERT INTO balances (name,balance) VALUES ('$exchange',0)"); + return; + } + + $balances = $livecoin->getBalances(); + if (!$balances || !is_array($balances)) { + return; } - foreach($balances as $balance) - { - if($balance->currency == 'BTC' && $balance->type == "available") { - if (!is_object($savebalance)) continue; + foreach ($balances as $balance) { + if ($balance->currency == 'BTC' && $balance->type == "available") { + if (!is_object($savebalance)) { + continue; + } $savebalance->balance = $balance->value; $savebalance->save(); continue; @@ -32,22 +62,237 @@ function doLivecoinTrading($quick=false) if ($updatebalances) { // store available balance in market table - $coins = getdbolist('db_coins', "symbol=:symbol OR symbol2=:symbol", + $coins = getdbolist( + 'db_coins', + 'symbol=:symbol OR symbol2=:symbol', array(':symbol'=>$balance->currency) ); - if (empty($coins)) continue; + + if (empty($coins)) { + continue; + } + foreach ($coins as $coin) { $market = getdbosql('db_markets', "coinid=:coinid AND name='$exchange'", array(':coinid'=>$coin->id)); - if (!$market) continue; - if ($balance->type == "available") - $market->balance = $balance->value; - elseif ($balance->type == "trade") - $market->ontrade = $balance->value; + + if (!$market) { + continue; + } + + $market->balance = arraySafeVal($balance, 'Available', 0.0); + $market->ontrade = arraySafeVal($balance, 'Balance') - $market->balance; $market->balancetime = time(); + $address = arraySafeVal($balance, 'CryptoAddress'); + if (!empty($address) && $market->deposit_address != $address) { + debuglog("$exchange: {$coin->symbol} deposit address updated"); + $market->deposit_address = $address; + } $market->save(); } } } - if (!YAAMP_ALLOW_EXCHANGE) return; + if (!YAAMP_ALLOW_EXCHANGE) { + return; + } + + $flushall = rand(0, 8) == 0; + if ($quick) { + $flushall = false; + } + + // upgrade orders + $coins = getdbolist('db_coins', "enable=1 AND IFNULL(dontsell,0)=0 AND id IN (SELECT DISTINCT coinid FROM markets WHERE name='livecoin')"); + foreach ($coins as $coin) { + if ($coin->dontsell || $coin->symbol == 'BTC') { + continue; + } + + $pair = $coin->symbol.'/BTC'; + sleep(1); + $orders = $livecoin->getClientOrders($pair, 'OPEN'); + + if (isset($orders->success) || !isset($orders->data)) { + continue; + } + + foreach ($orders->data as $order) { + $uuid = $order['id']; + $pair = $order['currencyPair']; + sleep(1); + $ticker = $livecoin->getTickerInfo($pair); + + if (!$ticker) { + continue; + } + + if ($order['price'] > $cancel_ask_pct*$ticker->best_ask || $flushall) { + sleep(1); + doLiveCoinCancelOrder($pair, $uuid, $livecoin); + } else { + $db_order = getdbosql( + 'db_orders', + 'market=:market AND uuid=:uuid', + array(':market'=>'livecoin', ':uuid'=>$uuid) + ); + + if ($db_order) { + continue; + } + + $db_order = new db_orders; + $db_order->market = 'livecoin'; + $db_order->coinid = $coin->id; + $db_order->amount = $order['quantity']; + $db_order->price = $order['price']; + $db_order->ask = $ticker['best_ask']; + $db_order->bid = $ticker['best_sell']; + $db_order->uuid = $uuid; + $db_order->created = time(); + $db_order->save(); + } + } + $list = getdbolist('db_orders', "coinid=$coin->id and market='livecoin'"); + foreach ($list as $db_order) { + $found = false; + foreach ($orders->data as $order) { + $uuid = $order['id']; + if ($uuid == $db_order->uuid) { + $found = true; + break; + } + } + if (!$found) { + debuglog("LiveCoin: Deleting order $coin->name $db_order->amount"); + $db_order->delete(); + } + } + } + sleep(2); + + /* Update balances and sell */ + $balances = $livecoin->getBalances(); + if (!$balances) { + return; + } + + foreach ($balances as $balance) { + if ($balance->type != 'total') { + continue; + } + + $amount = $balance->value; + $symbol = $balance->currency; + if (!$amount || $symbol == 'BTC') { + continue; + } + + $coin = getdbosql('db_coins', "symbol=:symbol", array(':symbol'=>$symbol)); + if (!$coin || $coin->dontsell) { + continue; + } + + $market2 = getdbosql('db_markets', "coinid={$coin->id} AND (name='bittrex' OR name='poloniex')"); + if ($market2) { + continue; + } + + $market = getdbosql('db_markets', "coinid=$coin->id and name='livecoin'"); + if ($market) { + $market->lasttraded = time(); + $market->save(); + } + + if ($amount*$coin->price < $min_btc_trade) { + continue; + } + + $pair = "$symbol/BTC"; + $maxprice = 0; + $maxamount = 0; + + sleep(1); + $orders = $livecoin->getOrderBook($pair); + + if (!empty($orders) && !empty($orders->bids)) { + foreach ($orders->bids as $order) { + if ($order[0] > $maxprice) { + $maxprice = $order[0]; + $maxamount = $order[1]; + } + } + } + + if ($amount >= $maxamount && $maxamount*$maxprice > $min_btc_trade) { + $sellprice = bitcoinvaluetoa($maxprice); + debuglog("LiveCoin: Selling market $pair, $maxamount, $sellprice"); + sleep(1); + + // This needs to be simplified. + // Make sure API methods return a value? + $res = $livecoin->sellLimit($pair, $sellprice, $maxamount); + if (!$res) { + debuglog('LiveCoin: Sell failed'); + } else { + $success = 'false'; + if (isset($res->success)) { + $success = $res->success; + } + if ($success == 'false') { + debuglog('LiveCoin: Sell failed'); + } else { + $amount -= $maxamount; + } + } + sleep(1); + } + + sleep(1); + $ticker = $livecoin->getTickerInfo($pair); + if (!$ticker) { + continue; + } + + $sellprice = bitcoinvaluetoa($ticker->best_ask); + + sleep(1); + $res = $livecoin->sellLimit($pair, $sellprice, $amount); + + if (!($res->success == 'true' && $res->added == 'true')) { + continue; + } + + $db_order = new db_orders; + $db_order->market = 'livecoin'; + $db_order->coinid = $coin->id; + $db_order->amount = $amount; + $db_order->price = $sellprice; + $db_order->ask = $ticker->best_ask; + $db_order->bid = $ticker->best_bid; + $db_order->uuid = $res->orderId; + $db_order->created = time(); + $db_order->save(); + } + + /* Withdrawals */ + $withdraw_min = exchange_get($exchange, 'withdraw_min_btc', EXCH_AUTO_WITHDRAW); + $withdraw_fee = exchange_get($exchange, 'withdraw_fee_btc', 0.0002); + if (floatval($withdraw_min) > 0 && $savebalance->balance >= ($withdraw_min + $withdraw_fee)) { + $amount = $savebalance->balance - $withdraw_fee; + debuglog("$exchange: withdraw $amount BTC to $btcaddr"); + sleep(1); + $res = $livecoin->withdrawCoin($amount, 'BTC', $btcaddr); + debuglog("$exchange: withdraw ".json_encode($res)); + if ($res) { + $withdraw = new db_withdraws; + $withdraw->market = 'livecoin'; + $withdraw->address = $btcaddr; + $withdraw->amount = $amount; + $withdraw->time = time(); + $withdraw->uuid = $res->id; + $withdraw->save(); + $savebalance->balance = 0; + $savebalance->save(); + } + } } diff --git a/web/yaamp/core/trading/trading.php b/web/yaamp/core/trading/trading.php index d5419036f..230d86b68 100644 --- a/web/yaamp/core/trading/trading.php +++ b/web/yaamp/core/trading/trading.php @@ -1,5 +1,4 @@ uuid); break; + case 'livecoin': + doLiveCoinCancelOrder($order->uuid); + break; + } } @@ -90,8 +93,8 @@ function runExchange($exchangeName=false) break; case 'livecoin': - doLivecoinTrading(true); - updateLivecoinMarkets(); + doLiveCoinTrading(true); + updateLiveCoinMarkets(); break; case 'nova': From 6b91caa27b4920c1cf65198bbbee3aaf7fd4a8bb Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Fri, 17 Mar 2017 17:48:11 +0100 Subject: [PATCH 059/434] backend: drop bench dups logs + balances workaround --- web/yaamp/core/backend/bench.php | 2 +- web/yaamp/core/backend/coins.php | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/web/yaamp/core/backend/bench.php b/web/yaamp/core/backend/bench.php index bbcb27f1b..9da1904e7 100644 --- a/web/yaamp/core/backend/bench.php +++ b/web/yaamp/core/backend/bench.php @@ -25,7 +25,7 @@ function BenchUpdateChips() array(':vid'=>$bench->vendorid, ':client'=>$bench->client, ':os'=>$bench->os, ':drv'=>$bench->driver,':thr'=>$bench->throughput,':uid'=>$bench->userid) ); if ($dups > 10) { - debuglog("bench: {$bench->device} ignored ($dups records already present)"); + //debuglog("bench: {$bench->device} ignored ($dups records already present)"); $bench->delete(); continue; } diff --git a/web/yaamp/core/backend/coins.php b/web/yaamp/core/backend/coins.php index 66d86790e..a221abc2c 100644 --- a/web/yaamp/core/backend/coins.php +++ b/web/yaamp/core/backend/coins.php @@ -240,6 +240,11 @@ function BackendCoinsUpdate() } $coin->save(); + + if ($coin->available < 0) { + // can happen after a payout (waiting first confirmation) + BackendUpdatePoolBalances($coin->id); + } // debuglog(" end $coin->name"); } From 94a52ef29691f7c0181746256affb4d0e901ab2d Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Fri, 24 Mar 2017 02:39:34 +0100 Subject: [PATCH 060/434] coinexchange public api/markets --- web/yaamp/core/backend/markets.php | 41 ++++++++++++++++++++++++ web/yaamp/core/backend/rawcoins.php | 17 +++++++++- web/yaamp/core/exchange/coinexchange.php | 38 ++++++++++++++++++++++ web/yaamp/core/exchange/exchange.php | 3 ++ 4 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 web/yaamp/core/exchange/coinexchange.php diff --git a/web/yaamp/core/backend/markets.php b/web/yaamp/core/backend/markets.php index 871e57da2..f5ae34dd6 100644 --- a/web/yaamp/core/backend/markets.php +++ b/web/yaamp/core/backend/markets.php @@ -23,6 +23,7 @@ function BackendPricesUpdate() updateJubiMarkets(); updateLiveCoinMarkets(); updateNovaMarkets(); + updateCoinExchangeMarkets(); updateShapeShiftMarkets(); updateOtherMarkets(); @@ -1087,6 +1088,46 @@ function updateLiveCoinMarkets() } } +function updateCoinExchangeMarkets() +{ + $exchange = 'coinexchange'; + if (exchange_get($exchange, 'disabled')) return; + + $list = coinexchange_api_query('getmarkets'); + if(!is_object($list)) return; + $markets = coinexchange_api_query('getmarketsummaries'); + if(!is_object($markets)) return; + foreach($list->result as $currency) + { + $symbol = objSafeVal($currency,'MarketAssetCode',''); + $exchid = objSafeVal($currency,'MarketAssetID',0); + if(empty($symbol) || !$exchid || $symbol == 'BTC') continue; + + $coin = getdbosql('db_coins', "symbol=:sym", array(':sym'=>$symbol)); + if(!$coin) continue; + + $market = getdbosql('db_markets', "coinid={$coin->id} AND name='$exchange'"); + if(!$market) continue; + + if($market->disabled < 9) $market->disabled = !$currency->Active; + + $market->save(); + + if($market->disabled || $market->deleted) continue; + + foreach ($markets->result as $m) { + if ($m->MarketID == $exchid) { + $price2 = ($m->BidPrice + $m->AskPrice)/2; + $market->price2 = AverageIncrement($market->price2, $price2); + $market->price = AverageIncrement($market->price, $m->BidPrice); + $market->pricetime = time(); + $market->save(); + //debuglog("$exchange: $symbol price set to ".bitcoinvaluetoa($market->price)); + } + } + } +} + // todo: store min/max txs limits function updateShapeShiftMarkets() { diff --git a/web/yaamp/core/backend/rawcoins.php b/web/yaamp/core/backend/rawcoins.php index bfb45bb04..7a80d2f7d 100644 --- a/web/yaamp/core/backend/rawcoins.php +++ b/web/yaamp/core/backend/rawcoins.php @@ -96,6 +96,21 @@ function updateRawcoins() } } + if (!exchange_get('coinexchange', 'disabled')) { + $list = coinexchange_api_query('getmarkets'); + if(isset($list->result) && !empty($list->result)) + { + dborun("UPDATE markets SET deleted=true WHERE name='coinexchange'"); + foreach($list->result as $item) { + if ($item->BaseCurrencyCode != 'BTC') + continue; + $symbol = $item->MarketAssetCode; + $label = objSafeVal($item, 'MarketAssetName'); + updateRawCoin('coinexchange', $symbol, $label); + } + } + } + if (!exchange_get('cryptopia', 'disabled')) { $list = cryptopia_api_query('GetMarkets'); if(isset($list->Data)) @@ -249,7 +264,7 @@ function updateRawCoin($marketname, $symbol, $name='unknown') } } - if ($marketname == 'nova' || $marketname == 'askcoin') { + if ($marketname == 'nova' || $marketname == 'askcoin' || $marketname == 'coinexchange') { // don't polute too much the db return; } diff --git a/web/yaamp/core/exchange/coinexchange.php b/web/yaamp/core/exchange/coinexchange.php new file mode 100644 index 000000000..5e289b563 --- /dev/null +++ b/web/yaamp/core/exchange/coinexchange.php @@ -0,0 +1,38 @@ + Date: Fri, 24 Mar 2017 07:01:20 +0100 Subject: [PATCH 061/434] coinexchange: fix wrong market id --- web/yaamp/core/backend/markets.php | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/web/yaamp/core/backend/markets.php b/web/yaamp/core/backend/markets.php index f5ae34dd6..7eb606e25 100644 --- a/web/yaamp/core/backend/markets.php +++ b/web/yaamp/core/backend/markets.php @@ -1032,7 +1032,6 @@ function updateLiveCoinMarkets() if (market_get($exchange, $coin->symbol, "disabled")) { $market->disabled = 1; - $market->deleted = 1; $market->message = 'disabled from settings'; $market->save(); continue; @@ -1055,7 +1054,6 @@ function updateLiveCoinMarkets() if (empty($coin->price2)) { $coin->price = $market->price; $coin->price2 = $market->price2; - //$coin->market = 'shapeshift'; $coin->save(); } @@ -1100,7 +1098,7 @@ function updateCoinExchangeMarkets() foreach($list->result as $currency) { $symbol = objSafeVal($currency,'MarketAssetCode',''); - $exchid = objSafeVal($currency,'MarketAssetID',0); + $exchid = objSafeVal($currency,'MarketID',0); if(empty($symbol) || !$exchid || $symbol == 'BTC') continue; $coin = getdbosql('db_coins', "symbol=:sym", array(':sym'=>$symbol)); @@ -1111,18 +1109,32 @@ function updateCoinExchangeMarkets() if($market->disabled < 9) $market->disabled = !$currency->Active; + if (market_get($exchange, $coin->symbol, "disabled")) { + $market->disabled = 1; + $market->message = 'disabled from settings'; + $market->save(); + continue; + } + $market->save(); if($market->disabled || $market->deleted) continue; foreach ($markets->result as $m) { if ($m->MarketID == $exchid) { - $price2 = ($m->BidPrice + $m->AskPrice)/2; + $price2 = ((double) $m->BidPrice + (double) $m->AskPrice)/2; $market->price2 = AverageIncrement($market->price2, $price2); - $market->price = AverageIncrement($market->price, $m->BidPrice); + $market->price = AverageIncrement($market->price, (double) $m->BidPrice); $market->pricetime = time(); + $market->marketid = $exchid; $market->save(); //debuglog("$exchange: $symbol price set to ".bitcoinvaluetoa($market->price)); + if (empty($coin->price2)) { + $coin->price = $market->price; + $coin->price2 = $market->price2; + $coin->save(); + } + break; } } } From b4bd34a6087a2cfc7f26de4162ea4059e8bba649 Mon Sep 17 00:00:00 2001 From: Tristian Date: Mon, 27 Mar 2017 19:02:31 -0400 Subject: [PATCH 062/434] Add 'sellonbid' for Livecoin (#99) * Add 'sellonbid' for Livecoin * Remove extraneous bracket * Upgrade Livecoin priority * Remove duplicate variable name --- web/yaamp/core/backend/markets.php | 2 +- web/yaamp/core/trading/livecoin_trading.php | 66 ++++++--------------- 2 files changed, 20 insertions(+), 48 deletions(-) diff --git a/web/yaamp/core/backend/markets.php b/web/yaamp/core/backend/markets.php index 7eb606e25..56ace4b3e 100644 --- a/web/yaamp/core/backend/markets.php +++ b/web/yaamp/core/backend/markets.php @@ -1045,7 +1045,7 @@ function updateLiveCoinMarkets() $market->price = AverageIncrement($market->price, $ticker->best_bid); $market->price2 = AverageIncrement($market->price2, $ticker->best_ask); $market->txfee = 0.2; - $market->priority = -1; // not ready for trading + $market->priority = 0; $market->pricetime = time(); if (floatval($ticker->volume) > 0.01) diff --git a/web/yaamp/core/trading/livecoin_trading.php b/web/yaamp/core/trading/livecoin_trading.php index 920bf39be..f3cfa14b7 100644 --- a/web/yaamp/core/trading/livecoin_trading.php +++ b/web/yaamp/core/trading/livecoin_trading.php @@ -101,6 +101,10 @@ function doLiveCoinTrading($quick = false) $flushall = false; } + $min_btc_trade = exchange_get($exchange, 'trade_min_btc', 0.0001); + $sell_ask_pct = exchange_get($exchange, 'trade_sell_ask_pct', 1.05); + $cancel_ask_pct = exchange_get($exchange, 'trade_cancel_ask_pct', 1.20); + // upgrade orders $coins = getdbolist('db_coins', "enable=1 AND IFNULL(dontsell,0)=0 AND id IN (SELECT DISTINCT coinid FROM markets WHERE name='livecoin')"); foreach ($coins as $coin) { @@ -177,13 +181,13 @@ function doLiveCoinTrading($quick = false) } foreach ($balances as $balance) { - if ($balance->type != 'total') { + if ($balance->type != 'available') { continue; } $amount = $balance->value; $symbol = $balance->currency; - if (!$amount || $symbol == 'BTC') { + if (!$balance || $symbol == 'BTC') { continue; } @@ -207,59 +211,27 @@ function doLiveCoinTrading($quick = false) continue; } + sleep(1); + $pair = "$symbol/BTC"; - $maxprice = 0; - $maxamount = 0; + $ticker = $livecoin->getTickerInfo($pair); - sleep(1); - $orders = $livecoin->getOrderBook($pair); + if(!isset($tickers[$pair])) continue; - if (!empty($orders) && !empty($orders->bids)) { - foreach ($orders->bids as $order) { - if ($order[0] > $maxprice) { - $maxprice = $order[0]; - $maxamount = $order[1]; - } - } - } + if($coin->sellonbid) + $sellprice = bitcoinvaluetoa($ticker->best_bid); + else + $sellprice = bitcoinvaluetoa($ticker->best_ask * $sell_ask_pct); - if ($amount >= $maxamount && $maxamount*$maxprice > $min_btc_trade) { - $sellprice = bitcoinvaluetoa($maxprice); - debuglog("LiveCoin: Selling market $pair, $maxamount, $sellprice"); + if ($amount*$sellprice > $min_btc_trade) { + debuglog("LiveCoin: Selling market $pair, $sellprice, $sellprice"); sleep(1); - // This needs to be simplified. - // Make sure API methods return a value? - $res = $livecoin->sellLimit($pair, $sellprice, $maxamount); - if (!$res) { + $res = $livecoin->sellLimit($pair, $sellprice, $amount); + if (!$res->success == 'true' && $res->added == 'true') { debuglog('LiveCoin: Sell failed'); - } else { - $success = 'false'; - if (isset($res->success)) { - $success = $res->success; - } - if ($success == 'false') { - debuglog('LiveCoin: Sell failed'); - } else { - $amount -= $maxamount; - } + continue; } - sleep(1); - } - - sleep(1); - $ticker = $livecoin->getTickerInfo($pair); - if (!$ticker) { - continue; - } - - $sellprice = bitcoinvaluetoa($ticker->best_ask); - - sleep(1); - $res = $livecoin->sellLimit($pair, $sellprice, $amount); - - if (!($res->success == 'true' && $res->added == 'true')) { - continue; } $db_order = new db_orders; From 2cb4161c3e3cc6707880df742bf0120f5cb74156 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 30 Mar 2017 06:55:15 +0200 Subject: [PATCH 063/434] coindb: grab coinexchange currency icons --- web/yaamp/commands/CoindbCommand.php | 37 ++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/web/yaamp/commands/CoindbCommand.php b/web/yaamp/commands/CoindbCommand.php index 6ddfccad9..af4072dfa 100644 --- a/web/yaamp/commands/CoindbCommand.php +++ b/web/yaamp/commands/CoindbCommand.php @@ -53,6 +53,7 @@ public function run($args) $nbUpdated = $this->grabBterIcons(); $nbUpdated += $this->grabCcexIcons(); $nbUpdated += $this->grabCryptopiaIcons(); + $nbUpdated += $this->grabCoinExchangeIcons(); $nbUpdated += $this->grabAlcurexIcons(); $nbUpdated += $this->grabNovaIcons(); @@ -365,6 +366,42 @@ public function grabCryptopiaIcons() return $nbUpdated; } + /** + * Icon grabber - CoinExchange + */ + public function grabCoinExchangeIcons() + { + $url = 'https://www.coinexchange.io/assets/currencies/'; + $nbUpdated = 0; + $sql = "SELECT DISTINCT coins.id FROM coins INNER JOIN markets M ON M.coinid = coins.id ". + "WHERE M.name='coinexchange' AND IFNULL(coins.image,'') = ''"; + $coins = dbolist($sql); + if (empty($coins)) + return 0; + echo "coinexchange: try to download new icons...\n"; + foreach ($coins as $coin) { + $coin = getdbo('db_coins', $coin["id"]); + $symbol = $coin->symbol; + if (!empty($coin->symbol2)) $symbol = $coin->symbol2; + $local = $this->basePath."/images/coin-{$symbol}.png"; + try { + $data = @ file_get_contents($url.strtolower($coin->name).'.png'); + } catch (Exception $e) { + continue; + } + if (strlen($data) < 2048) continue; + echo $symbol." icon found\n"; + file_put_contents($local, $data); + if (filesize($local) > 0) { + $coin->image = "/images/coin-{$symbol}.png"; + $nbUpdated += $coin->save(); + } + } + if ($nbUpdated) + echo "$nbUpdated icons downloaded from coinexchange\n"; + return $nbUpdated; + } + /** * Icon grabber - Alcurex */ From 69f11b6aba096db65c9de5df8d36143bd8995042 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 30 Mar 2017 07:08:00 +0200 Subject: [PATCH 064/434] yiimp graphes command to fill graphes holes (console) implement 2 manual jobs for outage maintenance, to reduce user confusion could happen when the cron job contains php errors or mysql is down... mmf --- web/yaamp/commands/GraphesCommand.php | 128 ++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 web/yaamp/commands/GraphesCommand.php diff --git a/web/yaamp/commands/GraphesCommand.php b/web/yaamp/commands/GraphesCommand.php new file mode 100644 index 000000000..2d7672f45 --- /dev/null +++ b/web/yaamp/commands/GraphesCommand.php @@ -0,0 +1,128 @@ +getCommandRunner(); + $commands=$runner->commands; + + $root = realpath(Yii::app()->getBasePath().DIRECTORY_SEPARATOR.'..'); + $this->basePath = str_replace(DIRECTORY_SEPARATOR, '/', $root); + + $symbol = arraySafeVal($args, 0); + + if (!isset($args[0]) || $args[0] == 'help') { + + echo "Yiimp graphes command\n"; + echo "Usage: yiimp graphes hashrate [algo] - find holes in hashrate graphes\n"; + echo " yiimp graphes balances [coin] - find holes in user balances graphes\n"; + + } else if ($args[0] == 'hashrate') { + $algos = yaamp_get_algos(); + foreach ($algos as $algo) { + $algo = arraySafeVal($args,1,$algo); + $added = $this->checkAndFillPoolHashrateHoles($algo); + while ($added > 0) $added = $this->checkAndFillPoolHashrateHoles($algo); + } + } else if ($args[0] == 'balances') { + $symbol = arraySafeVal($args,1,'DCR'); + $added = $this->checkAndFillUserBalanceHoles($symbol); + while ($added > 0) $added = $this->checkAndFillUserBalanceHoles($symbol); + } + } + + public function getHelp() + { + return $this->run(array('help')); + } + + //////////////////////////////////////////////////////////////////////////////////// + + /** + * Fill empty data in db_hashrate + */ + public function checkAndFillPoolHashrateHoles($algo) + { + $stats = new db_hashrate; + + if (!$stats instanceof CActiveRecord) + return; + + $t2 = 0; $added = 0; + $since = time() - 24 * 3600; + + $data = $stats->findAll(array('condition'=>"time>=$since AND algo=:algo", 'order'=>'time ASC', 'params'=>array(':algo'=>$algo))); + foreach ($data as $row) { + $t = (int) $row['time']; + $d = $t - $t2; + if (!$t2) $d = 0; + $h = strftime('%H:%M', $t); + if ($d && $d != 900) { + $h0 = strftime('%H:%M', $t2); + echo "hole detected between $h0 and $h ($t)\n"; + $fill = new db_hashrate; + $fill->isNewRecord = true; + $fill->time = $t2 + 900; + $fill->hashrate = ($last_row->hashrate + $row->hashrate) / 2; + $fill->price = ($last_row->price + $row->price) / 2; + $fill->rent = ($last_row->rent + $row->rent) / 2; + $fill->difficulty = ($last_row->difficulty + $row->difficulty) / 2; + $fill->algo = $algo; + //$fill->earnings = ...; + $added += $fill->save(); + } + $t2 = $t; + $last_row = clone($row); + } + echo count($data)." records for $algo ($added added)\n"; + return $added; + } + + /** + * Fill empty data in db_balanceuser + */ + public function checkAndFillUserBalanceHoles($symbol) + { + $t2 = 0; $added = 0; $last_row = array(); + $since = time() - 24 * 3600; + + $coin = getdbosql('db_coins', "symbol=:symbol", array(':symbol'=>$symbol)); + if (!$coin) return 0; + + $data = dbolist('SELECT B.userid, B.time, B.balance, B.pending, A.username'. + ' FROM balanceuser B INNER JOIN accounts A on A.id = B.userid'. + ' WHERE A.coinid=:coinid AND A.last_earning>:since ORDER BY B.userid, B.time', + array(':coinid'=>$coin->id,':since'=>$since)); + foreach ($data as $row) { + $t = (int) $row['time']; + $d = $t - $t2; + if (!$t2 || $last_row['userid'] != $row['userid']) $d = 0; + $h = strftime('%H:%M', $t); + if ($d && $d != 900 && ($row['pending'] + $row['balance']) > 0) { + $h0 = strftime('%H:%M', $t2); + echo $row['username'].": hole detected between $h0 and $h ($t)\n"; + $fill = new db_balanceuser; + $fill->isNewRecord = true; + $fill->time = $t2 + 900; + $fill->userid = $row['userid']; + $fill->balance = $last_row['balance']; + $fill->pending = $last_row['pending']; + $added += $fill->save(); + } + $t2 = $t; + $last_row = array_merge($row); + } + echo count($data)." records for {$coin->symbol} ($added added)\n"; + return $added; + } +} From 527a9c8142a3e6d5bc1ad72429c05bb875d66635 Mon Sep 17 00:00:00 2001 From: Tristian Date: Thu, 30 Mar 2017 01:12:48 -0400 Subject: [PATCH 065/434] Fix some LiveCoin error checking (#100) * Fix some LiveCoin error checking * Correct LiveCoin withdrawl fee * Fix typo in LiveCoin trading call * Log returned data not address (fixed) --- web/yaamp/core/backend/markets.php | 16 +++++++--------- web/yaamp/core/trading/livecoin_trading.php | 9 ++++++--- web/yaamp/modules/thread/CronjobController.php | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/web/yaamp/core/backend/markets.php b/web/yaamp/core/backend/markets.php index 56ace4b3e..9858b6cb0 100644 --- a/web/yaamp/core/backend/markets.php +++ b/web/yaamp/core/backend/markets.php @@ -1067,16 +1067,14 @@ function updateLiveCoinMarkets() $data = $livecoin->getDepositAddress($coin->symbol); if(!empty($data) && objSafeVal($data, 'wallet', '') != '') { $addr = arraySafeVal($data, 'wallet'); - if (!empty($addr) && $addr != $market->deposit_address) { - if (strpos($addr, 'Error') !== false) - $market->message = $addr; - else { - $market->deposit_address = $addr; - // delimiter "::" for memo / payment id - $market->message = null; - debuglog("$exchange: deposit address for {$coin->symbol} updated"); - } + if (!empty($addr)) { + $market->deposit_address = $addr; + // delimiter "::" for memo / payment id + $market->message = null; + debuglog("$exchange: deposit address for {$coin->symbol} updated"); $market->save(); + } else { + debuglog("$exchange: Failed to update deposit address, ".json_decode($data)); } } } diff --git a/web/yaamp/core/trading/livecoin_trading.php b/web/yaamp/core/trading/livecoin_trading.php index f3cfa14b7..01df0d475 100644 --- a/web/yaamp/core/trading/livecoin_trading.php +++ b/web/yaamp/core/trading/livecoin_trading.php @@ -228,7 +228,7 @@ function doLiveCoinTrading($quick = false) sleep(1); $res = $livecoin->sellLimit($pair, $sellprice, $amount); - if (!$res->success == 'true' && $res->added == 'true') { + if (!($res->success === TRUE && $res->added === TRUE)) { debuglog('LiveCoin: Sell failed'); continue; } @@ -247,15 +247,16 @@ function doLiveCoinTrading($quick = false) } /* Withdrawals */ + $btcaddr = YAAMP_BTCADDRESS; $withdraw_min = exchange_get($exchange, 'withdraw_min_btc', EXCH_AUTO_WITHDRAW); - $withdraw_fee = exchange_get($exchange, 'withdraw_fee_btc', 0.0002); + $withdraw_fee = exchange_get($exchange, 'withdraw_fee_btc', 0.0005); if (floatval($withdraw_min) > 0 && $savebalance->balance >= ($withdraw_min + $withdraw_fee)) { $amount = $savebalance->balance - $withdraw_fee; debuglog("$exchange: withdraw $amount BTC to $btcaddr"); sleep(1); $res = $livecoin->withdrawCoin($amount, 'BTC', $btcaddr); debuglog("$exchange: withdraw ".json_encode($res)); - if ($res) { + if (!$res->fault) { $withdraw = new db_withdraws; $withdraw->market = 'livecoin'; $withdraw->address = $btcaddr; @@ -265,6 +266,8 @@ function doLiveCoinTrading($quick = false) $withdraw->save(); $savebalance->balance = 0; $savebalance->save(); + } else { + debuglog("$exchange: Withdraw Failed ".json_encode($res)); } } } diff --git a/web/yaamp/modules/thread/CronjobController.php b/web/yaamp/modules/thread/CronjobController.php index 362c97e99..68fdcf798 100644 --- a/web/yaamp/modules/thread/CronjobController.php +++ b/web/yaamp/modules/thread/CronjobController.php @@ -135,7 +135,7 @@ public function actionRun() doBittrexTrading(); doCryptopiaTrading(); doKrakenTrading(); - doLivecoinTrading(); + doLiveCoinTrading(); doPoloniexTrading(); break; From 8904272d28dd2858d4e23a183ec3ca16f464cef5 Mon Sep 17 00:00:00 2001 From: Tristian Date: Fri, 31 Mar 2017 09:38:42 -0400 Subject: [PATCH 066/434] More livecoin trading commits (squashed) * Fix LiveCoin never trades * livecoin: json_decode handles booleans, compare as so * livecoin: Remove redundant checks * livecoin: Improve error handling Fix: LiveCoin orders not being removed * livecoin: remove redundant API call * Fix LiveCoin balance updates * use array() --- web/yaamp/core/trading/livecoin_trading.php | 56 ++++++++++----------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/web/yaamp/core/trading/livecoin_trading.php b/web/yaamp/core/trading/livecoin_trading.php index 01df0d475..a014fdd37 100644 --- a/web/yaamp/core/trading/livecoin_trading.php +++ b/web/yaamp/core/trading/livecoin_trading.php @@ -12,7 +12,7 @@ function doLiveCoinCancelOrder($pair = false, $id = false, $live = false) $res = $livecoin->cancelLimitOrder($pair, $id); - if ($res->success == 'true') { + if ($res->success === TRUE) { $db_order = getdbosql( 'db_orders', 'market=:market AND uuid=:uuid', @@ -79,15 +79,16 @@ function doLiveCoinTrading($quick = false) continue; } - $market->balance = arraySafeVal($balance, 'Available', 0.0); - $market->ontrade = arraySafeVal($balance, 'Balance') - $market->balance; - $market->balancetime = time(); - $address = arraySafeVal($balance, 'CryptoAddress'); - if (!empty($address) && $market->deposit_address != $address) { - debuglog("$exchange: {$coin->symbol} deposit address updated"); - $market->deposit_address = $address; + if ($balance->type == 'available') { + $market->balance = arraySafeVal($balance, 'value', 0.0); + $market->balancetime = time(); + $market->save(); + } elseif ($balance->type == 'trade') { + $market->ontrade = arraySafeVal($balance, 'value', 0.0); + $market->balancetime = time(); + $market->save(); } - $market->save(); + } } } @@ -116,21 +117,23 @@ function doLiveCoinTrading($quick = false) sleep(1); $orders = $livecoin->getClientOrders($pair, 'OPEN'); - if (isset($orders->success) || !isset($orders->data)) { - continue; + if (isset($orders->data)) { + $order_data = $orders->data; + } else { + $order_data = array(); } - foreach ($orders->data as $order) { - $uuid = $order['id']; - $pair = $order['currencyPair']; + foreach ($order_data as $order) { + $uuid = $order->id; + $pair = $order->currencyPair; sleep(1); $ticker = $livecoin->getTickerInfo($pair); - if (!$ticker) { + if (!is_object($ticker) || !$order->price) { continue; } - if ($order['price'] > $cancel_ask_pct*$ticker->best_ask || $flushall) { + if ($order->price > $cancel_ask_pct*$ticker->best_ask || $flushall) { sleep(1); doLiveCoinCancelOrder($pair, $uuid, $livecoin); } else { @@ -147,10 +150,10 @@ function doLiveCoinTrading($quick = false) $db_order = new db_orders; $db_order->market = 'livecoin'; $db_order->coinid = $coin->id; - $db_order->amount = $order['quantity']; - $db_order->price = $order['price']; - $db_order->ask = $ticker['best_ask']; - $db_order->bid = $ticker['best_sell']; + $db_order->amount = $order->quantity; + $db_order->price = $order->price; + $db_order->ask = $ticker->best_ask; + $db_order->bid = $ticker->best_sell; $db_order->uuid = $uuid; $db_order->created = time(); $db_order->save(); @@ -159,8 +162,8 @@ function doLiveCoinTrading($quick = false) $list = getdbolist('db_orders', "coinid=$coin->id and market='livecoin'"); foreach ($list as $db_order) { $found = false; - foreach ($orders->data as $order) { - $uuid = $order['id']; + foreach ($order_data as $order) { + $uuid = $order->id; if ($uuid == $db_order->uuid) { $found = true; break; @@ -175,7 +178,6 @@ function doLiveCoinTrading($quick = false) sleep(2); /* Update balances and sell */ - $balances = $livecoin->getBalances(); if (!$balances) { return; } @@ -187,7 +189,7 @@ function doLiveCoinTrading($quick = false) $amount = $balance->value; $symbol = $balance->currency; - if (!$balance || $symbol == 'BTC') { + if ($symbol == 'BTC') { continue; } @@ -215,9 +217,7 @@ function doLiveCoinTrading($quick = false) $pair = "$symbol/BTC"; $ticker = $livecoin->getTickerInfo($pair); - - if(!isset($tickers[$pair])) continue; - + if(!(isset($ticker->best_bid) && isset($ticker->best_ask))) continue; if($coin->sellonbid) $sellprice = bitcoinvaluetoa($ticker->best_bid); else @@ -256,7 +256,7 @@ function doLiveCoinTrading($quick = false) sleep(1); $res = $livecoin->withdrawCoin($amount, 'BTC', $btcaddr); debuglog("$exchange: withdraw ".json_encode($res)); - if (!$res->fault) { + if (is_object($res)) { $withdraw = new db_withdraws; $withdraw->market = 'livecoin'; $withdraw->address = $btcaddr; From 9cff83ff4940d580a95c320f5273346116b0ea6b Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Fri, 31 Mar 2017 03:35:12 +0200 Subject: [PATCH 067/434] sql: add unique index to prevent double inserts --- sql/2017-03-31-earnings_index.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sql/2017-03-31-earnings_index.sql diff --git a/sql/2017-03-31-earnings_index.sql b/sql/2017-03-31-earnings_index.sql new file mode 100644 index 000000000..b2a0b4e0b --- /dev/null +++ b/sql/2017-03-31-earnings_index.sql @@ -0,0 +1,5 @@ +-- Recent additions to add after db init (.gz) +-- mysql yaamp -p < file.sql + +ALTER TABLE `earnings` ADD UNIQUE INDEX `ndx_user_block`(`userid`, `blockid`); + From 10d72b8c227ff6ddc049fb0360757ed917cb1797 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sat, 1 Apr 2017 23:53:42 +0200 Subject: [PATCH 068/434] decred: double check user addresses in failed payments --- web/yaamp/core/backend/payment.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/web/yaamp/core/backend/payment.php b/web/yaamp/core/backend/payment.php index f636ed875..f30e9a152 100644 --- a/web/yaamp/core/backend/payment.php +++ b/web/yaamp/core/backend/payment.php @@ -234,7 +234,15 @@ function BackendCoinPayments($coin) } if ($amount_failed > 0.0) { debuglog("Found failed payment(s) for {$user->username}, $amount_failed {$coin->symbol}!"); - + if ($coin->rpcencoding == 'DCR') { + $data = $remote->validateaddress($user->username); + if (!$data['isvalid']) { + debuglog("Found bad address {$user->username}!! ($amount_failed {$coin->symbol})"); + $user->is_locked = 1; + $user->save(); + continue; + } + } $payout = new db_payouts; $payout->account_id = $user->id; $payout->time = time(); From fd780ed27bd1e1eece85d4cf112e4588b2b68dcf Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sat, 8 Apr 2017 06:20:13 +0200 Subject: [PATCH 069/434] backend: disable coinexchange by default detected an attempt to hack prices this night and dont have private apis --- web/yaamp/core/backend/coins.php | 8 ++++++-- web/yaamp/core/backend/markets.php | 1 + web/yaamp/core/backend/rawcoins.php | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/web/yaamp/core/backend/coins.php b/web/yaamp/core/backend/coins.php index a221abc2c..3ac001bdf 100644 --- a/web/yaamp/core/backend/coins.php +++ b/web/yaamp/core/backend/coins.php @@ -20,6 +20,8 @@ function string_to_hashrate($s) function BackendCoinsUpdate() { + $debug = false; + // debuglog(__FUNCTION__); $t1 = microtime(true); @@ -48,6 +50,8 @@ function BackendCoinsUpdate() continue; } + if ($debug) echo "{$coin->symbol}\n"; + // debuglog($info); $coin->enable = true; @@ -221,7 +225,7 @@ function BackendCoinsUpdate() if($coin->block_height != $info['blocks']) { $count = $info['blocks'] - $coin->block_height; - $ttf = (time() - $coin->last_network_found) / $count; + $ttf = $count > 0 ? (time() - $coin->last_network_found) / $count : 0; if(empty($coin->actual_ttf)) $coin->actual_ttf = $ttf; @@ -241,7 +245,7 @@ function BackendCoinsUpdate() $coin->save(); - if ($coin->available < 0) { + if ($coin->available < 0 || $coin->cleared > $coin->balance) { // can happen after a payout (waiting first confirmation) BackendUpdatePoolBalances($coin->id); } diff --git a/web/yaamp/core/backend/markets.php b/web/yaamp/core/backend/markets.php index 9858b6cb0..1fb040f6c 100644 --- a/web/yaamp/core/backend/markets.php +++ b/web/yaamp/core/backend/markets.php @@ -1125,6 +1125,7 @@ function updateCoinExchangeMarkets() $market->price = AverageIncrement($market->price, (double) $m->BidPrice); $market->pricetime = time(); $market->marketid = $exchid; + $market->priority = -1; // not ready for trading $market->save(); //debuglog("$exchange: $symbol price set to ".bitcoinvaluetoa($market->price)); if (empty($coin->price2)) { diff --git a/web/yaamp/core/backend/rawcoins.php b/web/yaamp/core/backend/rawcoins.php index 7a80d2f7d..ec655c183 100644 --- a/web/yaamp/core/backend/rawcoins.php +++ b/web/yaamp/core/backend/rawcoins.php @@ -5,6 +5,7 @@ function updateRawcoins() // debuglog(__FUNCTION__); exchange_set_default('empoex', 'disabled', true); + exchange_set_default('coinexchange', 'disabled', true); settings_prefetch_all(); From a4d9326e9d1f77d7c4a0ae39605315532421f588 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 13 Apr 2017 17:33:14 +0200 Subject: [PATCH 070/434] wallet: reduce default limit to list txs 2500 seems too much... for decred at least --- web/yaamp/modules/site/coin.php | 2 +- web/yaamp/modules/site/coin_results.php | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/web/yaamp/modules/site/coin.php b/web/yaamp/modules/site/coin.php index 17346def7..a860d6b53 100644 --- a/web/yaamp/modules/site/coin.php +++ b/web/yaamp/modules/site/coin.php @@ -20,7 +20,7 @@ echo getAdminSideBarLinks().'

    '; echo getAdminWalletLinks($coin, $info, 'wallet'); -$maxrows = arraySafeVal($_REQUEST,'rows', 200); +$maxrows = arraySafeVal($_REQUEST,'rows', 500); $since = arraySafeVal($_REQUEST,'since', time() - (7*24*3600)); // one week echo '
    '; diff --git a/web/yaamp/modules/site/coin_results.php b/web/yaamp/modules/site/coin_results.php index f1f3f0841..902acf84a 100644 --- a/web/yaamp/modules/site/coin_results.php +++ b/web/yaamp/modules/site/coin_results.php @@ -274,7 +274,8 @@ // last week $list_since = arraySafeVal($_GET,'since',time()-(7*24*3600)); -$maxrows = arraySafeVal($_GET,'rows', 200); +$maxrows = (int) arraySafeVal($_GET,'rows', 500); +$maxrows = max($maxrows, 250); $maxrows = min($maxrows, 2500); echo <<master_wallet; -$txs = $remote->listtransactions($account, 2500); +$txs = $remote->listtransactions($account, $maxrows); if (empty($txs)) { if (!empty($remote->error)) { @@ -314,7 +315,7 @@ // to hide truncated days sums $tx = reset($txs); - if (count($txs) == 2500 && isset($tx['time'])) + if (count($txs) == $maxrows && isset($tx['time'])) $lastday = strftime('%F', $tx['time']); if (!empty($txs)) foreach($txs as $tx) @@ -391,7 +392,7 @@ $prev_tx = $tx; } // for truncated day sums - if ($lastday == '' && count($txs) == 2500) + if ($lastday == '' && count($txs) == $maxrows) $lastday = strftime('%F', $tx['time']); } ksort($txs_array); // reversed order From 4697637adf6b45ea07ae2cef751371958fe7082c Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sun, 16 Apr 2017 11:20:46 +0200 Subject: [PATCH 071/434] user wallet: add a note about minimal payouts (if set) --- .../modules/site/results/wallet_results.php | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/web/yaamp/modules/site/results/wallet_results.php b/web/yaamp/modules/site/results/wallet_results.php index ebbeba03e..99c487866 100644 --- a/web/yaamp/modules/site/results/wallet_results.php +++ b/web/yaamp/modules/site/results/wallet_results.php @@ -211,15 +211,24 @@ function WriteBoxHeader($title) echo "
    "; -$usd = number_format($mining->usdbtc, 2, '.', ' '); -echo "

    -  * approximate from current exchange rates
    -  ** bitstamp $usd USD/BTC -

    "; +echo '

    '; +echo '* approximate from current exchange rates
    '; +if ($refcoin->symbol == 'BTC') { + $usd = number_format($mining->usdbtc, 2, '.', ' '); + echo '** bitstamp $usd USD/BTC'; +} +echo '

    '; -echo "
    "; +if ($refcoin->payout_min) { + echo '

    '; + echo 'Note: Minimum payout for this wallet is '.($refcoin->payout_min).' '.$refcoin->symbol; + echo '

    '; +} + +echo '
    '; -WriteBoxHeader("Last 24 Hours Payouts: $user->username"); +$header = "Last 24 Hours Payouts: ".$user->username; +WriteBoxHeader($header); $t = time()-24*60*60; $list = getdbolist('db_payouts', "account_id={$user->id} AND time>$t ORDER BY time DESC"); From e0e30c92d4d2504fe342af2a62aa4f30004f5937 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Tue, 18 Apr 2017 19:36:11 +0200 Subject: [PATCH 072/434] stratum: handle new sibcoin masternodes --- stratum/coinbase.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stratum/coinbase.cpp b/stratum/coinbase.cpp index 08f7243b6..d81a6aacd 100644 --- a/stratum/coinbase.cpp +++ b/stratum/coinbase.cpp @@ -203,7 +203,8 @@ void coinbase_create(YAAMP_COIND *coind, YAAMP_JOB_TEMPLATE *templ, json_value * } } - if(strcmp(coind->symbol, "DASH") == 0 || strcmp(coind->symbol, "DASH-TESTNET") == 0) // Dash 12.1 + if(strcmp(coind->symbol, "SIB") == 0 || + strcmp(coind->symbol, "DASH") == 0 || strcmp(coind->symbol, "DASH-TESTNET") == 0) // Dash 12.1 { char script_dests[2048] = { 0 }; char script_payee[128] = { 0 }; From 440bdafacc3a226730437f23f87429316393dcc7 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Fri, 21 Apr 2017 11:28:44 +0200 Subject: [PATCH 073/434] admin: allow to toggle web console --- web/serverconfig.sample.php | 1 + web/yaamp/core/functions/admin.php | 3 ++- web/yaamp/defaultconfig.php | 2 ++ web/yaamp/modules/site/SiteController.php | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/web/serverconfig.sample.php b/web/serverconfig.sample.php index bd0ded8c4..43b25f3c8 100644 --- a/web/serverconfig.sample.php +++ b/web/serverconfig.sample.php @@ -34,6 +34,7 @@ define('YAAMP_SITE_NAME', 'YiiMP'); define('YAAMP_ADMIN_EMAIL', 'yiimp@spam.la'); define('YAAMP_ADMIN_IP', '127.0.0.1,80.236.118.26'); +define('YAAMP_ADMIN_WEBCONSOLE', true); define('YAAMP_NOTIFY_NEW_COINS', true); define('YAAMP_USE_NGINX', false); diff --git a/web/yaamp/core/functions/admin.php b/web/yaamp/core/functions/admin.php index d102aaff5..8113e5a27 100644 --- a/web/yaamp/core/functions/admin.php +++ b/web/yaamp/core/functions/admin.php @@ -23,7 +23,8 @@ function getAdminWalletLinks($coin, $info=NULL, $src='wallet') if($info) { $html .= ' || '.$coin->createExplorerLink("EXPLORER"); $html .= ' || '.CHtml::link("PEERS", '/site/peers?id='.$coin->id); - $html .= ' || '.CHtml::link("CONSOLE", '/site/console?id='.$coin->id); + if (YAAMP_ADMIN_WEBCONSOLE) + $html .= ' || '.CHtml::link("CONSOLE", '/site/console?id='.$coin->id); $html .= ' || '.CHtml::link("TRIGGERS", '/site/triggers?id='.$coin->id); if ($src != 'wallet') $html .= ' || '.CHtml::link("{$coin->symbol}", '/site/coin?id='.$coin->id); diff --git a/web/yaamp/defaultconfig.php b/web/yaamp/defaultconfig.php index 4187003c9..953d51eb8 100644 --- a/web/yaamp/defaultconfig.php +++ b/web/yaamp/defaultconfig.php @@ -45,6 +45,8 @@ if (!defined('YAAMP_DEFAULT_ALGO')) define('YAAMP_DEFAULT_ALGO', 'x11'); if (!defined('YAAMP_ADMIN_EMAIL')) define('YAAMP_ADMIN_EMAIL', 'yiimp@spam.la'); if (!defined('YAAMP_ADMIN_IP')) define('YAAMP_ADMIN_IP', '127.0.0.1'); +if (!defined('YAAMP_ADMIN_WEBCONSOLE')) define('YAAMP_ADMIN_WEBCONSOLE', true); + if (!defined('YAAMP_NOTIFY_NEW_COINS')) define('YAAMP_NOTIFY_NEW_COINS', true); if (!defined('YAAMP_LIMIT_ESTIMATE')) define('YAAMP_LIMIT_ESTIMATE', false); diff --git a/web/yaamp/modules/site/SiteController.php b/web/yaamp/modules/site/SiteController.php index 1bb02ec3e..af77e0ee6 100644 --- a/web/yaamp/modules/site/SiteController.php +++ b/web/yaamp/modules/site/SiteController.php @@ -263,7 +263,7 @@ public function actionBookmarkSend() public function actionConsole() { - if(!$this->admin) return; + if(!$this->admin || !YAAMP_ADMIN_WEBCONSOLE) return; $coin = getdbo('db_coins', getiparam('id')); if (!$coin) { $this->goback(); From 8cbc8bf5f9d283e0e264daa51676a38205e5c605 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Fri, 21 Apr 2017 12:12:15 +0200 Subject: [PATCH 074/434] admin: double check the ip filter for admins --- web/yaamp/modules/common/CommonController.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/web/yaamp/modules/common/CommonController.php b/web/yaamp/modules/common/CommonController.php index 7ac76e5ee..2d0a5eb6a 100644 --- a/web/yaamp/modules/common/CommonController.php +++ b/web/yaamp/modules/common/CommonController.php @@ -22,8 +22,15 @@ protected function beforeAction($action) $this->memcache = new YaampMemcache; $this->t1 = microtime(true); - if(user()->getState('yaamp_admin')) + if(user()->getState('yaamp_admin')) { $this->admin = true; + $client_ip = arraySafeVal($_SERVER,'REMOTE_ADDR'); + if (!in_array($client_ip, explode(',',YAAMP_ADMIN_IP), true)) { + user()->setState('yaamp_admin', false); + debuglog("admin attempt from $client_ip"); + $this->admin = false; + } + } $algo = user()->getState('yaamp-algo'); if(!$algo) user()->setState('yaamp-algo', YAAMP_DEFAULT_ALGO); From 9322d7e1bccaa7616139b46dd20582f18e359a0e Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Fri, 21 Apr 2017 17:57:47 +0200 Subject: [PATCH 075/434] markets: increase validity-check of json ticker results --- web/yaamp/core/backend/markets.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/web/yaamp/core/backend/markets.php b/web/yaamp/core/backend/markets.php index 1fb040f6c..270b6d2a0 100644 --- a/web/yaamp/core/backend/markets.php +++ b/web/yaamp/core/backend/markets.php @@ -652,7 +652,11 @@ function updateYobitMarkets() $pair = strtolower($coin->symbol).'_btc'; $ticker = yobit_api_query("ticker/$pair"); - if(!$ticker) continue; + if(!$ticker || objSafeVal($ticker,$pair) === NULL) continue; + if(objSafeVal($ticker->$pair,'buy') === NULL) { + debuglog("$exchange: invalid data received for $pair ticker"); + continue; + } $price2 = ($ticker->$pair->buy + $ticker->$pair->sell) / 2; $market->price2 = AverageIncrement($market->price2, $price2); @@ -707,7 +711,11 @@ function updateJubiMarkets() $lowsymbol = strtolower($coin->symbol); $ticker = jubi_api_query('ticker', "?coin=".$lowsymbol); - if(!is_object($ticker)) continue; + if(!$ticker || !is_object($ticker)) continue; + if(objSafeVal($ticker,'buy') === NULL) { + debuglog("$exchange: invalid data received for $lowsymbol ticker"); + continue; + } if (isset($btc->sell) && $btc->sell != 0.) $ticker->buy /= $btc->sell; From dcaf083ccf880deed0a9866d51c90bd77f867a05 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sun, 23 Apr 2017 16:12:40 +0200 Subject: [PATCH 076/434] decred: handle new block header stake version in coinb2 --- stratum/client_submit.cpp | 5 +++-- stratum/coind_template.cpp | 6 ++++-- stratum/config.sample/decred.conf | 4 ++-- web/yaamp/core/functions/yaamp.php | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/stratum/client_submit.cpp b/stratum/client_submit.cpp index af631ed6d..224a062c9 100644 --- a/stratum/client_submit.cpp +++ b/stratum/client_submit.cpp @@ -74,13 +74,14 @@ static void create_decred_header(YAAMP_JOB_TEMPLATE *templ, YAAMP_JOB_VALUES *ou uint32_t size; uint32_t ntime; uint32_t nonce; - unsigned char extra[36]; + unsigned char extra[32]; + uint32_t stakever; uint32_t hashtag[3]; } header; memcpy(&header, templ->header, sizeof(header)); - memset(header.extra, 0, 36); + memset(header.extra, 0, 32); sscanf(nonce, "%08x", &header.nonce); if (strcmp(vote, "")) { diff --git a/stratum/coind_template.cpp b/stratum/coind_template.cpp index ec2139c00..fea6d7f56 100644 --- a/stratum/coind_template.cpp +++ b/stratum/coind_template.cpp @@ -114,7 +114,8 @@ static int decred_parse_header(YAAMP_JOB_TEMPLATE *templ, const char *header_hex uint32_t size; uint32_t ntime; uint32_t nonce; - unsigned char extra[36]; + unsigned char extra[32]; + uint32_t stakever; uint32_t hashtag[3]; } header; @@ -195,7 +196,8 @@ static YAAMP_JOB_TEMPLATE *decred_create_worktemplate(YAAMP_COIND *coind) // bypass coinbase and merkle for now... send without nonce/extradata const unsigned char *hdr = (unsigned char *) &templ->header[36]; hexlify(templ->coinb1, hdr, 192 - 80); - strcpy(templ->coinb2, ""); + const unsigned char *sfx = (unsigned char *) &templ->header[176]; + hexlify(templ->coinb2, sfx, 180 - 176); // stake version vector txhashes; txhashes.push_back(""); diff --git a/stratum/config.sample/decred.conf b/stratum/config.sample/decred.conf index 96c34f6fb..f397789c6 100644 --- a/stratum/config.sample/decred.conf +++ b/stratum/config.sample/decred.conf @@ -1,6 +1,6 @@ [TCP] server = yaamp.com -port = 5744 +port = 3252 password = tu8tu5 [SQL] @@ -11,6 +11,6 @@ password = patofpaq [STRATUM] algo = decred -difficulty = 0.5 +difficulty = 1 max_ttf = 1000000000 diff --git a/web/yaamp/core/functions/yaamp.php b/web/yaamp/core/functions/yaamp.php index b11cdf99c..d4dd69fa0 100755 --- a/web/yaamp/core/functions/yaamp.php +++ b/web/yaamp/core/functions/yaamp.php @@ -205,7 +205,7 @@ function getAlgoPort($algo) // 5555 to 5683 reserved 'blake' => 5733, 'blakecoin' => 5743, - 'decred' => 5744, + 'decred' => 3252, 'vanilla' => 5755, 'blake2s' => 5766, 'penta' => 5833, From 2d4b671f3056d635ef8cb2335fff609e43f7b0c3 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Fri, 28 Apr 2017 07:48:18 +0200 Subject: [PATCH 077/434] rpc: dont fail on non-standard wallet errors --- web/yaamp/core/rpc/easybitcoin.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web/yaamp/core/rpc/easybitcoin.php b/web/yaamp/core/rpc/easybitcoin.php index 0ad69cc05..59d834202 100644 --- a/web/yaamp/core/rpc/easybitcoin.php +++ b/web/yaamp/core/rpc/easybitcoin.php @@ -203,7 +203,9 @@ function __call($method, $params) if (isset($this->response['error']) && $this->response['error']) { // store wallet error - $this->error = strtolower($this->response['error']['message']); + $code = arraySafeVal($this->response['error'], 'code', ''); + $message = arraySafeVal($this->response['error'], 'message', ''); + $this->error = "error $code: ".strtolower($message); } elseif ($this->status != 200) { // If bitcoind didn't return a nice error message, we need to make our own From fb8de32664afdb1b9b90076b87f03b98ad192b70 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Fri, 28 Apr 2017 23:46:14 +0200 Subject: [PATCH 078/434] blocknotify-dcr: use glide to build with dcrrpcclient and remove dcrd < 0.6 dead code glide lock set on dcrd v1.0.1 --- blocknotify-dcr/Makefile | 10 ++++++- blocknotify-dcr/blocknotify.go | 31 ++++------------------ blocknotify-dcr/glide.lock | 48 ++++++++++++++++++++++++++++++++++ blocknotify-dcr/glide.yaml | 8 ++++++ 4 files changed, 70 insertions(+), 27 deletions(-) create mode 100644 blocknotify-dcr/glide.lock create mode 100644 blocknotify-dcr/glide.yaml diff --git a/blocknotify-dcr/Makefile b/blocknotify-dcr/Makefile index d24dec588..e5730cee8 100644 --- a/blocknotify-dcr/Makefile +++ b/blocknotify-dcr/Makefile @@ -1,9 +1,13 @@ OUT_GO=blocknotify-dcr OUTPUT=blocknotify-dcr +ROOT=`pwd` all: rm -f $(OUT_GO) - go build + rm -rf vendor + glide install + ln -s ../vendor vendor/src + GOPATH="$(GOPATH):$(ROOT)/vendor" go build install: all strip -s $(OUT_GO) @@ -11,3 +15,7 @@ install: all mv $(OUT_GO) ../bin/$(OUTPUT) sh -c "../bin/$(OUTPUT) &" +clean: + rm -f $(OUT_GO) + rm -rf vendor + diff --git a/blocknotify-dcr/blocknotify.go b/blocknotify-dcr/blocknotify.go index 693a59e1f..7f5b6791d 100644 --- a/blocknotify-dcr/blocknotify.go +++ b/blocknotify-dcr/blocknotify.go @@ -1,9 +1,8 @@ -// Copyright (c) 2015-2016 The Decred developers, YiiMP -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. +// Copyright (c) 2015-2017 YiiMP + +// Sample blocknotify wrapper tool compatible with decred notifications +// will call the standard bin/blocknotify yiimp tool on new block event. -// Sample blocknofify tool compatible with decred -// will call the standard blocknotify yiimp tool on new block event. // Note: this tool is connected directly to dcrd, not to the wallet! package main @@ -14,9 +13,6 @@ import ( "os/exec" "path/filepath" -// "time" // dcrd < 0.6 -// "github.com/decred/dcrd/chaincfg/chainhash" - "bytes" // dcrd > 0.6+ "github.com/decred/dcrd/wire" @@ -26,7 +22,7 @@ import ( const ( processName = "blocknotify" // set the full path if required - stratumDest = "yaamp.com:5744" // stratum host:port + stratumDest = "yaamp.com:3252" // stratum host:port coinId = "1574" // decred database coin id dcrdUser = "yiimprpc" @@ -61,23 +57,6 @@ func main() { } }, - // broken since 0.6.1 (Nov 2016): - // OnBlockConnected: func(hash *chainhash.Hash, height int32, time time.Time, vb uint16) { - // - // Find the process path. - // str := hash.String() - // args := []string{ stratumDest, coinId, str } - // out, err := exec.Command(processName, args...).Output() - // if err != nil { - // log.Printf("err %s", err) - // } else if debug { - // log.Printf("out %s", out) - // } - - // if (debug) { - // log.Printf("Block connected: %s %d", hash, height) - // } - //}, } // Connect to local dcrd RPC server using websockets. diff --git a/blocknotify-dcr/glide.lock b/blocknotify-dcr/glide.lock new file mode 100644 index 000000000..61c7a3235 --- /dev/null +++ b/blocknotify-dcr/glide.lock @@ -0,0 +1,48 @@ +hash: 4e74a8534cece2f2c1de27bcab0da6efba0e47d533cf8475f588e87851473e81 +updated: 2017-04-28T23:45:31.334486056+02:00 +imports: +- name: github.com/btcsuite/btclog + version: 73889fb79bd687870312b6e40effcecffbd57d30 +- name: github.com/btcsuite/go-socks + version: 4720035b7bfd2a9bb130b1c184f8bbe41b6f0d0f + subpackages: + - socks +- name: github.com/btcsuite/seelog + version: 313961b101eb55f65ae0f03ddd4e322731763b6c +- name: github.com/btcsuite/websocket + version: 31079b6807923eb23992c421b114992b95131b55 +- name: github.com/decred/blake256 + version: a840e32d7c31fe2e0218607334cb120a683951a4 +- name: github.com/decred/dcrd + version: 5bed758f85159b2ee76240207ba775c40000a4c1 + subpackages: + - wire + - chaincfg/chainhash + - dcrjson + - blockchain/stake + - chaincfg + - chaincfg/chainec + - blockchain/stake/internal/dbnamespace + - blockchain/stake/internal/ticketdb + - blockchain/stake/internal/tickettreap + - database + - txscript + - dcrec/edwards + - dcrec/secp256k1 + - dcrec/secp256k1/schnorr +- name: github.com/decred/dcrrpcclient + version: d6edcb0f8f2d01fbf9169f240f73756b41423189 +- name: github.com/decred/dcrutil + version: ebd2e98736e819ac043d54439969b30144b92ced + subpackages: + - base58 +- name: github.com/decred/ed25519 + version: b0909d3f798b97a03c9e77023f97a5301a2a7900 + subpackages: + - edwards25519 +- name: golang.org/x/crypto + version: c7af5bf2638a1164f2eb5467c39c6cffbd13a02e + subpackages: + - ripemd160 +devImports: [] + diff --git a/blocknotify-dcr/glide.yaml b/blocknotify-dcr/glide.yaml new file mode 100644 index 000000000..6c833ed2e --- /dev/null +++ b/blocknotify-dcr/glide.yaml @@ -0,0 +1,8 @@ +package: github.com/tpruvot/yiimp/blocknotify-dcr +import: +- package: github.com/decred/dcrd + subpackages: + - wire +- package: github.com/decred/dcrrpcclient +- package: github.com/decred/dcrutil + From 5a332328d112cb080eeb55c66f8b6bd8bfbaa62d Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sun, 30 Apr 2017 21:00:31 +0200 Subject: [PATCH 079/434] backend: enhance masternodes and decred orphans detection handle new DASH/SIB masternodes template for the coin reward for decred orphans, a wallet restart can lead to orphans, so double check the wallet status with walletinfo --- web/yaamp/core/backend/blocks.php | 5 +++-- web/yaamp/core/backend/coins.php | 11 ++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/web/yaamp/core/backend/blocks.php b/web/yaamp/core/backend/blocks.php index c734febed..e841da68e 100644 --- a/web/yaamp/core/backend/blocks.php +++ b/web/yaamp/core/backend/blocks.php @@ -82,6 +82,7 @@ function BackendBlockFind1($coinid = NULL) continue; } if(!$coin->enable) continue; + if($coin->rpcencoding == 'DCR' && !$coin->auto_ready) continue; $db_block->category = 'orphan'; $remote = new WalletRPC($coin); @@ -186,7 +187,7 @@ function BackendBlocksUpdate($coinid = NULL) if ($coin->enable) { debuglog("{$coin->name} unable to find block {$block->height} tx {$block->txhash}!"); // DCR orphaned confirmations are not(no more) -1! - if($coin->rpcencoding == 'DCR' && $block->category == 'immature') { + if($coin->rpcencoding == 'DCR' && $block->category == 'immature' && $coin->auto_ready) { $blockext = $remote->getblock($block->blockhash); $conf = arraySafeVal($blockext,'confirmations',-1); if ($conf == -1 || ($conf > 2 && arraySafeVal($blockext,'nextblockhash','') == '')) { @@ -210,7 +211,7 @@ function BackendBlocksUpdate($coinid = NULL) $block->confirmations = $tx['confirmations']; $category = $block->category; - if($block->confirmations == -1) { + if($block->confirmations == -1 && $coin->enable && $coin->auto_ready) { $category = 'orphan'; $block->amount = 0; } diff --git a/web/yaamp/core/backend/coins.php b/web/yaamp/core/backend/coins.php index 3ac001bdf..8d7a5dc66 100644 --- a/web/yaamp/core/backend/coins.php +++ b/web/yaamp/core/backend/coins.php @@ -140,6 +140,11 @@ function BackendCoinsUpdate() $coin->reward -= $coin->charity_amount; } + else if(isset($template['masternode']) && arraySafeVal($template,'masternode_payments_enforced')) { + $coin->reward -= arraySafeVal($template['masternode'],'amount',0)/100000000; + $coin->hasmasternodes = true; + } + else if($coin->symbol == 'XZC') { // coinbasevalue here is the amount available for miners, not the full block amount $coin->reward = arraySafeVal($template,'coinbasevalue')/100000000 * $coin->reward_mul; @@ -206,7 +211,11 @@ function BackendCoinsUpdate() else if ($coin->rpcencoding == 'DCR') { - $coin->auto_ready = ($coin->connections > 0); + $wi = $remote->walletinfo(); + $coin->auto_ready = ($coin->connections > 0 && arraySafeVal($wi,"daemonconnected")); + if ($coin->auto_ready && arraySafeVal($wi,"unlocked",false) == false) { + debuglog($coin->symbol." wallet is not unlocked!"); + } } else From 8428d497505db20ef0450af00a9929daa195abda Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sat, 29 Apr 2017 21:03:20 +0200 Subject: [PATCH 080/434] bitcore timetravel-10 algo variant Signed-off-by: Tanguy Pruvot --- rc.local | 1 + stratum/algos/bitcore.c | 171 +++++++++++++++++++++++++++++ stratum/algos/bitcore.h | 16 +++ stratum/algos/makefile | 2 +- stratum/algos/timetravel.c | 17 ++- stratum/client_submit.cpp | 4 +- stratum/coinbase.cpp | 6 + stratum/config.sample/bitcore.conf | 16 +++ stratum/stratum.cpp | 13 ++- stratum/stratum.h | 2 + web/yaamp/core/functions/yaamp.php | 3 + 11 files changed, 241 insertions(+), 10 deletions(-) create mode 100644 stratum/algos/bitcore.c create mode 100644 stratum/algos/bitcore.h create mode 100644 stratum/config.sample/bitcore.conf diff --git a/rc.local b/rc.local index 5e4cc4ff9..3b18fa509 100644 --- a/rc.local +++ b/rc.local @@ -30,6 +30,7 @@ screen -dmS x15 $STRATUM_DIR/run.sh x15 screen -dmS x17 $STRATUM_DIR/run.sh x17 screen -dmS xevan $STRATUM_DIR/run.sh xevan screen -dmS timetravel $STRATUM_DIR/run.sh timetravel +screen -dmS bitcore $STRATUM_DIR/run.sh bitcore screen -dmS hmq1725 $STRATUM_DIR/run.sh hmq1725 screen -dmS sha $STRATUM_DIR/run.sh sha diff --git a/stratum/algos/bitcore.c b/stratum/algos/bitcore.c new file mode 100644 index 000000000..c0ef31e9a --- /dev/null +++ b/stratum/algos/bitcore.c @@ -0,0 +1,171 @@ +#include +#include +#include + +#define HASH_FUNC_BASE_TIMESTAMP 1492973331U // BitCore: Genesis Timestamp +#define HASH_FUNC_COUNT 10 +#define HASH_FUNC_COUNT_PERMUTATIONS 40320 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define _ALIGN(x) __attribute__ ((aligned(x))) + +// helpers +inline void swap(int *a, int *b) { + int c = *a; + *a = *b; + *b = c; +} + +static void reverse(int *pbegin, int *pend) { + while ( (pbegin != pend) && (pbegin != --pend) ) + swap(pbegin++, pend); +} + +static void next_permutation(int *pbegin, int *pend) { + if (pbegin == pend) + return; + + int *i = pbegin; + ++i; + if (i == pend) + return; + + i = pend; + --i; + + while (1) { + int *j = i; + --i; + + if (*i < *j) { + int *k = pend; + + while (!(*i < *--k)) + /* pass */; + + swap(i, k); + reverse(j, pend); + return; // true + } + + if (i == pbegin) { + reverse(pbegin, pend); + return; // false + } + } +} +// helpers + +void timetravel10_hash(const char* input, char* output, uint32_t len) +{ + uint32_t _ALIGN(64) hash[16 * HASH_FUNC_COUNT]; + uint32_t *hashA, *hashB; + uint32_t dataLen = 64; + uint32_t *work_data = (uint32_t *)input; + const uint32_t timestamp = work_data[17]; + + sph_blake512_context ctx_blake; + sph_bmw512_context ctx_bmw; + sph_groestl512_context ctx_groestl; + sph_skein512_context ctx_skein; + sph_jh512_context ctx_jh; + sph_keccak512_context ctx_keccak; + sph_luffa512_context ctx_luffa; + sph_cubehash512_context ctx_cubehash; + sph_shavite512_context ctx_shavite; + sph_simd512_context ctx_simd; + + // We want to permute algorithms. To get started we + // initialize an array with a sorted sequence of unique + // integers where every integer represents its own algorithm. + uint32_t permutation[HASH_FUNC_COUNT]; + for (uint32_t i = 0; i < HASH_FUNC_COUNT; i++) { + permutation[i]=i; + } + + // Compute the next permuation + uint32_t steps = (timestamp - HASH_FUNC_BASE_TIMESTAMP) % HASH_FUNC_COUNT_PERMUTATIONS; + for (uint32_t i = 0; i < steps; i++) { + next_permutation(permutation, permutation + HASH_FUNC_COUNT); + } + + for (uint32_t i = 0; i < HASH_FUNC_COUNT; i++) { + if (i == 0) { + dataLen = len; + hashA = work_data; + } else { + dataLen = 64; + hashA = &hash[16 * (i - 1)]; + } + hashB = &hash[16 * i]; + + switch(permutation[i]) { + case 0: + sph_blake512_init(&ctx_blake); + sph_blake512(&ctx_blake, hashA, dataLen); + sph_blake512_close(&ctx_blake, hashB); + break; + case 1: + sph_bmw512_init(&ctx_bmw); + sph_bmw512(&ctx_bmw, hashA, dataLen); + sph_bmw512_close(&ctx_bmw, hashB); + break; + case 2: + sph_groestl512_init(&ctx_groestl); + sph_groestl512(&ctx_groestl, hashA, dataLen); + sph_groestl512_close(&ctx_groestl, hashB); + break; + case 3: + sph_skein512_init(&ctx_skein); + sph_skein512(&ctx_skein, hashA, dataLen); + sph_skein512_close(&ctx_skein, hashB); + break; + case 4: + sph_jh512_init(&ctx_jh); + sph_jh512(&ctx_jh, hashA, dataLen); + sph_jh512_close(&ctx_jh, hashB); + break; + case 5: + sph_keccak512_init(&ctx_keccak); + sph_keccak512(&ctx_keccak, hashA, dataLen); + sph_keccak512_close(&ctx_keccak, hashB); + break; + case 6: + sph_luffa512_init(&ctx_luffa); + sph_luffa512(&ctx_luffa, hashA, dataLen); + sph_luffa512_close(&ctx_luffa, hashB); + break; + case 7: + sph_cubehash512_init(&ctx_cubehash); + sph_cubehash512(&ctx_cubehash, hashA, dataLen); + sph_cubehash512_close(&ctx_cubehash, hashB); + break; + case 8: + sph_shavite512_init(&ctx_shavite); + sph_shavite512(&ctx_shavite, hashA, dataLen); + sph_shavite512_close(&ctx_shavite, hashB); + break; + case 9: + sph_simd512_init(&ctx_simd); + sph_simd512(&ctx_simd, hashA, dataLen); + sph_simd512_close(&ctx_simd, hashB); + break; + default: + break; + } + } + + memcpy(output, &hash[16 * (HASH_FUNC_COUNT - 1)], 32); +} + diff --git a/stratum/algos/bitcore.h b/stratum/algos/bitcore.h new file mode 100644 index 000000000..12795dd80 --- /dev/null +++ b/stratum/algos/bitcore.h @@ -0,0 +1,16 @@ +#ifndef TIMETRAVEL10_H +#define TIMETRAVEL10_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +void timetravel10_hash(const char* input, char* output, uint32_t len); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/stratum/algos/makefile b/stratum/algos/makefile index b3f53de47..e25c018b9 100644 --- a/stratum/algos/makefile +++ b/stratum/algos/makefile @@ -11,7 +11,7 @@ LDFLAGS=-O2 -lgmp SOURCES=lyra2re.c lyra2v2.c Lyra2.c lyra2z.c Lyra2z.c Sponge.c \ blake.c scrypt.c c11.c x11.c x13.c sha256.c sha256t.c keccak.c deep.c \ x14.c x15.c x17.c nist5.c fresh.c quark.c neoscrypt.c scryptn.c qubit.c skein.c groestl.c \ - timetravel.c xevan.c bastion.c hmq17.c \ + bitcore.c timetravel.c xevan.c bastion.c hmq17.c \ skein2.c zr5.c bmw.c luffa.c pentablake.c whirlpool.c whirlpoolx.c blakecoin.c \ blake2.c \ yescrypt.c yescrypt-opt.c sha256_Y.c lbry.c \ diff --git a/stratum/algos/timetravel.c b/stratum/algos/timetravel.c index 9c2ab7589..c715eb748 100644 --- a/stratum/algos/timetravel.c +++ b/stratum/algos/timetravel.c @@ -2,6 +2,10 @@ #include #include +#define HASH_FUNC_BASE_TIMESTAMP 1389040865 // Machinecoin: Genesis Timestamp +#define HASH_FUNC_COUNT 8 // Machinecoin: HASH_FUNC_COUNT of 11 +#define HASH_FUNC_COUNT_PERMUTATIONS 40320 // Machinecoin: HASH_FUNC_COUNT! + #include #include #include @@ -10,13 +14,11 @@ #include #include #include +#if HASH_FUNC_COUNT > 8 #include #include #include - -#define HASH_FUNC_BASE_TIMESTAMP 1389040865 // Machinecoin: Genesis Timestamp -#define HASH_FUNC_COUNT 8 // Machinecoin: HASH_FUNC_COUNT of 11 -#define HASH_FUNC_COUNT_PERMUTATIONS 40320 // Machinecoin: HASH_FUNC_COUNT! +#endif #define _ALIGN(x) __attribute__ ((aligned(x))) @@ -69,7 +71,7 @@ static void next_permutation(int *pbegin, int *pend) { void timetravel_hash(const char* input, char* output, uint32_t len) { - uint32_t _ALIGN(64) hash[128]; // 16 bytes * HASH_FUNC_COUNT + uint32_t _ALIGN(64) hash[16 * HASH_FUNC_COUNT]; uint32_t *hashA, *hashB; uint32_t dataLen = 64; uint32_t *work_data = (uint32_t *)input; @@ -84,10 +86,11 @@ void timetravel_hash(const char* input, char* output, uint32_t len) sph_keccak512_context ctx_keccak; sph_luffa512_context ctx_luffa; sph_cubehash512_context ctx_cubehash; +#if HASH_FUNC_COUNT > 8 sph_shavite512_context ctx_shavite; sph_simd512_context ctx_simd; sph_echo512_context ctx_echo; - +#endif // We want to permute algorithms. To get started we // initialize an array with a sorted sequence of unique // integers where every integer represents its own algorithm. @@ -153,6 +156,7 @@ void timetravel_hash(const char* input, char* output, uint32_t len) sph_cubehash512 (&ctx_cubehash, hashA, dataLen); sph_cubehash512_close(&ctx_cubehash, hashB); break; +#if HASH_FUNC_COUNT > 8 case 8: sph_shavite512_init(&ctx_shavite); sph_shavite512(&ctx_shavite, hashA, dataLen); @@ -168,6 +172,7 @@ void timetravel_hash(const char* input, char* output, uint32_t len) sph_echo512 (&ctx_echo, hashA, dataLen); sph_echo512_close(&ctx_echo, hashB); break; +#endif default: break; } diff --git a/stratum/client_submit.cpp b/stratum/client_submit.cpp index 224a062c9..b79db9ddd 100644 --- a/stratum/client_submit.cpp +++ b/stratum/client_submit.cpp @@ -399,8 +399,8 @@ bool client_submit(YAAMP_CLIENT *client, json_value *json_params) client_submit_error(client, job, 23, "Invalid time rolling", extranonce2, ntime, nonce); return true; } - // these algos permutations change over time (can lead to different speeds) - if (!strcmp(g_current_algo->name,"x11evo") || !strcmp(g_current_algo->name,"timetravel")) { + // dont allow algos permutations change over time (can lead to different speeds) + if (!g_allow_rolltime) { client_submit_error(client, job, 23, "Invalid ntime (rolling not allowed)", extranonce2, ntime, nonce); return true; } diff --git a/stratum/coinbase.cpp b/stratum/coinbase.cpp index d81a6aacd..f451b42a1 100644 --- a/stratum/coinbase.cpp +++ b/stratum/coinbase.cpp @@ -99,6 +99,12 @@ void coinbase_create(YAAMP_COIND *coind, YAAMP_JOB_TEMPLATE *templ, json_value * if (strlen(coind->charity_address) == 0) sprintf(coind->charity_address, "EdFwYw4Mo2Zq6CFM2yNJgXvE2DTJxgdBRX"); } + else if(strcmp(g_current_algo->name, "bitcore") == 0) { + if (coind->charity_percent <= 0) + coind->charity_percent = 2; + if (strlen(coind->charity_address) == 0) + sprintf(coind->charity_address, "1Lic3vaHsXCVCwXTmKPfkA4tuif1DoodZT"); + } else if(strcmp(coind->symbol, "LTCR") == 0) { if (coind->charity_percent <= 0) coind->charity_percent = 10; diff --git a/stratum/config.sample/bitcore.conf b/stratum/config.sample/bitcore.conf new file mode 100644 index 000000000..22b1fd792 --- /dev/null +++ b/stratum/config.sample/bitcore.conf @@ -0,0 +1,16 @@ +[TCP] +server = yaamp.com +port = 3556 +password = tu8tu5 + +[SQL] +host = yaampdb +database = yaamp +username = root +password = patofpaq + +[STRATUM] +algo = bitcore +difficulty = 0.5 +max_ttf = 50000 + diff --git a/stratum/stratum.cpp b/stratum/stratum.cpp index 4f05d9acf..6f7541e62 100644 --- a/stratum/stratum.cpp +++ b/stratum/stratum.cpp @@ -37,6 +37,7 @@ uint64_t g_max_shares = 0; uint64_t g_shares_counter = 0; uint64_t g_shares_log = 0; +bool g_allow_rolltime = true; time_t g_last_broadcasted = 0; YAAMP_DB *g_db = NULL; @@ -103,7 +104,10 @@ YAAMP_ALGO g_algos[] = {"x11evo", x11evo_hash, 1, 0, 0}, {"xevan", xevan_hash, 0x100, 0, 0}, - {"timetravel", timetravel_hash, 0x100, 0, 0}, // Waaaaahhh + + {"timetravel", timetravel_hash, 0x100, 0, 0}, + {"bitcore", timetravel10_hash, 0x100, 0, 0}, + {"hmq1725", hmq17_hash, 0x10000, 0, 0}, {"lyra2", lyra2re_hash, 0x80, 0, 0}, @@ -228,6 +232,13 @@ int main(int argc, char **argv) stratumlogdate("starting stratum for %s on %s:%d\n", g_current_algo->name, g_tcp_server, g_tcp_port); + // ntime should not be changed by miners for these algos + g_allow_rolltime = strcmp(g_current_algo->name,"x11evo"); + g_allow_rolltime = g_allow_rolltime && strcmp(g_current_algo->name,"timetravel"); + g_allow_rolltime = g_allow_rolltime && strcmp(g_current_algo->name,"bitcore"); + if (!g_allow_rolltime) + stratumlog("note: time roll disallowed for %s algo\n", g_current_algo->name); + g_db = db_connect(); if(!g_db) yaamp_error("Cant connect database"); diff --git a/stratum/stratum.h b/stratum/stratum.h index 6d35a56f1..8bf5bfb2f 100644 --- a/stratum/stratum.h +++ b/stratum/stratum.h @@ -86,6 +86,7 @@ extern bool g_stratum_renting; extern uint64_t g_max_shares; extern uint64_t g_shares_counter; +extern bool g_allow_rolltime; extern time_t g_last_broadcasted; extern struct ifaddrs *g_ifaddr; @@ -153,6 +154,7 @@ void sha256_double_hash_hex(const char *input, char *output, unsigned int len); #include "algos/keccak.h" #include "algos/sha256t.h" #include "algos/timetravel.h" +#include "algos/bitcore.h" #include "algos/bastion.h" #include "algos/bmw.h" diff --git a/web/yaamp/core/functions/yaamp.php b/web/yaamp/core/functions/yaamp.php index d4dd69fa0..cd96d4ba2 100755 --- a/web/yaamp/core/functions/yaamp.php +++ b/web/yaamp/core/functions/yaamp.php @@ -10,6 +10,7 @@ function yaamp_get_algos() 'scryptn', 'argon2', 'bastion', + 'bitcore', 'blake', 'blakecoin', 'blake2s', @@ -148,6 +149,7 @@ function getAlgoColors($algo) 'skein' => '#80a0a0', 'skein2' => '#c8a060', 'timetravel' => '#f0b0d0', + 'bitcore' => '#f790c0', 'vanilla' => '#f0f0f0', 'velvet' => '#aac0cc', 'whirlpool' => '#d0e0e0', @@ -172,6 +174,7 @@ function getAlgoPort($algo) 'lbry' => 3334, 'scrypt' => 3433, 'timetravel' => 3555, + 'bitcore' => 3556, 'c11' => 3573, 'deep' => 3535, 'x11' => 3533, From cf9a3b75bdfc00eb892d617537d74852e3070d31 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Mon, 1 May 2017 02:38:05 +0200 Subject: [PATCH 081/434] remove wrong bitcore block fees --- stratum/coinbase.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/stratum/coinbase.cpp b/stratum/coinbase.cpp index f451b42a1..d81a6aacd 100644 --- a/stratum/coinbase.cpp +++ b/stratum/coinbase.cpp @@ -99,12 +99,6 @@ void coinbase_create(YAAMP_COIND *coind, YAAMP_JOB_TEMPLATE *templ, json_value * if (strlen(coind->charity_address) == 0) sprintf(coind->charity_address, "EdFwYw4Mo2Zq6CFM2yNJgXvE2DTJxgdBRX"); } - else if(strcmp(g_current_algo->name, "bitcore") == 0) { - if (coind->charity_percent <= 0) - coind->charity_percent = 2; - if (strlen(coind->charity_address) == 0) - sprintf(coind->charity_address, "1Lic3vaHsXCVCwXTmKPfkA4tuif1DoodZT"); - } else if(strcmp(coind->symbol, "LTCR") == 0) { if (coind->charity_percent <= 0) coind->charity_percent = 10; From 0862ff66a94ce9834f3d9d13ffcb6bbb45d8a79c Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 4 May 2017 04:26:40 +0200 Subject: [PATCH 082/434] coindb: allow to grab bittrex icons --- stratum/user.cpp | 5 ++- web/yaamp/commands/CoindbCommand.php | 54 ++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/stratum/user.cpp b/stratum/user.cpp index 27fc5151f..39c876295 100644 --- a/stratum/user.cpp +++ b/stratum/user.cpp @@ -90,7 +90,10 @@ void db_add_user(YAAMP_DB *db, YAAMP_CLIENT *client) } else - db_query(db, "UPDATE accounts SET coinsymbol='%s', donation=%d WHERE id=%d AND balance=0", symbol, gift, client->userid); + db_query(db, "UPDATE accounts SET coinsymbol='%s', donation=%d WHERE id=%d AND balance = 0" + " AND (SELECT COUNT(id) FROM payouts WHERE account_id=%d AND tx IS NULL) = 0" // failed balance + " AND (SELECT pending FROM balanceuser WHERE userid=%d ORDER by time DESC LIMIT 1) = 0" // pending balance + , symbol, gift, client->userid, client->userid, client->userid); } ////////////////////////////////////////////////////////////////////////////////////// diff --git a/web/yaamp/commands/CoindbCommand.php b/web/yaamp/commands/CoindbCommand.php index af4072dfa..2ef2a8111 100644 --- a/web/yaamp/commands/CoindbCommand.php +++ b/web/yaamp/commands/CoindbCommand.php @@ -53,6 +53,7 @@ public function run($args) $nbUpdated = $this->grabBterIcons(); $nbUpdated += $this->grabCcexIcons(); $nbUpdated += $this->grabCryptopiaIcons(); + $nbUpdated += $this->grabBittrexIcons(); // can be huge ones $nbUpdated += $this->grabCoinExchangeIcons(); $nbUpdated += $this->grabAlcurexIcons(); $nbUpdated += $this->grabNovaIcons(); @@ -295,6 +296,59 @@ public function grabBterIcons() return $nbUpdated; } + /** + * Icon grabber - Bittrex + */ + public function grabBittrexIcons() + { + $nbUpdated = 0; + $markets = bittrex_api_query('public/getmarkets'); + if (!is_object($markets) || !is_object($markets->result)) { + echo "bittrex api error\n"; + return $nbUpdated; + } + $sql = "SELECT DISTINCT coins.id FROM coins INNER JOIN markets M ON M.coinid = coins.id WHERE M.name='bittrex' AND IFNULL(coins.image,'') = ''"; + $coins = dbolist($sql); + if (empty($coins)) + return $nbUpdated; + echo "bittrex: try to download new icons...\n"; + foreach ($coins as $coin) { + $coin = getdbo('db_coins', $coin["id"]); + $symbol = $coin->symbol; + if (!empty($coin->symbol2)) $symbol = $coin->symbol2; + $local = $this->basePath."/images/coin-{$symbol}.png"; + $url = ''; + foreach ($markets->result as $m) { + if ($m->MarketCurrency == $symbol) { + $url = $m->LogoUrl; + break; + } + } + if (empty($url)) continue; + try { + $data = @ file_get_contents($url); + } catch (Exception $e) { + continue; + } + if (strlen($data) < 2048) continue; + file_put_contents($local, $data); + $size = filesize($local); + if ($size > 0) { + if ($size > 100*1024) { + echo "warning: $symbol icon is huge, ".round($size/1024,1)." KB ($url)\n"; + unlink($local); + } else { + echo $symbol." icon found\n"; + $coin->image = "/images/coin-{$symbol}.png"; + $nbUpdated += $coin->save(); + } + } + } + if ($nbUpdated) + echo "$nbUpdated icons downloaded from bittrex\n"; + return $nbUpdated; + } + /** * Icon grabber - Ccex */ From 770670ddaab0e78b4067f23f6599800db3b99f9b Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sun, 7 May 2017 03:35:04 +0200 Subject: [PATCH 083/434] decred: upgrade tickets voting status for v1.0 --- web/yaamp/modules/site/coin_tickets.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/yaamp/modules/site/coin_tickets.php b/web/yaamp/modules/site/coin_tickets.php index 944d95042..3abed60d1 100644 --- a/web/yaamp/modules/site/coin_tickets.php +++ b/web/yaamp/modules/site/coin_tickets.php @@ -15,6 +15,7 @@ $remote = new WalletRPC($coin); $info = $remote->getinfo(); $stakeinfo = $remote->getstakeinfo(); +$walletinfo = $remote->walletinfo(); // pfff $balances = $remote->getbalance('*',0); $locked = 0; $balance = 0; if (isset($balances["balances"])) { @@ -278,10 +279,9 @@ } echo 'Total won: '.$stakeinfo['totalsubsidy'].' '.$coin->symbol.' ('.$stakeinfo['voted'].')
    '; -$staking = $remote->getgenerate() > 0 ? 'enabled' : 'disabled'; +$voting = arraySafeVal($walletinfo,'voting',0) > 0 ? 'enabled' : 'disabled'; echo '
    '; -echo 'Staking: '.$staking.'
    '; -echo 'Auto buy ticket(s) < '.$remote->getticketmaxprice().' '.$coin->symbol.'
    '; +echo 'Voting: '.$voting.'
    '; $netfees = $remote->ticketfeeinfo(1,1); if (!empty($netfees)) { From 94afe1073e966d1c4640403902a110c7b605359d Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sun, 7 May 2017 03:35:52 +0200 Subject: [PATCH 084/434] bench: drop invalid clocks in nv 381.x (fixed in 382) --- web/yaamp/core/backend/bench.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/yaamp/core/backend/bench.php b/web/yaamp/core/backend/bench.php index 9da1904e7..6656baae6 100644 --- a/web/yaamp/core/backend/bench.php +++ b/web/yaamp/core/backend/bench.php @@ -14,8 +14,9 @@ function BenchUpdateChips() dborun("UPDATE benchmarks SET memf=NULL WHERE memf=0"); dborun("UPDATE benchmarks SET realmemf=NULL WHERE realmemf<=100"); dborun("UPDATE benchmarks SET realfreq=NULL WHERE realfreq<=200"); - // bug in nvml 378.x (linux + win) + // bug in nvml 378.x and 381.x (linux + win) fixed in 382.05 dborun("UPDATE benchmarks SET realfreq=NULL WHERE realfreq<=200 AND driver LIKE '% 378.%'"); + dborun("UPDATE benchmarks SET realfreq=NULL WHERE realfreq<=200 AND driver LIKE '% 381.%'"); $benchs = getdbolist('db_benchmarks', "IFNULL(chip,'')=''"); foreach ($benchs as $bench) { From 9a6ece22cddd8d44863ce649df2d4722bd241224 Mon Sep 17 00:00:00 2001 From: Tristian Date: Mon, 8 May 2017 23:07:36 -0400 Subject: [PATCH 085/434] Add Nova trading (#108) --- web/yaamp/core/backend/rawcoins.php | 5 +- web/yaamp/core/exchange/nova.php | 21 ++- web/yaamp/core/trading/nova_trading.php | 193 +++++++++++++++++++++++- 3 files changed, 205 insertions(+), 14 deletions(-) diff --git a/web/yaamp/core/backend/rawcoins.php b/web/yaamp/core/backend/rawcoins.php index ec655c183..3fbcc023f 100644 --- a/web/yaamp/core/backend/rawcoins.php +++ b/web/yaamp/core/backend/rawcoins.php @@ -265,7 +265,10 @@ function updateRawCoin($marketname, $symbol, $name='unknown') } } - if ($marketname == 'nova' || $marketname == 'askcoin' || $marketname == 'coinexchange') { + if ($marketname == 'nova' && !defined('EXCH_NOVA_KEY')) { + return; + } + if ($marketname == 'askcoin' || $marketname == 'coinexchange') { // don't polute too much the db return; } diff --git a/web/yaamp/core/exchange/nova.php b/web/yaamp/core/exchange/nova.php index 108984a46..4c79646f1 100644 --- a/web/yaamp/core/exchange/nova.php +++ b/web/yaamp/core/exchange/nova.php @@ -2,11 +2,9 @@ // markets -function nova_api_query($method, $params='') +function nova_api_query($method) { $uri = "https://novaexchange.com/remote/$method/"; - if (!empty($params)) - $uri .= "$params"; $ch = curl_init($uri); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); @@ -17,14 +15,14 @@ function nova_api_query($method, $params='') return $obj; } -function nova_api_user($method, $params='') +function nova_api_user($method, $params=array()) { require_once('/etc/yiimp/keys.php'); if (!defined('EXCH_NOVA_SECRET')) define('EXCH_NOVA_SECRET', ''); if (empty(EXCH_NOVA_KEY) || empty(EXCH_NOVA_SECRET)) return false; - $uri = "https://novaexchange.com/remote/private/$method/$params"; + $uri = "https://novaexchange.com/remote/private/$method/"; $headers = array( 'Content-Type: application/x-www-form-urlencoded', @@ -33,12 +31,13 @@ function nova_api_user($method, $params='') $mt = explode(' ', microtime()); $nonce = $mt[1].substr($mt[0], 2, 6); - $postdata = array( - 'apikey'=>EXCH_NOVA_KEY, - 'apisecret'=>EXCH_NOVA_SECRET, - 'nonce'=>$nonce, - ); - $postdata = http_build_query($postdata, '', '&'); + $params['apikey'] = EXCH_NOVA_KEY; + $params['apisecret'] = EXCH_NOVA_SECRET; + $params['nonce'] = $nonce; + + $postdata = http_build_query($params, '', '&'); + // Clear the params array so that we don't accidentaly leak our keys + $params = array(); $ch = curl_init($uri); //curl_setopt($ch, CURLOPT_POST, 1); diff --git a/web/yaamp/core/trading/nova_trading.php b/web/yaamp/core/trading/nova_trading.php index bb9c69b2a..414e6fe8d 100644 --- a/web/yaamp/core/trading/nova_trading.php +++ b/web/yaamp/core/trading/nova_trading.php @@ -1,5 +1,26 @@ success === TRUE) { + $db_order = getdbosql( + 'db_orders', + 'market=:market AND uuid=:uuid', + array(':market'=>'nova', ':uuid'=>$id) + ); + + if ($db_order) { + $db_order->delete(); + } + } +} + function doNovaTrading($quick=false) { $exchange = 'nova'; @@ -16,8 +37,9 @@ function doNovaTrading($quick=false) if (is_object($savebalance)) { $savebalance->balance = 0; $savebalance->save(); - - dborun("UPDATE markets SET balance=0 WHERE name='{$exchange}'"); + } else { + dborun("INSERT INTO balances (name,balance) VALUES ('$exchange',0)"); + $savebalance = getdbosql('db_balances', "name='{$exchange}'"); } foreach($balances->balances as $balance) @@ -51,4 +73,171 @@ function doNovaTrading($quick=false) $flushall = rand(0, 8) == 0; if($quick) $flushall = false; + + + $min_btc_trade = exchange_get($exchange, 'trade_min_btc', 0.0001); + $sell_ask_pct = exchange_get($exchange, 'trade_sell_ask_pct', 1.05); + $cancel_ask_pct = exchange_get($exchange, 'trade_cancel_ask_pct', 1.20); + + // upgrade orders + $coins = getdbolist('db_coins', "enable=1 AND IFNULL(dontsell,0)=0 AND id IN (SELECT DISTINCT coinid FROM markets WHERE name='{$exchange}')"); + foreach ($coins as $coin) { + if ($coin->dontsell || $coin->symbol == 'BTC') { + continue; + } + + $pair = $coin->symbol.'_BTC'; + sleep(1); + $orders = nova_api_user("myopenorders_market/{$pair}"); + + if (isset($orders->items)) { + $order_data = $orders->items; + } else { + $order_data = array(); + } + + foreach ($order_data as $order) { + $uuid = $order->orderid; + $pair = $order->market; + sleep(1); + $ticker = nova_api_query("market/info/{$pair}"); + + if (!is_object($ticker) || !$order->price) { + continue; + } + + if ($order->price > $cancel_ask_pct*$ticker->ask || $flushall) { + sleep(1); + doNovaCancelOrder($uuid); + } else { + $db_order = getdbosql( + 'db_orders', + 'market=:market AND uuid=:uuid', + array(':market'=>$exchange, ':uuid'=>$uuid) + ); + + if ($db_order) { + continue; + } + + $db_order = new db_orders; + $db_order->market = $exchange; + $db_order->coinid = $coin->id; + $db_order->amount = $order->fromamount; // + $db_order->price = $order->price; // + $db_order->ask = $ticker->ask; // + $db_order->bid = $ticker->bid; // + $db_order->uuid = $uuid; + $db_order->created = time(); + $db_order->save(); + } + } + $list = getdbolist('db_orders', "coinid=$coin->id and market='$exchange'"); + foreach ($list as $db_order) { + $found = false; + foreach ($order_data as $order) { + $uuid = $order->id; + if ($uuid == $db_order->uuid) { + $found = true; + break; + } + } + if (!$found) { + debuglog("Nova: Deleting order $coin->name $db_order->amount"); + $db_order->delete(); + } + } + } + sleep(2); + + /* Update balances and sell */ + if (!$balances) { + return; + } + + foreach ($balances->balances as $balance) { + $amount = $balance->amount; + $symbol = $balance->currency; + if ($symbol == 'BTC') { + continue; + } + + $coin = getdbosql('db_coins', "symbol=:symbol", array(':symbol'=>$symbol)); + if (!$coin || $coin->dontsell) { + continue; + } + + $market2 = getdbosql('db_markets', "coinid={$coin->id} AND (name='bittrex' OR name='poloniex')"); + if ($market2) { + continue; + } + + $market = getdbosql('db_markets', "coinid=$coin->id and name='{$exchange}'"); + if ($market) { + $market->lasttraded = time(); + $market->save(); + } + + if ($amount*$coin->price < $min_btc_trade) { + continue; + } + + sleep(1); + + $pair = "{$symbol}_BTC"; + $ticker = nova_api_query("market/info/{$pair}"); + if(!(isset($ticker->bid) && isset($ticker->ask))) continue; + if($coin->sellonbid) + $sellprice = bitcoinvaluetoa($ticker->bid); + else + $sellprice = bitcoinvaluetoa($ticker->ask * $sell_ask_pct); + + if ($amount*$sellprice > $min_btc_trade) { + debuglog("Nova: Selling market $pair, $amount, $sellprice"); + sleep(1); + + $res = nova_api_user("trade/{$pair}", array("tradetype=SELL", "tradeprice={$sellprice}", "tradeamount={$amount}", "tradebase=1")); + if (!$res->status == 'success') { + debuglog('Nova: Sell failed'); + continue; + } + } + + $db_order = new db_orders; + $db_order->market = $exchange; + $db_order->coinid = $coin->id; + $db_order->amount = $amount; + $db_order->price = $sellprice; + $db_order->ask = $ticker->ask; + $db_order->bid = $ticker->bid; + $db_order->uuid = $res->tradeitems[0]->orderid; + $db_order->created = time(); + $db_order->save(); + } + + /* Withdrawals */ + $btcaddr = YAAMP_BTCADDRESS; + $withdraw_min = exchange_get($exchange, 'withdraw_min_btc', EXCH_AUTO_WITHDRAW); + $withdraw_fee = exchange_get($exchange, 'withdraw_fee_btc', 0.0005); + if (floatval($withdraw_min) > 0 && $savebalance->balance >= ($withdraw_min + $withdraw_fee)) { + $amount = $savebalance->balance - $withdraw_fee; + debuglog("$exchange: withdraw $amount BTC to $btcaddr"); + sleep(1); + $res = nova_api_user("withdraw/BTC", array("currency=BTC", "amount={$amount}", "address={$btcaddr}")); + debuglog("$exchange: withdraw ".json_encode($res)); + if ($res->status == 'success') { + $withdraw = new db_withdraws; + $withdraw->market = $exchange; + $withdraw->address = $btcaddr; + $withdraw->amount = $amount; + $withdraw->time = time(); + //$withdraw->uuid = $res->id; + $withdraw->save(); + $savebalance->balance = $res->amount_after_withdraw; + $savebalance->save(); + } else { + debuglog("$exchange: Withdraw Failed ".json_encode($res)); + } + } + } From 5a3dce2ba171aebb04e3554aaca3f24b606facbb Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Wed, 10 May 2017 06:07:00 +0200 Subject: [PATCH 086/434] payments: more code for crappy wallets + CHC timeouts also, attempt to increase the cron job execution time for this special task. --- web/yaamp/core/backend/payment.php | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/web/yaamp/core/backend/payment.php b/web/yaamp/core/backend/payment.php index f30e9a152..6c93f217a 100644 --- a/web/yaamp/core/backend/payment.php +++ b/web/yaamp/core/backend/payment.php @@ -2,6 +2,9 @@ function BackendPayments() { + // attempt to increase max execution time limit for the cron job + set_time_limit(300); + $list = getdbolist('db_coins', "enable and id in (select distinct coinid from accounts)"); foreach($list as $coin) BackendCoinPayments($coin); @@ -66,16 +69,16 @@ function BackendCoinPayments($coin) $tx = $remote->sendtoaddress($user->username, round($amount, 8)); if(!$tx) { - debuglog("error $remote->error, $user->username, $amount"); - if($remote->error == 'transaction too large' || $remote->error == 'invalid amount' || $remote->error == 'insufficient funds' || $remote->error == 'error: transaction creation failed ') - { + $error = $remote->error; + debuglog("RPC $error, {$user->username}, $amount"); + if (stripos($error,'transaction too large') !== false || stripos($error,'invalid amount') !== false + || stripos($error,'insufficient funds') !== false || stripos($error,'transaction creation failed') !== false + ) { $coin->payout_max = min((double) $amount, (double) $coin->payout_max); $coin->save(); - $amount /= 2; continue; } - break; } @@ -222,12 +225,20 @@ function BackendCoinPayments($coin) // Search for previous payouts not executed (no tx) $addresses = array(); $payouts = array(); - $mailmsg = ''; + $mailmsg = ''; $mailwarn = ''; foreach($users as $user) { $amount_failed = 0.0; $failed = getdbolist('db_payouts', "account_id=:uid AND IFNULL(tx,'') = '' ORDER BY time", array(':uid'=>$user->id)); if (!empty($failed)) { + if ($coin->symbol == 'CHC') { + // tx made but payment rpc timed out + foreach ($failed as $payout) $amount_failed += floatval($payout->amount); + $notice = "payment: Found buggy payout without tx for {$user->username}!! $amount_failed {$coin->symbol}"; + debuglog($notice); + $mailwarn .= "$notice\r\n"; + continue; + } foreach ($failed as $payout) { $amount_failed += floatval($payout->amount); $payout->delete(); @@ -257,6 +268,12 @@ function BackendCoinPayments($coin) } } + if (!empty($mailwarn)) { + send_email_alert('payouts', "{$coin->symbol} payout tx problems to check", + "$mailwarn\r\nCheck your wallet recent transactions to know if the payment was made, the RPC call timed out." + ); + } + // redo failed payouts if (!empty($addresses)) { From 25aa694498b18d5d5f8d15f451ba9aaf5e0a9966 Mon Sep 17 00:00:00 2001 From: Tristian Date: Fri, 12 May 2017 00:16:57 -0400 Subject: [PATCH 087/434] nova: update API to v2, get deposit addresses (#112) - fix updateNovaMarkets - slight refactor of trading to handle symbol2 - get deposit addresses --- web/yaamp/core/backend/markets.php | 25 +++- web/yaamp/core/exchange/nova.php | 10 +- web/yaamp/core/trading/nova_trading.php | 144 ++++++++++++------------ 3 files changed, 99 insertions(+), 80 deletions(-) diff --git a/web/yaamp/core/backend/markets.php b/web/yaamp/core/backend/markets.php index 270b6d2a0..e2e60461f 100644 --- a/web/yaamp/core/backend/markets.php +++ b/web/yaamp/core/backend/markets.php @@ -902,7 +902,7 @@ function updateNovaMarkets() $sqlFilter = "AND base_coin='{$market->base_coin}'"; } - if (market_get($exchange, $coin->symbol, "disabled", $base)) { + if (market_get($exchange, $coin->symbol, "disabled", null, $base)) { $market->disabled = 1; $market->deleted = 1; $market->message = 'disabled from settings'; @@ -935,6 +935,29 @@ function updateNovaMarkets() break; } } + + if(!empty(EXCH_NOVA_KEY)) + { + $last_checked = cache()->get($exchange.'-deposit_address-check-'.$coin->symbol); + if(empty($market->deposit_address) && !$last_checked) + { + sleep(1); + $res = nova_api_user('getdepositaddress/'.$coin->symbol); + if($res->status == 'success') { + $addr = arraySafeVal($res, 'address'); + if (!empty($res)) { + $market->deposit_address = $addr; + // delimiter "::" for memo / payment id + $market->message = null; + debuglog("$exchange: deposit address for {$coin->symbol} updated"); + $market->save(); + } else { + debuglog("$exchange: Failed to update deposit address, ".json_decode($res)); + } + } + cache()->set($exchange.'-deposit_address-check-'.$coin->symbol, time(), 24*3600); + } + } } } diff --git a/web/yaamp/core/exchange/nova.php b/web/yaamp/core/exchange/nova.php index 4c79646f1..e45e9e792 100644 --- a/web/yaamp/core/exchange/nova.php +++ b/web/yaamp/core/exchange/nova.php @@ -4,7 +4,7 @@ function nova_api_query($method) { - $uri = "https://novaexchange.com/remote/$method/"; + $uri = "https://novaexchange.com/remote/v2/$method/"; $ch = curl_init($uri); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); @@ -22,18 +22,14 @@ function nova_api_user($method, $params=array()) if (empty(EXCH_NOVA_KEY) || empty(EXCH_NOVA_SECRET)) return false; - $uri = "https://novaexchange.com/remote/private/$method/"; + $uri = "https://novaexchange.com/remote/v2/private/$method/?nonce=".time(); $headers = array( 'Content-Type: application/x-www-form-urlencoded', ); - $mt = explode(' ', microtime()); - $nonce = $mt[1].substr($mt[0], 2, 6); - $params['apikey'] = EXCH_NOVA_KEY; - $params['apisecret'] = EXCH_NOVA_SECRET; - $params['nonce'] = $nonce; + $params['signature'] = base64_encode(hash_hmac('sha512', $uri, EXCH_NOVA_SECRET, true)); $postdata = http_build_query($params, '', '&'); // Clear the params array so that we don't accidentaly leak our keys diff --git a/web/yaamp/core/trading/nova_trading.php b/web/yaamp/core/trading/nova_trading.php index 414e6fe8d..2f01d85b5 100644 --- a/web/yaamp/core/trading/nova_trading.php +++ b/web/yaamp/core/trading/nova_trading.php @@ -2,23 +2,23 @@ function doNovaCancelOrder($id=false) { - if (!$id) { - return; - } - - $res = nova_api_user("cancelorder/{$id}"); - - if ($res->success === TRUE) { - $db_order = getdbosql( - 'db_orders', - 'market=:market AND uuid=:uuid', - array(':market'=>'nova', ':uuid'=>$id) - ); - - if ($db_order) { - $db_order->delete(); - } - } + if (!$id) { + return; + } + + $res = nova_api_user("cancelorder/{$id}"); + + if ($res->success === TRUE) { + $db_order = getdbosql( + 'db_orders', + 'market=:market AND uuid=:uuid', + array(':market'=>'nova', ':uuid'=>$id) + ); + + if ($db_order) { + $db_order->delete(); + } + } } function doNovaTrading($quick=false) @@ -79,75 +79,75 @@ function doNovaTrading($quick=false) $sell_ask_pct = exchange_get($exchange, 'trade_sell_ask_pct', 1.05); $cancel_ask_pct = exchange_get($exchange, 'trade_cancel_ask_pct', 1.20); - // upgrade orders - $coins = getdbolist('db_coins', "enable=1 AND IFNULL(dontsell,0)=0 AND id IN (SELECT DISTINCT coinid FROM markets WHERE name='{$exchange}')"); - foreach ($coins as $coin) { - if ($coin->dontsell || $coin->symbol == 'BTC') { - continue; - } - $pair = $coin->symbol.'_BTC'; + $orders = nova_api_user("myopenorders"); + if(!$orders || $orders->status != 'success') return; + + foreach ($orders->items as $order) { + if($order->ordertype != 'SELL') continue; + if($order->tocurrency != 'BTC') continue; + + $uuid = $order->orderid; + $pair = $order->market; + $symbol = $order->fromcurrency; + + $coin = getdbosql('db_coins', "symbol=:symbol OR symbol2=:symbol", array(':symbol'=>$symbol)); + if(!$coin || is_array($coin) || $coin->dontsell) continue; + sleep(1); - $orders = nova_api_user("myopenorders_market/{$pair}"); + $ticker = nova_api_query("market/info/{$pair}"); - if (isset($orders->items)) { - $order_data = $orders->items; - } else { - $order_data = array(); + if (!is_object($ticker) || !$order->price) { + continue; } - foreach ($order_data as $order) { - $uuid = $order->orderid; - $pair = $order->market; + if ($order->price > $cancel_ask_pct*$ticker->ask || $flushall) { sleep(1); - $ticker = nova_api_query("market/info/{$pair}"); + doNovaCancelOrder($uuid); + } else { + $db_order = getdbosql( + 'db_orders', + 'market=:market AND uuid=:uuid', + array(':market'=>$exchange, ':uuid'=>$uuid) + ); - if (!is_object($ticker) || !$order->price) { + if ($db_order) { continue; } - if ($order->price > $cancel_ask_pct*$ticker->ask || $flushall) { - sleep(1); - doNovaCancelOrder($uuid); - } else { - $db_order = getdbosql( - 'db_orders', - 'market=:market AND uuid=:uuid', - array(':market'=>$exchange, ':uuid'=>$uuid) - ); - - if ($db_order) { - continue; - } - - $db_order = new db_orders; - $db_order->market = $exchange; - $db_order->coinid = $coin->id; - $db_order->amount = $order->fromamount; // - $db_order->price = $order->price; // - $db_order->ask = $ticker->ask; // - $db_order->bid = $ticker->bid; // - $db_order->uuid = $uuid; - $db_order->created = time(); - $db_order->save(); - } + $db_order = new db_orders; + $db_order->market = $exchange; + $db_order->coinid = $coin->id; + $db_order->amount = $order->fromamount; + $db_order->price = $order->price; + $db_order->ask = $ticker->ask; // + $db_order->bid = $ticker->bid; // + $db_order->uuid = $uuid; + $db_order->created = time(); + $db_order->save(); } - $list = getdbolist('db_orders', "coinid=$coin->id and market='$exchange'"); - foreach ($list as $db_order) { - $found = false; - foreach ($order_data as $order) { - $uuid = $order->id; - if ($uuid == $db_order->uuid) { - $found = true; - break; - } - } - if (!$found) { - debuglog("Nova: Deleting order $coin->name $db_order->amount"); - $db_order->delete(); + } + + $list = getdbolist('db_orders', "coinid=$coin->id and market='$exchange'"); + foreach ($list as $db_order) { + $coin = getdbo('db_coins', $db_order->coinid); + if(!$coin) continue; + + $found = false; + foreach ($orders->items as $order) { + if($order->ordertype != 'SELL') continue; + + if ($order->id == $db_order->uuid) { + $found = true; + break; } } + if (!$found) { + debuglog("Nova: Deleting order $coin->name $db_order->amount"); + $db_order->delete(); + } } + sleep(2); /* Update balances and sell */ From 67983eb173fcd2a384e4ad2539475056b0d43967 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Fri, 12 May 2017 06:29:20 +0200 Subject: [PATCH 088/434] markets: restore the ignore on new nova coins + remove deleted field set using the deleted field would delete/insert records incrementing the db pk + nova fix for address --- web/yaamp/core/backend/markets.php | 17 ++--------------- web/yaamp/core/backend/rawcoins.php | 5 +---- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/web/yaamp/core/backend/markets.php b/web/yaamp/core/backend/markets.php index e2e60461f..fff6fa8e4 100644 --- a/web/yaamp/core/backend/markets.php +++ b/web/yaamp/core/backend/markets.php @@ -237,7 +237,6 @@ function updateBleutradeMarkets() if (market_get($exchange, $coin->symbol, "disabled")) { $market->disabled = 1; - $market->deleted = 1; $market->message = 'disabled from settings'; } @@ -312,7 +311,6 @@ function updateKrakenMarkets($force = false) if (market_get($exchange, $symbol, "disabled")) { $market->disabled = 1; - $market->deleted = 1; $market->message = 'disabled from settings'; } @@ -405,7 +403,6 @@ function updateBittrexMarkets($force = false) if (market_get($exchange, $coin->symbol, "disabled")) { $market->disabled = 1; - $market->deleted = 1; $market->message = 'disabled from settings'; } @@ -478,7 +475,6 @@ function updateCCexMarkets() if (market_get($exchange, $symbol, "disabled")) { $market->disabled = 1; - $market->deleted = 1; $market->message = 'disabled from settings'; } @@ -559,7 +555,6 @@ function updatePoloniexMarkets() if (market_get($exchange, $symbol, "disabled")) { $market->disabled = 1; - $market->deleted = 1; $market->message = 'disabled from settings'; $market->save(); } @@ -640,7 +635,6 @@ function updateYobitMarkets() if (market_get($exchange, $symbol, "disabled")) { $market->disabled = 1; - $market->deleted = 1; $market->message = 'disabled from settings'; } @@ -702,7 +696,6 @@ function updateJubiMarkets() if (market_get($exchange, $coin->symbol, "disabled")) { $market->disabled = 1; - $market->deleted = 1; $market->message = 'disabled from settings'; $market->save(); continue; @@ -750,7 +743,6 @@ function updateAlcurexMarkets() if (market_get($exchange, $coin->symbol, "disabled")) { $market->disabled = 1; - $market->deleted = 1; $market->message = 'disabled from settings'; $market->save(); continue; @@ -809,7 +801,6 @@ function updateCryptopiaMarkets() if (market_get($exchange, $coin->symbol, "disabled")) { $market->disabled = 1; - $market->deleted = 1; $market->message = 'disabled from settings'; $market->save(); continue; @@ -904,7 +895,6 @@ function updateNovaMarkets() if (market_get($exchange, $coin->symbol, "disabled", null, $base)) { $market->disabled = 1; - $market->deleted = 1; $market->message = 'disabled from settings'; $market->save(); continue; @@ -945,14 +935,14 @@ function updateNovaMarkets() $res = nova_api_user('getdepositaddress/'.$coin->symbol); if($res->status == 'success') { $addr = arraySafeVal($res, 'address'); - if (!empty($res)) { + if (!empty($addr)) { $market->deposit_address = $addr; // delimiter "::" for memo / payment id $market->message = null; debuglog("$exchange: deposit address for {$coin->symbol} updated"); $market->save(); } else { - debuglog("$exchange: Failed to update deposit address, ".json_decode($res)); + debuglog("$exchange: Failed to update deposit address, ".json_encode($res)); } } cache()->set($exchange.'-deposit_address-check-'.$coin->symbol, time(), 24*3600); @@ -977,7 +967,6 @@ function updateBterMarkets() if (market_get($exchange, $coin->symbol, "disabled")) { $market->disabled = 1; - $market->deleted = 1; $market->message = 'disabled from settings'; $market->save(); continue; @@ -1019,7 +1008,6 @@ function updateEmpoexMarkets() if (market_get($exchange, $coin->symbol, "disabled")) { $market->disabled = 1; - $market->deleted = 1; $market->message = 'disabled from settings'; $market->save(); continue; @@ -1187,7 +1175,6 @@ function updateShapeShiftMarkets() if (market_get($exchange, $coin->symbol, "disabled")) { $market->disabled = 1; - $market->deleted = 1; $market->message = 'disabled from settings'; $market->save(); continue; diff --git a/web/yaamp/core/backend/rawcoins.php b/web/yaamp/core/backend/rawcoins.php index 3fbcc023f..ec655c183 100644 --- a/web/yaamp/core/backend/rawcoins.php +++ b/web/yaamp/core/backend/rawcoins.php @@ -265,10 +265,7 @@ function updateRawCoin($marketname, $symbol, $name='unknown') } } - if ($marketname == 'nova' && !defined('EXCH_NOVA_KEY')) { - return; - } - if ($marketname == 'askcoin' || $marketname == 'coinexchange') { + if ($marketname == 'nova' || $marketname == 'askcoin' || $marketname == 'coinexchange') { // don't polute too much the db return; } From 7f49085c0e759a50511da4231b9fef4554a51719 Mon Sep 17 00:00:00 2001 From: Tristian Date: Sun, 14 May 2017 01:28:58 -0400 Subject: [PATCH 089/434] nova: fix order placement (#116) check symbol2 when getting deposit addresses check for bad server response fix typos --- web/yaamp/core/backend/markets.php | 17 ++++++---- web/yaamp/core/trading/nova_trading.php | 45 +++++++++++++------------ 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/web/yaamp/core/backend/markets.php b/web/yaamp/core/backend/markets.php index fff6fa8e4..37fe13333 100644 --- a/web/yaamp/core/backend/markets.php +++ b/web/yaamp/core/backend/markets.php @@ -883,17 +883,20 @@ function updateNovaMarkets() $coin = getdbo('db_coins', $market->coinid); if(!$coin) continue; + $symbol = $coin->symbol; + if (!empty($coin->symbol2)) $symbol = $coin->symbol2; + $base = 'BTC'; - $pair = $base.'_'.strtoupper($coin->symbol); + $pair = $base.'_'.strtoupper($symbol); $sqlFilter = ''; if (!empty($market->base_coin)) { $base = $market->base_coin; - $pair = strtoupper($market->base_coin.'_'.$coin->symbol); + $pair = strtoupper($market->base_coin.'_'.$symbol); $sqlFilter = "AND base_coin='{$market->base_coin}'"; } - if (market_get($exchange, $coin->symbol, "disabled", null, $base)) { + if (market_get($exchange, $symbol, "disabled", null, $base)) { $market->disabled = 1; $market->message = 'disabled from settings'; $market->save(); @@ -928,24 +931,24 @@ function updateNovaMarkets() if(!empty(EXCH_NOVA_KEY)) { - $last_checked = cache()->get($exchange.'-deposit_address-check-'.$coin->symbol); + $last_checked = cache()->get($exchange.'-deposit_address-check-'.$symbol); if(empty($market->deposit_address) && !$last_checked) { sleep(1); - $res = nova_api_user('getdepositaddress/'.$coin->symbol); + $res = nova_api_user('getdepositaddress/'.$symbol); if($res->status == 'success') { $addr = arraySafeVal($res, 'address'); if (!empty($addr)) { $market->deposit_address = $addr; // delimiter "::" for memo / payment id $market->message = null; - debuglog("$exchange: deposit address for {$coin->symbol} updated"); + debuglog("$exchange: deposit address for {$symbol} updated"); $market->save(); } else { debuglog("$exchange: Failed to update deposit address, ".json_encode($res)); } } - cache()->set($exchange.'-deposit_address-check-'.$coin->symbol, time(), 24*3600); + cache()->set($exchange.'-deposit_address-check-'.$symbol, time(), 24*3600); } } } diff --git a/web/yaamp/core/trading/nova_trading.php b/web/yaamp/core/trading/nova_trading.php index 2f01d85b5..d6fcb3979 100644 --- a/web/yaamp/core/trading/nova_trading.php +++ b/web/yaamp/core/trading/nova_trading.php @@ -95,11 +95,11 @@ function doNovaTrading($quick=false) if(!$coin || is_array($coin) || $coin->dontsell) continue; sleep(1); - $ticker = nova_api_query("market/info/{$pair}"); + $res = nova_api_query("market/info/{$pair}"); + if (!is_object($res) || empty($res->markets)) continue; + $ticker = $res->markets[0]; - if (!is_object($ticker) || !$order->price) { - continue; - } + if(!(isset($ticker->bid) && isset($ticker->ask)) || !$order->price) continue; if ($order->price > $cancel_ask_pct*$ticker->ask || $flushall) { sleep(1); @@ -137,7 +137,7 @@ function doNovaTrading($quick=false) foreach ($orders->items as $order) { if($order->ordertype != 'SELL') continue; - if ($order->id == $db_order->uuid) { + if ($order->orderid == $db_order->uuid) { $found = true; break; } @@ -184,8 +184,11 @@ function doNovaTrading($quick=false) sleep(1); - $pair = "{$symbol}_BTC"; - $ticker = nova_api_query("market/info/{$pair}"); + $pair = "BTC_{$symbol}"; + $info = nova_api_query("market/info/{$pair}"); + if (!is_object($info) || empty($info->markets)) continue; + $ticker = $info->markets[0]; + if(!(isset($ticker->bid) && isset($ticker->ask))) continue; if($coin->sellonbid) $sellprice = bitcoinvaluetoa($ticker->bid); @@ -196,23 +199,23 @@ function doNovaTrading($quick=false) debuglog("Nova: Selling market $pair, $amount, $sellprice"); sleep(1); - $res = nova_api_user("trade/{$pair}", array("tradetype=SELL", "tradeprice={$sellprice}", "tradeamount={$amount}", "tradebase=1")); - if (!$res->status == 'success') { + $res = nova_api_user("trade/{$pair}", array("tradetype" => "SELL", "tradeprice" => $sellprice, "tradeamount" => $amount, "tradebase" => 0)); + if (!($res->status == 'success')) { debuglog('Nova: Sell failed'); continue; } - } - $db_order = new db_orders; - $db_order->market = $exchange; - $db_order->coinid = $coin->id; - $db_order->amount = $amount; - $db_order->price = $sellprice; - $db_order->ask = $ticker->ask; - $db_order->bid = $ticker->bid; - $db_order->uuid = $res->tradeitems[0]->orderid; - $db_order->created = time(); - $db_order->save(); + $db_order = new db_orders; + $db_order->market = $exchange; + $db_order->coinid = $coin->id; + $db_order->amount = $amount; + $db_order->price = $sellprice; + $db_order->ask = $ticker->ask; + $db_order->bid = $ticker->bid; + $db_order->uuid = $res->tradeitems[0]->orderid; + $db_order->created = time(); + $db_order->save(); + } } /* Withdrawals */ @@ -223,7 +226,7 @@ function doNovaTrading($quick=false) $amount = $savebalance->balance - $withdraw_fee; debuglog("$exchange: withdraw $amount BTC to $btcaddr"); sleep(1); - $res = nova_api_user("withdraw/BTC", array("currency=BTC", "amount={$amount}", "address={$btcaddr}")); + $res = nova_api_user("withdraw/BTC", array("currency" => "BTC", "amount" => $amount, "address" => $btcaddr)); debuglog("$exchange: withdraw ".json_encode($res)); if ($res->status == 'success') { $withdraw = new db_withdraws; From 2cfbd87157a71ea7f338d41daa5b106dbebc380c Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sun, 14 May 2017 07:37:16 +0200 Subject: [PATCH 090/434] use proper function case for arraySafeVal --- web/yaamp/commands/UserCommand.php | 2 +- web/yaamp/modules/site/coin_results.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/web/yaamp/commands/UserCommand.php b/web/yaamp/commands/UserCommand.php index ca3d250e7..b0745a0fa 100644 --- a/web/yaamp/commands/UserCommand.php +++ b/web/yaamp/commands/UserCommand.php @@ -40,7 +40,7 @@ public function run($args) return 0; } else if ($args[0] == 'purge') { - $days = (int) ArraySafeVal($args, 1, '180'); + $days = (int) arraySafeVal($args, 1, '180'); if ($days < 1) return 1; $inter = new DateInterval('P'.$days.'D'); $since = new DateTime; diff --git a/web/yaamp/modules/site/coin_results.php b/web/yaamp/modules/site/coin_results.php index 902acf84a..eb01ea7dd 100644 --- a/web/yaamp/modules/site/coin_results.php +++ b/web/yaamp/modules/site/coin_results.php @@ -320,7 +320,7 @@ if (!empty($txs)) foreach($txs as $tx) { - if (ArraySafeVal($tx, 'time', $list_since+1) > $list_since) + if (arraySafeVal($tx, 'time', $list_since+1) > $list_since) $txs_array[] = $tx; } @@ -401,7 +401,7 @@ $rows = 0; foreach($txs_array as $tx) { - $category = ArraySafeVal($tx,'category'); + $category = arraySafeVal($tx,'category'); if ($category == 'spent') continue; $block = null; @@ -422,7 +422,7 @@ $eta = ''; if ($category == 'immature') { if ($coin->block_time && $coin->mature_blocks) { - $t = (int) ($coin->mature_blocks - ArraySafeVal($tx,'confirmations',0)) * $coin->block_time; + $t = (int) ($coin->mature_blocks - arraySafeVal($tx,'confirmations',0)) * $coin->block_time; $eta = "ETA: ".sprintf('%dh %02dmn', ($t/3600), ($t/60)%60); } } @@ -434,7 +434,7 @@ } else echo ''; - echo ''.ArraySafeVal($tx,'confirmations').''; + echo ''.arraySafeVal($tx,'confirmations').''; echo ''; if(isset($tx['address'])) From cb7ad1842145db18f376ba7497ba7e2613187e81 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sun, 14 May 2017 07:47:46 +0200 Subject: [PATCH 091/434] exchanges: handle more Cloudflare JSON api errors! morons --- web/yaamp/core/exchange/exchange.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/web/yaamp/core/exchange/exchange.php b/web/yaamp/core/exchange/exchange.php index 519fdc249..b01af29df 100644 --- a/web/yaamp/core/exchange/exchange.php +++ b/web/yaamp/core/exchange/exchange.php @@ -1,13 +1,16 @@ Date: Wed, 17 May 2017 10:20:57 +0200 Subject: [PATCH 092/434] upgrade to yii framework 1.1.18 see https://github.com/yiisoft/yii/blob/master/CHANGELOG --- .../HTMLPurifier/ConfigSchema/schema.ser | Bin 15000 -> 0 bytes .../HTMLPurifier/Filter/YouTube.php | 39 - .../standalone/HTMLPurifier/Lexer/PH5P.php | 3904 -------------- web/{framework-1.1.17 => framework}/.htaccess | 0 .../YiiBase.php | 4 +- .../base/CApplication.php | 6 +- .../base/CApplicationComponent.php | 0 .../base/CBehavior.php | 0 .../base/CComponent.php | 9 +- .../base/CDbStatePersister.php | 0 .../base/CErrorEvent.php | 0 .../base/CErrorHandler.php | 0 .../base/CException.php | 0 .../base/CExceptionEvent.php | 0 .../base/CHttpException.php | 0 .../base/CModel.php | 0 .../base/CModelBehavior.php | 0 .../base/CModelEvent.php | 0 .../base/CModule.php | 2 +- .../base/CSecurityManager.php | 31 + .../base/CStatePersister.php | 3 +- .../base/interfaces.php | 0 .../caching/CApcCache.php | 0 .../caching/CCache.php | 0 .../caching/CDbCache.php | 0 .../caching/CDummyCache.php | 0 .../caching/CEAcceleratorCache.php | 0 .../caching/CFileCache.php | 2 +- .../caching/CMemCache.php | 0 .../caching/CRedisCache.php | 3 + .../caching/CWinCache.php | 0 .../caching/CXCache.php | 0 .../caching/CZendDataCache.php | 0 .../caching/dependencies/CCacheDependency.php | 0 .../dependencies/CChainedCacheDependency.php | 0 .../dependencies/CDbCacheDependency.php | 0 .../CDirectoryCacheDependency.php | 0 .../dependencies/CExpressionDependency.php | 0 .../dependencies/CFileCacheDependency.php | 0 .../CGlobalStateCacheDependency.php | 0 .../cli/commands/MessageCommand.php | 10 +- .../cli/commands/MigrateCommand.php | 0 .../cli/commands/ShellCommand.php | 13 +- .../cli/commands/WebAppCommand.php | 0 .../cli/commands/shell/ControllerCommand.php | 0 .../cli/commands/shell/CrudCommand.php | 0 .../cli/commands/shell/FormCommand.php | 0 .../cli/commands/shell/HelpCommand.php | 0 .../cli/commands/shell/ModelCommand.php | 0 .../cli/commands/shell/ModuleCommand.php | 0 .../cli/views/shell/controller/controller.php | 0 .../cli/views/shell/controller/view.php | 0 .../cli/views/shell/crud/_form.php | 0 .../cli/views/shell/crud/_search.php | 0 .../cli/views/shell/crud/_view.php | 0 .../cli/views/shell/crud/admin.php | 0 .../cli/views/shell/crud/controller.php | 0 .../cli/views/shell/crud/create.php | 0 .../cli/views/shell/crud/index.php | 0 .../cli/views/shell/crud/test.php | 0 .../cli/views/shell/crud/update.php | 0 .../cli/views/shell/crud/view.php | 0 .../cli/views/shell/form/action.php | 0 .../cli/views/shell/form/form.php | 0 .../cli/views/shell/model/fixture.php | 0 .../cli/views/shell/model/model.php | 0 .../cli/views/shell/model/test.php | 0 .../module/controllers/DefaultController.php | 0 .../cli/views/shell/module/module.php | 0 .../shell/module/views/default/index.php | 0 .../cli/views/webapp/assets/git-gitignore | 0 .../cli/views/webapp/assets/hg-hgkeep | 0 .../cli/views/webapp/css/bg.gif | Bin .../cli/views/webapp/css/form.css | 0 .../cli/views/webapp/css/ie.css | 0 .../cli/views/webapp/css/main.css | 0 .../cli/views/webapp/css/print.css | 0 .../cli/views/webapp/css/screen.css | 0 .../cli/views/webapp/hg-hgignore | 0 .../cli/views/webapp/images/git-gitkeep | 0 .../cli/views/webapp/images/hg-hgkeep | 0 .../cli/views/webapp/index-test.php | 0 .../cli/views/webapp/index.php | 0 .../cli/views/webapp/protected/.htaccess | 0 .../protected/commands/shell/git-gitkeep | 0 .../webapp/protected/commands/shell/hg-hgkeep | 0 .../protected/components/Controller.php | 0 .../protected/components/UserIdentity.php | 0 .../views/webapp/protected/config/console.php | 0 .../webapp/protected/config/database.php | 0 .../views/webapp/protected/config/main.php | 0 .../views/webapp/protected/config/test.php | 0 .../protected/controllers/SiteController.php | 0 .../webapp/protected/data/schema.mysql.sql | 0 .../webapp/protected/data/schema.sqlite.sql | 0 .../views/webapp/protected/data/testdrive.db | Bin .../webapp/protected/extensions/git-gitkeep | 0 .../webapp/protected/extensions/hg-hgkeep | 0 .../webapp/protected/messages/git-gitkeep | 0 .../views/webapp/protected/messages/hg-hgkeep | 0 .../webapp/protected/migrations/git-gitkeep | 0 .../webapp/protected/migrations/hg-hgkeep | 0 .../webapp/protected/models/ContactForm.php | 0 .../webapp/protected/models/LoginForm.php | 2 + .../webapp/protected/runtime/git-gitignore | 0 .../views/webapp/protected/runtime/hg-hgkeep | 0 .../webapp/protected/tests/WebTestCase.php | 0 .../webapp/protected/tests/bootstrap.php | 0 .../protected/tests/fixtures/git-gitkeep | 0 .../webapp/protected/tests/fixtures/hg-hgkeep | 0 .../protected/tests/functional/SiteTest.php | 0 .../views/webapp/protected/tests/phpunit.xml | 0 .../protected/tests/report/git-gitignore | 0 .../webapp/protected/tests/report/hg-hgkeep | 0 .../webapp/protected/tests/unit/git-gitkeep | 0 .../webapp/protected/tests/unit/hg-hgkeep | 0 .../views/webapp/protected/vendor/git-gitkeep | 0 .../views/webapp/protected/vendor/hg-hgkeep | 0 .../protected/views/layouts/column1.php | 0 .../protected/views/layouts/column2.php | 0 .../webapp/protected/views/layouts/main.php | 0 .../webapp/protected/views/site/contact.php | 0 .../webapp/protected/views/site/error.php | 0 .../webapp/protected/views/site/index.php | 0 .../webapp/protected/views/site/login.php | 0 .../protected/views/site/pages/about.php | 0 .../cli/views/webapp/protected/yiic | 0 .../cli/views/webapp/protected/yiic.bat | 0 .../cli/views/webapp/protected/yiic.php | 0 .../webapp/themes/classic/views/.htaccess | 0 .../themes/classic/views/layouts/git-gitkeep | 0 .../themes/classic/views/layouts/hg-hgkeep | 0 .../themes/classic/views/site/git-gitkeep | 0 .../themes/classic/views/site/hg-hgkeep | 0 .../themes/classic/views/system/git-gitkeep | 0 .../themes/classic/views/system/hg-hgkeep | 0 .../collections/CAttributeCollection.php | 0 .../collections/CConfiguration.php | 0 .../collections/CList.php | 0 .../collections/CListIterator.php | 0 .../collections/CMap.php | 0 .../collections/CMapIterator.php | 0 .../collections/CQueue.php | 0 .../collections/CQueueIterator.php | 0 .../collections/CStack.php | 0 .../collections/CStackIterator.php | 0 .../collections/CTypedList.php | 0 .../collections/CTypedMap.php | 0 .../console/CConsoleApplication.php | 0 .../console/CConsoleCommand.php | 0 .../console/CConsoleCommandBehavior.php | 0 .../console/CConsoleCommandEvent.php | 0 .../console/CConsoleCommandRunner.php | 0 .../console/CHelpCommand.php | 0 .../db/CDbCommand.php | 0 .../db/CDbConnection.php | 20 + .../db/CDbDataReader.php | 0 .../db/CDbException.php | 0 .../db/CDbMigration.php | 0 .../db/CDbTransaction.php | 0 .../db/ar/CActiveFinder.php | 1 + .../db/ar/CActiveRecord.php | 7 +- .../db/ar/CActiveRecordBehavior.php | 0 .../db/schema/CDbColumnSchema.php | 0 .../db/schema/CDbCommandBuilder.php | 0 .../db/schema/CDbCriteria.php | 0 .../db/schema/CDbExpression.php | 0 .../db/schema/CDbSchema.php | 0 .../db/schema/CDbTableSchema.php | 0 .../db/schema/cubrid/CCubridColumnSchema.php | 0 .../db/schema/cubrid/CCubridSchema.php | 0 .../db/schema/cubrid/CCubridTableSchema.php | 0 .../db/schema/mssql/CMssqlColumnSchema.php | 0 .../db/schema/mssql/CMssqlCommandBuilder.php | 0 .../db/schema/mssql/CMssqlPdoAdapter.php | 0 .../db/schema/mssql/CMssqlSchema.php | 0 .../schema/mssql/CMssqlSqlsrvPdoAdapter.php | 0 .../db/schema/mssql/CMssqlTableSchema.php | 0 .../db/schema/mysql/CMysqlColumnSchema.php | 0 .../db/schema/mysql/CMysqlCommandBuilder.php | 0 .../db/schema/mysql/CMysqlSchema.php | 0 .../db/schema/mysql/CMysqlTableSchema.php | 0 .../db/schema/oci/COciColumnSchema.php | 0 .../db/schema/oci/COciCommandBuilder.php | 0 .../db/schema/oci/COciSchema.php | 0 .../db/schema/oci/COciTableSchema.php | 0 .../db/schema/pgsql/CPgsqlColumnSchema.php | 0 .../db/schema/pgsql/CPgsqlCommandBuilder.php | 0 .../db/schema/pgsql/CPgsqlSchema.php | 0 .../db/schema/pgsql/CPgsqlTableSchema.php | 0 .../db/schema/sqlite/CSqliteColumnSchema.php | 0 .../schema/sqlite/CSqliteCommandBuilder.php | 0 .../db/schema/sqlite/CSqliteSchema.php | 7 + .../gii/CCodeFile.php | 0 .../gii/CCodeForm.php | 0 .../gii/CCodeGenerator.php | 0 .../gii/CCodeModel.php | 0 .../gii/GiiModule.php | 0 .../gii/assets/css/ie.css | 0 .../gii/assets/css/main.css | 0 .../gii/assets/css/print.css | 0 .../gii/assets/css/screen.css | 0 .../gii/assets/images/logo.png | Bin .../gii/assets/js/fancybox/blank.gif | Bin .../gii/assets/js/fancybox/fancy_close.png | Bin .../gii/assets/js/fancybox/fancy_loading.png | Bin .../gii/assets/js/fancybox/fancy_nav_left.png | Bin .../assets/js/fancybox/fancy_nav_right.png | Bin .../gii/assets/js/fancybox/fancy_shadow_e.png | Bin .../gii/assets/js/fancybox/fancy_shadow_n.png | Bin .../assets/js/fancybox/fancy_shadow_ne.png | Bin .../assets/js/fancybox/fancy_shadow_nw.png | Bin .../gii/assets/js/fancybox/fancy_shadow_s.png | Bin .../assets/js/fancybox/fancy_shadow_se.png | Bin .../assets/js/fancybox/fancy_shadow_sw.png | Bin .../gii/assets/js/fancybox/fancy_shadow_w.png | Bin .../assets/js/fancybox/fancy_title_left.png | Bin .../assets/js/fancybox/fancy_title_main.png | Bin .../assets/js/fancybox/fancy_title_over.png | Bin .../assets/js/fancybox/fancy_title_right.png | Bin .../gii/assets/js/fancybox/fancybox-x.png | Bin .../gii/assets/js/fancybox/fancybox-y.png | Bin .../gii/assets/js/fancybox/fancybox.png | Bin .../js/fancybox/jquery.fancybox-1.3.1.css | 0 .../js/fancybox/jquery.fancybox-1.3.1.pack.js | 0 .../gii/assets/js/main.js | 0 .../gii/assets/js/tooltip.js | 0 .../gii/components/Pear/Text/Diff.php | 18 +- .../Pear/Text/Diff/Engine/native.php | 4 +- .../Pear/Text/Diff/Engine/shell.php | 10 +- .../Pear/Text/Diff/Engine/string.php | 19 +- .../Pear/Text/Diff/Engine/xdiff.php | 7 +- .../gii/components/Pear/Text/Diff/Mapped.php | 8 +- .../components/Pear/Text/Diff/Renderer.php | 6 +- .../Pear/Text/Diff/Renderer/context.php | 4 +- .../Pear/Text/Diff/Renderer/inline.php | 14 +- .../Pear/Text/Diff/Renderer/unified.php | 4 +- .../components/Pear/Text/Diff/ThreeWay.php | 12 +- .../gii/components/Pear/Text/Diff3.php | 10 +- .../gii/components/TextDiff.php | 0 .../gii/components/UserIdentity.php | 1 + .../gii/controllers/DefaultController.php | 0 .../generators/controller/ControllerCode.php | 0 .../controller/ControllerGenerator.php | 0 .../templates/default/controller.php | 0 .../controller/templates/default/view.php | 0 .../gii/generators/controller/views/index.php | 0 .../gii/generators/crud/CrudCode.php | 0 .../gii/generators/crud/CrudGenerator.php | 0 .../crud/templates/default/_form.php | 0 .../crud/templates/default/_search.php | 0 .../crud/templates/default/_view.php | 0 .../crud/templates/default/admin.php | 0 .../crud/templates/default/controller.php | 0 .../crud/templates/default/create.php | 0 .../crud/templates/default/index.php | 0 .../crud/templates/default/update.php | 0 .../crud/templates/default/view.php | 0 .../gii/generators/crud/views/index.php | 0 .../gii/generators/form/FormCode.php | 0 .../gii/generators/form/FormGenerator.php | 0 .../form/templates/default/action.php | 0 .../form/templates/default/form.php | 0 .../gii/generators/form/views/index.php | 0 .../gii/generators/model/ModelCode.php | 0 .../gii/generators/model/ModelGenerator.php | 0 .../model/templates/default/model.php | 0 .../gii/generators/model/views/index.php | 0 .../gii/generators/module/ModuleCode.php | 0 .../gii/generators/module/ModuleGenerator.php | 0 .../templates/default/components/.gitkeep | 0 .../default/controllers/DefaultController.php | 0 .../templates/default/messages/.gitkeep | 0 .../module/templates/default/models/.gitkeep | 0 .../module/templates/default/module.php | 0 .../templates/default/views/default/index.php | 0 .../templates/default/views/layouts/.gitkeep | 0 .../gii/generators/module/views/index.php | 0 .../gii/models/LoginForm.php | 2 + .../gii/views/common/code.php | 0 .../gii/views/common/diff.php | 0 .../gii/views/common/generator.php | 0 .../gii/views/default/error.php | 0 .../gii/views/default/index.php | 0 .../gii/views/default/login.php | 0 .../gii/views/layouts/column1.php | 0 .../gii/views/layouts/generator.php | 0 .../gii/views/layouts/main.php | 0 .../i18n/CChoiceFormat.php | 0 .../i18n/CDateFormatter.php | 0 .../i18n/CDbMessageSource.php | 0 .../i18n/CGettextMessageSource.php | 2 +- .../i18n/CLocale.php | 0 .../i18n/CMessageSource.php | 0 .../i18n/CNumberFormatter.php | 0 .../i18n/CPhpMessageSource.php | 0 .../i18n/data/README.txt | 0 .../i18n/data/aa.php | 0 .../i18n/data/aa_dj.php | 0 .../i18n/data/aa_er.php | 0 .../i18n/data/aa_et.php | 0 .../i18n/data/af.php | 0 .../i18n/data/af_na.php | 0 .../i18n/data/af_za.php | 0 .../i18n/data/agq.php | 0 .../i18n/data/agq_cm.php | 0 .../i18n/data/ak.php | 0 .../i18n/data/ak_gh.php | 0 .../i18n/data/am.php | 0 .../i18n/data/am_et.php | 0 .../i18n/data/ar.php | 0 .../i18n/data/ar_001.php | 0 .../i18n/data/ar_ae.php | 0 .../i18n/data/ar_bh.php | 0 .../i18n/data/ar_dj.php | 0 .../i18n/data/ar_dz.php | 0 .../i18n/data/ar_eg.php | 0 .../i18n/data/ar_eh.php | 0 .../i18n/data/ar_er.php | 0 .../i18n/data/ar_il.php | 0 .../i18n/data/ar_iq.php | 0 .../i18n/data/ar_jo.php | 0 .../i18n/data/ar_km.php | 0 .../i18n/data/ar_kw.php | 0 .../i18n/data/ar_lb.php | 0 .../i18n/data/ar_ly.php | 0 .../i18n/data/ar_ma.php | 0 .../i18n/data/ar_mr.php | 0 .../i18n/data/ar_om.php | 0 .../i18n/data/ar_ps.php | 0 .../i18n/data/ar_qa.php | 0 .../i18n/data/ar_sa.php | 0 .../i18n/data/ar_sd.php | 0 .../i18n/data/ar_so.php | 0 .../i18n/data/ar_sy.php | 0 .../i18n/data/ar_td.php | 0 .../i18n/data/ar_tn.php | 0 .../i18n/data/ar_ye.php | 0 .../i18n/data/as.php | 0 .../i18n/data/as_in.php | 0 .../i18n/data/asa.php | 0 .../i18n/data/asa_tz.php | 0 .../i18n/data/ast.php | 0 .../i18n/data/ast_es.php | 0 .../i18n/data/az.php | 0 .../i18n/data/az_arab.php | 0 .../i18n/data/az_arab_ir.php | 0 .../i18n/data/az_az.php | 0 .../i18n/data/az_cyrl.php | 0 .../i18n/data/az_cyrl_az.php | 0 .../i18n/data/az_ir.php | 0 .../i18n/data/az_latn.php | 0 .../i18n/data/az_latn_az.php | 0 .../i18n/data/bas.php | 0 .../i18n/data/bas_cm.php | 0 .../i18n/data/be.php | 0 .../i18n/data/be_by.php | 0 .../i18n/data/bem.php | 0 .../i18n/data/bem_zm.php | 0 .../i18n/data/bez.php | 0 .../i18n/data/bez_tz.php | 0 .../i18n/data/bg.php | 0 .../i18n/data/bg_bg.php | 0 .../i18n/data/bm.php | 0 .../i18n/data/bm_ml.php | 0 .../i18n/data/bn.php | 0 .../i18n/data/bn_bd.php | 0 .../i18n/data/bn_in.php | 0 .../i18n/data/bo.php | 0 .../i18n/data/bo_cn.php | 0 .../i18n/data/bo_in.php | 0 .../i18n/data/br.php | 0 .../i18n/data/br_fr.php | 0 .../i18n/data/brx.php | 0 .../i18n/data/brx_in.php | 0 .../i18n/data/bs.php | 0 .../i18n/data/bs_ba.php | 0 .../i18n/data/bs_cyrl.php | 0 .../i18n/data/bs_cyrl_ba.php | 0 .../i18n/data/bs_latn.php | 0 .../i18n/data/bs_latn_ba.php | 0 .../i18n/data/byn.php | 0 .../i18n/data/byn_er.php | 0 .../i18n/data/ca.php | 0 .../i18n/data/ca_ad.php | 0 .../i18n/data/ca_es.php | 0 .../i18n/data/cch.php | 0 .../i18n/data/cch_ng.php | 0 .../i18n/data/cgg.php | 0 .../i18n/data/cgg_ug.php | 0 .../i18n/data/chr.php | 0 .../i18n/data/chr_us.php | 0 .../i18n/data/cs.php | 0 .../i18n/data/cs_cz.php | 0 .../i18n/data/cy.php | 0 .../i18n/data/cy_gb.php | 0 .../i18n/data/da.php | 0 .../i18n/data/da_dk.php | 0 .../i18n/data/dav.php | 0 .../i18n/data/dav_ke.php | 0 .../i18n/data/de.php | 0 .../i18n/data/de_at.php | 0 .../i18n/data/de_be.php | 0 .../i18n/data/de_ch.php | 0 .../i18n/data/de_de.php | 0 .../i18n/data/de_li.php | 0 .../i18n/data/de_lu.php | 0 .../i18n/data/dje.php | 0 .../i18n/data/dje_ne.php | 0 .../i18n/data/dua.php | 0 .../i18n/data/dua_cm.php | 0 .../i18n/data/dv.php | 0 .../i18n/data/dv_mv.php | 0 .../i18n/data/dyo.php | 0 .../i18n/data/dyo_sn.php | 0 .../i18n/data/dz.php | 0 .../i18n/data/dz_bt.php | 0 .../i18n/data/ebu.php | 0 .../i18n/data/ebu_ke.php | 0 .../i18n/data/ee.php | 0 .../i18n/data/ee_gh.php | 0 .../i18n/data/ee_tg.php | 0 .../i18n/data/el.php | 0 .../i18n/data/el_cy.php | 0 .../i18n/data/el_gr.php | 0 .../i18n/data/el_polyton.php | 0 .../i18n/data/en.php | 0 .../i18n/data/en_150.php | 0 .../i18n/data/en_ag.php | 0 .../i18n/data/en_as.php | 0 .../i18n/data/en_au.php | 0 .../i18n/data/en_bb.php | 0 .../i18n/data/en_be.php | 0 .../i18n/data/en_bm.php | 0 .../i18n/data/en_bs.php | 0 .../i18n/data/en_bw.php | 0 .../i18n/data/en_bz.php | 0 .../i18n/data/en_ca.php | 0 .../i18n/data/en_cm.php | 0 .../i18n/data/en_dm.php | 0 .../i18n/data/en_dsrt.php | 0 .../i18n/data/en_dsrt_us.php | 0 .../i18n/data/en_fj.php | 0 .../i18n/data/en_fm.php | 0 .../i18n/data/en_gb.php | 0 .../i18n/data/en_gd.php | 0 .../i18n/data/en_gg.php | 0 .../i18n/data/en_gh.php | 0 .../i18n/data/en_gi.php | 0 .../i18n/data/en_gm.php | 0 .../i18n/data/en_gu.php | 0 .../i18n/data/en_gy.php | 0 .../i18n/data/en_hk.php | 0 .../i18n/data/en_ie.php | 0 .../i18n/data/en_im.php | 0 .../i18n/data/en_in.php | 0 .../i18n/data/en_je.php | 0 .../i18n/data/en_jm.php | 0 .../i18n/data/en_ke.php | 0 .../i18n/data/en_ki.php | 0 .../i18n/data/en_kn.php | 0 .../i18n/data/en_ky.php | 0 .../i18n/data/en_lc.php | 0 .../i18n/data/en_lr.php | 0 .../i18n/data/en_ls.php | 0 .../i18n/data/en_mg.php | 0 .../i18n/data/en_mh.php | 0 .../i18n/data/en_mp.php | 0 .../i18n/data/en_mt.php | 0 .../i18n/data/en_mu.php | 0 .../i18n/data/en_mw.php | 0 .../i18n/data/en_na.php | 0 .../i18n/data/en_ng.php | 0 .../i18n/data/en_nz.php | 0 .../i18n/data/en_pg.php | 0 .../i18n/data/en_ph.php | 0 .../i18n/data/en_pk.php | 0 .../i18n/data/en_pr.php | 0 .../i18n/data/en_pw.php | 0 .../i18n/data/en_sb.php | 0 .../i18n/data/en_sc.php | 0 .../i18n/data/en_sg.php | 0 .../i18n/data/en_shaw.php | 0 .../i18n/data/en_sl.php | 0 .../i18n/data/en_ss.php | 0 .../i18n/data/en_sz.php | 0 .../i18n/data/en_tc.php | 0 .../i18n/data/en_to.php | 0 .../i18n/data/en_tt.php | 0 .../i18n/data/en_tz.php | 0 .../i18n/data/en_ug.php | 0 .../i18n/data/en_um.php | 0 .../i18n/data/en_us.php | 0 .../i18n/data/en_us_posix.php | 0 .../i18n/data/en_vc.php | 0 .../i18n/data/en_vg.php | 0 .../i18n/data/en_vi.php | 0 .../i18n/data/en_vu.php | 0 .../i18n/data/en_ws.php | 0 .../i18n/data/en_za.php | 0 .../i18n/data/en_zm.php | 0 .../i18n/data/en_zw.php | 0 .../i18n/data/en_zz.php | 0 .../i18n/data/eo.php | 0 .../i18n/data/es.php | 0 .../i18n/data/es_419.php | 0 .../i18n/data/es_ar.php | 0 .../i18n/data/es_bo.php | 0 .../i18n/data/es_cl.php | 0 .../i18n/data/es_co.php | 0 .../i18n/data/es_cr.php | 0 .../i18n/data/es_cu.php | 0 .../i18n/data/es_do.php | 0 .../i18n/data/es_ea.php | 0 .../i18n/data/es_ec.php | 0 .../i18n/data/es_es.php | 0 .../i18n/data/es_gq.php | 0 .../i18n/data/es_gt.php | 0 .../i18n/data/es_hn.php | 0 .../i18n/data/es_ic.php | 0 .../i18n/data/es_mx.php | 0 .../i18n/data/es_ni.php | 0 .../i18n/data/es_pa.php | 0 .../i18n/data/es_pe.php | 0 .../i18n/data/es_ph.php | 0 .../i18n/data/es_pr.php | 0 .../i18n/data/es_py.php | 0 .../i18n/data/es_sv.php | 0 .../i18n/data/es_us.php | 0 .../i18n/data/es_uy.php | 0 .../i18n/data/es_ve.php | 0 .../i18n/data/et.php | 0 .../i18n/data/et_ee.php | 0 .../i18n/data/eu.php | 0 .../i18n/data/eu_es.php | 0 .../i18n/data/ewo.php | 0 .../i18n/data/ewo_cm.php | 0 .../i18n/data/fa.php | 0 .../i18n/data/fa_af.php | 0 .../i18n/data/fa_ir.php | 0 .../i18n/data/ff.php | 0 .../i18n/data/ff_sn.php | 0 .../i18n/data/fi.php | 0 .../i18n/data/fi_fi.php | 0 .../i18n/data/fil.php | 0 .../i18n/data/fil_ph.php | 0 .../i18n/data/fo.php | 0 .../i18n/data/fo_fo.php | 0 .../i18n/data/fr.php | 0 .../i18n/data/fr_be.php | 0 .../i18n/data/fr_bf.php | 0 .../i18n/data/fr_bi.php | 0 .../i18n/data/fr_bj.php | 0 .../i18n/data/fr_bl.php | 0 .../i18n/data/fr_ca.php | 0 .../i18n/data/fr_cd.php | 0 .../i18n/data/fr_cf.php | 0 .../i18n/data/fr_cg.php | 0 .../i18n/data/fr_ch.php | 0 .../i18n/data/fr_ci.php | 0 .../i18n/data/fr_cm.php | 0 .../i18n/data/fr_dj.php | 0 .../i18n/data/fr_dz.php | 0 .../i18n/data/fr_fr.php | 0 .../i18n/data/fr_ga.php | 0 .../i18n/data/fr_gf.php | 0 .../i18n/data/fr_gn.php | 0 .../i18n/data/fr_gp.php | 0 .../i18n/data/fr_gq.php | 0 .../i18n/data/fr_ht.php | 0 .../i18n/data/fr_km.php | 0 .../i18n/data/fr_lu.php | 0 .../i18n/data/fr_ma.php | 0 .../i18n/data/fr_mc.php | 0 .../i18n/data/fr_mf.php | 0 .../i18n/data/fr_mg.php | 0 .../i18n/data/fr_ml.php | 0 .../i18n/data/fr_mq.php | 0 .../i18n/data/fr_mr.php | 0 .../i18n/data/fr_mu.php | 0 .../i18n/data/fr_nc.php | 0 .../i18n/data/fr_ne.php | 0 .../i18n/data/fr_pf.php | 0 .../i18n/data/fr_re.php | 0 .../i18n/data/fr_rw.php | 0 .../i18n/data/fr_sc.php | 0 .../i18n/data/fr_sn.php | 0 .../i18n/data/fr_sy.php | 0 .../i18n/data/fr_td.php | 0 .../i18n/data/fr_tg.php | 0 .../i18n/data/fr_tn.php | 0 .../i18n/data/fr_vu.php | 0 .../i18n/data/fr_yt.php | 0 .../i18n/data/fur.php | 0 .../i18n/data/fur_it.php | 0 .../i18n/data/ga.php | 0 .../i18n/data/ga_ie.php | 0 .../i18n/data/gaa.php | 0 .../i18n/data/gaa_gh.php | 0 .../i18n/data/gd.php | 0 .../i18n/data/gd_gb.php | 0 .../i18n/data/gez.php | 0 .../i18n/data/gez_er.php | 0 .../i18n/data/gez_et.php | 0 .../i18n/data/gl.php | 0 .../i18n/data/gl_es.php | 0 .../i18n/data/gsw.php | 0 .../i18n/data/gsw_ch.php | 0 .../i18n/data/gu.php | 0 .../i18n/data/gu_in.php | 0 .../i18n/data/guz.php | 0 .../i18n/data/guz_ke.php | 0 .../i18n/data/gv.php | 0 .../i18n/data/gv_gb.php | 0 .../i18n/data/ha.php | 0 .../i18n/data/ha_arab.php | 0 .../i18n/data/ha_arab_ng.php | 0 .../i18n/data/ha_arab_sd.php | 0 .../i18n/data/ha_gh.php | 0 .../i18n/data/ha_latn.php | 0 .../i18n/data/ha_latn_gh.php | 0 .../i18n/data/ha_latn_ne.php | 0 .../i18n/data/ha_latn_ng.php | 0 .../i18n/data/ha_ne.php | 0 .../i18n/data/ha_ng.php | 0 .../i18n/data/ha_sd.php | 0 .../i18n/data/haw.php | 0 .../i18n/data/haw_us.php | 0 .../i18n/data/he.php | 0 .../i18n/data/he_il.php | 0 .../i18n/data/hi.php | 0 .../i18n/data/hi_in.php | 0 .../i18n/data/hr.php | 0 .../i18n/data/hr_ba.php | 0 .../i18n/data/hr_hr.php | 0 .../i18n/data/hu.php | 0 .../i18n/data/hu_hu.php | 0 .../i18n/data/hy.php | 0 .../i18n/data/hy_am.php | 0 .../i18n/data/ia.php | 0 .../i18n/data/ia_fr.php | 0 .../i18n/data/id.php | 0 .../i18n/data/id_id.php | 0 .../i18n/data/ig.php | 0 .../i18n/data/ig_ng.php | 0 .../i18n/data/ii.php | 0 .../i18n/data/ii_cn.php | 0 .../i18n/data/in.php | 0 .../i18n/data/is.php | 0 .../i18n/data/is_is.php | 0 .../i18n/data/it.php | 0 .../i18n/data/it_ch.php | 0 .../i18n/data/it_it.php | 0 .../i18n/data/it_sm.php | 0 .../i18n/data/iu.php | 0 .../i18n/data/iw.php | 0 .../i18n/data/ja.php | 0 .../i18n/data/ja_jp.php | 0 .../i18n/data/jgo.php | 0 .../i18n/data/jgo_cm.php | 0 .../i18n/data/jmc.php | 0 .../i18n/data/jmc_tz.php | 0 .../i18n/data/ka.php | 0 .../i18n/data/ka_ge.php | 0 .../i18n/data/kab.php | 0 .../i18n/data/kab_dz.php | 0 .../i18n/data/kaj.php | 0 .../i18n/data/kaj_ng.php | 0 .../i18n/data/kam.php | 0 .../i18n/data/kam_ke.php | 0 .../i18n/data/kcg.php | 0 .../i18n/data/kcg_ng.php | 0 .../i18n/data/kde.php | 0 .../i18n/data/kde_tz.php | 0 .../i18n/data/kea.php | 0 .../i18n/data/kea_cv.php | 0 .../i18n/data/kfo.php | 0 .../i18n/data/kfo_ci.php | 0 .../i18n/data/khq.php | 0 .../i18n/data/khq_ml.php | 0 .../i18n/data/ki.php | 0 .../i18n/data/ki_ke.php | 0 .../i18n/data/kk.php | 0 .../i18n/data/kk_cyrl.php | 0 .../i18n/data/kk_cyrl_kz.php | 0 .../i18n/data/kk_kz.php | 0 .../i18n/data/kkj.php | 0 .../i18n/data/kkj_cm.php | 0 .../i18n/data/kl.php | 0 .../i18n/data/kl_gl.php | 0 .../i18n/data/kln.php | 0 .../i18n/data/kln_ke.php | 0 .../i18n/data/km.php | 0 .../i18n/data/km_kh.php | 0 .../i18n/data/kn.php | 0 .../i18n/data/kn_in.php | 0 .../i18n/data/ko.php | 0 .../i18n/data/ko_kp.php | 0 .../i18n/data/ko_kr.php | 0 .../i18n/data/kok.php | 0 .../i18n/data/kok_in.php | 0 .../i18n/data/kpe.php | 0 .../i18n/data/kpe_gn.php | 0 .../i18n/data/kpe_lr.php | 0 .../i18n/data/ks.php | 0 .../i18n/data/ks_arab.php | 0 .../i18n/data/ks_arab_in.php | 0 .../i18n/data/ksb.php | 0 .../i18n/data/ksb_tz.php | 0 .../i18n/data/ksf.php | 0 .../i18n/data/ksf_cm.php | 0 .../i18n/data/ksh.php | 0 .../i18n/data/ksh_de.php | 0 .../i18n/data/ku.php | 0 .../i18n/data/ku_arab.php | 0 .../i18n/data/ku_arab_iq.php | 0 .../i18n/data/ku_arab_ir.php | 0 .../i18n/data/ku_iq.php | 0 .../i18n/data/ku_ir.php | 0 .../i18n/data/ku_latn.php | 0 .../i18n/data/ku_latn_sy.php | 0 .../i18n/data/ku_latn_tr.php | 0 .../i18n/data/ku_sy.php | 0 .../i18n/data/ku_tr.php | 0 .../i18n/data/kw.php | 0 .../i18n/data/kw_gb.php | 0 .../i18n/data/ky.php | 0 .../i18n/data/ky_kg.php | 0 .../i18n/data/lag.php | 0 .../i18n/data/lag_tz.php | 0 .../i18n/data/lg.php | 0 .../i18n/data/lg_ug.php | 0 .../i18n/data/ln.php | 0 .../i18n/data/ln_ao.php | 0 .../i18n/data/ln_cd.php | 0 .../i18n/data/ln_cf.php | 0 .../i18n/data/ln_cg.php | 0 .../i18n/data/lo.php | 0 .../i18n/data/lo_la.php | 0 .../i18n/data/lt.php | 0 .../i18n/data/lt_lt.php | 0 .../i18n/data/lu.php | 0 .../i18n/data/lu_cd.php | 0 .../i18n/data/luo.php | 0 .../i18n/data/luo_ke.php | 0 .../i18n/data/luy.php | 0 .../i18n/data/luy_ke.php | 0 .../i18n/data/lv.php | 0 .../i18n/data/lv_lv.php | 0 .../i18n/data/mas.php | 0 .../i18n/data/mas_ke.php | 0 .../i18n/data/mas_tz.php | 0 .../i18n/data/mer.php | 0 .../i18n/data/mer_ke.php | 0 .../i18n/data/mfe.php | 0 .../i18n/data/mfe_mu.php | 0 .../i18n/data/mg.php | 0 .../i18n/data/mg_mg.php | 0 .../i18n/data/mgh.php | 0 .../i18n/data/mgh_mz.php | 0 .../i18n/data/mgo.php | 0 .../i18n/data/mgo_cm.php | 0 .../i18n/data/mi.php | 0 .../i18n/data/mi_nz.php | 0 .../i18n/data/mk.php | 0 .../i18n/data/mk_mk.php | 0 .../i18n/data/ml.php | 0 .../i18n/data/ml_in.php | 0 .../i18n/data/mn.php | 0 .../i18n/data/mn_cn.php | 0 .../i18n/data/mn_cyrl.php | 0 .../i18n/data/mn_cyrl_mn.php | 0 .../i18n/data/mn_mn.php | 0 .../i18n/data/mn_mong.php | 0 .../i18n/data/mn_mong_cn.php | 0 .../i18n/data/mo.php | 0 .../i18n/data/mr.php | 0 .../i18n/data/mr_in.php | 0 .../i18n/data/ms.php | 0 .../i18n/data/ms_bn.php | 0 .../i18n/data/ms_latn.php | 0 .../i18n/data/ms_latn_bn.php | 0 .../i18n/data/ms_latn_my.php | 0 .../i18n/data/ms_latn_sg.php | 0 .../i18n/data/ms_my.php | 0 .../i18n/data/mt.php | 0 .../i18n/data/mt_mt.php | 0 .../i18n/data/mua.php | 0 .../i18n/data/mua_cm.php | 0 .../i18n/data/my.php | 0 .../i18n/data/my_mm.php | 0 .../i18n/data/naq.php | 0 .../i18n/data/naq_na.php | 0 .../i18n/data/nb.php | 0 .../i18n/data/nb_no.php | 0 .../i18n/data/nd.php | 0 .../i18n/data/nd_zw.php | 0 .../i18n/data/nds.php | 0 .../i18n/data/nds_de.php | 0 .../i18n/data/ne.php | 0 .../i18n/data/ne_in.php | 0 .../i18n/data/ne_np.php | 0 .../i18n/data/nl.php | 0 .../i18n/data/nl_aw.php | 0 .../i18n/data/nl_be.php | 0 .../i18n/data/nl_cw.php | 0 .../i18n/data/nl_nl.php | 0 .../i18n/data/nl_sr.php | 0 .../i18n/data/nl_sx.php | 0 .../i18n/data/nmg.php | 0 .../i18n/data/nmg_cm.php | 0 .../i18n/data/nn.php | 0 .../i18n/data/nn_no.php | 0 .../i18n/data/nnh.php | 0 .../i18n/data/nnh_cm.php | 0 .../i18n/data/no.php | 0 .../i18n/data/nr.php | 0 .../i18n/data/nr_za.php | 0 .../i18n/data/nso.php | 0 .../i18n/data/nso_za.php | 0 .../i18n/data/nus.php | 0 .../i18n/data/nus_sd.php | 0 .../i18n/data/ny.php | 0 .../i18n/data/ny_mw.php | 0 .../i18n/data/nyn.php | 0 .../i18n/data/nyn_ug.php | 0 .../i18n/data/oc.php | 0 .../i18n/data/oc_fr.php | 0 .../i18n/data/om.php | 0 .../i18n/data/om_et.php | 0 .../i18n/data/om_ke.php | 0 .../i18n/data/or.php | 0 .../i18n/data/or_in.php | 0 .../i18n/data/os.php | 0 .../i18n/data/os_ge.php | 0 .../i18n/data/os_ru.php | 0 .../i18n/data/pa.php | 0 .../i18n/data/pa_arab.php | 0 .../i18n/data/pa_arab_pk.php | 0 .../i18n/data/pa_guru.php | 0 .../i18n/data/pa_guru_in.php | 0 .../i18n/data/pa_in.php | 0 .../i18n/data/pa_pk.php | 0 .../i18n/data/pl.php | 0 .../i18n/data/pl_pl.php | 0 .../i18n/data/ps.php | 0 .../i18n/data/ps_af.php | 0 .../i18n/data/pt.php | 0 .../i18n/data/pt_ao.php | 0 .../i18n/data/pt_br.php | 0 .../i18n/data/pt_cv.php | 0 .../i18n/data/pt_gw.php | 0 .../i18n/data/pt_mo.php | 0 .../i18n/data/pt_mz.php | 0 .../i18n/data/pt_pt.php | 0 .../i18n/data/pt_st.php | 0 .../i18n/data/pt_tl.php | 0 .../i18n/data/rm.php | 0 .../i18n/data/rm_ch.php | 0 .../i18n/data/rn.php | 0 .../i18n/data/rn_bi.php | 0 .../i18n/data/ro.php | 0 .../i18n/data/ro_md.php | 0 .../i18n/data/ro_ro.php | 0 .../i18n/data/rof.php | 0 .../i18n/data/rof_tz.php | 0 .../i18n/data/root.php | 0 .../i18n/data/ru.php | 0 .../i18n/data/ru_by.php | 0 .../i18n/data/ru_kg.php | 0 .../i18n/data/ru_kz.php | 0 .../i18n/data/ru_md.php | 0 .../i18n/data/ru_ru.php | 0 .../i18n/data/ru_ua.php | 0 .../i18n/data/rw.php | 0 .../i18n/data/rw_rw.php | 0 .../i18n/data/rwk.php | 0 .../i18n/data/rwk_tz.php | 0 .../i18n/data/sa.php | 0 .../i18n/data/sa_in.php | 0 .../i18n/data/sah.php | 0 .../i18n/data/sah_ru.php | 0 .../i18n/data/saq.php | 0 .../i18n/data/saq_ke.php | 0 .../i18n/data/sbp.php | 0 .../i18n/data/sbp_tz.php | 0 .../i18n/data/se.php | 0 .../i18n/data/se_fi.php | 0 .../i18n/data/se_no.php | 0 .../i18n/data/seh.php | 0 .../i18n/data/seh_mz.php | 0 .../i18n/data/ses.php | 0 .../i18n/data/ses_ml.php | 0 .../i18n/data/sg.php | 0 .../i18n/data/sg_cf.php | 0 .../i18n/data/sh.php | 0 .../i18n/data/sh_ba.php | 0 .../i18n/data/sh_cs.php | 0 .../i18n/data/sh_yu.php | 0 .../i18n/data/shi.php | 0 .../i18n/data/shi_latn.php | 0 .../i18n/data/shi_latn_ma.php | 0 .../i18n/data/shi_ma.php | 0 .../i18n/data/shi_tfng.php | 0 .../i18n/data/shi_tfng_ma.php | 0 .../i18n/data/si.php | 0 .../i18n/data/si_lk.php | 0 .../i18n/data/sid.php | 0 .../i18n/data/sid_et.php | 0 .../i18n/data/sk.php | 0 .../i18n/data/sk_sk.php | 0 .../i18n/data/sl.php | 0 .../i18n/data/sl_si.php | 0 .../i18n/data/sn.php | 0 .../i18n/data/sn_zw.php | 0 .../i18n/data/so.php | 0 .../i18n/data/so_dj.php | 0 .../i18n/data/so_et.php | 0 .../i18n/data/so_ke.php | 0 .../i18n/data/so_so.php | 0 .../i18n/data/sq.php | 0 .../i18n/data/sq_al.php | 0 .../i18n/data/sq_mk.php | 0 .../i18n/data/sq_xk.php | 0 .../i18n/data/sr.php | 0 .../i18n/data/sr_ba.php | 0 .../i18n/data/sr_cs.php | 0 .../i18n/data/sr_cyrl.php | 0 .../i18n/data/sr_cyrl_ba.php | 0 .../i18n/data/sr_cyrl_cs.php | 0 .../i18n/data/sr_cyrl_me.php | 0 .../i18n/data/sr_cyrl_rs.php | 0 .../i18n/data/sr_cyrl_xk.php | 0 .../i18n/data/sr_cyrl_yu.php | 0 .../i18n/data/sr_latn.php | 0 .../i18n/data/sr_latn_ba.php | 0 .../i18n/data/sr_latn_cs.php | 0 .../i18n/data/sr_latn_me.php | 0 .../i18n/data/sr_latn_rs.php | 0 .../i18n/data/sr_latn_xk.php | 0 .../i18n/data/sr_latn_yu.php | 0 .../i18n/data/sr_me.php | 0 .../i18n/data/sr_rs.php | 0 .../i18n/data/sr_yu.php | 0 .../i18n/data/ss.php | 0 .../i18n/data/ss_sz.php | 0 .../i18n/data/ss_za.php | 0 .../i18n/data/ssy.php | 0 .../i18n/data/ssy_er.php | 0 .../i18n/data/st.php | 0 .../i18n/data/st_ls.php | 0 .../i18n/data/st_za.php | 0 .../i18n/data/sv.php | 0 .../i18n/data/sv_ax.php | 0 .../i18n/data/sv_fi.php | 0 .../i18n/data/sv_se.php | 0 .../i18n/data/sw.php | 0 .../i18n/data/sw_ke.php | 0 .../i18n/data/sw_tz.php | 0 .../i18n/data/sw_ug.php | 0 .../i18n/data/swc.php | 0 .../i18n/data/swc_cd.php | 0 .../i18n/data/syr.php | 0 .../i18n/data/syr_sy.php | 0 .../i18n/data/ta.php | 0 .../i18n/data/ta_in.php | 0 .../i18n/data/ta_lk.php | 0 .../i18n/data/ta_my.php | 0 .../i18n/data/ta_sg.php | 0 .../i18n/data/te.php | 0 .../i18n/data/te_in.php | 0 .../i18n/data/teo.php | 0 .../i18n/data/teo_ke.php | 0 .../i18n/data/teo_ug.php | 0 .../i18n/data/tg.php | 0 .../i18n/data/tg_cyrl.php | 0 .../i18n/data/tg_cyrl_tj.php | 0 .../i18n/data/tg_tj.php | 0 .../i18n/data/th.php | 0 .../i18n/data/th_th.php | 0 .../i18n/data/ti.php | 0 .../i18n/data/ti_er.php | 0 .../i18n/data/ti_et.php | 0 .../i18n/data/tig.php | 0 .../i18n/data/tig_er.php | 0 .../i18n/data/tl.php | 0 .../i18n/data/tl_ph.php | 0 .../i18n/data/tn.php | 0 .../i18n/data/tn_bw.php | 0 .../i18n/data/tn_za.php | 0 .../i18n/data/to.php | 0 .../i18n/data/to_to.php | 0 .../i18n/data/tr.php | 0 .../i18n/data/tr_cy.php | 0 .../i18n/data/tr_tr.php | 0 .../i18n/data/trv.php | 0 .../i18n/data/trv_tw.php | 0 .../i18n/data/ts.php | 0 .../i18n/data/ts_za.php | 0 .../i18n/data/tt.php | 0 .../i18n/data/tt_ru.php | 0 .../i18n/data/twq.php | 0 .../i18n/data/twq_ne.php | 0 .../i18n/data/tzm.php | 0 .../i18n/data/tzm_latn.php | 0 .../i18n/data/tzm_latn_ma.php | 0 .../i18n/data/tzm_ma.php | 0 .../i18n/data/ug.php | 0 .../i18n/data/ug_arab.php | 0 .../i18n/data/ug_arab_cn.php | 0 .../i18n/data/ug_cn.php | 0 .../i18n/data/uk.php | 0 .../i18n/data/uk_ua.php | 0 .../i18n/data/ur.php | 0 .../i18n/data/ur_in.php | 0 .../i18n/data/ur_pk.php | 0 .../i18n/data/uz.php | 0 .../i18n/data/uz_af.php | 0 .../i18n/data/uz_arab.php | 0 .../i18n/data/uz_arab_af.php | 0 .../i18n/data/uz_cyrl.php | 0 .../i18n/data/uz_cyrl_uz.php | 0 .../i18n/data/uz_latn.php | 0 .../i18n/data/uz_latn_uz.php | 0 .../i18n/data/uz_uz.php | 0 .../i18n/data/vai.php | 0 .../i18n/data/vai_latn.php | 0 .../i18n/data/vai_latn_lr.php | 0 .../i18n/data/vai_vaii.php | 0 .../i18n/data/vai_vaii_lr.php | 0 .../i18n/data/ve.php | 0 .../i18n/data/ve_za.php | 0 .../i18n/data/vi.php | 0 .../i18n/data/vi_vn.php | 0 .../i18n/data/vo.php | 0 .../i18n/data/vun.php | 0 .../i18n/data/vun_tz.php | 0 .../i18n/data/wae.php | 0 .../i18n/data/wae_ch.php | 0 .../i18n/data/wal.php | 0 .../i18n/data/wal_et.php | 0 .../i18n/data/wo.php | 0 .../i18n/data/wo_latn.php | 0 .../i18n/data/wo_latn_sn.php | 0 .../i18n/data/wo_sn.php | 0 .../i18n/data/xh.php | 0 .../i18n/data/xh_za.php | 0 .../i18n/data/xog.php | 0 .../i18n/data/xog_ug.php | 0 .../i18n/data/yav.php | 0 .../i18n/data/yav_cm.php | 0 .../i18n/data/yo.php | 0 .../i18n/data/yo_ng.php | 0 .../i18n/data/zh.php | 0 .../i18n/data/zh_cn.php | 0 .../i18n/data/zh_hans.php | 0 .../i18n/data/zh_hans_cn.php | 0 .../i18n/data/zh_hans_hk.php | 0 .../i18n/data/zh_hans_mo.php | 0 .../i18n/data/zh_hans_sg.php | 0 .../i18n/data/zh_hant.php | 0 .../i18n/data/zh_hant_hk.php | 0 .../i18n/data/zh_hant_mo.php | 0 .../i18n/data/zh_hant_tw.php | 0 .../i18n/data/zh_hk.php | 0 .../i18n/data/zh_mo.php | 0 .../i18n/data/zh_sg.php | 0 .../i18n/data/zh_tw.php | 0 .../i18n/data/zu.php | 0 .../i18n/data/zu_za.php | 0 .../i18n/gettext/CGettextFile.php | 0 .../i18n/gettext/CGettextMoFile.php | 2 + .../i18n/gettext/CGettextPoFile.php | 0 .../logging/CChainedLogFilter.php | 0 .../logging/CDbLogRoute.php | 0 .../logging/CEmailLogRoute.php | 0 .../logging/CFileLogRoute.php | 0 .../logging/CLogFilter.php | 0 .../logging/CLogRoute.php | 0 .../logging/CLogRouter.php | 0 .../logging/CLogger.php | 0 .../logging/CProfileLogRoute.php | 0 .../logging/CSysLogRoute.php | 0 .../logging/CWebLogRoute.php | 0 .../messages/ar/yii.php | 0 .../messages/ar/zii.php | 0 .../messages/bg/yii.php | 0 .../messages/bg/zii.php | 0 .../messages/bs/yii.php | 142 +- .../messages/ca/yii.php | 0 .../messages/ca/zii.php | 0 .../messages/config.php | 0 .../messages/cs/yii.php | 0 .../messages/cs/zii.php | 0 .../messages/da/yii.php | 0 .../messages/da/zii.php | 0 .../messages/de/yii.php | 0 .../messages/de/zii.php | 0 .../messages/el/yii.php | 0 .../messages/el/zii.php | 0 .../messages/es/yii.php | 0 .../messages/es/zii.php | 0 .../messages/fa_ir/yii.php | 0 .../messages/fa_ir/zii.php | 0 .../messages/fi/yii.php | 0 .../messages/fi/zii.php | 0 .../messages/fr/yii.php | 32 +- .../messages/fr/zii.php | 0 .../messages/he/yii.php | 0 .../messages/he/zii.php | 0 web/framework/messages/hr/yii.php | 231 + .../messages/hu/yii.php | 0 .../messages/hu/zii.php | 0 .../messages/id/yii.php | 0 .../messages/id/zii.php | 0 .../messages/it/yii.php | 0 .../messages/it/zii.php | 0 .../messages/ja/yii.php | 0 .../messages/ja/zii.php | 0 .../messages/kk/yii.php | 0 .../messages/kk/zii.php | 0 .../messages/ko_kr/yii.php | 0 .../messages/ko_kr/zii.php | 0 .../messages/lt/yii.php | 0 .../messages/lt/zii.php | 0 .../messages/lv/yii.php | 0 .../messages/lv/zii.php | 0 .../messages/nl/yii.php | 0 .../messages/nl/zii.php | 0 .../messages/no/yii.php | 0 .../messages/no/zii.php | 0 .../messages/pl/yii.php | 0 .../messages/pl/zii.php | 0 .../messages/pt/yii.php | 0 .../messages/pt/zii.php | 0 .../messages/pt_br/yii.php | 0 .../messages/pt_br/zii.php | 0 .../messages/ro/yii.php | 0 .../messages/ro/zii.php | 0 .../messages/ru/yii.php | 0 .../messages/ru/zii.php | 0 .../messages/sk/yii.php | 0 .../messages/sk/zii.php | 0 .../messages/sr_sr/yii.php | 0 .../messages/sr_sr/zii.php | 0 .../messages/sr_yu/yii.php | 0 .../messages/sr_yu/zii.php | 0 .../messages/sv/yii.php | 0 .../messages/sv/zii.php | 0 .../messages/ta_in/yii.php | 0 .../messages/ta_in/zii.php | 0 .../messages/th/yii.php | 0 .../messages/tr/yii.php | 0 .../messages/tr/zii.php | 0 .../messages/uk/yii.php | 0 .../messages/uk/zii.php | 0 .../messages/vi/yii.php | 0 .../messages/vi/zii.php | 0 .../messages/zh_cn/yii.php | 0 .../messages/zh_cn/zii.php | 0 .../messages/zh_tw/yii.php | 0 .../messages/zh_tw/zii.php | 0 .../test/CDbFixtureManager.php | 0 .../test/CDbTestCase.php | 0 .../test/CTestCase.php | 0 .../test/CWebTestCase.php | 0 .../utils/CDateTimeParser.php | 0 .../utils/CFileHelper.php | 2 + .../utils/CFormatter.php | 0 .../utils/CLocalizedFormatter.php | 0 .../utils/CMarkdownParser.php | 0 .../utils/CPasswordHelper.php | 0 .../utils/CPropertyValue.php | 10 +- .../utils/CTimestamp.php | 0 .../utils/CVarDumper.php | 0 .../utils/fileExtensions.php | 0 .../utils/mimeTypes.php | 0 .../validators/CBooleanValidator.php | 0 .../validators/CCaptchaValidator.php | 0 .../validators/CCompareValidator.php | 0 .../validators/CDateValidator.php | 0 .../validators/CDefaultValueValidator.php | 0 .../validators/CEmailValidator.php | 0 .../validators/CExistValidator.php | 0 .../validators/CFileValidator.php | 0 .../validators/CFilterValidator.php | 0 .../validators/CInlineValidator.php | 0 .../validators/CNumberValidator.php | 0 .../validators/CRangeValidator.php | 4 +- .../CRegularExpressionValidator.php | 0 .../validators/CRequiredValidator.php | 0 .../validators/CSafeValidator.php | 0 .../validators/CStringValidator.php | 0 .../validators/CTypeValidator.php | 0 .../validators/CUniqueValidator.php | 0 .../validators/CUnsafeValidator.php | 0 .../validators/CUrlValidator.php | 0 .../validators/CValidator.php | 0 .../vendors/Net_IDNA2/LICENSE.txt | 0 .../vendors/Net_IDNA2/Net/IDNA2.php | 0 .../vendors/Net_IDNA2/Net/IDNA2/Exception.php | 0 .../Net/IDNA2/Exception/Nameprep.php | 0 .../vendors/README.html | 9 +- .../TextHighlighter/Text/Highlighter.php | 6 +- .../TextHighlighter/Text/Highlighter/ABAP.php | 0 .../TextHighlighter/Text/Highlighter/AVRC.php | 877 +++ .../TextHighlighter/Text/Highlighter/CPP.php | 66 +- .../TextHighlighter/Text/Highlighter/CSS.php | 0 .../TextHighlighter/Text/Highlighter/DIFF.php | 0 .../TextHighlighter/Text/Highlighter/DTD.php | 0 .../Text/Highlighter/Generator.php | 0 .../TextHighlighter/Text/Highlighter/HTML.php | 0 .../TextHighlighter/Text/Highlighter/JAVA.php | 0 .../Text/Highlighter/JAVASCRIPT.php | 0 .../Text/Highlighter/MYSQL.php | 0 .../TextHighlighter/Text/Highlighter/PERL.php | 0 .../TextHighlighter/Text/Highlighter/PHP.php | 4 +- .../Text/Highlighter/PYTHON.php | 0 .../TextHighlighter/Text/Highlighter/RUBY.php | 0 .../Text/Highlighter/Renderer.php | 0 .../Text/Highlighter/Renderer/Array.php | 5 +- .../Text/Highlighter/Renderer/BB.php | 0 .../Text/Highlighter/Renderer/Console.php | 13 +- .../Text/Highlighter/Renderer/Html.php | 32 +- .../Text/Highlighter/Renderer/HtmlTags.php | 0 .../Text/Highlighter/Renderer/JSON.php | 0 .../Text/Highlighter/Renderer/XML.php | 0 .../TextHighlighter/Text/Highlighter/SH.php | 0 .../TextHighlighter/Text/Highlighter/SQL.php | 0 .../Text/Highlighter/VBSCRIPT.php | 0 .../TextHighlighter/Text/Highlighter/XML.php | 0 .../vendors/TextHighlighter/Text/README | 910 ++-- .../vendors/TextHighlighter/Text/TODO | 0 .../vendors/TextHighlighter/Text/abap.xml | 0 .../vendors/TextHighlighter/Text/avrc.xml | 316 ++ .../vendors/TextHighlighter/Text/cpp.xml | 402 +- .../vendors/TextHighlighter/Text/css.xml | 0 .../vendors/TextHighlighter/Text/diff.xml | 0 .../vendors/TextHighlighter/Text/dtd.xml | 0 .../vendors/TextHighlighter/Text/generate | 342 +- .../vendors/TextHighlighter/Text/generate.bat | 376 +- .../vendors/TextHighlighter/Text/html.xml | 0 .../vendors/TextHighlighter/Text/java.xml | 0 .../TextHighlighter/Text/javascript.xml | 0 .../vendors/TextHighlighter/Text/mysql.xml | 0 .../vendors/TextHighlighter/Text/package.xml | 0 .../vendors/TextHighlighter/Text/perl.xml | 0 .../vendors/TextHighlighter/Text/php.xml | 388 +- .../vendors/TextHighlighter/Text/python.xml | 0 .../vendors/TextHighlighter/Text/ruby.xml | 0 .../vendors/TextHighlighter/Text/sample.css | 0 .../vendors/TextHighlighter/Text/sh.xml | 0 .../vendors/TextHighlighter/Text/sql.xml | 0 .../vendors/TextHighlighter/Text/vbscript.xml | 0 .../vendors/TextHighlighter/Text/xml.xml | 0 .../vendors/TextHighlighter/highlight.css | 0 .../vendors/adodb/LICENSE.txt | 0 .../vendors/bbq/LICENSE.txt | 0 .../vendors/cldr/LICENSE.txt | 0 .../vendors/console-normalizer/README.md | 0 .../normalizeconsole.min.js | 0 .../vendors/gettext/LICENSE.txt | 0 .../vendors/history/license.txt | 0 .../htmlpurifier/HTMLPurifier.standalone.php | 915 +++- .../vendors/htmlpurifier/LICENSE.txt | 0 .../ConfigSchema/Builder/ConfigSchema.php | 8 +- .../HTMLPurifier/ConfigSchema/Builder/Xml.php | 94 +- .../HTMLPurifier/ConfigSchema/Exception.php | 0 .../HTMLPurifier/ConfigSchema/Interchange.php | 0 .../ConfigSchema/Interchange/Directive.php | 28 +- .../ConfigSchema/Interchange/Id.php | 33 +- .../ConfigSchema/InterchangeBuilder.php | 0 .../HTMLPurifier/ConfigSchema/Validator.php | 0 .../ConfigSchema/ValidatorAtom.php | 0 .../HTMLPurifier/ConfigSchema/schema.ser | Bin 0 -> 15923 bytes .../schema/Attr.AllowedClasses.txt | 0 .../schema/Attr.AllowedFrameTargets.txt | 0 .../ConfigSchema/schema/Attr.AllowedRel.txt | 0 .../ConfigSchema/schema/Attr.AllowedRev.txt | 0 .../schema/Attr.ClassUseCDATA.txt | 0 .../schema/Attr.DefaultImageAlt.txt | 0 .../schema/Attr.DefaultInvalidImage.txt | 0 .../schema/Attr.DefaultInvalidImageAlt.txt | 0 .../schema/Attr.DefaultTextDir.txt | 0 .../ConfigSchema/schema/Attr.EnableID.txt | 0 .../schema/Attr.ForbiddenClasses.txt | 0 .../ConfigSchema/schema/Attr.ID.HTML5.txt | 10 + .../ConfigSchema/schema/Attr.IDBlacklist.txt | 0 .../schema/Attr.IDBlacklistRegexp.txt | 0 .../ConfigSchema/schema/Attr.IDPrefix.txt | 0 .../schema/Attr.IDPrefixLocal.txt | 0 .../schema/AutoFormat.AutoParagraph.txt | 0 .../ConfigSchema/schema/AutoFormat.Custom.txt | 0 .../schema/AutoFormat.DisplayLinkURI.txt | 0 .../schema/AutoFormat.Linkify.txt | 0 .../AutoFormat.PurifierLinkify.DocURL.txt | 0 .../schema/AutoFormat.PurifierLinkify.txt | 0 .../AutoFormat.RemoveEmpty.Predicate.txt | 14 + ...rmat.RemoveEmpty.RemoveNbsp.Exceptions.txt | 0 .../AutoFormat.RemoveEmpty.RemoveNbsp.txt | 0 .../schema/AutoFormat.RemoveEmpty.txt | 0 ...utoFormat.RemoveSpansWithoutAttributes.txt | 0 .../schema/CSS.AllowDuplicates.txt | 11 + .../schema/CSS.AllowImportant.txt | 0 .../ConfigSchema/schema/CSS.AllowTricky.txt | 0 .../ConfigSchema/schema/CSS.AllowedFonts.txt | 0 .../schema/CSS.AllowedProperties.txt | 0 .../ConfigSchema/schema/CSS.DefinitionRev.txt | 0 .../schema/CSS.ForbiddenProperties.txt | 0 .../ConfigSchema/schema/CSS.MaxImgLength.txt | 0 .../ConfigSchema/schema/CSS.Proprietary.txt | 0 .../ConfigSchema/schema/CSS.Trusted.txt | 0 .../schema/Cache.DefinitionImpl.txt | 0 .../schema/Cache.SerializerPath.txt | 0 .../schema/Cache.SerializerPermissions.txt | 7 +- .../schema/Core.AggressivelyFixLt.txt | 0 .../schema/Core.AggressivelyRemoveScript.txt | 16 + .../schema/Core.AllowHostnameUnderscore.txt | 0 .../schema/Core.CollectErrors.txt | 0 .../schema/Core.ColorKeywords.txt | 0 .../schema/Core.ConvertDocumentToFragment.txt | 0 .../Core.DirectLexLineNumberSyncInterval.txt | 0 .../schema/Core.DisableExcludes.txt | 0 .../ConfigSchema/schema/Core.EnableIDNA.txt | 0 .../ConfigSchema/schema/Core.Encoding.txt | 0 .../schema/Core.EscapeInvalidChildren.txt | 0 .../schema/Core.EscapeInvalidTags.txt | 0 .../schema/Core.EscapeNonASCIICharacters.txt | 0 .../schema/Core.HiddenElements.txt | 0 .../ConfigSchema/schema/Core.Language.txt | 0 .../schema/Core.LegacyEntityDecoder.txt | 36 + .../ConfigSchema/schema/Core.LexerImpl.txt | 0 .../schema/Core.MaintainLineNumbers.txt | 0 .../schema/Core.NormalizeNewlines.txt | 0 .../schema/Core.RemoveInvalidImg.txt | 0 .../Core.RemoveProcessingInstructions.txt | 0 .../schema/Core.RemoveScriptContents.txt | 0 .../ConfigSchema/schema/Filter.Custom.txt | 0 .../Filter.ExtractStyleBlocks.Escaping.txt | 0 .../Filter.ExtractStyleBlocks.Scope.txt | 0 .../Filter.ExtractStyleBlocks.TidyImpl.txt | 0 .../schema/Filter.ExtractStyleBlocks.txt | 0 .../ConfigSchema/schema/Filter.YouTube.txt | 0 .../ConfigSchema/schema/HTML.Allowed.txt | 0 .../schema/HTML.AllowedAttributes.txt | 0 .../schema/HTML.AllowedComments.txt | 0 .../schema/HTML.AllowedCommentsRegexp.txt | 0 .../schema/HTML.AllowedElements.txt | 0 .../schema/HTML.AllowedModules.txt | 0 .../schema/HTML.Attr.Name.UseCDATA.txt | 0 .../ConfigSchema/schema/HTML.BlockWrapper.txt | 0 .../ConfigSchema/schema/HTML.CoreModules.txt | 0 .../schema/HTML.CustomDoctype.txt | 18 +- .../ConfigSchema/schema/HTML.DefinitionID.txt | 0 .../schema/HTML.DefinitionRev.txt | 0 .../ConfigSchema/schema/HTML.Doctype.txt | 0 .../schema/HTML.FlashAllowFullScreen.txt | 0 .../schema/HTML.ForbiddenAttributes.txt | 0 .../schema/HTML.ForbiddenElements.txt | 0 .../ConfigSchema/schema/HTML.MaxImgLength.txt | 0 .../ConfigSchema/schema/HTML.Nofollow.txt | 0 .../ConfigSchema/schema/HTML.Parent.txt | 0 .../ConfigSchema/schema/HTML.Proprietary.txt | 0 .../ConfigSchema/schema/HTML.SafeEmbed.txt | 0 .../ConfigSchema/schema/HTML.SafeIframe.txt | 0 .../ConfigSchema/schema/HTML.SafeObject.txt | 0 .../schema/HTML.SafeScripting.txt | 0 .../ConfigSchema/schema/HTML.Strict.txt | 0 .../ConfigSchema/schema/HTML.TargetBlank.txt | 0 .../schema/HTML.TargetNoopener.txt | 10 + .../schema/HTML.TargetNoreferrer.txt | 9 + .../ConfigSchema/schema/HTML.TidyAdd.txt | 0 .../ConfigSchema/schema/HTML.TidyLevel.txt | 0 .../ConfigSchema/schema/HTML.TidyRemove.txt | 0 .../ConfigSchema/schema/HTML.Trusted.txt | 0 .../ConfigSchema/schema/HTML.XHTML.txt | 0 .../schema/Output.CommentScriptContents.txt | 0 .../schema/Output.FixInnerHTML.txt | 0 .../schema/Output.FlashCompat.txt | 0 .../ConfigSchema/schema/Output.Newline.txt | 0 .../ConfigSchema/schema/Output.SortAttr.txt | 0 .../ConfigSchema/schema/Output.TidyFormat.txt | 0 .../ConfigSchema/schema/Test.ForceNoIconv.txt | 0 .../schema/URI.AllowedSchemes.txt | 35 +- .../ConfigSchema/schema/URI.Base.txt | 0 .../ConfigSchema/schema/URI.DefaultScheme.txt | 25 +- .../ConfigSchema/schema/URI.DefinitionID.txt | 0 .../ConfigSchema/schema/URI.DefinitionRev.txt | 0 .../ConfigSchema/schema/URI.Disable.txt | 0 .../schema/URI.DisableExternal.txt | 0 .../schema/URI.DisableExternalResources.txt | 0 .../schema/URI.DisableResources.txt | 0 .../ConfigSchema/schema/URI.Host.txt | 0 .../ConfigSchema/schema/URI.HostBlacklist.txt | 0 .../ConfigSchema/schema/URI.MakeAbsolute.txt | 0 .../ConfigSchema/schema/URI.Munge.txt | 0 .../schema/URI.MungeResources.txt | 0 .../schema/URI.MungeSecretKey.txt | 0 .../schema/URI.OverrideAllowedSchemes.txt | 0 .../schema/URI.SafeIframeRegexp.txt | 0 .../HTMLPurifier/ConfigSchema/schema/info.ini | 0 .../HTMLPurifier/EntityLookup/entities.ser | 0 .../Filter/ExtractStyleBlocks.php | 96 +- .../HTMLPurifier/Filter/YouTube.php | 65 + .../Language/classes/en-x-test.php | 3 - .../Language/messages/en-x-test.php | 0 .../Language/messages/en-x-testmini.php | 0 .../HTMLPurifier/Language/messages/en.php | 0 .../standalone/HTMLPurifier/Lexer/PH5P.php | 4788 +++++++++++++++++ .../standalone/HTMLPurifier/Printer.php | 0 .../HTMLPurifier/Printer/CSSDefinition.php | 0 .../HTMLPurifier/Printer/ConfigForm.css | 0 .../HTMLPurifier/Printer/ConfigForm.js | 0 .../HTMLPurifier/Printer/ConfigForm.php | 4 + .../HTMLPurifier/Printer/HTMLDefinition.php | 0 .../vendors/jquery/LICENSE.txt | 0 .../vendors/jquery/autocomplete/LICENSE.txt | 0 .../vendors/jquery/maskedinput/LICENSE.txt | 0 .../vendors/jquery/treeview/LICENSE.txt | 0 .../vendors/jqueryui/MIT-LICENSE.txt | 0 .../vendors/json/LICENSE.txt | 0 .../vendors/markdown/LICENSE.txt | 0 .../vendors/markdown/markdown.php | 0 .../vendors/punycode/LICENSE-GPL.txt | 0 .../vendors/punycode/LICENSE-MIT.txt | 0 .../vendors/zend-escaper/Escaper.php | 384 ++ web/framework/vendors/zend-escaper/LICENSE.md | 28 + .../views/ar/error.php | 0 .../views/ar/error400.php | 0 .../views/ar/error403.php | 0 .../views/ar/error404.php | 0 .../views/ar/error500.php | 0 .../views/ar/error503.php | 0 .../views/ar/exception.php | 0 .../views/ar/log-firebug.php | 0 .../views/ar/log.php | 0 .../views/ar/profile-callstack-firebug.php | 0 .../views/ar/profile-callstack.php | 0 .../views/ar/profile-summary-firebug.php | 0 .../views/ar/profile-summary.php | 0 .../views/bg/error.php | 0 .../views/bg/error400.php | 0 .../views/bg/error403.php | 0 .../views/bg/error404.php | 0 .../views/bg/error500.php | 0 .../views/bg/error503.php | 0 .../views/bg/log-firebug.php | 0 .../views/bg/log.php | 0 .../views/bg/profile-callstack-firebug.php | 0 .../views/bg/profile-callstack.php | 0 .../views/bg/profile-summary-firebug.php | 0 .../views/bg/profile-summary.php | 0 .../views/ca/error.php | 0 .../views/ca/error400.php | 0 .../views/ca/error403.php | 0 .../views/ca/error404.php | 0 .../views/ca/error500.php | 0 .../views/ca/error503.php | 0 .../views/ca/log-firebug.php | 0 .../views/ca/log.php | 0 .../views/ca/profile-callstack-firebug.php | 0 .../views/ca/profile-callstack.php | 0 .../views/ca/profile-summary-firebug.php | 0 .../views/ca/profile-summary.php | 0 .../views/da/error.php | 0 .../views/da/error400.php | 0 .../views/da/error403.php | 0 .../views/da/error404.php | 0 .../views/da/error500.php | 0 .../views/da/error503.php | 0 .../views/da/exception.php | 0 .../views/da/log-firebug.php | 0 .../views/da/log.php | 0 .../views/da/profile-callstack-firebug.php | 0 .../views/da/profile-callstack.php | 0 .../views/da/profile-summary-firebug.php | 0 .../views/da/profile-summary.php | 0 .../views/de/error.php | 0 .../views/de/error400.php | 0 .../views/de/error403.php | 0 .../views/de/error404.php | 0 .../views/de/error500.php | 0 .../views/de/error503.php | 0 .../views/de/log-firebug.php | 0 .../views/de/log.php | 0 .../views/de/profile-callstack-firebug.php | 0 .../views/de/profile-callstack.php | 0 .../views/de/profile-summary-firebug.php | 0 .../views/de/profile-summary.php | 0 .../views/el/error.php | 0 .../views/el/error400.php | 0 .../views/el/error403.php | 0 .../views/el/error404.php | 0 .../views/el/error500.php | 0 .../views/el/error503.php | 0 .../views/el/log-firebug.php | 0 .../views/el/log.php | 0 .../views/el/profile-callstack-firebug.php | 0 .../views/el/profile-callstack.php | 0 .../views/el/profile-summary-firebug.php | 0 .../views/el/profile-summary.php | 0 .../views/error.php | 0 .../views/error400.php | 0 .../views/error403.php | 0 .../views/error404.php | 0 .../views/error500.php | 0 .../views/error503.php | 0 .../views/es/error.php | 0 .../views/es/error400.php | 0 .../views/es/error403.php | 0 .../views/es/error404.php | 0 .../views/es/error500.php | 0 .../views/es/error503.php | 0 .../views/es/log-firebug.php | 0 .../views/es/log.php | 0 .../views/es/profile-callstack-firebug.php | 0 .../views/es/profile-callstack.php | 0 .../views/es/profile-summary-firebug.php | 0 .../views/es/profile-summary.php | 0 .../views/exception.php | 0 .../views/fi/error.php | 0 .../views/fi/error400.php | 0 .../views/fi/error403.php | 0 .../views/fi/error404.php | 0 .../views/fi/error500.php | 0 .../views/fi/error503.php | 0 .../views/fi/exception.php | 0 .../views/fi/log-firebug.php | 0 .../views/fi/log.php | 0 .../views/fi/profile-callstack-firebug.php | 0 .../views/fi/profile-callstack.php | 0 .../views/fi/profile-summary-firebug.php | 0 .../views/fi/profile-summary.php | 0 .../views/fr/error.php | 0 .../views/fr/error400.php | 0 .../views/fr/error403.php | 0 .../views/fr/error404.php | 0 .../views/fr/error500.php | 0 .../views/fr/error503.php | 0 .../views/fr/log-firebug.php | 0 .../views/fr/log.php | 0 .../views/fr/profile-callstack-firebug.php | 0 .../views/fr/profile-callstack.php | 0 .../views/fr/profile-summary-firebug.php | 0 .../views/fr/profile-summary.php | 0 .../views/he/error.php | 0 .../views/he/error400.php | 0 .../views/he/error403.php | 0 .../views/he/error404.php | 0 .../views/he/error500.php | 0 .../views/he/error503.php | 0 .../views/he/log-firebug.php | 0 .../views/he/log.php | 0 .../views/he/profile-callstack-firebug.php | 0 .../views/he/profile-callstack.php | 0 .../views/he/profile-summary-firebug.php | 0 .../views/he/profile-summary.php | 0 .../views/hr/error.php | 0 .../views/hr/error400.php | 0 .../views/hr/error403.php | 0 .../views/hr/error404.php | 0 .../views/hr/error500.php | 0 .../views/hr/error503.php | 0 .../views/hr/log-firebug.php | 0 .../views/hr/log.php | 0 .../views/hr/profile-callstack-firebug.php | 0 .../views/hr/profile-callstack.php | 0 .../views/hr/profile-summary-firebug.php | 0 .../views/hr/profile-summary.php | 0 .../views/id/error.php | 0 .../views/id/error400.php | 0 .../views/id/error403.php | 0 .../views/id/error404.php | 0 .../views/id/error500.php | 0 .../views/id/error503.php | 0 .../views/id/log-firebug.php | 0 .../views/id/log.php | 0 .../views/id/profile-callstack-firebug.php | 0 .../views/id/profile-callstack.php | 0 .../views/id/profile-summary-firebug.php | 0 .../views/id/profile-summary.php | 0 .../views/it/error.php | 0 .../views/it/error400.php | 0 .../views/it/error403.php | 0 .../views/it/error404.php | 0 .../views/it/error500.php | 0 .../views/it/error503.php | 0 .../views/it/log-firebug.php | 0 .../views/it/log.php | 0 .../views/it/profile-callstack-firebug.php | 0 .../views/it/profile-callstack.php | 0 .../views/it/profile-summary-firebug.php | 0 .../views/it/profile-summary.php | 0 .../views/ja/error.php | 0 .../views/ja/error400.php | 0 .../views/ja/error403.php | 0 .../views/ja/error404.php | 0 .../views/ja/error500.php | 0 .../views/ja/error503.php | 0 .../views/ja/exception.php | 0 .../views/ja/log-firebug.php | 0 .../views/ja/log.php | 0 .../views/ja/profile-callstack-firebug.php | 0 .../views/ja/profile-callstack.php | 0 .../views/ja/profile-summary-firebug.php | 0 .../views/ja/profile-summary.php | 0 .../views/ko/error.php | 0 .../views/ko/error400.php | 0 .../views/ko/error403.php | 0 .../views/ko/error404.php | 0 .../views/ko/error500.php | 0 .../views/ko/error503.php | 0 .../views/ko/exception.php | 0 .../views/ko/log-firebug.php | 0 .../views/ko/log.php | 0 .../views/ko/profile-callstack-firebug.php | 0 .../views/ko/profile-callstack.php | 0 .../views/ko/profile-summary-firebug.php | 0 .../views/ko/profile-summary.php | 0 .../views/log-firebug.php | 0 .../views/log.php | 0 .../views/lt/error.php | 0 .../views/lt/error400.php | 0 .../views/lt/error403.php | 0 .../views/lt/error404.php | 0 .../views/lt/error500.php | 0 .../views/lt/error503.php | 0 .../views/lt/exception.php | 0 .../views/lt/log-firebug.php | 0 .../views/lt/log.php | 0 .../views/lt/profile-callstack-firebug.php | 0 .../views/lt/profile-callstack.php | 0 .../views/lt/profile-summary-firebug.php | 0 .../views/lt/profile-summary.php | 0 .../views/lv/error.php | 0 .../views/lv/error400.php | 0 .../views/lv/error403.php | 0 .../views/lv/error404.php | 0 .../views/lv/error500.php | 0 .../views/lv/error503.php | 0 .../views/lv/log-firebug.php | 0 .../views/lv/log.php | 0 .../views/lv/profile-callstack-firebug.php | 0 .../views/lv/profile-callstack.php | 0 .../views/lv/profile-summary-firebug.php | 0 .../views/lv/profile-summary.php | 0 .../views/nl/error.php | 0 .../views/nl/error400.php | 0 .../views/nl/error403.php | 0 .../views/nl/error404.php | 0 .../views/nl/error500.php | 0 .../views/nl/error503.php | 0 .../views/nl/log-firebug.php | 0 .../views/nl/log.php | 0 .../views/nl/profile-callstack-firebug.php | 0 .../views/nl/profile-callstack.php | 0 .../views/nl/profile-summary-firebug.php | 0 .../views/nl/profile-summary.php | 0 .../views/no/error.php | 0 .../views/no/error400.php | 0 .../views/no/error403.php | 0 .../views/no/error404.php | 0 .../views/no/error500.php | 0 .../views/no/error503.php | 0 .../views/no/log-firebug.php | 0 .../views/no/log.php | 0 .../views/no/profile-callstack-firebug.php | 0 .../views/no/profile-callstack.php | 0 .../views/no/profile-summary-firebug.php | 0 .../views/no/profile-summary.php | 0 .../views/pl/error.php | 0 .../views/pl/error400.php | 0 .../views/pl/error403.php | 0 .../views/pl/error404.php | 0 .../views/pl/error500.php | 0 .../views/pl/error503.php | 0 .../views/pl/log-firebug.php | 0 .../views/pl/log.php | 0 .../views/pl/profile-callstack-firebug.php | 0 .../views/pl/profile-callstack.php | 0 .../views/pl/profile-summary-firebug.php | 0 .../views/pl/profile-summary.php | 0 .../views/profile-callstack-firebug.php | 0 .../views/profile-callstack.php | 0 .../views/profile-summary-firebug.php | 0 .../views/profile-summary.php | 0 .../views/pt/error.php | 0 .../views/pt/error400.php | 0 .../views/pt/error403.php | 0 .../views/pt/error404.php | 0 .../views/pt/error500.php | 0 .../views/pt/error503.php | 0 .../views/pt/log-firebug.php | 0 .../views/pt/log.php | 0 .../views/pt/profile-callstack-firebug.php | 0 .../views/pt/profile-callstack.php | 0 .../views/pt/profile-summary-firebug.php | 0 .../views/pt/profile-summary.php | 0 .../views/pt_br/error.php | 0 .../views/pt_br/error400.php | 0 .../views/pt_br/error403.php | 0 .../views/pt_br/error404.php | 0 .../views/pt_br/error500.php | 0 .../views/pt_br/error503.php | 0 .../views/pt_br/log-firebug.php | 0 .../views/pt_br/log.php | 0 .../views/pt_br/profile-callstack-firebug.php | 0 .../views/pt_br/profile-callstack.php | 0 .../views/pt_br/profile-summary-firebug.php | 0 .../views/pt_br/profile-summary.php | 0 .../views/ro/error.php | 0 .../views/ro/error400.php | 0 .../views/ro/error403.php | 0 .../views/ro/error404.php | 0 .../views/ro/error500.php | 0 .../views/ro/error503.php | 0 .../views/ro/log-firebug.php | 0 .../views/ro/log.php | 0 .../views/ro/profile-callstack-firebug.php | 0 .../views/ro/profile-callstack.php | 0 .../views/ro/profile-summary-firebug.php | 0 .../views/ro/profile-summary.php | 0 .../views/ru/error.php | 0 .../views/ru/error400.php | 0 .../views/ru/error403.php | 0 .../views/ru/error404.php | 0 .../views/ru/error500.php | 0 .../views/ru/error503.php | 0 .../views/ru/log-firebug.php | 0 .../views/ru/log.php | 0 .../views/ru/profile-callstack-firebug.php | 0 .../views/ru/profile-callstack.php | 0 .../views/ru/profile-summary-firebug.php | 0 .../views/ru/profile-summary.php | 0 .../views/sk/error.php | 0 .../views/sk/error400.php | 0 .../views/sk/error403.php | 0 .../views/sk/error404.php | 0 .../views/sk/error500.php | 0 .../views/sk/error503.php | 0 .../views/sk/log-firebug.php | 0 .../views/sk/log.php | 0 .../views/sk/profile-callstack-firebug.php | 0 .../views/sk/profile-callstack.php | 0 .../views/sk/profile-summary-firebug.php | 0 .../views/sk/profile-summary.php | 0 .../views/sv/error.php | 0 .../views/sv/error400.php | 0 .../views/sv/error403.php | 0 .../views/sv/error404.php | 0 .../views/sv/error500.php | 0 .../views/sv/error503.php | 0 .../views/sv/exception.php | 0 .../views/sv/log-firebug.php | 0 .../views/sv/log.php | 0 .../views/sv/profile-callstack-firebug.php | 0 .../views/sv/profile-callstack.php | 0 .../views/sv/profile-summary-firebug.php | 0 .../views/sv/profile-summary.php | 0 .../views/uk/error.php | 0 .../views/uk/error400.php | 0 .../views/uk/error403.php | 0 .../views/uk/error404.php | 0 .../views/uk/error500.php | 0 .../views/uk/error503.php | 0 .../views/uk/exception.php | 0 .../views/uk/log-firebug.php | 0 .../views/uk/log.php | 0 .../views/uk/profile-callstack-firebug.php | 0 .../views/uk/profile-callstack.php | 0 .../views/uk/profile-summary-firebug.php | 0 .../views/uk/profile-summary.php | 0 .../views/vi/error.php | 0 .../views/vi/error400.php | 0 .../views/vi/error403.php | 0 .../views/vi/error404.php | 0 .../views/vi/error500.php | 0 .../views/vi/error503.php | 0 .../views/vi/log-firebug.php | 0 .../views/vi/log.php | 0 .../views/vi/profile-callstack-firebug.php | 0 .../views/vi/profile-callstack.php | 0 .../views/vi/profile-summary-firebug.php | 0 .../views/vi/profile-summary.php | 0 .../views/zh_cn/error.php | 0 .../views/zh_cn/error400.php | 0 .../views/zh_cn/error403.php | 0 .../views/zh_cn/error404.php | 0 .../views/zh_cn/error500.php | 0 .../views/zh_cn/error503.php | 0 .../views/zh_cn/log-firebug.php | 0 .../views/zh_cn/log.php | 0 .../views/zh_cn/profile-callstack-firebug.php | 0 .../views/zh_cn/profile-callstack.php | 0 .../views/zh_cn/profile-summary-firebug.php | 0 .../views/zh_cn/profile-summary.php | 0 .../views/zh_tw/error.php | 0 .../views/zh_tw/error400.php | 0 .../views/zh_tw/error403.php | 0 .../views/zh_tw/error404.php | 0 .../views/zh_tw/error500.php | 0 .../views/zh_tw/error503.php | 0 .../views/zh_tw/log-firebug.php | 0 .../views/zh_tw/log.php | 0 .../views/zh_tw/profile-callstack-firebug.php | 0 .../views/zh_tw/profile-callstack.php | 0 .../views/zh_tw/profile-summary-firebug.php | 0 .../views/zh_tw/profile-summary.php | 0 .../web/CActiveDataProvider.php | 0 .../web/CArrayDataProvider.php | 9 +- .../web/CAssetManager.php | 0 .../web/CBaseController.php | 1 + .../web/CCacheHttpSession.php | 10 +- .../web/CClientScript.php | 37 +- .../web/CController.php | 3 + .../web/CDataProvider.php | 0 .../web/CDataProviderIterator.php | 0 .../web/CDbHttpSession.php | 2 +- .../web/CExtController.php | 0 .../web/CFormModel.php | 0 .../web/CHttpCookie.php | 0 .../web/CHttpRequest.php | 21 +- .../web/CHttpSession.php | 5 +- .../web/CHttpSessionIterator.php | 0 .../web/COutputEvent.php | 0 .../web/CPagination.php | 0 .../web/CSort.php | 0 .../web/CSqlDataProvider.php | 0 .../web/CTheme.php | 0 .../web/CThemeManager.php | 0 .../web/CUploadedFile.php | 0 .../web/CUrlManager.php | 4 + .../web/CWebApplication.php | 0 .../web/CWebModule.php | 0 .../web/CWidgetFactory.php | 0 .../web/actions/CAction.php | 0 .../web/actions/CInlineAction.php | 0 .../web/actions/CViewAction.php | 0 .../web/auth/CAccessControlFilter.php | 1 + .../web/auth/CAuthAssignment.php | 0 .../web/auth/CAuthItem.php | 0 .../web/auth/CAuthManager.php | 0 .../web/auth/CBaseUserIdentity.php | 0 .../web/auth/CDbAuthManager.php | 0 .../web/auth/CPhpAuthManager.php | 1 + .../web/auth/CUserIdentity.php | 1 + .../web/auth/CWebUser.php | 10 +- .../web/auth/schema-cubrid.sql | 0 .../web/auth/schema-mssql.sql | 0 .../web/auth/schema-mysql.sql | 0 .../web/auth/schema-oci.sql | 0 .../web/auth/schema-pgsql.sql | 0 .../web/auth/schema-sqlite.sql | 0 .../web/filters/CFilter.php | 0 .../web/filters/CFilterChain.php | 1 + .../web/filters/CHttpCacheFilter.php | 1 + .../web/filters/CInlineFilter.php | 0 .../web/form/CForm.php | 0 .../web/form/CFormButtonElement.php | 0 .../web/form/CFormElement.php | 0 .../web/form/CFormElementCollection.php | 1 + .../web/form/CFormInputElement.php | 0 .../web/form/CFormStringElement.php | 0 .../web/helpers/CGoogleApi.php | 0 .../web/helpers/CHtml.php | 20 +- .../web/helpers/CJSON.php | 0 .../web/helpers/CJavaScript.php | 10 +- .../web/helpers/CJavaScriptExpression.php | 0 .../web/js/packages.php | 1 - .../web/js/source/autocomplete/indicator.gif | Bin .../autocomplete/jquery.autocomplete.css | 0 .../web/js/source/jquery.ajaxqueue.js | 0 .../web/js/source/jquery.autocomplete.js | 0 .../web/js/source/jquery.ba-bbq.js | 0 .../web/js/source/jquery.ba-bbq.min.js | 0 .../web/js/source/jquery.bgiframe.js | 0 .../web/js/source/jquery.cookie.js | 0 .../web/js/source/jquery.history.js | 0 .../web/js/source/jquery.js | 0 .../web/js/source/jquery.maskedinput.js | 0 .../web/js/source/jquery.maskedinput.min.js | 0 .../web/js/source/jquery.metadata.js | 0 .../web/js/source/jquery.min.js | 0 .../web/js/source/jquery.multifile.js | 0 .../web/js/source/jquery.rating.js | 0 .../web/js/source/jquery.treeview.async.js | 0 .../web/js/source/jquery.treeview.edit.js | 0 .../web/js/source/jquery.treeview.js | 0 .../web/js/source/jquery.yii.js | 0 .../web/js/source/jquery.yiiactiveform.js | 0 .../web/js/source/jquery.yiitab.js | 0 .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin .../images/ui-bg_flat_75_ffffff_40x100.png | Bin .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin .../images/ui-bg_glass_65_ffffff_1x400.png | Bin .../images/ui-bg_glass_75_dadada_1x400.png | Bin .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin .../base/images/ui-icons_222222_256x240.png | Bin .../base/images/ui-icons_2e83ff_256x240.png | Bin .../base/images/ui-icons_454545_256x240.png | Bin .../base/images/ui-icons_888888_256x240.png | Bin .../base/images/ui-icons_cd0a0a_256x240.png | Bin .../web/js/source/jui/css/base/jquery-ui.css | 0 .../js/source/jui/js/jquery-ui-i18n.min.js | 0 .../web/js/source/jui/js/jquery-ui.min.js | 0 .../web/js/source/punycode.js | 0 .../web/js/source/punycode.min.js | 0 .../web/js/source/rating/delete.gif | Bin .../web/js/source/rating/jquery.rating.css | 0 .../web/js/source/rating/star.gif | Bin .../js/source/treeview/images/ajax-loader.gif | Bin .../web/js/source/treeview/images/file.gif | Bin .../source/treeview/images/folder-closed.gif | Bin .../web/js/source/treeview/images/folder.gif | Bin .../web/js/source/treeview/images/minus.gif | Bin .../web/js/source/treeview/images/plus.gif | Bin .../treeview/images/treeview-black-line.gif | Bin .../source/treeview/images/treeview-black.gif | Bin .../treeview/images/treeview-default-line.gif | Bin .../treeview/images/treeview-default.gif | Bin .../images/treeview-famfamfam-line.gif | Bin .../treeview/images/treeview-famfamfam.gif | Bin .../treeview/images/treeview-gray-line.gif | Bin .../source/treeview/images/treeview-gray.gif | Bin .../treeview/images/treeview-red-line.gif | Bin .../source/treeview/images/treeview-red.gif | Bin .../js/source/treeview/jquery.treeview.css | 0 .../web/js/source/yiitab/jquery.yiitab.css | 0 .../web/renderers/CPradoViewRenderer.php | 0 .../web/renderers/CViewRenderer.php | 1 + .../web/services/CWebService.php | 1 + .../web/services/CWebServiceAction.php | 0 .../web/services/CWsdlGenerator.php | 12 +- .../web/widgets/CActiveForm.php | 0 .../web/widgets/CAutoComplete.php | 0 .../web/widgets/CClipWidget.php | 0 .../web/widgets/CContentDecorator.php | 0 .../web/widgets/CFilterWidget.php | 0 .../web/widgets/CFlexWidget.php | 0 .../web/widgets/CHtmlPurifier.php | 0 .../web/widgets/CInputWidget.php | 0 .../web/widgets/CMarkdown.php | 0 .../web/widgets/CMaskedTextField.php | 0 .../web/widgets/CMultiFileUpload.php | 0 .../web/widgets/COutputCache.php | 0 .../web/widgets/COutputProcessor.php | 0 .../web/widgets/CStarRating.php | 0 .../web/widgets/CTabView.php | 0 .../web/widgets/CTextHighlighter.php | 0 .../web/widgets/CTreeView.php | 0 .../web/widgets/CWidget.php | 0 .../web/widgets/captcha/CCaptcha.php | 0 .../web/widgets/captcha/CCaptchaAction.php | 0 .../web/widgets/captcha/SpicyRice.md | 0 .../web/widgets/captcha/SpicyRice.ttf | Bin .../web/widgets/pagers/CBasePager.php | 0 .../web/widgets/pagers/CLinkPager.php | 0 .../web/widgets/pagers/CListPager.php | 0 .../web/widgets/pagers/pager.css | 0 .../web/widgets/views/flexWidget.php | 0 .../yii-powered.png | Bin web/{framework-1.1.17 => framework}/yii.php | 0 web/{framework-1.1.17 => framework}/yiic | 0 web/{framework-1.1.17 => framework}/yiic.bat | 0 web/{framework-1.1.17 => framework}/yiic.php | 0 web/{framework-1.1.17 => framework}/yiit.php | 0 .../zii/behaviors/CTimestampBehavior.php | 0 .../zii/widgets/CBaseListView.php | 0 .../zii/widgets/CBreadcrumbs.php | 0 .../zii/widgets/CDetailView.php | 0 .../zii/widgets/CListView.php | 0 .../zii/widgets/CMenu.php | 0 .../zii/widgets/CPortlet.php | 0 .../zii/widgets/assets/detailview/styles.css | 0 .../zii/widgets/assets/gridview/bg.gif | Bin .../zii/widgets/assets/gridview/delete.png | Bin .../zii/widgets/assets/gridview/down.gif | Bin .../assets/gridview/jquery.yiigridview.js | 0 .../zii/widgets/assets/gridview/loading.gif | Bin .../zii/widgets/assets/gridview/styles.css | 0 .../zii/widgets/assets/gridview/up.gif | Bin .../zii/widgets/assets/gridview/update.png | Bin .../zii/widgets/assets/gridview/view.png | Bin .../zii/widgets/assets/listview/down.gif | Bin .../assets/listview/jquery.yiilistview.js | 0 .../zii/widgets/assets/listview/loading.gif | Bin .../zii/widgets/assets/listview/styles.css | 0 .../zii/widgets/assets/listview/up.gif | Bin .../zii/widgets/grid/CButtonColumn.php | 0 .../zii/widgets/grid/CCheckBoxColumn.php | 0 .../zii/widgets/grid/CDataColumn.php | 0 .../zii/widgets/grid/CGridColumn.php | 0 .../zii/widgets/grid/CGridView.php | 1 + .../zii/widgets/grid/CLinkColumn.php | 0 .../zii/widgets/jui/CJuiAccordion.php | 0 .../zii/widgets/jui/CJuiAutoComplete.php | 0 .../zii/widgets/jui/CJuiButton.php | 0 .../zii/widgets/jui/CJuiDatePicker.php | 0 .../zii/widgets/jui/CJuiDialog.php | 0 .../zii/widgets/jui/CJuiDraggable.php | 0 .../zii/widgets/jui/CJuiDroppable.php | 0 .../zii/widgets/jui/CJuiInputWidget.php | 0 .../zii/widgets/jui/CJuiProgressBar.php | 0 .../zii/widgets/jui/CJuiResizable.php | 0 .../zii/widgets/jui/CJuiSelectable.php | 0 .../zii/widgets/jui/CJuiSlider.php | 0 .../zii/widgets/jui/CJuiSliderInput.php | 0 .../zii/widgets/jui/CJuiSortable.php | 0 .../zii/widgets/jui/CJuiTabs.php | 0 .../zii/widgets/jui/CJuiWidget.php | 0 web/run.php | 2 +- web/yaamp/ui/app.php | 2 +- web/yaamp/yiic.php | 2 +- 2015 files changed, 9515 insertions(+), 5635 deletions(-) delete mode 100644 web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema.ser delete mode 100644 web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/Filter/YouTube.php delete mode 100644 web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/Lexer/PH5P.php rename web/{framework-1.1.17 => framework}/.htaccess (100%) rename web/{framework-1.1.17 => framework}/YiiBase.php (99%) rename web/{framework-1.1.17 => framework}/base/CApplication.php (99%) rename web/{framework-1.1.17 => framework}/base/CApplicationComponent.php (100%) rename web/{framework-1.1.17 => framework}/base/CBehavior.php (100%) rename web/{framework-1.1.17 => framework}/base/CComponent.php (99%) rename web/{framework-1.1.17 => framework}/base/CDbStatePersister.php (100%) rename web/{framework-1.1.17 => framework}/base/CErrorEvent.php (100%) rename web/{framework-1.1.17 => framework}/base/CErrorHandler.php (100%) rename web/{framework-1.1.17 => framework}/base/CException.php (100%) rename web/{framework-1.1.17 => framework}/base/CExceptionEvent.php (100%) rename web/{framework-1.1.17 => framework}/base/CHttpException.php (100%) rename web/{framework-1.1.17 => framework}/base/CModel.php (100%) rename web/{framework-1.1.17 => framework}/base/CModelBehavior.php (100%) rename web/{framework-1.1.17 => framework}/base/CModelEvent.php (100%) rename web/{framework-1.1.17 => framework}/base/CModule.php (99%) rename web/{framework-1.1.17 => framework}/base/CSecurityManager.php (95%) rename web/{framework-1.1.17 => framework}/base/CStatePersister.php (98%) rename web/{framework-1.1.17 => framework}/base/interfaces.php (100%) rename web/{framework-1.1.17 => framework}/caching/CApcCache.php (100%) rename web/{framework-1.1.17 => framework}/caching/CCache.php (100%) rename web/{framework-1.1.17 => framework}/caching/CDbCache.php (100%) rename web/{framework-1.1.17 => framework}/caching/CDummyCache.php (100%) rename web/{framework-1.1.17 => framework}/caching/CEAcceleratorCache.php (100%) rename web/{framework-1.1.17 => framework}/caching/CFileCache.php (99%) rename web/{framework-1.1.17 => framework}/caching/CMemCache.php (100%) rename web/{framework-1.1.17 => framework}/caching/CRedisCache.php (99%) rename web/{framework-1.1.17 => framework}/caching/CWinCache.php (100%) rename web/{framework-1.1.17 => framework}/caching/CXCache.php (100%) rename web/{framework-1.1.17 => framework}/caching/CZendDataCache.php (100%) rename web/{framework-1.1.17 => framework}/caching/dependencies/CCacheDependency.php (100%) rename web/{framework-1.1.17 => framework}/caching/dependencies/CChainedCacheDependency.php (100%) rename web/{framework-1.1.17 => framework}/caching/dependencies/CDbCacheDependency.php (100%) rename web/{framework-1.1.17 => framework}/caching/dependencies/CDirectoryCacheDependency.php (100%) rename web/{framework-1.1.17 => framework}/caching/dependencies/CExpressionDependency.php (100%) rename web/{framework-1.1.17 => framework}/caching/dependencies/CFileCacheDependency.php (100%) rename web/{framework-1.1.17 => framework}/caching/dependencies/CGlobalStateCacheDependency.php (100%) rename web/{framework-1.1.17 => framework}/cli/commands/MessageCommand.php (97%) rename web/{framework-1.1.17 => framework}/cli/commands/MigrateCommand.php (100%) rename web/{framework-1.1.17 => framework}/cli/commands/ShellCommand.php (96%) rename web/{framework-1.1.17 => framework}/cli/commands/WebAppCommand.php (100%) rename web/{framework-1.1.17 => framework}/cli/commands/shell/ControllerCommand.php (100%) rename web/{framework-1.1.17 => framework}/cli/commands/shell/CrudCommand.php (100%) rename web/{framework-1.1.17 => framework}/cli/commands/shell/FormCommand.php (100%) rename web/{framework-1.1.17 => framework}/cli/commands/shell/HelpCommand.php (100%) rename web/{framework-1.1.17 => framework}/cli/commands/shell/ModelCommand.php (100%) rename web/{framework-1.1.17 => framework}/cli/commands/shell/ModuleCommand.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/controller/controller.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/controller/view.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/crud/_form.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/crud/_search.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/crud/_view.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/crud/admin.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/crud/controller.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/crud/create.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/crud/index.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/crud/test.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/crud/update.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/crud/view.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/form/action.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/form/form.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/model/fixture.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/model/model.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/model/test.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/module/controllers/DefaultController.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/module/module.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/shell/module/views/default/index.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/assets/git-gitignore (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/assets/hg-hgkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/css/bg.gif (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/css/form.css (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/css/ie.css (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/css/main.css (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/css/print.css (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/css/screen.css (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/hg-hgignore (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/images/git-gitkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/images/hg-hgkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/index-test.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/index.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/.htaccess (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/commands/shell/git-gitkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/commands/shell/hg-hgkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/components/Controller.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/components/UserIdentity.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/config/console.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/config/database.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/config/main.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/config/test.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/controllers/SiteController.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/data/schema.mysql.sql (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/data/schema.sqlite.sql (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/data/testdrive.db (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/extensions/git-gitkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/extensions/hg-hgkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/messages/git-gitkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/messages/hg-hgkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/migrations/git-gitkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/migrations/hg-hgkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/models/ContactForm.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/models/LoginForm.php (91%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/runtime/git-gitignore (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/runtime/hg-hgkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/tests/WebTestCase.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/tests/bootstrap.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/tests/fixtures/git-gitkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/tests/fixtures/hg-hgkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/tests/functional/SiteTest.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/tests/phpunit.xml (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/tests/report/git-gitignore (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/tests/report/hg-hgkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/tests/unit/git-gitkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/tests/unit/hg-hgkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/vendor/git-gitkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/vendor/hg-hgkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/views/layouts/column1.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/views/layouts/column2.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/views/layouts/main.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/views/site/contact.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/views/site/error.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/views/site/index.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/views/site/login.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/views/site/pages/about.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/yiic (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/yiic.bat (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/protected/yiic.php (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/themes/classic/views/.htaccess (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/themes/classic/views/layouts/git-gitkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/themes/classic/views/layouts/hg-hgkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/themes/classic/views/site/git-gitkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/themes/classic/views/site/hg-hgkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/themes/classic/views/system/git-gitkeep (100%) rename web/{framework-1.1.17 => framework}/cli/views/webapp/themes/classic/views/system/hg-hgkeep (100%) rename web/{framework-1.1.17 => framework}/collections/CAttributeCollection.php (100%) rename web/{framework-1.1.17 => framework}/collections/CConfiguration.php (100%) rename web/{framework-1.1.17 => framework}/collections/CList.php (100%) rename web/{framework-1.1.17 => framework}/collections/CListIterator.php (100%) rename web/{framework-1.1.17 => framework}/collections/CMap.php (100%) rename web/{framework-1.1.17 => framework}/collections/CMapIterator.php (100%) rename web/{framework-1.1.17 => framework}/collections/CQueue.php (100%) rename web/{framework-1.1.17 => framework}/collections/CQueueIterator.php (100%) rename web/{framework-1.1.17 => framework}/collections/CStack.php (100%) rename web/{framework-1.1.17 => framework}/collections/CStackIterator.php (100%) rename web/{framework-1.1.17 => framework}/collections/CTypedList.php (100%) rename web/{framework-1.1.17 => framework}/collections/CTypedMap.php (100%) rename web/{framework-1.1.17 => framework}/console/CConsoleApplication.php (100%) rename web/{framework-1.1.17 => framework}/console/CConsoleCommand.php (100%) rename web/{framework-1.1.17 => framework}/console/CConsoleCommandBehavior.php (100%) rename web/{framework-1.1.17 => framework}/console/CConsoleCommandEvent.php (100%) rename web/{framework-1.1.17 => framework}/console/CConsoleCommandRunner.php (100%) rename web/{framework-1.1.17 => framework}/console/CHelpCommand.php (100%) rename web/{framework-1.1.17 => framework}/db/CDbCommand.php (100%) rename web/{framework-1.1.17 => framework}/db/CDbConnection.php (97%) rename web/{framework-1.1.17 => framework}/db/CDbDataReader.php (100%) rename web/{framework-1.1.17 => framework}/db/CDbException.php (100%) rename web/{framework-1.1.17 => framework}/db/CDbMigration.php (100%) rename web/{framework-1.1.17 => framework}/db/CDbTransaction.php (100%) rename web/{framework-1.1.17 => framework}/db/ar/CActiveFinder.php (99%) rename web/{framework-1.1.17 => framework}/db/ar/CActiveRecord.php (99%) rename web/{framework-1.1.17 => framework}/db/ar/CActiveRecordBehavior.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/CDbColumnSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/CDbCommandBuilder.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/CDbCriteria.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/CDbExpression.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/CDbSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/CDbTableSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/cubrid/CCubridColumnSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/cubrid/CCubridSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/cubrid/CCubridTableSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/mssql/CMssqlColumnSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/mssql/CMssqlCommandBuilder.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/mssql/CMssqlPdoAdapter.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/mssql/CMssqlSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/mssql/CMssqlSqlsrvPdoAdapter.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/mssql/CMssqlTableSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/mysql/CMysqlColumnSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/mysql/CMysqlCommandBuilder.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/mysql/CMysqlSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/mysql/CMysqlTableSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/oci/COciColumnSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/oci/COciCommandBuilder.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/oci/COciSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/oci/COciTableSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/pgsql/CPgsqlColumnSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/pgsql/CPgsqlCommandBuilder.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/pgsql/CPgsqlSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/pgsql/CPgsqlTableSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/sqlite/CSqliteColumnSchema.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/sqlite/CSqliteCommandBuilder.php (100%) rename web/{framework-1.1.17 => framework}/db/schema/sqlite/CSqliteSchema.php (98%) rename web/{framework-1.1.17 => framework}/gii/CCodeFile.php (100%) rename web/{framework-1.1.17 => framework}/gii/CCodeForm.php (100%) rename web/{framework-1.1.17 => framework}/gii/CCodeGenerator.php (100%) rename web/{framework-1.1.17 => framework}/gii/CCodeModel.php (100%) rename web/{framework-1.1.17 => framework}/gii/GiiModule.php (100%) rename web/{framework-1.1.17 => framework}/gii/assets/css/ie.css (100%) rename web/{framework-1.1.17 => framework}/gii/assets/css/main.css (100%) rename web/{framework-1.1.17 => framework}/gii/assets/css/print.css (100%) rename web/{framework-1.1.17 => framework}/gii/assets/css/screen.css (100%) rename web/{framework-1.1.17 => framework}/gii/assets/images/logo.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/blank.gif (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_close.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_loading.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_nav_left.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_nav_right.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_shadow_e.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_shadow_n.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_shadow_ne.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_shadow_nw.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_shadow_s.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_shadow_se.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_shadow_sw.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_shadow_w.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_title_left.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_title_main.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_title_over.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancy_title_right.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancybox-x.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancybox-y.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/fancybox.png (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/jquery.fancybox-1.3.1.css (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/fancybox/jquery.fancybox-1.3.1.pack.js (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/main.js (100%) rename web/{framework-1.1.17 => framework}/gii/assets/js/tooltip.js (100%) rename web/{framework-1.1.17 => framework}/gii/components/Pear/Text/Diff.php (95%) rename web/{framework-1.1.17 => framework}/gii/components/Pear/Text/Diff/Engine/native.php (99%) rename web/{framework-1.1.17 => framework}/gii/components/Pear/Text/Diff/Engine/shell.php (93%) rename web/{framework-1.1.17 => framework}/gii/components/Pear/Text/Diff/Engine/string.php (93%) rename web/{framework-1.1.17 => framework}/gii/components/Pear/Text/Diff/Engine/xdiff.php (89%) rename web/{framework-1.1.17 => framework}/gii/components/Pear/Text/Diff/Mapped.php (86%) rename web/{framework-1.1.17 => framework}/gii/components/Pear/Text/Diff/Renderer.php (96%) rename web/{framework-1.1.17 => framework}/gii/components/Pear/Text/Diff/Renderer/context.php (94%) rename web/{framework-1.1.17 => framework}/gii/components/Pear/Text/Diff/Renderer/inline.php (90%) rename web/{framework-1.1.17 => framework}/gii/components/Pear/Text/Diff/Renderer/unified.php (93%) rename web/{framework-1.1.17 => framework}/gii/components/Pear/Text/Diff/ThreeWay.php (94%) rename web/{framework-1.1.17 => framework}/gii/components/Pear/Text/Diff3.php (95%) rename web/{framework-1.1.17 => framework}/gii/components/TextDiff.php (100%) rename web/{framework-1.1.17 => framework}/gii/components/UserIdentity.php (96%) rename web/{framework-1.1.17 => framework}/gii/controllers/DefaultController.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/controller/ControllerCode.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/controller/ControllerGenerator.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/controller/templates/default/controller.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/controller/templates/default/view.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/controller/views/index.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/crud/CrudCode.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/crud/CrudGenerator.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/crud/templates/default/_form.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/crud/templates/default/_search.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/crud/templates/default/_view.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/crud/templates/default/admin.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/crud/templates/default/controller.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/crud/templates/default/create.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/crud/templates/default/index.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/crud/templates/default/update.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/crud/templates/default/view.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/crud/views/index.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/form/FormCode.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/form/FormGenerator.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/form/templates/default/action.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/form/templates/default/form.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/form/views/index.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/model/ModelCode.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/model/ModelGenerator.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/model/templates/default/model.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/model/views/index.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/module/ModuleCode.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/module/ModuleGenerator.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/module/templates/default/components/.gitkeep (100%) rename web/{framework-1.1.17 => framework}/gii/generators/module/templates/default/controllers/DefaultController.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/module/templates/default/messages/.gitkeep (100%) rename web/{framework-1.1.17 => framework}/gii/generators/module/templates/default/models/.gitkeep (100%) rename web/{framework-1.1.17 => framework}/gii/generators/module/templates/default/module.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/module/templates/default/views/default/index.php (100%) rename web/{framework-1.1.17 => framework}/gii/generators/module/templates/default/views/layouts/.gitkeep (100%) rename web/{framework-1.1.17 => framework}/gii/generators/module/views/index.php (100%) rename web/{framework-1.1.17 => framework}/gii/models/LoginForm.php (86%) rename web/{framework-1.1.17 => framework}/gii/views/common/code.php (100%) rename web/{framework-1.1.17 => framework}/gii/views/common/diff.php (100%) rename web/{framework-1.1.17 => framework}/gii/views/common/generator.php (100%) rename web/{framework-1.1.17 => framework}/gii/views/default/error.php (100%) rename web/{framework-1.1.17 => framework}/gii/views/default/index.php (100%) rename web/{framework-1.1.17 => framework}/gii/views/default/login.php (100%) rename web/{framework-1.1.17 => framework}/gii/views/layouts/column1.php (100%) rename web/{framework-1.1.17 => framework}/gii/views/layouts/generator.php (100%) rename web/{framework-1.1.17 => framework}/gii/views/layouts/main.php (100%) rename web/{framework-1.1.17 => framework}/i18n/CChoiceFormat.php (100%) rename web/{framework-1.1.17 => framework}/i18n/CDateFormatter.php (100%) rename web/{framework-1.1.17 => framework}/i18n/CDbMessageSource.php (100%) rename web/{framework-1.1.17 => framework}/i18n/CGettextMessageSource.php (98%) rename web/{framework-1.1.17 => framework}/i18n/CLocale.php (100%) rename web/{framework-1.1.17 => framework}/i18n/CMessageSource.php (100%) rename web/{framework-1.1.17 => framework}/i18n/CNumberFormatter.php (100%) rename web/{framework-1.1.17 => framework}/i18n/CPhpMessageSource.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/README.txt (100%) rename web/{framework-1.1.17 => framework}/i18n/data/aa.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/aa_dj.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/aa_er.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/aa_et.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/af.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/af_na.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/af_za.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/agq.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/agq_cm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ak.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ak_gh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/am.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/am_et.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_001.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_ae.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_bh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_dj.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_dz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_eg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_eh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_er.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_il.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_iq.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_jo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_km.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_kw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_lb.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_ly.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_ma.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_mr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_om.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_ps.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_qa.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_sa.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_sd.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_so.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_sy.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_td.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_tn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ar_ye.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/as.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/as_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/asa.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/asa_tz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ast.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ast_es.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/az.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/az_arab.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/az_arab_ir.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/az_az.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/az_cyrl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/az_cyrl_az.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/az_ir.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/az_latn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/az_latn_az.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bas.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bas_cm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/be.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/be_by.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bem.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bem_zm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bez.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bez_tz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bg_bg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bm_ml.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bn_bd.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bn_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bo_cn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bo_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/br.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/br_fr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/brx.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/brx_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bs.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bs_ba.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bs_cyrl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bs_cyrl_ba.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bs_latn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/bs_latn_ba.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/byn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/byn_er.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ca.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ca_ad.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ca_es.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/cch.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/cch_ng.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/cgg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/cgg_ug.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/chr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/chr_us.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/cs.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/cs_cz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/cy.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/cy_gb.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/da.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/da_dk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/dav.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/dav_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/de.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/de_at.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/de_be.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/de_ch.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/de_de.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/de_li.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/de_lu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/dje.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/dje_ne.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/dua.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/dua_cm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/dv.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/dv_mv.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/dyo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/dyo_sn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/dz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/dz_bt.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ebu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ebu_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ee.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ee_gh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ee_tg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/el.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/el_cy.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/el_gr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/el_polyton.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_150.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_ag.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_as.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_au.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_bb.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_be.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_bm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_bs.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_bw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_bz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_ca.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_cm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_dm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_dsrt.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_dsrt_us.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_fj.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_fm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_gb.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_gd.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_gg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_gh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_gi.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_gm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_gu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_gy.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_hk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_ie.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_im.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_je.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_jm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_ki.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_kn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_ky.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_lc.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_lr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_ls.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_mg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_mh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_mp.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_mt.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_mu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_mw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_na.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_ng.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_nz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_pg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_ph.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_pk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_pr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_pw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_sb.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_sc.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_sg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_shaw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_sl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_ss.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_sz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_tc.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_to.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_tt.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_tz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_ug.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_um.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_us.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_us_posix.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_vc.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_vg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_vi.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_vu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_ws.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_za.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_zm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_zw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/en_zz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/eo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_419.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_ar.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_bo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_cl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_co.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_cr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_cu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_do.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_ea.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_ec.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_es.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_gq.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_gt.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_hn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_ic.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_mx.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_ni.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_pa.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_pe.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_ph.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_pr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_py.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_sv.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_us.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_uy.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/es_ve.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/et.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/et_ee.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/eu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/eu_es.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ewo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ewo_cm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fa.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fa_af.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fa_ir.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ff.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ff_sn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fi.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fi_fi.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fil.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fil_ph.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fo_fo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_be.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_bf.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_bi.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_bj.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_bl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_ca.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_cd.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_cf.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_cg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_ch.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_ci.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_cm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_dj.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_dz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_fr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_ga.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_gf.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_gn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_gp.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_gq.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_ht.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_km.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_lu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_ma.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_mc.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_mf.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_mg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_ml.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_mq.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_mr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_mu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_nc.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_ne.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_pf.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_re.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_rw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_sc.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_sn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_sy.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_td.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_tg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_tn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_vu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fr_yt.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fur.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/fur_it.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ga.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ga_ie.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gaa.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gaa_gh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gd.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gd_gb.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gez.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gez_er.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gez_et.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gl_es.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gsw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gsw_ch.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gu_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/guz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/guz_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gv.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/gv_gb.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ha.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ha_arab.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ha_arab_ng.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ha_arab_sd.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ha_gh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ha_latn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ha_latn_gh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ha_latn_ne.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ha_latn_ng.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ha_ne.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ha_ng.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ha_sd.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/haw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/haw_us.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/he.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/he_il.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/hi.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/hi_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/hr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/hr_ba.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/hr_hr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/hu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/hu_hu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/hy.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/hy_am.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ia.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ia_fr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/id.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/id_id.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ig.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ig_ng.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ii.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ii_cn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/is.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/is_is.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/it.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/it_ch.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/it_it.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/it_sm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/iu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/iw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ja.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ja_jp.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/jgo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/jgo_cm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/jmc.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/jmc_tz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ka.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ka_ge.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kab.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kab_dz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kaj.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kaj_ng.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kam.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kam_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kcg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kcg_ng.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kde.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kde_tz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kea.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kea_cv.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kfo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kfo_ci.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/khq.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/khq_ml.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ki.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ki_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kk_cyrl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kk_cyrl_kz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kk_kz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kkj.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kkj_cm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kl_gl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kln.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kln_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/km.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/km_kh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kn_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ko.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ko_kp.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ko_kr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kok.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kok_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kpe.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kpe_gn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kpe_lr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ks.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ks_arab.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ks_arab_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ksb.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ksb_tz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ksf.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ksf_cm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ksh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ksh_de.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ku.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ku_arab.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ku_arab_iq.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ku_arab_ir.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ku_iq.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ku_ir.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ku_latn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ku_latn_sy.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ku_latn_tr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ku_sy.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ku_tr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/kw_gb.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ky.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ky_kg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/lag.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/lag_tz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/lg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/lg_ug.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ln.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ln_ao.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ln_cd.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ln_cf.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ln_cg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/lo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/lo_la.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/lt.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/lt_lt.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/lu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/lu_cd.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/luo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/luo_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/luy.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/luy_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/lv.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/lv_lv.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mas.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mas_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mas_tz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mer.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mer_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mfe.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mfe_mu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mg_mg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mgh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mgh_mz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mgo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mgo_cm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mi.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mi_nz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mk_mk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ml.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ml_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mn_cn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mn_cyrl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mn_cyrl_mn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mn_mn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mn_mong.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mn_mong_cn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mr_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ms.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ms_bn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ms_latn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ms_latn_bn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ms_latn_my.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ms_latn_sg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ms_my.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mt.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mt_mt.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mua.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/mua_cm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/my.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/my_mm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/naq.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/naq_na.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nb.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nb_no.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nd.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nd_zw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nds.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nds_de.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ne.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ne_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ne_np.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nl_aw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nl_be.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nl_cw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nl_nl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nl_sr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nl_sx.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nmg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nmg_cm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nn_no.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nnh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nnh_cm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/no.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nr_za.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nso.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nso_za.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nus.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nus_sd.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ny.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ny_mw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nyn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/nyn_ug.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/oc.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/oc_fr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/om.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/om_et.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/om_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/or.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/or_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/os.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/os_ge.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/os_ru.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pa.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pa_arab.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pa_arab_pk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pa_guru.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pa_guru_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pa_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pa_pk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pl_pl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ps.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ps_af.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pt.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pt_ao.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pt_br.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pt_cv.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pt_gw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pt_mo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pt_mz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pt_pt.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pt_st.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/pt_tl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/rm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/rm_ch.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/rn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/rn_bi.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ro.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ro_md.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ro_ro.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/rof.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/rof_tz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/root.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ru.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ru_by.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ru_kg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ru_kz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ru_md.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ru_ru.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ru_ua.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/rw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/rw_rw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/rwk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/rwk_tz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sa.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sa_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sah.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sah_ru.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/saq.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/saq_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sbp.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sbp_tz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/se.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/se_fi.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/se_no.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/seh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/seh_mz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ses.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ses_ml.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sg_cf.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sh_ba.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sh_cs.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sh_yu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/shi.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/shi_latn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/shi_latn_ma.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/shi_ma.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/shi_tfng.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/shi_tfng_ma.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/si.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/si_lk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sid.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sid_et.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sk_sk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sl_si.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sn_zw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/so.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/so_dj.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/so_et.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/so_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/so_so.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sq.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sq_al.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sq_mk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sq_xk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_ba.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_cs.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_cyrl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_cyrl_ba.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_cyrl_cs.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_cyrl_me.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_cyrl_rs.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_cyrl_xk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_cyrl_yu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_latn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_latn_ba.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_latn_cs.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_latn_me.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_latn_rs.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_latn_xk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_latn_yu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_me.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_rs.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sr_yu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ss.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ss_sz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ss_za.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ssy.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ssy_er.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/st.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/st_ls.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/st_za.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sv.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sv_ax.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sv_fi.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sv_se.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sw_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sw_tz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/sw_ug.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/swc.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/swc_cd.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/syr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/syr_sy.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ta.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ta_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ta_lk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ta_my.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ta_sg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/te.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/te_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/teo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/teo_ke.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/teo_ug.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tg_cyrl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tg_cyrl_tj.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tg_tj.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/th.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/th_th.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ti.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ti_er.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ti_et.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tig.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tig_er.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tl_ph.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tn_bw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tn_za.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/to.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/to_to.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tr_cy.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tr_tr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/trv.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/trv_tw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ts.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ts_za.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tt.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tt_ru.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/twq.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/twq_ne.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tzm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tzm_latn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tzm_latn_ma.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/tzm_ma.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ug.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ug_arab.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ug_arab_cn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ug_cn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/uk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/uk_ua.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ur.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ur_in.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ur_pk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/uz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/uz_af.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/uz_arab.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/uz_arab_af.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/uz_cyrl.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/uz_cyrl_uz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/uz_latn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/uz_latn_uz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/uz_uz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/vai.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/vai_latn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/vai_latn_lr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/vai_vaii.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/vai_vaii_lr.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ve.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/ve_za.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/vi.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/vi_vn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/vo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/vun.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/vun_tz.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/wae.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/wae_ch.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/wal.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/wal_et.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/wo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/wo_latn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/wo_latn_sn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/wo_sn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/xh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/xh_za.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/xog.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/xog_ug.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/yav.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/yav_cm.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/yo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/yo_ng.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh_cn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh_hans.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh_hans_cn.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh_hans_hk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh_hans_mo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh_hans_sg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh_hant.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh_hant_hk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh_hant_mo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh_hant_tw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh_hk.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh_mo.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh_sg.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zh_tw.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zu.php (100%) rename web/{framework-1.1.17 => framework}/i18n/data/zu_za.php (100%) rename web/{framework-1.1.17 => framework}/i18n/gettext/CGettextFile.php (100%) rename web/{framework-1.1.17 => framework}/i18n/gettext/CGettextMoFile.php (99%) rename web/{framework-1.1.17 => framework}/i18n/gettext/CGettextPoFile.php (100%) rename web/{framework-1.1.17 => framework}/logging/CChainedLogFilter.php (100%) rename web/{framework-1.1.17 => framework}/logging/CDbLogRoute.php (100%) rename web/{framework-1.1.17 => framework}/logging/CEmailLogRoute.php (100%) rename web/{framework-1.1.17 => framework}/logging/CFileLogRoute.php (100%) rename web/{framework-1.1.17 => framework}/logging/CLogFilter.php (100%) rename web/{framework-1.1.17 => framework}/logging/CLogRoute.php (100%) rename web/{framework-1.1.17 => framework}/logging/CLogRouter.php (100%) rename web/{framework-1.1.17 => framework}/logging/CLogger.php (100%) rename web/{framework-1.1.17 => framework}/logging/CProfileLogRoute.php (100%) rename web/{framework-1.1.17 => framework}/logging/CSysLogRoute.php (100%) rename web/{framework-1.1.17 => framework}/logging/CWebLogRoute.php (100%) rename web/{framework-1.1.17 => framework}/messages/ar/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/ar/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/bg/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/bg/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/bs/yii.php (81%) rename web/{framework-1.1.17 => framework}/messages/ca/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/ca/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/config.php (100%) rename web/{framework-1.1.17 => framework}/messages/cs/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/cs/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/da/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/da/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/de/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/de/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/el/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/el/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/es/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/es/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/fa_ir/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/fa_ir/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/fi/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/fi/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/fr/yii.php (97%) rename web/{framework-1.1.17 => framework}/messages/fr/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/he/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/he/zii.php (100%) create mode 100644 web/framework/messages/hr/yii.php rename web/{framework-1.1.17 => framework}/messages/hu/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/hu/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/id/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/id/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/it/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/it/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/ja/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/ja/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/kk/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/kk/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/ko_kr/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/ko_kr/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/lt/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/lt/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/lv/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/lv/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/nl/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/nl/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/no/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/no/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/pl/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/pl/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/pt/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/pt/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/pt_br/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/pt_br/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/ro/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/ro/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/ru/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/ru/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/sk/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/sk/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/sr_sr/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/sr_sr/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/sr_yu/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/sr_yu/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/sv/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/sv/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/ta_in/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/ta_in/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/th/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/tr/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/tr/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/uk/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/uk/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/vi/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/vi/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/zh_cn/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/zh_cn/zii.php (100%) rename web/{framework-1.1.17 => framework}/messages/zh_tw/yii.php (100%) rename web/{framework-1.1.17 => framework}/messages/zh_tw/zii.php (100%) rename web/{framework-1.1.17 => framework}/test/CDbFixtureManager.php (100%) rename web/{framework-1.1.17 => framework}/test/CDbTestCase.php (100%) rename web/{framework-1.1.17 => framework}/test/CTestCase.php (100%) rename web/{framework-1.1.17 => framework}/test/CWebTestCase.php (100%) rename web/{framework-1.1.17 => framework}/utils/CDateTimeParser.php (100%) rename web/{framework-1.1.17 => framework}/utils/CFileHelper.php (99%) rename web/{framework-1.1.17 => framework}/utils/CFormatter.php (100%) rename web/{framework-1.1.17 => framework}/utils/CLocalizedFormatter.php (100%) rename web/{framework-1.1.17 => framework}/utils/CMarkdownParser.php (100%) rename web/{framework-1.1.17 => framework}/utils/CPasswordHelper.php (100%) rename web/{framework-1.1.17 => framework}/utils/CPropertyValue.php (97%) rename web/{framework-1.1.17 => framework}/utils/CTimestamp.php (100%) rename web/{framework-1.1.17 => framework}/utils/CVarDumper.php (100%) rename web/{framework-1.1.17 => framework}/utils/fileExtensions.php (100%) rename web/{framework-1.1.17 => framework}/utils/mimeTypes.php (100%) rename web/{framework-1.1.17 => framework}/validators/CBooleanValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CCaptchaValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CCompareValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CDateValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CDefaultValueValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CEmailValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CExistValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CFileValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CFilterValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CInlineValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CNumberValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CRangeValidator.php (97%) rename web/{framework-1.1.17 => framework}/validators/CRegularExpressionValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CRequiredValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CSafeValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CStringValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CTypeValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CUniqueValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CUnsafeValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CUrlValidator.php (100%) rename web/{framework-1.1.17 => framework}/validators/CValidator.php (100%) rename web/{framework-1.1.17 => framework}/vendors/Net_IDNA2/LICENSE.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/Net_IDNA2/Net/IDNA2.php (100%) rename web/{framework-1.1.17 => framework}/vendors/Net_IDNA2/Net/IDNA2/Exception.php (100%) rename web/{framework-1.1.17 => framework}/vendors/Net_IDNA2/Net/IDNA2/Exception/Nameprep.php (100%) rename web/{framework-1.1.17 => framework}/vendors/README.html (93%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter.php (98%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/ABAP.php (100%) create mode 100644 web/framework/vendors/TextHighlighter/Text/Highlighter/AVRC.php rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/CPP.php (94%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/CSS.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/DIFF.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/DTD.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/Generator.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/HTML.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/JAVA.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/JAVASCRIPT.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/MYSQL.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/PERL.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/PHP.php (99%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/PYTHON.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/RUBY.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/Renderer.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/Renderer/Array.php (97%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/Renderer/BB.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/Renderer/Console.php (93%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/Renderer/Html.php (94%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/Renderer/HtmlTags.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/Renderer/JSON.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/Renderer/XML.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/SH.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/SQL.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/VBSCRIPT.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/Highlighter/XML.php (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/README (93%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/TODO (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/abap.xml (100%) create mode 100644 web/framework/vendors/TextHighlighter/Text/avrc.xml rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/cpp.xml (93%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/css.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/diff.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/dtd.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/generate (93%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/generate.bat (93%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/html.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/java.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/javascript.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/mysql.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/package.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/perl.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/php.xml (95%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/python.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/ruby.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/sample.css (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/sh.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/sql.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/vbscript.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/Text/xml.xml (100%) rename web/{framework-1.1.17 => framework}/vendors/TextHighlighter/highlight.css (100%) rename web/{framework-1.1.17 => framework}/vendors/adodb/LICENSE.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/bbq/LICENSE.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/cldr/LICENSE.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/console-normalizer/README.md (100%) rename web/{framework-1.1.17 => framework}/vendors/console-normalizer/normalizeconsole.min.js (100%) rename web/{framework-1.1.17 => framework}/vendors/gettext/LICENSE.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/history/license.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/HTMLPurifier.standalone.php (96%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/LICENSE.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php (86%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/Builder/Xml.php (52%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/Exception.php (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/Interchange.php (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/Interchange/Directive.php (65%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/Interchange/Id.php (54%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/InterchangeBuilder.php (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/Validator.php (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/ValidatorAtom.php (100%) create mode 100644 web/framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema.ser rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.AllowedClasses.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.AllowedFrameTargets.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.AllowedRel.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.AllowedRev.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.ClassUseCDATA.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.DefaultImageAlt.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.DefaultInvalidImage.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.DefaultInvalidImageAlt.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.DefaultTextDir.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.EnableID.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.ForbiddenClasses.txt (100%) create mode 100644 web/framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.ID.HTML5.txt rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.IDBlacklist.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.IDBlacklistRegexp.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.IDPrefix.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Attr.IDPrefixLocal.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/AutoFormat.AutoParagraph.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/AutoFormat.Custom.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/AutoFormat.DisplayLinkURI.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/AutoFormat.Linkify.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.DocURL.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.txt (100%) create mode 100644 web/framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.Predicate.txt rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveSpansWithoutAttributes.txt (100%) create mode 100644 web/framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/CSS.AllowDuplicates.txt rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/CSS.AllowImportant.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/CSS.AllowTricky.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/CSS.AllowedFonts.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/CSS.AllowedProperties.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/CSS.DefinitionRev.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/CSS.ForbiddenProperties.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/CSS.MaxImgLength.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/CSS.Proprietary.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/CSS.Trusted.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Cache.DefinitionImpl.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPath.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPermissions.txt (59%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.AggressivelyFixLt.txt (100%) create mode 100644 web/framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.AggressivelyRemoveScript.txt rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.AllowHostnameUnderscore.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.CollectErrors.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.ConvertDocumentToFragment.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.DirectLexLineNumberSyncInterval.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.DisableExcludes.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.EnableIDNA.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.Encoding.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidChildren.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidTags.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.EscapeNonASCIICharacters.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.HiddenElements.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.Language.txt (100%) create mode 100644 web/framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.LegacyEntityDecoder.txt rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.LexerImpl.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.MaintainLineNumbers.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.NormalizeNewlines.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.RemoveInvalidImg.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.RemoveProcessingInstructions.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.RemoveScriptContents.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Filter.Custom.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Escaping.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Scope.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.TidyImpl.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Filter.YouTube.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.Allowed.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.AllowedAttributes.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.AllowedComments.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.AllowedCommentsRegexp.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.AllowedElements.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.AllowedModules.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.Attr.Name.UseCDATA.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.BlockWrapper.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.CoreModules.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.CustomDoctype.txt (69%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionID.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionRev.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.Doctype.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.FlashAllowFullScreen.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenAttributes.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenElements.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.MaxImgLength.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.Nofollow.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.Parent.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.Proprietary.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.SafeEmbed.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.SafeIframe.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.SafeObject.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.Strict.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.TargetBlank.txt (100%) create mode 100644 web/framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.TargetNoopener.txt create mode 100644 web/framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.TargetNoreferrer.txt rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.TidyAdd.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.TidyLevel.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.TidyRemove.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.Trusted.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.XHTML.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Output.CommentScriptContents.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Output.FixInnerHTML.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Output.FlashCompat.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Output.Newline.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Output.SortAttr.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Output.TidyFormat.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Test.ForceNoIconv.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.AllowedSchemes.txt (96%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.Base.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.DefaultScheme.txt (57%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.DefinitionID.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.DefinitionRev.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.Disable.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.DisableExternal.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.DisableExternalResources.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.DisableResources.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.Host.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.HostBlacklist.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.MakeAbsolute.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.Munge.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.MungeResources.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.MungeSecretKey.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.OverrideAllowedSchemes.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/URI.SafeIframeRegexp.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/info.ini (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/EntityLookup/entities.ser (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/Filter/ExtractStyleBlocks.php (85%) create mode 100644 web/framework/vendors/htmlpurifier/standalone/HTMLPurifier/Filter/YouTube.php rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/Language/classes/en-x-test.php (97%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/Language/messages/en-x-test.php (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/Language/messages/en-x-testmini.php (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/Language/messages/en.php (100%) create mode 100644 web/framework/vendors/htmlpurifier/standalone/HTMLPurifier/Lexer/PH5P.php rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/Printer.php (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/Printer/CSSDefinition.php (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/Printer/ConfigForm.css (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/Printer/ConfigForm.js (100%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/Printer/ConfigForm.php (98%) rename web/{framework-1.1.17 => framework}/vendors/htmlpurifier/standalone/HTMLPurifier/Printer/HTMLDefinition.php (100%) rename web/{framework-1.1.17 => framework}/vendors/jquery/LICENSE.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/jquery/autocomplete/LICENSE.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/jquery/maskedinput/LICENSE.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/jquery/treeview/LICENSE.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/jqueryui/MIT-LICENSE.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/json/LICENSE.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/markdown/LICENSE.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/markdown/markdown.php (100%) rename web/{framework-1.1.17 => framework}/vendors/punycode/LICENSE-GPL.txt (100%) rename web/{framework-1.1.17 => framework}/vendors/punycode/LICENSE-MIT.txt (100%) create mode 100644 web/framework/vendors/zend-escaper/Escaper.php create mode 100644 web/framework/vendors/zend-escaper/LICENSE.md rename web/{framework-1.1.17 => framework}/views/ar/error.php (100%) rename web/{framework-1.1.17 => framework}/views/ar/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/ar/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/ar/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/ar/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/ar/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/ar/exception.php (100%) rename web/{framework-1.1.17 => framework}/views/ar/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ar/log.php (100%) rename web/{framework-1.1.17 => framework}/views/ar/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ar/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/ar/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ar/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/bg/error.php (100%) rename web/{framework-1.1.17 => framework}/views/bg/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/bg/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/bg/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/bg/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/bg/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/bg/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/bg/log.php (100%) rename web/{framework-1.1.17 => framework}/views/bg/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/bg/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/bg/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/bg/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/ca/error.php (100%) rename web/{framework-1.1.17 => framework}/views/ca/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/ca/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/ca/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/ca/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/ca/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/ca/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ca/log.php (100%) rename web/{framework-1.1.17 => framework}/views/ca/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ca/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/ca/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ca/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/da/error.php (100%) rename web/{framework-1.1.17 => framework}/views/da/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/da/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/da/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/da/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/da/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/da/exception.php (100%) rename web/{framework-1.1.17 => framework}/views/da/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/da/log.php (100%) rename web/{framework-1.1.17 => framework}/views/da/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/da/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/da/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/da/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/de/error.php (100%) rename web/{framework-1.1.17 => framework}/views/de/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/de/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/de/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/de/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/de/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/de/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/de/log.php (100%) rename web/{framework-1.1.17 => framework}/views/de/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/de/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/de/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/de/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/el/error.php (100%) rename web/{framework-1.1.17 => framework}/views/el/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/el/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/el/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/el/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/el/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/el/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/el/log.php (100%) rename web/{framework-1.1.17 => framework}/views/el/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/el/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/el/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/el/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/error.php (100%) rename web/{framework-1.1.17 => framework}/views/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/es/error.php (100%) rename web/{framework-1.1.17 => framework}/views/es/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/es/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/es/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/es/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/es/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/es/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/es/log.php (100%) rename web/{framework-1.1.17 => framework}/views/es/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/es/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/es/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/es/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/exception.php (100%) rename web/{framework-1.1.17 => framework}/views/fi/error.php (100%) rename web/{framework-1.1.17 => framework}/views/fi/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/fi/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/fi/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/fi/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/fi/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/fi/exception.php (100%) rename web/{framework-1.1.17 => framework}/views/fi/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/fi/log.php (100%) rename web/{framework-1.1.17 => framework}/views/fi/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/fi/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/fi/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/fi/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/fr/error.php (100%) rename web/{framework-1.1.17 => framework}/views/fr/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/fr/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/fr/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/fr/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/fr/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/fr/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/fr/log.php (100%) rename web/{framework-1.1.17 => framework}/views/fr/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/fr/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/fr/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/fr/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/he/error.php (100%) rename web/{framework-1.1.17 => framework}/views/he/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/he/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/he/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/he/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/he/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/he/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/he/log.php (100%) rename web/{framework-1.1.17 => framework}/views/he/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/he/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/he/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/he/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/hr/error.php (100%) rename web/{framework-1.1.17 => framework}/views/hr/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/hr/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/hr/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/hr/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/hr/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/hr/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/hr/log.php (100%) rename web/{framework-1.1.17 => framework}/views/hr/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/hr/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/hr/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/hr/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/id/error.php (100%) rename web/{framework-1.1.17 => framework}/views/id/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/id/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/id/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/id/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/id/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/id/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/id/log.php (100%) rename web/{framework-1.1.17 => framework}/views/id/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/id/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/id/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/id/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/it/error.php (100%) rename web/{framework-1.1.17 => framework}/views/it/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/it/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/it/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/it/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/it/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/it/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/it/log.php (100%) rename web/{framework-1.1.17 => framework}/views/it/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/it/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/it/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/it/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/ja/error.php (100%) rename web/{framework-1.1.17 => framework}/views/ja/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/ja/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/ja/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/ja/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/ja/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/ja/exception.php (100%) rename web/{framework-1.1.17 => framework}/views/ja/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ja/log.php (100%) rename web/{framework-1.1.17 => framework}/views/ja/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ja/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/ja/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ja/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/ko/error.php (100%) rename web/{framework-1.1.17 => framework}/views/ko/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/ko/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/ko/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/ko/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/ko/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/ko/exception.php (100%) rename web/{framework-1.1.17 => framework}/views/ko/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ko/log.php (100%) rename web/{framework-1.1.17 => framework}/views/ko/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ko/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/ko/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ko/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/log.php (100%) rename web/{framework-1.1.17 => framework}/views/lt/error.php (100%) rename web/{framework-1.1.17 => framework}/views/lt/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/lt/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/lt/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/lt/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/lt/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/lt/exception.php (100%) rename web/{framework-1.1.17 => framework}/views/lt/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/lt/log.php (100%) rename web/{framework-1.1.17 => framework}/views/lt/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/lt/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/lt/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/lt/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/lv/error.php (100%) rename web/{framework-1.1.17 => framework}/views/lv/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/lv/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/lv/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/lv/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/lv/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/lv/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/lv/log.php (100%) rename web/{framework-1.1.17 => framework}/views/lv/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/lv/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/lv/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/lv/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/nl/error.php (100%) rename web/{framework-1.1.17 => framework}/views/nl/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/nl/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/nl/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/nl/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/nl/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/nl/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/nl/log.php (100%) rename web/{framework-1.1.17 => framework}/views/nl/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/nl/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/nl/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/nl/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/no/error.php (100%) rename web/{framework-1.1.17 => framework}/views/no/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/no/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/no/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/no/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/no/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/no/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/no/log.php (100%) rename web/{framework-1.1.17 => framework}/views/no/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/no/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/no/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/no/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/pl/error.php (100%) rename web/{framework-1.1.17 => framework}/views/pl/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/pl/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/pl/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/pl/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/pl/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/pl/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/pl/log.php (100%) rename web/{framework-1.1.17 => framework}/views/pl/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/pl/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/pl/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/pl/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/pt/error.php (100%) rename web/{framework-1.1.17 => framework}/views/pt/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/pt/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/pt/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/pt/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/pt/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/pt/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/pt/log.php (100%) rename web/{framework-1.1.17 => framework}/views/pt/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/pt/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/pt/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/pt/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/pt_br/error.php (100%) rename web/{framework-1.1.17 => framework}/views/pt_br/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/pt_br/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/pt_br/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/pt_br/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/pt_br/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/pt_br/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/pt_br/log.php (100%) rename web/{framework-1.1.17 => framework}/views/pt_br/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/pt_br/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/pt_br/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/pt_br/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/ro/error.php (100%) rename web/{framework-1.1.17 => framework}/views/ro/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/ro/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/ro/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/ro/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/ro/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/ro/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ro/log.php (100%) rename web/{framework-1.1.17 => framework}/views/ro/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ro/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/ro/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ro/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/ru/error.php (100%) rename web/{framework-1.1.17 => framework}/views/ru/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/ru/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/ru/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/ru/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/ru/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/ru/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ru/log.php (100%) rename web/{framework-1.1.17 => framework}/views/ru/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ru/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/ru/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/ru/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/sk/error.php (100%) rename web/{framework-1.1.17 => framework}/views/sk/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/sk/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/sk/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/sk/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/sk/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/sk/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/sk/log.php (100%) rename web/{framework-1.1.17 => framework}/views/sk/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/sk/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/sk/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/sk/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/sv/error.php (100%) rename web/{framework-1.1.17 => framework}/views/sv/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/sv/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/sv/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/sv/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/sv/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/sv/exception.php (100%) rename web/{framework-1.1.17 => framework}/views/sv/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/sv/log.php (100%) rename web/{framework-1.1.17 => framework}/views/sv/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/sv/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/sv/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/sv/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/uk/error.php (100%) rename web/{framework-1.1.17 => framework}/views/uk/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/uk/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/uk/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/uk/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/uk/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/uk/exception.php (100%) rename web/{framework-1.1.17 => framework}/views/uk/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/uk/log.php (100%) rename web/{framework-1.1.17 => framework}/views/uk/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/uk/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/uk/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/uk/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/vi/error.php (100%) rename web/{framework-1.1.17 => framework}/views/vi/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/vi/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/vi/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/vi/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/vi/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/vi/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/vi/log.php (100%) rename web/{framework-1.1.17 => framework}/views/vi/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/vi/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/vi/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/vi/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_cn/error.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_cn/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_cn/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_cn/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_cn/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_cn/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_cn/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_cn/log.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_cn/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_cn/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_cn/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_cn/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_tw/error.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_tw/error400.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_tw/error403.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_tw/error404.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_tw/error500.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_tw/error503.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_tw/log-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_tw/log.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_tw/profile-callstack-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_tw/profile-callstack.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_tw/profile-summary-firebug.php (100%) rename web/{framework-1.1.17 => framework}/views/zh_tw/profile-summary.php (100%) rename web/{framework-1.1.17 => framework}/web/CActiveDataProvider.php (100%) rename web/{framework-1.1.17 => framework}/web/CArrayDataProvider.php (95%) rename web/{framework-1.1.17 => framework}/web/CAssetManager.php (100%) rename web/{framework-1.1.17 => framework}/web/CBaseController.php (99%) rename web/{framework-1.1.17 => framework}/web/CCacheHttpSession.php (91%) rename web/{framework-1.1.17 => framework}/web/CClientScript.php (97%) rename web/{framework-1.1.17 => framework}/web/CController.php (99%) rename web/{framework-1.1.17 => framework}/web/CDataProvider.php (100%) rename web/{framework-1.1.17 => framework}/web/CDataProviderIterator.php (100%) rename web/{framework-1.1.17 => framework}/web/CDbHttpSession.php (99%) rename web/{framework-1.1.17 => framework}/web/CExtController.php (100%) rename web/{framework-1.1.17 => framework}/web/CFormModel.php (100%) rename web/{framework-1.1.17 => framework}/web/CHttpCookie.php (100%) rename web/{framework-1.1.17 => framework}/web/CHttpRequest.php (98%) rename web/{framework-1.1.17 => framework}/web/CHttpSession.php (98%) rename web/{framework-1.1.17 => framework}/web/CHttpSessionIterator.php (100%) rename web/{framework-1.1.17 => framework}/web/COutputEvent.php (100%) rename web/{framework-1.1.17 => framework}/web/CPagination.php (100%) rename web/{framework-1.1.17 => framework}/web/CSort.php (100%) rename web/{framework-1.1.17 => framework}/web/CSqlDataProvider.php (100%) rename web/{framework-1.1.17 => framework}/web/CTheme.php (100%) rename web/{framework-1.1.17 => framework}/web/CThemeManager.php (100%) rename web/{framework-1.1.17 => framework}/web/CUploadedFile.php (100%) rename web/{framework-1.1.17 => framework}/web/CUrlManager.php (99%) rename web/{framework-1.1.17 => framework}/web/CWebApplication.php (100%) rename web/{framework-1.1.17 => framework}/web/CWebModule.php (100%) rename web/{framework-1.1.17 => framework}/web/CWidgetFactory.php (100%) rename web/{framework-1.1.17 => framework}/web/actions/CAction.php (100%) rename web/{framework-1.1.17 => framework}/web/actions/CInlineAction.php (100%) rename web/{framework-1.1.17 => framework}/web/actions/CViewAction.php (100%) rename web/{framework-1.1.17 => framework}/web/auth/CAccessControlFilter.php (99%) rename web/{framework-1.1.17 => framework}/web/auth/CAuthAssignment.php (100%) rename web/{framework-1.1.17 => framework}/web/auth/CAuthItem.php (100%) rename web/{framework-1.1.17 => framework}/web/auth/CAuthManager.php (100%) rename web/{framework-1.1.17 => framework}/web/auth/CBaseUserIdentity.php (100%) rename web/{framework-1.1.17 => framework}/web/auth/CDbAuthManager.php (100%) rename web/{framework-1.1.17 => framework}/web/auth/CPhpAuthManager.php (99%) rename web/{framework-1.1.17 => framework}/web/auth/CUserIdentity.php (98%) rename web/{framework-1.1.17 => framework}/web/auth/CWebUser.php (98%) rename web/{framework-1.1.17 => framework}/web/auth/schema-cubrid.sql (100%) rename web/{framework-1.1.17 => framework}/web/auth/schema-mssql.sql (100%) rename web/{framework-1.1.17 => framework}/web/auth/schema-mysql.sql (100%) rename web/{framework-1.1.17 => framework}/web/auth/schema-oci.sql (100%) rename web/{framework-1.1.17 => framework}/web/auth/schema-pgsql.sql (100%) rename web/{framework-1.1.17 => framework}/web/auth/schema-sqlite.sql (100%) rename web/{framework-1.1.17 => framework}/web/filters/CFilter.php (100%) rename web/{framework-1.1.17 => framework}/web/filters/CFilterChain.php (99%) rename web/{framework-1.1.17 => framework}/web/filters/CHttpCacheFilter.php (99%) rename web/{framework-1.1.17 => framework}/web/filters/CInlineFilter.php (100%) rename web/{framework-1.1.17 => framework}/web/form/CForm.php (100%) rename web/{framework-1.1.17 => framework}/web/form/CFormButtonElement.php (100%) rename web/{framework-1.1.17 => framework}/web/form/CFormElement.php (100%) rename web/{framework-1.1.17 => framework}/web/form/CFormElementCollection.php (99%) rename web/{framework-1.1.17 => framework}/web/form/CFormInputElement.php (100%) rename web/{framework-1.1.17 => framework}/web/form/CFormStringElement.php (100%) rename web/{framework-1.1.17 => framework}/web/helpers/CGoogleApi.php (100%) rename web/{framework-1.1.17 => framework}/web/helpers/CHtml.php (99%) rename web/{framework-1.1.17 => framework}/web/helpers/CJSON.php (100%) rename web/{framework-1.1.17 => framework}/web/helpers/CJavaScript.php (93%) rename web/{framework-1.1.17 => framework}/web/helpers/CJavaScriptExpression.php (100%) rename web/{framework-1.1.17 => framework}/web/js/packages.php (96%) rename web/{framework-1.1.17 => framework}/web/js/source/autocomplete/indicator.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/autocomplete/jquery.autocomplete.css (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.ajaxqueue.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.autocomplete.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.ba-bbq.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.ba-bbq.min.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.bgiframe.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.cookie.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.history.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.maskedinput.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.maskedinput.min.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.metadata.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.min.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.multifile.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.rating.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.treeview.async.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.treeview.edit.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.treeview.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.yii.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.yiiactiveform.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jquery.yiitab.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/css/base/images/ui-bg_flat_0_aaaaaa_40x100.png (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/css/base/images/ui-bg_flat_75_ffffff_40x100.png (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/css/base/images/ui-bg_glass_55_fbf9ee_1x400.png (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/css/base/images/ui-bg_glass_65_ffffff_1x400.png (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/css/base/images/ui-bg_glass_75_dadada_1x400.png (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/css/base/images/ui-bg_glass_75_e6e6e6_1x400.png (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/css/base/images/ui-bg_glass_95_fef1ec_1x400.png (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/css/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/css/base/images/ui-icons_222222_256x240.png (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/css/base/images/ui-icons_2e83ff_256x240.png (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/css/base/images/ui-icons_454545_256x240.png (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/css/base/images/ui-icons_888888_256x240.png (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/css/base/images/ui-icons_cd0a0a_256x240.png (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/css/base/jquery-ui.css (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/js/jquery-ui-i18n.min.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/jui/js/jquery-ui.min.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/punycode.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/punycode.min.js (100%) rename web/{framework-1.1.17 => framework}/web/js/source/rating/delete.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/rating/jquery.rating.css (100%) rename web/{framework-1.1.17 => framework}/web/js/source/rating/star.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/ajax-loader.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/file.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/folder-closed.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/folder.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/minus.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/plus.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/treeview-black-line.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/treeview-black.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/treeview-default-line.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/treeview-default.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/treeview-famfamfam-line.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/treeview-famfamfam.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/treeview-gray-line.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/treeview-gray.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/treeview-red-line.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/images/treeview-red.gif (100%) rename web/{framework-1.1.17 => framework}/web/js/source/treeview/jquery.treeview.css (100%) rename web/{framework-1.1.17 => framework}/web/js/source/yiitab/jquery.yiitab.css (100%) rename web/{framework-1.1.17 => framework}/web/renderers/CPradoViewRenderer.php (100%) rename web/{framework-1.1.17 => framework}/web/renderers/CViewRenderer.php (99%) rename web/{framework-1.1.17 => framework}/web/services/CWebService.php (99%) rename web/{framework-1.1.17 => framework}/web/services/CWebServiceAction.php (100%) rename web/{framework-1.1.17 => framework}/web/services/CWsdlGenerator.php (98%) rename web/{framework-1.1.17 => framework}/web/widgets/CActiveForm.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CAutoComplete.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CClipWidget.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CContentDecorator.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CFilterWidget.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CFlexWidget.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CHtmlPurifier.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CInputWidget.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CMarkdown.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CMaskedTextField.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CMultiFileUpload.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/COutputCache.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/COutputProcessor.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CStarRating.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CTabView.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CTextHighlighter.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CTreeView.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/CWidget.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/captcha/CCaptcha.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/captcha/CCaptchaAction.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/captcha/SpicyRice.md (100%) rename web/{framework-1.1.17 => framework}/web/widgets/captcha/SpicyRice.ttf (100%) rename web/{framework-1.1.17 => framework}/web/widgets/pagers/CBasePager.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/pagers/CLinkPager.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/pagers/CListPager.php (100%) rename web/{framework-1.1.17 => framework}/web/widgets/pagers/pager.css (100%) rename web/{framework-1.1.17 => framework}/web/widgets/views/flexWidget.php (100%) rename web/{framework-1.1.17 => framework}/yii-powered.png (100%) rename web/{framework-1.1.17 => framework}/yii.php (100%) rename web/{framework-1.1.17 => framework}/yiic (100%) rename web/{framework-1.1.17 => framework}/yiic.bat (100%) rename web/{framework-1.1.17 => framework}/yiic.php (100%) rename web/{framework-1.1.17 => framework}/yiit.php (100%) rename web/{framework-1.1.17 => framework}/zii/behaviors/CTimestampBehavior.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/CBaseListView.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/CBreadcrumbs.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/CDetailView.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/CListView.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/CMenu.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/CPortlet.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/detailview/styles.css (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/gridview/bg.gif (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/gridview/delete.png (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/gridview/down.gif (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/gridview/jquery.yiigridview.js (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/gridview/loading.gif (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/gridview/styles.css (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/gridview/up.gif (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/gridview/update.png (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/gridview/view.png (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/listview/down.gif (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/listview/jquery.yiilistview.js (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/listview/loading.gif (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/listview/styles.css (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/assets/listview/up.gif (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/grid/CButtonColumn.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/grid/CCheckBoxColumn.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/grid/CDataColumn.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/grid/CGridColumn.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/grid/CGridView.php (99%) rename web/{framework-1.1.17 => framework}/zii/widgets/grid/CLinkColumn.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiAccordion.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiAutoComplete.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiButton.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiDatePicker.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiDialog.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiDraggable.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiDroppable.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiInputWidget.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiProgressBar.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiResizable.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiSelectable.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiSlider.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiSliderInput.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiSortable.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiTabs.php (100%) rename web/{framework-1.1.17 => framework}/zii/widgets/jui/CJuiWidget.php (100%) diff --git a/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema.ser b/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema.ser deleted file mode 100644 index 22ea32185db63b19d525f509ebe431f593e92271..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15000 zcmeHOQE%Hw4&I+qWN|MCY!D~i+phbRCNXMUk_K^#-FsRn_QcUumVA=jCRg;o-}iCI znUNwV-G{q}gIlz*MGl8UayT67%ZKsd&*Q!KHy7tun>xSCUH!*NRo>;x+5FzEvc2)q z_-iwMGu~UcyKGam&EDH=JQ}^>)6uWvz2mm6_m7LB`r;NRMbzkY)VOrDCkb_FNcM*N%*p_7c1SwA-JTFqO>w8-#rn+|6y16$G zyhmaP@N~3Au}yuEJxo{2b5|~D(q;^eMu!InYl&JW4@#ndI(KbWN7Yrqn;PNg#5J#SVTg61lr8iIdZ|joov#>z#X4oWmH6Lz(tCzgzD;5-ZVZo^6~3mj~EXK zh?A;z`^U>=?LhtPipNR*a4tTOh@ppsgNgKg)wCs&<;Qa2>Sm7T!B@t2QWb@pw`X-- z)m=YR3aC~6clY?EsuvQY@CSkvwp(R&Rh2X(l>hO~0srVmsc9wud@`};7*f?)=@T1= zOeV)a`yn7bI;tB-aU8$FEmeV48s*IaXW};uT5sxgk&q5RRK~l_{JzOE8%A-H3BN($ zm;1a8qbBl)6l~ZcUj+gO1RY>(7uL#YJOx9_>@y<8FP2O78h~(HY!X>EJqX#qHbE~w z_IiQPI-ekE918NHpztkIb2>?|K$91reSmS$$pQcBT98PCVw6Q`%pnX!@7WSVTV%M+ z%9ZU+g;RCOPmB;o(h)2yoH%h1Am{D@S=4L>vIdWL46t(_i}C--@=sOcCz z@N9RSrCc}JGQ{;EQeGnGvMP^fC)4T4Jx-oEmJ=9x@(Sa7IXKS>N7Kj-kSq;-nt7eC zgSDV-(>^j9X+4%Bwx)9g{YDRTDCpy81b>TsnAO!jZ&;}#&o8pPZ1FGJ9Fq%&E%K5F zClk!2`%=I&qPwI3CM;Uh=X^C5a$oSQspc7w^XAMY<#Jj!ZM~W6fuu$?w|VB7tQvJ) z>+M06xYS8rz<&GvBl-yIRMOc)OC!%{rFTU&|J3Y@pTyl7a?pG`_iT=%!5iUuu{ZhR zF)=9?uvMsq4*j7_|EM-Mn_F=t!+HdJv!=DmG_vBhJqzsuN5pjJA4yk5+X$ zoGZdnY)i72tHdHlO@&eB@S!rubf0B+C}eMACB)iEM3OSSmW3*~ zQ&|p_3q3PU1{;2reShD!$QgcJ(12gVfkZoJI3FrwKycngb}XbUyI^MtNqShU9+#Q}UWa6jjECHW%z!1H*DjJ5jh+5ZXt>0lP`FXz z>Lg8oNJ_7i);j2j+qH|%lZ&EVT0;+pcgS74C^Xr3?V??~=xNL5|GHg-{uSCjYi&}q zlEHHEWX{**Y)he~gnnOM-l40AzR=N#jmQ9)>BETf@lS6c<9Q@eJ|+*7keq@lLvTdf zNCHKWQBY4t^)N)3_!mx$=9rMRX>eV33|M7Smx!AVLA|fL_=(9)S^gR75a>&J|EY zA85m-_28;Kv<_e~OzYo?__3HF^W8mKRXEUT5~Pt&Likp<()q+&PPX;%KyS}c z4hNiM_@_Y4U14Z;p#Ri#_3IpiSy2v@Auf4zMX7|4LurMDEk9RjJ+x zt1|SGxqxj_9qS=a3Tsk43Y{1cHT;-hnxb729(!S`sxkJWfIgy0B~XXRq*x`hdk-YE z4bkKkK4L@#QPg#{-y4ClMIcbmJMKGY9d;&t6_n`DZ|nN=fGQseJPL8=u` zQw7&_kGtn#JP{ofHQNg0iOeqqGB&|hAqgO9IGC|f{a}AoK5ZubZ`6Pfx358AQku+| z9=7r->kAh9p4o=Yh3I(RT>otao^^KY``I2ldeOge%nL^Q&Y1`8#^%sgpM`7}X9$Qj zzfS@{NiQ%Q@zZN9e5FyP1QxP}?*s$N*fPBO<5d0KwTHFr`8+>&3@V{c8HM3#mvq6^4x|!Xm~cY{!&j ztxFwcA;VD#(oKs2Q_$?KgDikMI5(x4v6zhn=cb}eaXwd+TQB}zzVp9kq(M+wl>#PW z=wNL{zPt~>PUvR9IUlTGxOakt=XdD~m_4YA!Rb`ZpuU0WbXnL3VqFE(#ivq_=+mJE z!THue=*bw)uW*Rs;I`oN{M4at+`{#|Du*x5GN{~EP@tM4N)@E3fdZ8Z$Mr#hmbl=M zC%8Zzg{?J!3sfS;iT&wFgA6{ua%Rv0dBe*E?*QyDE|!ooJ+A`b%*PQdL81o++A1NA z50RbuD~5&*jGJDG2`KRC$nGy1NqWI1m63)EjJA<(kX}~6^3p|W)R#1D6{Oo_z6dz< z^D?vs$O))V`LG)jz9)1Q;{k^~JM=JzzCSgLIP{aL%8EENX*z{GeKP+x(4h|I{-gTa QaEIMR#+=+~=6(D2AIX)%zyJUM diff --git a/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/Filter/YouTube.php b/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/Filter/YouTube.php deleted file mode 100644 index 23df221ea..000000000 --- a/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/Filter/YouTube.php +++ /dev/null @@ -1,39 +0,0 @@ -]+>.+?'. - 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?#s'; - $pre_replace = '\1'; - return preg_replace($pre_regex, $pre_replace, $html); - } - - public function postFilter($html, $config, $context) { - $post_regex = '#((?:v|cp)/[A-Za-z0-9\-_=]+)#'; - return preg_replace_callback($post_regex, array($this, 'postFilterCallback'), $html); - } - - protected function armorUrl($url) { - return str_replace('--', '--', $url); - } - - protected function postFilterCallback($matches) { - $url = $this->armorUrl($matches[1]); - return ''. - ''. - ''. - ''; - - } -} - -// vim: et sw=4 sts=4 diff --git a/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/Lexer/PH5P.php b/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/Lexer/PH5P.php deleted file mode 100644 index faf00b829..000000000 --- a/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/Lexer/PH5P.php +++ /dev/null @@ -1,3904 +0,0 @@ -normalize($html, $config, $context); - $new_html = $this->wrapHTML($new_html, $config, $context); - try { - $parser = new HTML5($new_html); - $doc = $parser->save(); - } catch (DOMException $e) { - // Uh oh, it failed. Punt to DirectLex. - $lexer = new HTMLPurifier_Lexer_DirectLex(); - $context->register('PH5PError', $e); // save the error, so we can detect it - return $lexer->tokenizeHTML($html, $config, $context); // use original HTML - } - $tokens = array(); - $this->tokenizeDOM( - $doc->getElementsByTagName('html')->item(0)-> // - getElementsByTagName('body')->item(0)-> // - getElementsByTagName('div')->item(0) //
    - , $tokens); - return $tokens; - } - -} - -/* - -Copyright 2007 Jeroen van der Meer - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -*/ - -class HTML5 { - private $data; - private $char; - private $EOF; - private $state; - private $tree; - private $token; - private $content_model; - private $escape = false; - private $entities = array('AElig;','AElig','AMP;','AMP','Aacute;','Aacute', - 'Acirc;','Acirc','Agrave;','Agrave','Alpha;','Aring;','Aring','Atilde;', - 'Atilde','Auml;','Auml','Beta;','COPY;','COPY','Ccedil;','Ccedil','Chi;', - 'Dagger;','Delta;','ETH;','ETH','Eacute;','Eacute','Ecirc;','Ecirc','Egrave;', - 'Egrave','Epsilon;','Eta;','Euml;','Euml','GT;','GT','Gamma;','Iacute;', - 'Iacute','Icirc;','Icirc','Igrave;','Igrave','Iota;','Iuml;','Iuml','Kappa;', - 'LT;','LT','Lambda;','Mu;','Ntilde;','Ntilde','Nu;','OElig;','Oacute;', - 'Oacute','Ocirc;','Ocirc','Ograve;','Ograve','Omega;','Omicron;','Oslash;', - 'Oslash','Otilde;','Otilde','Ouml;','Ouml','Phi;','Pi;','Prime;','Psi;', - 'QUOT;','QUOT','REG;','REG','Rho;','Scaron;','Sigma;','THORN;','THORN', - 'TRADE;','Tau;','Theta;','Uacute;','Uacute','Ucirc;','Ucirc','Ugrave;', - 'Ugrave','Upsilon;','Uuml;','Uuml','Xi;','Yacute;','Yacute','Yuml;','Zeta;', - 'aacute;','aacute','acirc;','acirc','acute;','acute','aelig;','aelig', - 'agrave;','agrave','alefsym;','alpha;','amp;','amp','and;','ang;','apos;', - 'aring;','aring','asymp;','atilde;','atilde','auml;','auml','bdquo;','beta;', - 'brvbar;','brvbar','bull;','cap;','ccedil;','ccedil','cedil;','cedil', - 'cent;','cent','chi;','circ;','clubs;','cong;','copy;','copy','crarr;', - 'cup;','curren;','curren','dArr;','dagger;','darr;','deg;','deg','delta;', - 'diams;','divide;','divide','eacute;','eacute','ecirc;','ecirc','egrave;', - 'egrave','empty;','emsp;','ensp;','epsilon;','equiv;','eta;','eth;','eth', - 'euml;','euml','euro;','exist;','fnof;','forall;','frac12;','frac12', - 'frac14;','frac14','frac34;','frac34','frasl;','gamma;','ge;','gt;','gt', - 'hArr;','harr;','hearts;','hellip;','iacute;','iacute','icirc;','icirc', - 'iexcl;','iexcl','igrave;','igrave','image;','infin;','int;','iota;', - 'iquest;','iquest','isin;','iuml;','iuml','kappa;','lArr;','lambda;','lang;', - 'laquo;','laquo','larr;','lceil;','ldquo;','le;','lfloor;','lowast;','loz;', - 'lrm;','lsaquo;','lsquo;','lt;','lt','macr;','macr','mdash;','micro;','micro', - 'middot;','middot','minus;','mu;','nabla;','nbsp;','nbsp','ndash;','ne;', - 'ni;','not;','not','notin;','nsub;','ntilde;','ntilde','nu;','oacute;', - 'oacute','ocirc;','ocirc','oelig;','ograve;','ograve','oline;','omega;', - 'omicron;','oplus;','or;','ordf;','ordf','ordm;','ordm','oslash;','oslash', - 'otilde;','otilde','otimes;','ouml;','ouml','para;','para','part;','permil;', - 'perp;','phi;','pi;','piv;','plusmn;','plusmn','pound;','pound','prime;', - 'prod;','prop;','psi;','quot;','quot','rArr;','radic;','rang;','raquo;', - 'raquo','rarr;','rceil;','rdquo;','real;','reg;','reg','rfloor;','rho;', - 'rlm;','rsaquo;','rsquo;','sbquo;','scaron;','sdot;','sect;','sect','shy;', - 'shy','sigma;','sigmaf;','sim;','spades;','sub;','sube;','sum;','sup1;', - 'sup1','sup2;','sup2','sup3;','sup3','sup;','supe;','szlig;','szlig','tau;', - 'there4;','theta;','thetasym;','thinsp;','thorn;','thorn','tilde;','times;', - 'times','trade;','uArr;','uacute;','uacute','uarr;','ucirc;','ucirc', - 'ugrave;','ugrave','uml;','uml','upsih;','upsilon;','uuml;','uuml','weierp;', - 'xi;','yacute;','yacute','yen;','yen','yuml;','yuml','zeta;','zwj;','zwnj;'); - - const PCDATA = 0; - const RCDATA = 1; - const CDATA = 2; - const PLAINTEXT = 3; - - const DOCTYPE = 0; - const STARTTAG = 1; - const ENDTAG = 2; - const COMMENT = 3; - const CHARACTR = 4; - const EOF = 5; - - public function __construct($data) { - - $this->data = $data; - $this->char = -1; - $this->EOF = strlen($data); - $this->tree = new HTML5TreeConstructer; - $this->content_model = self::PCDATA; - - $this->state = 'data'; - - while($this->state !== null) { - $this->{$this->state.'State'}(); - } - } - - public function save() { - return $this->tree->save(); - } - - private function char() { - return ($this->char < $this->EOF) - ? $this->data[$this->char] - : false; - } - - private function character($s, $l = 0) { - if($s + $l < $this->EOF) { - if($l === 0) { - return $this->data[$s]; - } else { - return substr($this->data, $s, $l); - } - } - } - - private function characters($char_class, $start) { - return preg_replace('#^(['.$char_class.']+).*#s', '\\1', substr($this->data, $start)); - } - - private function dataState() { - // Consume the next input character - $this->char++; - $char = $this->char(); - - if($char === '&' && ($this->content_model === self::PCDATA || $this->content_model === self::RCDATA)) { - /* U+0026 AMPERSAND (&) - When the content model flag is set to one of the PCDATA or RCDATA - states: switch to the entity data state. Otherwise: treat it as per - the "anything else" entry below. */ - $this->state = 'entityData'; - - } elseif($char === '-') { - /* If the content model flag is set to either the RCDATA state or - the CDATA state, and the escape flag is false, and there are at - least three characters before this one in the input stream, and the - last four characters in the input stream, including this one, are - U+003C LESS-THAN SIGN, U+0021 EXCLAMATION MARK, U+002D HYPHEN-MINUS, - and U+002D HYPHEN-MINUS (""), - set the escape flag to false. */ - if(($this->content_model === self::RCDATA || - $this->content_model === self::CDATA) && $this->escape === true && - $this->character($this->char, 3) === '-->') { - $this->escape = false; - } - - /* In any case, emit the input character as a character token. - Stay in the data state. */ - $this->emitToken(array( - 'type' => self::CHARACTR, - 'data' => $char - )); - - } elseif($this->char === $this->EOF) { - /* EOF - Emit an end-of-file token. */ - $this->EOF(); - - } elseif($this->content_model === self::PLAINTEXT) { - /* When the content model flag is set to the PLAINTEXT state - THIS DIFFERS GREATLY FROM THE SPEC: Get the remaining characters of - the text and emit it as a character token. */ - $this->emitToken(array( - 'type' => self::CHARACTR, - 'data' => substr($this->data, $this->char) - )); - - $this->EOF(); - - } else { - /* Anything else - THIS DIFFERS GREATLY FROM THE SPEC: Get as many character that - otherwise would also be treated as a character token and emit it - as a single character token. Stay in the data state. */ - $len = strcspn($this->data, '<&', $this->char); - $char = substr($this->data, $this->char, $len); - $this->char += $len - 1; - - $this->emitToken(array( - 'type' => self::CHARACTR, - 'data' => $char - )); - - $this->state = 'data'; - } - } - - private function entityDataState() { - // Attempt to consume an entity. - $entity = $this->entity(); - - // If nothing is returned, emit a U+0026 AMPERSAND character token. - // Otherwise, emit the character token that was returned. - $char = (!$entity) ? '&' : $entity; - $this->emitToken(array( - 'type' => self::CHARACTR, - 'data' => $char - )); - - // Finally, switch to the data state. - $this->state = 'data'; - } - - private function tagOpenState() { - switch($this->content_model) { - case self::RCDATA: - case self::CDATA: - /* If the next input character is a U+002F SOLIDUS (/) character, - consume it and switch to the close tag open state. If the next - input character is not a U+002F SOLIDUS (/) character, emit a - U+003C LESS-THAN SIGN character token and switch to the data - state to process the next input character. */ - if($this->character($this->char + 1) === '/') { - $this->char++; - $this->state = 'closeTagOpen'; - - } else { - $this->emitToken(array( - 'type' => self::CHARACTR, - 'data' => '<' - )); - - $this->state = 'data'; - } - break; - - case self::PCDATA: - // If the content model flag is set to the PCDATA state - // Consume the next input character: - $this->char++; - $char = $this->char(); - - if($char === '!') { - /* U+0021 EXCLAMATION MARK (!) - Switch to the markup declaration open state. */ - $this->state = 'markupDeclarationOpen'; - - } elseif($char === '/') { - /* U+002F SOLIDUS (/) - Switch to the close tag open state. */ - $this->state = 'closeTagOpen'; - - } elseif(preg_match('/^[A-Za-z]$/', $char)) { - /* U+0041 LATIN LETTER A through to U+005A LATIN LETTER Z - Create a new start tag token, set its tag name to the lowercase - version of the input character (add 0x0020 to the character's code - point), then switch to the tag name state. (Don't emit the token - yet; further details will be filled in before it is emitted.) */ - $this->token = array( - 'name' => strtolower($char), - 'type' => self::STARTTAG, - 'attr' => array() - ); - - $this->state = 'tagName'; - - } elseif($char === '>') { - /* U+003E GREATER-THAN SIGN (>) - Parse error. Emit a U+003C LESS-THAN SIGN character token and a - U+003E GREATER-THAN SIGN character token. Switch to the data state. */ - $this->emitToken(array( - 'type' => self::CHARACTR, - 'data' => '<>' - )); - - $this->state = 'data'; - - } elseif($char === '?') { - /* U+003F QUESTION MARK (?) - Parse error. Switch to the bogus comment state. */ - $this->state = 'bogusComment'; - - } else { - /* Anything else - Parse error. Emit a U+003C LESS-THAN SIGN character token and - reconsume the current input character in the data state. */ - $this->emitToken(array( - 'type' => self::CHARACTR, - 'data' => '<' - )); - - $this->char--; - $this->state = 'data'; - } - break; - } - } - - private function closeTagOpenState() { - $next_node = strtolower($this->characters('A-Za-z', $this->char + 1)); - $the_same = count($this->tree->stack) > 0 && $next_node === end($this->tree->stack)->nodeName; - - if(($this->content_model === self::RCDATA || $this->content_model === self::CDATA) && - (!$the_same || ($the_same && (!preg_match('/[\t\n\x0b\x0c >\/]/', - $this->character($this->char + 1 + strlen($next_node))) || $this->EOF === $this->char)))) { - /* If the content model flag is set to the RCDATA or CDATA states then - examine the next few characters. If they do not match the tag name of - the last start tag token emitted (case insensitively), or if they do but - they are not immediately followed by one of the following characters: - * U+0009 CHARACTER TABULATION - * U+000A LINE FEED (LF) - * U+000B LINE TABULATION - * U+000C FORM FEED (FF) - * U+0020 SPACE - * U+003E GREATER-THAN SIGN (>) - * U+002F SOLIDUS (/) - * EOF - ...then there is a parse error. Emit a U+003C LESS-THAN SIGN character - token, a U+002F SOLIDUS character token, and switch to the data state - to process the next input character. */ - $this->emitToken(array( - 'type' => self::CHARACTR, - 'data' => 'state = 'data'; - - } else { - /* Otherwise, if the content model flag is set to the PCDATA state, - or if the next few characters do match that tag name, consume the - next input character: */ - $this->char++; - $char = $this->char(); - - if(preg_match('/^[A-Za-z]$/', $char)) { - /* U+0041 LATIN LETTER A through to U+005A LATIN LETTER Z - Create a new end tag token, set its tag name to the lowercase version - of the input character (add 0x0020 to the character's code point), then - switch to the tag name state. (Don't emit the token yet; further details - will be filled in before it is emitted.) */ - $this->token = array( - 'name' => strtolower($char), - 'type' => self::ENDTAG - ); - - $this->state = 'tagName'; - - } elseif($char === '>') { - /* U+003E GREATER-THAN SIGN (>) - Parse error. Switch to the data state. */ - $this->state = 'data'; - - } elseif($this->char === $this->EOF) { - /* EOF - Parse error. Emit a U+003C LESS-THAN SIGN character token and a U+002F - SOLIDUS character token. Reconsume the EOF character in the data state. */ - $this->emitToken(array( - 'type' => self::CHARACTR, - 'data' => 'char--; - $this->state = 'data'; - - } else { - /* Parse error. Switch to the bogus comment state. */ - $this->state = 'bogusComment'; - } - } - } - - private function tagNameState() { - // Consume the next input character: - $this->char++; - $char = $this->character($this->char); - - if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) { - /* U+0009 CHARACTER TABULATION - U+000A LINE FEED (LF) - U+000B LINE TABULATION - U+000C FORM FEED (FF) - U+0020 SPACE - Switch to the before attribute name state. */ - $this->state = 'beforeAttributeName'; - - } elseif($char === '>') { - /* U+003E GREATER-THAN SIGN (>) - Emit the current tag token. Switch to the data state. */ - $this->emitToken($this->token); - $this->state = 'data'; - - } elseif($this->char === $this->EOF) { - /* EOF - Parse error. Emit the current tag token. Reconsume the EOF - character in the data state. */ - $this->emitToken($this->token); - - $this->char--; - $this->state = 'data'; - - } elseif($char === '/') { - /* U+002F SOLIDUS (/) - Parse error unless this is a permitted slash. Switch to the before - attribute name state. */ - $this->state = 'beforeAttributeName'; - - } else { - /* Anything else - Append the current input character to the current tag token's tag name. - Stay in the tag name state. */ - $this->token['name'] .= strtolower($char); - $this->state = 'tagName'; - } - } - - private function beforeAttributeNameState() { - // Consume the next input character: - $this->char++; - $char = $this->character($this->char); - - if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) { - /* U+0009 CHARACTER TABULATION - U+000A LINE FEED (LF) - U+000B LINE TABULATION - U+000C FORM FEED (FF) - U+0020 SPACE - Stay in the before attribute name state. */ - $this->state = 'beforeAttributeName'; - - } elseif($char === '>') { - /* U+003E GREATER-THAN SIGN (>) - Emit the current tag token. Switch to the data state. */ - $this->emitToken($this->token); - $this->state = 'data'; - - } elseif($char === '/') { - /* U+002F SOLIDUS (/) - Parse error unless this is a permitted slash. Stay in the before - attribute name state. */ - $this->state = 'beforeAttributeName'; - - } elseif($this->char === $this->EOF) { - /* EOF - Parse error. Emit the current tag token. Reconsume the EOF - character in the data state. */ - $this->emitToken($this->token); - - $this->char--; - $this->state = 'data'; - - } else { - /* Anything else - Start a new attribute in the current tag token. Set that attribute's - name to the current input character, and its value to the empty string. - Switch to the attribute name state. */ - $this->token['attr'][] = array( - 'name' => strtolower($char), - 'value' => null - ); - - $this->state = 'attributeName'; - } - } - - private function attributeNameState() { - // Consume the next input character: - $this->char++; - $char = $this->character($this->char); - - if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) { - /* U+0009 CHARACTER TABULATION - U+000A LINE FEED (LF) - U+000B LINE TABULATION - U+000C FORM FEED (FF) - U+0020 SPACE - Stay in the before attribute name state. */ - $this->state = 'afterAttributeName'; - - } elseif($char === '=') { - /* U+003D EQUALS SIGN (=) - Switch to the before attribute value state. */ - $this->state = 'beforeAttributeValue'; - - } elseif($char === '>') { - /* U+003E GREATER-THAN SIGN (>) - Emit the current tag token. Switch to the data state. */ - $this->emitToken($this->token); - $this->state = 'data'; - - } elseif($char === '/' && $this->character($this->char + 1) !== '>') { - /* U+002F SOLIDUS (/) - Parse error unless this is a permitted slash. Switch to the before - attribute name state. */ - $this->state = 'beforeAttributeName'; - - } elseif($this->char === $this->EOF) { - /* EOF - Parse error. Emit the current tag token. Reconsume the EOF - character in the data state. */ - $this->emitToken($this->token); - - $this->char--; - $this->state = 'data'; - - } else { - /* Anything else - Append the current input character to the current attribute's name. - Stay in the attribute name state. */ - $last = count($this->token['attr']) - 1; - $this->token['attr'][$last]['name'] .= strtolower($char); - - $this->state = 'attributeName'; - } - } - - private function afterAttributeNameState() { - // Consume the next input character: - $this->char++; - $char = $this->character($this->char); - - if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) { - /* U+0009 CHARACTER TABULATION - U+000A LINE FEED (LF) - U+000B LINE TABULATION - U+000C FORM FEED (FF) - U+0020 SPACE - Stay in the after attribute name state. */ - $this->state = 'afterAttributeName'; - - } elseif($char === '=') { - /* U+003D EQUALS SIGN (=) - Switch to the before attribute value state. */ - $this->state = 'beforeAttributeValue'; - - } elseif($char === '>') { - /* U+003E GREATER-THAN SIGN (>) - Emit the current tag token. Switch to the data state. */ - $this->emitToken($this->token); - $this->state = 'data'; - - } elseif($char === '/' && $this->character($this->char + 1) !== '>') { - /* U+002F SOLIDUS (/) - Parse error unless this is a permitted slash. Switch to the - before attribute name state. */ - $this->state = 'beforeAttributeName'; - - } elseif($this->char === $this->EOF) { - /* EOF - Parse error. Emit the current tag token. Reconsume the EOF - character in the data state. */ - $this->emitToken($this->token); - - $this->char--; - $this->state = 'data'; - - } else { - /* Anything else - Start a new attribute in the current tag token. Set that attribute's - name to the current input character, and its value to the empty string. - Switch to the attribute name state. */ - $this->token['attr'][] = array( - 'name' => strtolower($char), - 'value' => null - ); - - $this->state = 'attributeName'; - } - } - - private function beforeAttributeValueState() { - // Consume the next input character: - $this->char++; - $char = $this->character($this->char); - - if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) { - /* U+0009 CHARACTER TABULATION - U+000A LINE FEED (LF) - U+000B LINE TABULATION - U+000C FORM FEED (FF) - U+0020 SPACE - Stay in the before attribute value state. */ - $this->state = 'beforeAttributeValue'; - - } elseif($char === '"') { - /* U+0022 QUOTATION MARK (") - Switch to the attribute value (double-quoted) state. */ - $this->state = 'attributeValueDoubleQuoted'; - - } elseif($char === '&') { - /* U+0026 AMPERSAND (&) - Switch to the attribute value (unquoted) state and reconsume - this input character. */ - $this->char--; - $this->state = 'attributeValueUnquoted'; - - } elseif($char === '\'') { - /* U+0027 APOSTROPHE (') - Switch to the attribute value (single-quoted) state. */ - $this->state = 'attributeValueSingleQuoted'; - - } elseif($char === '>') { - /* U+003E GREATER-THAN SIGN (>) - Emit the current tag token. Switch to the data state. */ - $this->emitToken($this->token); - $this->state = 'data'; - - } else { - /* Anything else - Append the current input character to the current attribute's value. - Switch to the attribute value (unquoted) state. */ - $last = count($this->token['attr']) - 1; - $this->token['attr'][$last]['value'] .= $char; - - $this->state = 'attributeValueUnquoted'; - } - } - - private function attributeValueDoubleQuotedState() { - // Consume the next input character: - $this->char++; - $char = $this->character($this->char); - - if($char === '"') { - /* U+0022 QUOTATION MARK (") - Switch to the before attribute name state. */ - $this->state = 'beforeAttributeName'; - - } elseif($char === '&') { - /* U+0026 AMPERSAND (&) - Switch to the entity in attribute value state. */ - $this->entityInAttributeValueState('double'); - - } elseif($this->char === $this->EOF) { - /* EOF - Parse error. Emit the current tag token. Reconsume the character - in the data state. */ - $this->emitToken($this->token); - - $this->char--; - $this->state = 'data'; - - } else { - /* Anything else - Append the current input character to the current attribute's value. - Stay in the attribute value (double-quoted) state. */ - $last = count($this->token['attr']) - 1; - $this->token['attr'][$last]['value'] .= $char; - - $this->state = 'attributeValueDoubleQuoted'; - } - } - - private function attributeValueSingleQuotedState() { - // Consume the next input character: - $this->char++; - $char = $this->character($this->char); - - if($char === '\'') { - /* U+0022 QUOTATION MARK (') - Switch to the before attribute name state. */ - $this->state = 'beforeAttributeName'; - - } elseif($char === '&') { - /* U+0026 AMPERSAND (&) - Switch to the entity in attribute value state. */ - $this->entityInAttributeValueState('single'); - - } elseif($this->char === $this->EOF) { - /* EOF - Parse error. Emit the current tag token. Reconsume the character - in the data state. */ - $this->emitToken($this->token); - - $this->char--; - $this->state = 'data'; - - } else { - /* Anything else - Append the current input character to the current attribute's value. - Stay in the attribute value (single-quoted) state. */ - $last = count($this->token['attr']) - 1; - $this->token['attr'][$last]['value'] .= $char; - - $this->state = 'attributeValueSingleQuoted'; - } - } - - private function attributeValueUnquotedState() { - // Consume the next input character: - $this->char++; - $char = $this->character($this->char); - - if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) { - /* U+0009 CHARACTER TABULATION - U+000A LINE FEED (LF) - U+000B LINE TABULATION - U+000C FORM FEED (FF) - U+0020 SPACE - Switch to the before attribute name state. */ - $this->state = 'beforeAttributeName'; - - } elseif($char === '&') { - /* U+0026 AMPERSAND (&) - Switch to the entity in attribute value state. */ - $this->entityInAttributeValueState(); - - } elseif($char === '>') { - /* U+003E GREATER-THAN SIGN (>) - Emit the current tag token. Switch to the data state. */ - $this->emitToken($this->token); - $this->state = 'data'; - - } else { - /* Anything else - Append the current input character to the current attribute's value. - Stay in the attribute value (unquoted) state. */ - $last = count($this->token['attr']) - 1; - $this->token['attr'][$last]['value'] .= $char; - - $this->state = 'attributeValueUnquoted'; - } - } - - private function entityInAttributeValueState() { - // Attempt to consume an entity. - $entity = $this->entity(); - - // If nothing is returned, append a U+0026 AMPERSAND character to the - // current attribute's value. Otherwise, emit the character token that - // was returned. - $char = (!$entity) - ? '&' - : $entity; - - $last = count($this->token['attr']) - 1; - $this->token['attr'][$last]['value'] .= $char; - } - - private function bogusCommentState() { - /* Consume every character up to the first U+003E GREATER-THAN SIGN - character (>) or the end of the file (EOF), whichever comes first. Emit - a comment token whose data is the concatenation of all the characters - starting from and including the character that caused the state machine - to switch into the bogus comment state, up to and including the last - consumed character before the U+003E character, if any, or up to the - end of the file otherwise. (If the comment was started by the end of - the file (EOF), the token is empty.) */ - $data = $this->characters('^>', $this->char); - $this->emitToken(array( - 'data' => $data, - 'type' => self::COMMENT - )); - - $this->char += strlen($data); - - /* Switch to the data state. */ - $this->state = 'data'; - - /* If the end of the file was reached, reconsume the EOF character. */ - if($this->char === $this->EOF) { - $this->char = $this->EOF - 1; - } - } - - private function markupDeclarationOpenState() { - /* If the next two characters are both U+002D HYPHEN-MINUS (-) - characters, consume those two characters, create a comment token whose - data is the empty string, and switch to the comment state. */ - if($this->character($this->char + 1, 2) === '--') { - $this->char += 2; - $this->state = 'comment'; - $this->token = array( - 'data' => null, - 'type' => self::COMMENT - ); - - /* Otherwise if the next seven chacacters are a case-insensitive match - for the word "DOCTYPE", then consume those characters and switch to the - DOCTYPE state. */ - } elseif(strtolower($this->character($this->char + 1, 7)) === 'doctype') { - $this->char += 7; - $this->state = 'doctype'; - - /* Otherwise, is is a parse error. Switch to the bogus comment state. - The next character that is consumed, if any, is the first character - that will be in the comment. */ - } else { - $this->char++; - $this->state = 'bogusComment'; - } - } - - private function commentState() { - /* Consume the next input character: */ - $this->char++; - $char = $this->char(); - - /* U+002D HYPHEN-MINUS (-) */ - if($char === '-') { - /* Switch to the comment dash state */ - $this->state = 'commentDash'; - - /* EOF */ - } elseif($this->char === $this->EOF) { - /* Parse error. Emit the comment token. Reconsume the EOF character - in the data state. */ - $this->emitToken($this->token); - $this->char--; - $this->state = 'data'; - - /* Anything else */ - } else { - /* Append the input character to the comment token's data. Stay in - the comment state. */ - $this->token['data'] .= $char; - } - } - - private function commentDashState() { - /* Consume the next input character: */ - $this->char++; - $char = $this->char(); - - /* U+002D HYPHEN-MINUS (-) */ - if($char === '-') { - /* Switch to the comment end state */ - $this->state = 'commentEnd'; - - /* EOF */ - } elseif($this->char === $this->EOF) { - /* Parse error. Emit the comment token. Reconsume the EOF character - in the data state. */ - $this->emitToken($this->token); - $this->char--; - $this->state = 'data'; - - /* Anything else */ - } else { - /* Append a U+002D HYPHEN-MINUS (-) character and the input - character to the comment token's data. Switch to the comment state. */ - $this->token['data'] .= '-'.$char; - $this->state = 'comment'; - } - } - - private function commentEndState() { - /* Consume the next input character: */ - $this->char++; - $char = $this->char(); - - if($char === '>') { - $this->emitToken($this->token); - $this->state = 'data'; - - } elseif($char === '-') { - $this->token['data'] .= '-'; - - } elseif($this->char === $this->EOF) { - $this->emitToken($this->token); - $this->char--; - $this->state = 'data'; - - } else { - $this->token['data'] .= '--'.$char; - $this->state = 'comment'; - } - } - - private function doctypeState() { - /* Consume the next input character: */ - $this->char++; - $char = $this->char(); - - if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) { - $this->state = 'beforeDoctypeName'; - - } else { - $this->char--; - $this->state = 'beforeDoctypeName'; - } - } - - private function beforeDoctypeNameState() { - /* Consume the next input character: */ - $this->char++; - $char = $this->char(); - - if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) { - // Stay in the before DOCTYPE name state. - - } elseif(preg_match('/^[a-z]$/', $char)) { - $this->token = array( - 'name' => strtoupper($char), - 'type' => self::DOCTYPE, - 'error' => true - ); - - $this->state = 'doctypeName'; - - } elseif($char === '>') { - $this->emitToken(array( - 'name' => null, - 'type' => self::DOCTYPE, - 'error' => true - )); - - $this->state = 'data'; - - } elseif($this->char === $this->EOF) { - $this->emitToken(array( - 'name' => null, - 'type' => self::DOCTYPE, - 'error' => true - )); - - $this->char--; - $this->state = 'data'; - - } else { - $this->token = array( - 'name' => $char, - 'type' => self::DOCTYPE, - 'error' => true - ); - - $this->state = 'doctypeName'; - } - } - - private function doctypeNameState() { - /* Consume the next input character: */ - $this->char++; - $char = $this->char(); - - if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) { - $this->state = 'AfterDoctypeName'; - - } elseif($char === '>') { - $this->emitToken($this->token); - $this->state = 'data'; - - } elseif(preg_match('/^[a-z]$/', $char)) { - $this->token['name'] .= strtoupper($char); - - } elseif($this->char === $this->EOF) { - $this->emitToken($this->token); - $this->char--; - $this->state = 'data'; - - } else { - $this->token['name'] .= $char; - } - - $this->token['error'] = ($this->token['name'] === 'HTML') - ? false - : true; - } - - private function afterDoctypeNameState() { - /* Consume the next input character: */ - $this->char++; - $char = $this->char(); - - if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) { - // Stay in the DOCTYPE name state. - - } elseif($char === '>') { - $this->emitToken($this->token); - $this->state = 'data'; - - } elseif($this->char === $this->EOF) { - $this->emitToken($this->token); - $this->char--; - $this->state = 'data'; - - } else { - $this->token['error'] = true; - $this->state = 'bogusDoctype'; - } - } - - private function bogusDoctypeState() { - /* Consume the next input character: */ - $this->char++; - $char = $this->char(); - - if($char === '>') { - $this->emitToken($this->token); - $this->state = 'data'; - - } elseif($this->char === $this->EOF) { - $this->emitToken($this->token); - $this->char--; - $this->state = 'data'; - - } else { - // Stay in the bogus DOCTYPE state. - } - } - - private function entity() { - $start = $this->char; - - // This section defines how to consume an entity. This definition is - // used when parsing entities in text and in attributes. - - // The behaviour depends on the identity of the next character (the - // one immediately after the U+0026 AMPERSAND character): - - switch($this->character($this->char + 1)) { - // U+0023 NUMBER SIGN (#) - case '#': - - // The behaviour further depends on the character after the - // U+0023 NUMBER SIGN: - switch($this->character($this->char + 1)) { - // U+0078 LATIN SMALL LETTER X - // U+0058 LATIN CAPITAL LETTER X - case 'x': - case 'X': - // Follow the steps below, but using the range of - // characters U+0030 DIGIT ZERO through to U+0039 DIGIT - // NINE, U+0061 LATIN SMALL LETTER A through to U+0066 - // LATIN SMALL LETTER F, and U+0041 LATIN CAPITAL LETTER - // A, through to U+0046 LATIN CAPITAL LETTER F (in other - // words, 0-9, A-F, a-f). - $char = 1; - $char_class = '0-9A-Fa-f'; - break; - - // Anything else - default: - // Follow the steps below, but using the range of - // characters U+0030 DIGIT ZERO through to U+0039 DIGIT - // NINE (i.e. just 0-9). - $char = 0; - $char_class = '0-9'; - break; - } - - // Consume as many characters as match the range of characters - // given above. - $this->char++; - $e_name = $this->characters($char_class, $this->char + $char + 1); - $entity = $this->character($start, $this->char); - $cond = strlen($e_name) > 0; - - // The rest of the parsing happens bellow. - break; - - // Anything else - default: - // Consume the maximum number of characters possible, with the - // consumed characters case-sensitively matching one of the - // identifiers in the first column of the entities table. - $e_name = $this->characters('0-9A-Za-z;', $this->char + 1); - $len = strlen($e_name); - - for($c = 1; $c <= $len; $c++) { - $id = substr($e_name, 0, $c); - $this->char++; - - if(in_array($id, $this->entities)) { - if ($e_name[$c-1] !== ';') { - if ($c < $len && $e_name[$c] == ';') { - $this->char++; // consume extra semicolon - } - } - $entity = $id; - break; - } - } - - $cond = isset($entity); - // The rest of the parsing happens bellow. - break; - } - - if(!$cond) { - // If no match can be made, then this is a parse error. No - // characters are consumed, and nothing is returned. - $this->char = $start; - return false; - } - - // Return a character token for the character corresponding to the - // entity name (as given by the second column of the entities table). - return html_entity_decode('&'.$entity.';', ENT_QUOTES, 'UTF-8'); - } - - private function emitToken($token) { - $emit = $this->tree->emitToken($token); - - if(is_int($emit)) { - $this->content_model = $emit; - - } elseif($token['type'] === self::ENDTAG) { - $this->content_model = self::PCDATA; - } - } - - private function EOF() { - $this->state = null; - $this->tree->emitToken(array( - 'type' => self::EOF - )); - } -} - -class HTML5TreeConstructer { - public $stack = array(); - - private $phase; - private $mode; - private $dom; - private $foster_parent = null; - private $a_formatting = array(); - - private $head_pointer = null; - private $form_pointer = null; - - private $scoping = array('button','caption','html','marquee','object','table','td','th'); - private $formatting = array('a','b','big','em','font','i','nobr','s','small','strike','strong','tt','u'); - private $special = array('address','area','base','basefont','bgsound', - 'blockquote','body','br','center','col','colgroup','dd','dir','div','dl', - 'dt','embed','fieldset','form','frame','frameset','h1','h2','h3','h4','h5', - 'h6','head','hr','iframe','image','img','input','isindex','li','link', - 'listing','menu','meta','noembed','noframes','noscript','ol','optgroup', - 'option','p','param','plaintext','pre','script','select','spacer','style', - 'tbody','textarea','tfoot','thead','title','tr','ul','wbr'); - - // The different phases. - const INIT_PHASE = 0; - const ROOT_PHASE = 1; - const MAIN_PHASE = 2; - const END_PHASE = 3; - - // The different insertion modes for the main phase. - const BEFOR_HEAD = 0; - const IN_HEAD = 1; - const AFTER_HEAD = 2; - const IN_BODY = 3; - const IN_TABLE = 4; - const IN_CAPTION = 5; - const IN_CGROUP = 6; - const IN_TBODY = 7; - const IN_ROW = 8; - const IN_CELL = 9; - const IN_SELECT = 10; - const AFTER_BODY = 11; - const IN_FRAME = 12; - const AFTR_FRAME = 13; - - // The different types of elements. - const SPECIAL = 0; - const SCOPING = 1; - const FORMATTING = 2; - const PHRASING = 3; - - const MARKER = 0; - - public function __construct() { - $this->phase = self::INIT_PHASE; - $this->mode = self::BEFOR_HEAD; - $this->dom = new DOMDocument; - - $this->dom->encoding = 'UTF-8'; - $this->dom->preserveWhiteSpace = true; - $this->dom->substituteEntities = true; - $this->dom->strictErrorChecking = false; - } - - // Process tag tokens - public function emitToken($token) { - switch($this->phase) { - case self::INIT_PHASE: return $this->initPhase($token); break; - case self::ROOT_PHASE: return $this->rootElementPhase($token); break; - case self::MAIN_PHASE: return $this->mainPhase($token); break; - case self::END_PHASE : return $this->trailingEndPhase($token); break; - } - } - - private function initPhase($token) { - /* Initially, the tree construction stage must handle each token - emitted from the tokenisation stage as follows: */ - - /* A DOCTYPE token that is marked as being in error - A comment token - A start tag token - An end tag token - A character token that is not one of one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF), - or U+0020 SPACE - An end-of-file token */ - if((isset($token['error']) && $token['error']) || - $token['type'] === HTML5::COMMENT || - $token['type'] === HTML5::STARTTAG || - $token['type'] === HTML5::ENDTAG || - $token['type'] === HTML5::EOF || - ($token['type'] === HTML5::CHARACTR && isset($token['data']) && - !preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data']))) { - /* This specification does not define how to handle this case. In - particular, user agents may ignore the entirety of this specification - altogether for such documents, and instead invoke special parse modes - with a greater emphasis on backwards compatibility. */ - - $this->phase = self::ROOT_PHASE; - return $this->rootElementPhase($token); - - /* A DOCTYPE token marked as being correct */ - } elseif(isset($token['error']) && !$token['error']) { - /* Append a DocumentType node to the Document node, with the name - attribute set to the name given in the DOCTYPE token (which will be - "HTML"), and the other attributes specific to DocumentType objects - set to null, empty lists, or the empty string as appropriate. */ - $doctype = new DOMDocumentType(null, null, 'HTML'); - - /* Then, switch to the root element phase of the tree construction - stage. */ - $this->phase = self::ROOT_PHASE; - - /* A character token that is one of one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF), - or U+0020 SPACE */ - } elseif(isset($token['data']) && preg_match('/^[\t\n\x0b\x0c ]+$/', - $token['data'])) { - /* Append that character to the Document node. */ - $text = $this->dom->createTextNode($token['data']); - $this->dom->appendChild($text); - } - } - - private function rootElementPhase($token) { - /* After the initial phase, as each token is emitted from the tokenisation - stage, it must be processed as described in this section. */ - - /* A DOCTYPE token */ - if($token['type'] === HTML5::DOCTYPE) { - // Parse error. Ignore the token. - - /* A comment token */ - } elseif($token['type'] === HTML5::COMMENT) { - /* Append a Comment node to the Document object with the data - attribute set to the data given in the comment token. */ - $comment = $this->dom->createComment($token['data']); - $this->dom->appendChild($comment); - - /* A character token that is one of one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF), - or U+0020 SPACE */ - } elseif($token['type'] === HTML5::CHARACTR && - preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) { - /* Append that character to the Document node. */ - $text = $this->dom->createTextNode($token['data']); - $this->dom->appendChild($text); - - /* A character token that is not one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED - (FF), or U+0020 SPACE - A start tag token - An end tag token - An end-of-file token */ - } elseif(($token['type'] === HTML5::CHARACTR && - !preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) || - $token['type'] === HTML5::STARTTAG || - $token['type'] === HTML5::ENDTAG || - $token['type'] === HTML5::EOF) { - /* Create an HTMLElement node with the tag name html, in the HTML - namespace. Append it to the Document object. Switch to the main - phase and reprocess the current token. */ - $html = $this->dom->createElement('html'); - $this->dom->appendChild($html); - $this->stack[] = $html; - - $this->phase = self::MAIN_PHASE; - return $this->mainPhase($token); - } - } - - private function mainPhase($token) { - /* Tokens in the main phase must be handled as follows: */ - - /* A DOCTYPE token */ - if($token['type'] === HTML5::DOCTYPE) { - // Parse error. Ignore the token. - - /* A start tag token with the tag name "html" */ - } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'html') { - /* If this start tag token was not the first start tag token, then - it is a parse error. */ - - /* For each attribute on the token, check to see if the attribute - is already present on the top element of the stack of open elements. - If it is not, add the attribute and its corresponding value to that - element. */ - foreach($token['attr'] as $attr) { - if(!$this->stack[0]->hasAttribute($attr['name'])) { - $this->stack[0]->setAttribute($attr['name'], $attr['value']); - } - } - - /* An end-of-file token */ - } elseif($token['type'] === HTML5::EOF) { - /* Generate implied end tags. */ - $this->generateImpliedEndTags(); - - /* Anything else. */ - } else { - /* Depends on the insertion mode: */ - switch($this->mode) { - case self::BEFOR_HEAD: return $this->beforeHead($token); break; - case self::IN_HEAD: return $this->inHead($token); break; - case self::AFTER_HEAD: return $this->afterHead($token); break; - case self::IN_BODY: return $this->inBody($token); break; - case self::IN_TABLE: return $this->inTable($token); break; - case self::IN_CAPTION: return $this->inCaption($token); break; - case self::IN_CGROUP: return $this->inColumnGroup($token); break; - case self::IN_TBODY: return $this->inTableBody($token); break; - case self::IN_ROW: return $this->inRow($token); break; - case self::IN_CELL: return $this->inCell($token); break; - case self::IN_SELECT: return $this->inSelect($token); break; - case self::AFTER_BODY: return $this->afterBody($token); break; - case self::IN_FRAME: return $this->inFrameset($token); break; - case self::AFTR_FRAME: return $this->afterFrameset($token); break; - case self::END_PHASE: return $this->trailingEndPhase($token); break; - } - } - } - - private function beforeHead($token) { - /* Handle the token as follows: */ - - /* A character token that is one of one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF), - or U+0020 SPACE */ - if($token['type'] === HTML5::CHARACTR && - preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) { - /* Append the character to the current node. */ - $this->insertText($token['data']); - - /* A comment token */ - } elseif($token['type'] === HTML5::COMMENT) { - /* Append a Comment node to the current node with the data attribute - set to the data given in the comment token. */ - $this->insertComment($token['data']); - - /* A start tag token with the tag name "head" */ - } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'head') { - /* Create an element for the token, append the new element to the - current node and push it onto the stack of open elements. */ - $element = $this->insertElement($token); - - /* Set the head element pointer to this new element node. */ - $this->head_pointer = $element; - - /* Change the insertion mode to "in head". */ - $this->mode = self::IN_HEAD; - - /* A start tag token whose tag name is one of: "base", "link", "meta", - "script", "style", "title". Or an end tag with the tag name "html". - Or a character token that is not one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF), - or U+0020 SPACE. Or any other start tag token */ - } elseif($token['type'] === HTML5::STARTTAG || - ($token['type'] === HTML5::ENDTAG && $token['name'] === 'html') || - ($token['type'] === HTML5::CHARACTR && !preg_match('/^[\t\n\x0b\x0c ]$/', - $token['data']))) { - /* Act as if a start tag token with the tag name "head" and no - attributes had been seen, then reprocess the current token. */ - $this->beforeHead(array( - 'name' => 'head', - 'type' => HTML5::STARTTAG, - 'attr' => array() - )); - - return $this->inHead($token); - - /* Any other end tag */ - } elseif($token['type'] === HTML5::ENDTAG) { - /* Parse error. Ignore the token. */ - } - } - - private function inHead($token) { - /* Handle the token as follows: */ - - /* A character token that is one of one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF), - or U+0020 SPACE. - - THIS DIFFERS FROM THE SPEC: If the current node is either a title, style - or script element, append the character to the current node regardless - of its content. */ - if(($token['type'] === HTML5::CHARACTR && - preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) || ( - $token['type'] === HTML5::CHARACTR && in_array(end($this->stack)->nodeName, - array('title', 'style', 'script')))) { - /* Append the character to the current node. */ - $this->insertText($token['data']); - - /* A comment token */ - } elseif($token['type'] === HTML5::COMMENT) { - /* Append a Comment node to the current node with the data attribute - set to the data given in the comment token. */ - $this->insertComment($token['data']); - - } elseif($token['type'] === HTML5::ENDTAG && - in_array($token['name'], array('title', 'style', 'script'))) { - array_pop($this->stack); - return HTML5::PCDATA; - - /* A start tag with the tag name "title" */ - } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'title') { - /* Create an element for the token and append the new element to the - node pointed to by the head element pointer, or, if that is null - (innerHTML case), to the current node. */ - if($this->head_pointer !== null) { - $element = $this->insertElement($token, false); - $this->head_pointer->appendChild($element); - - } else { - $element = $this->insertElement($token); - } - - /* Switch the tokeniser's content model flag to the RCDATA state. */ - return HTML5::RCDATA; - - /* A start tag with the tag name "style" */ - } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'style') { - /* Create an element for the token and append the new element to the - node pointed to by the head element pointer, or, if that is null - (innerHTML case), to the current node. */ - if($this->head_pointer !== null) { - $element = $this->insertElement($token, false); - $this->head_pointer->appendChild($element); - - } else { - $this->insertElement($token); - } - - /* Switch the tokeniser's content model flag to the CDATA state. */ - return HTML5::CDATA; - - /* A start tag with the tag name "script" */ - } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'script') { - /* Create an element for the token. */ - $element = $this->insertElement($token, false); - $this->head_pointer->appendChild($element); - - /* Switch the tokeniser's content model flag to the CDATA state. */ - return HTML5::CDATA; - - /* A start tag with the tag name "base", "link", or "meta" */ - } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'], - array('base', 'link', 'meta'))) { - /* Create an element for the token and append the new element to the - node pointed to by the head element pointer, or, if that is null - (innerHTML case), to the current node. */ - if($this->head_pointer !== null) { - $element = $this->insertElement($token, false); - $this->head_pointer->appendChild($element); - array_pop($this->stack); - - } else { - $this->insertElement($token); - } - - /* An end tag with the tag name "head" */ - } elseif($token['type'] === HTML5::ENDTAG && $token['name'] === 'head') { - /* If the current node is a head element, pop the current node off - the stack of open elements. */ - if($this->head_pointer->isSameNode(end($this->stack))) { - array_pop($this->stack); - - /* Otherwise, this is a parse error. */ - } else { - // k - } - - /* Change the insertion mode to "after head". */ - $this->mode = self::AFTER_HEAD; - - /* A start tag with the tag name "head" or an end tag except "html". */ - } elseif(($token['type'] === HTML5::STARTTAG && $token['name'] === 'head') || - ($token['type'] === HTML5::ENDTAG && $token['name'] !== 'html')) { - // Parse error. Ignore the token. - - /* Anything else */ - } else { - /* If the current node is a head element, act as if an end tag - token with the tag name "head" had been seen. */ - if($this->head_pointer->isSameNode(end($this->stack))) { - $this->inHead(array( - 'name' => 'head', - 'type' => HTML5::ENDTAG - )); - - /* Otherwise, change the insertion mode to "after head". */ - } else { - $this->mode = self::AFTER_HEAD; - } - - /* Then, reprocess the current token. */ - return $this->afterHead($token); - } - } - - private function afterHead($token) { - /* Handle the token as follows: */ - - /* A character token that is one of one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF), - or U+0020 SPACE */ - if($token['type'] === HTML5::CHARACTR && - preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) { - /* Append the character to the current node. */ - $this->insertText($token['data']); - - /* A comment token */ - } elseif($token['type'] === HTML5::COMMENT) { - /* Append a Comment node to the current node with the data attribute - set to the data given in the comment token. */ - $this->insertComment($token['data']); - - /* A start tag token with the tag name "body" */ - } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'body') { - /* Insert a body element for the token. */ - $this->insertElement($token); - - /* Change the insertion mode to "in body". */ - $this->mode = self::IN_BODY; - - /* A start tag token with the tag name "frameset" */ - } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'frameset') { - /* Insert a frameset element for the token. */ - $this->insertElement($token); - - /* Change the insertion mode to "in frameset". */ - $this->mode = self::IN_FRAME; - - /* A start tag token whose tag name is one of: "base", "link", "meta", - "script", "style", "title" */ - } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'], - array('base', 'link', 'meta', 'script', 'style', 'title'))) { - /* Parse error. Switch the insertion mode back to "in head" and - reprocess the token. */ - $this->mode = self::IN_HEAD; - return $this->inHead($token); - - /* Anything else */ - } else { - /* Act as if a start tag token with the tag name "body" and no - attributes had been seen, and then reprocess the current token. */ - $this->afterHead(array( - 'name' => 'body', - 'type' => HTML5::STARTTAG, - 'attr' => array() - )); - - return $this->inBody($token); - } - } - - private function inBody($token) { - /* Handle the token as follows: */ - - switch($token['type']) { - /* A character token */ - case HTML5::CHARACTR: - /* Reconstruct the active formatting elements, if any. */ - $this->reconstructActiveFormattingElements(); - - /* Append the token's character to the current node. */ - $this->insertText($token['data']); - break; - - /* A comment token */ - case HTML5::COMMENT: - /* Append a Comment node to the current node with the data - attribute set to the data given in the comment token. */ - $this->insertComment($token['data']); - break; - - case HTML5::STARTTAG: - switch($token['name']) { - /* A start tag token whose tag name is one of: "script", - "style" */ - case 'script': case 'style': - /* Process the token as if the insertion mode had been "in - head". */ - return $this->inHead($token); - break; - - /* A start tag token whose tag name is one of: "base", "link", - "meta", "title" */ - case 'base': case 'link': case 'meta': case 'title': - /* Parse error. Process the token as if the insertion mode - had been "in head". */ - return $this->inHead($token); - break; - - /* A start tag token with the tag name "body" */ - case 'body': - /* Parse error. If the second element on the stack of open - elements is not a body element, or, if the stack of open - elements has only one node on it, then ignore the token. - (innerHTML case) */ - if(count($this->stack) === 1 || $this->stack[1]->nodeName !== 'body') { - // Ignore - - /* Otherwise, for each attribute on the token, check to see - if the attribute is already present on the body element (the - second element) on the stack of open elements. If it is not, - add the attribute and its corresponding value to that - element. */ - } else { - foreach($token['attr'] as $attr) { - if(!$this->stack[1]->hasAttribute($attr['name'])) { - $this->stack[1]->setAttribute($attr['name'], $attr['value']); - } - } - } - break; - - /* A start tag whose tag name is one of: "address", - "blockquote", "center", "dir", "div", "dl", "fieldset", - "listing", "menu", "ol", "p", "ul" */ - case 'address': case 'blockquote': case 'center': case 'dir': - case 'div': case 'dl': case 'fieldset': case 'listing': - case 'menu': case 'ol': case 'p': case 'ul': - /* If the stack of open elements has a p element in scope, - then act as if an end tag with the tag name p had been - seen. */ - if($this->elementInScope('p')) { - $this->emitToken(array( - 'name' => 'p', - 'type' => HTML5::ENDTAG - )); - } - - /* Insert an HTML element for the token. */ - $this->insertElement($token); - break; - - /* A start tag whose tag name is "form" */ - case 'form': - /* If the form element pointer is not null, ignore the - token with a parse error. */ - if($this->form_pointer !== null) { - // Ignore. - - /* Otherwise: */ - } else { - /* If the stack of open elements has a p element in - scope, then act as if an end tag with the tag name p - had been seen. */ - if($this->elementInScope('p')) { - $this->emitToken(array( - 'name' => 'p', - 'type' => HTML5::ENDTAG - )); - } - - /* Insert an HTML element for the token, and set the - form element pointer to point to the element created. */ - $element = $this->insertElement($token); - $this->form_pointer = $element; - } - break; - - /* A start tag whose tag name is "li", "dd" or "dt" */ - case 'li': case 'dd': case 'dt': - /* If the stack of open elements has a p element in scope, - then act as if an end tag with the tag name p had been - seen. */ - if($this->elementInScope('p')) { - $this->emitToken(array( - 'name' => 'p', - 'type' => HTML5::ENDTAG - )); - } - - $stack_length = count($this->stack) - 1; - - for($n = $stack_length; 0 <= $n; $n--) { - /* 1. Initialise node to be the current node (the - bottommost node of the stack). */ - $stop = false; - $node = $this->stack[$n]; - $cat = $this->getElementCategory($node->tagName); - - /* 2. If node is an li, dd or dt element, then pop all - the nodes from the current node up to node, including - node, then stop this algorithm. */ - if($token['name'] === $node->tagName || ($token['name'] !== 'li' - && ($node->tagName === 'dd' || $node->tagName === 'dt'))) { - for($x = $stack_length; $x >= $n ; $x--) { - array_pop($this->stack); - } - - break; - } - - /* 3. If node is not in the formatting category, and is - not in the phrasing category, and is not an address or - div element, then stop this algorithm. */ - if($cat !== self::FORMATTING && $cat !== self::PHRASING && - $node->tagName !== 'address' && $node->tagName !== 'div') { - break; - } - } - - /* Finally, insert an HTML element with the same tag - name as the token's. */ - $this->insertElement($token); - break; - - /* A start tag token whose tag name is "plaintext" */ - case 'plaintext': - /* If the stack of open elements has a p element in scope, - then act as if an end tag with the tag name p had been - seen. */ - if($this->elementInScope('p')) { - $this->emitToken(array( - 'name' => 'p', - 'type' => HTML5::ENDTAG - )); - } - - /* Insert an HTML element for the token. */ - $this->insertElement($token); - - return HTML5::PLAINTEXT; - break; - - /* A start tag whose tag name is one of: "h1", "h2", "h3", "h4", - "h5", "h6" */ - case 'h1': case 'h2': case 'h3': case 'h4': case 'h5': case 'h6': - /* If the stack of open elements has a p element in scope, - then act as if an end tag with the tag name p had been seen. */ - if($this->elementInScope('p')) { - $this->emitToken(array( - 'name' => 'p', - 'type' => HTML5::ENDTAG - )); - } - - /* If the stack of open elements has in scope an element whose - tag name is one of "h1", "h2", "h3", "h4", "h5", or "h6", then - this is a parse error; pop elements from the stack until an - element with one of those tag names has been popped from the - stack. */ - while($this->elementInScope(array('h1', 'h2', 'h3', 'h4', 'h5', 'h6'))) { - array_pop($this->stack); - } - - /* Insert an HTML element for the token. */ - $this->insertElement($token); - break; - - /* A start tag whose tag name is "a" */ - case 'a': - /* If the list of active formatting elements contains - an element whose tag name is "a" between the end of the - list and the last marker on the list (or the start of - the list if there is no marker on the list), then this - is a parse error; act as if an end tag with the tag name - "a" had been seen, then remove that element from the list - of active formatting elements and the stack of open - elements if the end tag didn't already remove it (it - might not have if the element is not in table scope). */ - $leng = count($this->a_formatting); - - for($n = $leng - 1; $n >= 0; $n--) { - if($this->a_formatting[$n] === self::MARKER) { - break; - - } elseif($this->a_formatting[$n]->nodeName === 'a') { - $this->emitToken(array( - 'name' => 'a', - 'type' => HTML5::ENDTAG - )); - break; - } - } - - /* Reconstruct the active formatting elements, if any. */ - $this->reconstructActiveFormattingElements(); - - /* Insert an HTML element for the token. */ - $el = $this->insertElement($token); - - /* Add that element to the list of active formatting - elements. */ - $this->a_formatting[] = $el; - break; - - /* A start tag whose tag name is one of: "b", "big", "em", "font", - "i", "nobr", "s", "small", "strike", "strong", "tt", "u" */ - case 'b': case 'big': case 'em': case 'font': case 'i': - case 'nobr': case 's': case 'small': case 'strike': - case 'strong': case 'tt': case 'u': - /* Reconstruct the active formatting elements, if any. */ - $this->reconstructActiveFormattingElements(); - - /* Insert an HTML element for the token. */ - $el = $this->insertElement($token); - - /* Add that element to the list of active formatting - elements. */ - $this->a_formatting[] = $el; - break; - - /* A start tag token whose tag name is "button" */ - case 'button': - /* If the stack of open elements has a button element in scope, - then this is a parse error; act as if an end tag with the tag - name "button" had been seen, then reprocess the token. (We don't - do that. Unnecessary.) */ - if($this->elementInScope('button')) { - $this->inBody(array( - 'name' => 'button', - 'type' => HTML5::ENDTAG - )); - } - - /* Reconstruct the active formatting elements, if any. */ - $this->reconstructActiveFormattingElements(); - - /* Insert an HTML element for the token. */ - $this->insertElement($token); - - /* Insert a marker at the end of the list of active - formatting elements. */ - $this->a_formatting[] = self::MARKER; - break; - - /* A start tag token whose tag name is one of: "marquee", "object" */ - case 'marquee': case 'object': - /* Reconstruct the active formatting elements, if any. */ - $this->reconstructActiveFormattingElements(); - - /* Insert an HTML element for the token. */ - $this->insertElement($token); - - /* Insert a marker at the end of the list of active - formatting elements. */ - $this->a_formatting[] = self::MARKER; - break; - - /* A start tag token whose tag name is "xmp" */ - case 'xmp': - /* Reconstruct the active formatting elements, if any. */ - $this->reconstructActiveFormattingElements(); - - /* Insert an HTML element for the token. */ - $this->insertElement($token); - - /* Switch the content model flag to the CDATA state. */ - return HTML5::CDATA; - break; - - /* A start tag whose tag name is "table" */ - case 'table': - /* If the stack of open elements has a p element in scope, - then act as if an end tag with the tag name p had been seen. */ - if($this->elementInScope('p')) { - $this->emitToken(array( - 'name' => 'p', - 'type' => HTML5::ENDTAG - )); - } - - /* Insert an HTML element for the token. */ - $this->insertElement($token); - - /* Change the insertion mode to "in table". */ - $this->mode = self::IN_TABLE; - break; - - /* A start tag whose tag name is one of: "area", "basefont", - "bgsound", "br", "embed", "img", "param", "spacer", "wbr" */ - case 'area': case 'basefont': case 'bgsound': case 'br': - case 'embed': case 'img': case 'param': case 'spacer': - case 'wbr': - /* Reconstruct the active formatting elements, if any. */ - $this->reconstructActiveFormattingElements(); - - /* Insert an HTML element for the token. */ - $this->insertElement($token); - - /* Immediately pop the current node off the stack of open elements. */ - array_pop($this->stack); - break; - - /* A start tag whose tag name is "hr" */ - case 'hr': - /* If the stack of open elements has a p element in scope, - then act as if an end tag with the tag name p had been seen. */ - if($this->elementInScope('p')) { - $this->emitToken(array( - 'name' => 'p', - 'type' => HTML5::ENDTAG - )); - } - - /* Insert an HTML element for the token. */ - $this->insertElement($token); - - /* Immediately pop the current node off the stack of open elements. */ - array_pop($this->stack); - break; - - /* A start tag whose tag name is "image" */ - case 'image': - /* Parse error. Change the token's tag name to "img" and - reprocess it. (Don't ask.) */ - $token['name'] = 'img'; - return $this->inBody($token); - break; - - /* A start tag whose tag name is "input" */ - case 'input': - /* Reconstruct the active formatting elements, if any. */ - $this->reconstructActiveFormattingElements(); - - /* Insert an input element for the token. */ - $element = $this->insertElement($token, false); - - /* If the form element pointer is not null, then associate the - input element with the form element pointed to by the form - element pointer. */ - $this->form_pointer !== null - ? $this->form_pointer->appendChild($element) - : end($this->stack)->appendChild($element); - - /* Pop that input element off the stack of open elements. */ - array_pop($this->stack); - break; - - /* A start tag whose tag name is "isindex" */ - case 'isindex': - /* Parse error. */ - // w/e - - /* If the form element pointer is not null, - then ignore the token. */ - if($this->form_pointer === null) { - /* Act as if a start tag token with the tag name "form" had - been seen. */ - $this->inBody(array( - 'name' => 'body', - 'type' => HTML5::STARTTAG, - 'attr' => array() - )); - - /* Act as if a start tag token with the tag name "hr" had - been seen. */ - $this->inBody(array( - 'name' => 'hr', - 'type' => HTML5::STARTTAG, - 'attr' => array() - )); - - /* Act as if a start tag token with the tag name "p" had - been seen. */ - $this->inBody(array( - 'name' => 'p', - 'type' => HTML5::STARTTAG, - 'attr' => array() - )); - - /* Act as if a start tag token with the tag name "label" - had been seen. */ - $this->inBody(array( - 'name' => 'label', - 'type' => HTML5::STARTTAG, - 'attr' => array() - )); - - /* Act as if a stream of character tokens had been seen. */ - $this->insertText('This is a searchable index. '. - 'Insert your search keywords here: '); - - /* Act as if a start tag token with the tag name "input" - had been seen, with all the attributes from the "isindex" - token, except with the "name" attribute set to the value - "isindex" (ignoring any explicit "name" attribute). */ - $attr = $token['attr']; - $attr[] = array('name' => 'name', 'value' => 'isindex'); - - $this->inBody(array( - 'name' => 'input', - 'type' => HTML5::STARTTAG, - 'attr' => $attr - )); - - /* Act as if a stream of character tokens had been seen - (see below for what they should say). */ - $this->insertText('This is a searchable index. '. - 'Insert your search keywords here: '); - - /* Act as if an end tag token with the tag name "label" - had been seen. */ - $this->inBody(array( - 'name' => 'label', - 'type' => HTML5::ENDTAG - )); - - /* Act as if an end tag token with the tag name "p" had - been seen. */ - $this->inBody(array( - 'name' => 'p', - 'type' => HTML5::ENDTAG - )); - - /* Act as if a start tag token with the tag name "hr" had - been seen. */ - $this->inBody(array( - 'name' => 'hr', - 'type' => HTML5::ENDTAG - )); - - /* Act as if an end tag token with the tag name "form" had - been seen. */ - $this->inBody(array( - 'name' => 'form', - 'type' => HTML5::ENDTAG - )); - } - break; - - /* A start tag whose tag name is "textarea" */ - case 'textarea': - $this->insertElement($token); - - /* Switch the tokeniser's content model flag to the - RCDATA state. */ - return HTML5::RCDATA; - break; - - /* A start tag whose tag name is one of: "iframe", "noembed", - "noframes" */ - case 'iframe': case 'noembed': case 'noframes': - $this->insertElement($token); - - /* Switch the tokeniser's content model flag to the CDATA state. */ - return HTML5::CDATA; - break; - - /* A start tag whose tag name is "select" */ - case 'select': - /* Reconstruct the active formatting elements, if any. */ - $this->reconstructActiveFormattingElements(); - - /* Insert an HTML element for the token. */ - $this->insertElement($token); - - /* Change the insertion mode to "in select". */ - $this->mode = self::IN_SELECT; - break; - - /* A start or end tag whose tag name is one of: "caption", "col", - "colgroup", "frame", "frameset", "head", "option", "optgroup", - "tbody", "td", "tfoot", "th", "thead", "tr". */ - case 'caption': case 'col': case 'colgroup': case 'frame': - case 'frameset': case 'head': case 'option': case 'optgroup': - case 'tbody': case 'td': case 'tfoot': case 'th': case 'thead': - case 'tr': - // Parse error. Ignore the token. - break; - - /* A start or end tag whose tag name is one of: "event-source", - "section", "nav", "article", "aside", "header", "footer", - "datagrid", "command" */ - case 'event-source': case 'section': case 'nav': case 'article': - case 'aside': case 'header': case 'footer': case 'datagrid': - case 'command': - // Work in progress! - break; - - /* A start tag token not covered by the previous entries */ - default: - /* Reconstruct the active formatting elements, if any. */ - $this->reconstructActiveFormattingElements(); - - $this->insertElement($token, true, true); - break; - } - break; - - case HTML5::ENDTAG: - switch($token['name']) { - /* An end tag with the tag name "body" */ - case 'body': - /* If the second element in the stack of open elements is - not a body element, this is a parse error. Ignore the token. - (innerHTML case) */ - if(count($this->stack) < 2 || $this->stack[1]->nodeName !== 'body') { - // Ignore. - - /* If the current node is not the body element, then this - is a parse error. */ - } elseif(end($this->stack)->nodeName !== 'body') { - // Parse error. - } - - /* Change the insertion mode to "after body". */ - $this->mode = self::AFTER_BODY; - break; - - /* An end tag with the tag name "html" */ - case 'html': - /* Act as if an end tag with tag name "body" had been seen, - then, if that token wasn't ignored, reprocess the current - token. */ - $this->inBody(array( - 'name' => 'body', - 'type' => HTML5::ENDTAG - )); - - return $this->afterBody($token); - break; - - /* An end tag whose tag name is one of: "address", "blockquote", - "center", "dir", "div", "dl", "fieldset", "listing", "menu", - "ol", "pre", "ul" */ - case 'address': case 'blockquote': case 'center': case 'dir': - case 'div': case 'dl': case 'fieldset': case 'listing': - case 'menu': case 'ol': case 'pre': case 'ul': - /* If the stack of open elements has an element in scope - with the same tag name as that of the token, then generate - implied end tags. */ - if($this->elementInScope($token['name'])) { - $this->generateImpliedEndTags(); - - /* Now, if the current node is not an element with - the same tag name as that of the token, then this - is a parse error. */ - // w/e - - /* If the stack of open elements has an element in - scope with the same tag name as that of the token, - then pop elements from this stack until an element - with that tag name has been popped from the stack. */ - for($n = count($this->stack) - 1; $n >= 0; $n--) { - if($this->stack[$n]->nodeName === $token['name']) { - $n = -1; - } - - array_pop($this->stack); - } - } - break; - - /* An end tag whose tag name is "form" */ - case 'form': - /* If the stack of open elements has an element in scope - with the same tag name as that of the token, then generate - implied end tags. */ - if($this->elementInScope($token['name'])) { - $this->generateImpliedEndTags(); - - } - - if(end($this->stack)->nodeName !== $token['name']) { - /* Now, if the current node is not an element with the - same tag name as that of the token, then this is a parse - error. */ - // w/e - - } else { - /* Otherwise, if the current node is an element with - the same tag name as that of the token pop that element - from the stack. */ - array_pop($this->stack); - } - - /* In any case, set the form element pointer to null. */ - $this->form_pointer = null; - break; - - /* An end tag whose tag name is "p" */ - case 'p': - /* If the stack of open elements has a p element in scope, - then generate implied end tags, except for p elements. */ - if($this->elementInScope('p')) { - $this->generateImpliedEndTags(array('p')); - - /* If the current node is not a p element, then this is - a parse error. */ - // k - - /* If the stack of open elements has a p element in - scope, then pop elements from this stack until the stack - no longer has a p element in scope. */ - for($n = count($this->stack) - 1; $n >= 0; $n--) { - if($this->elementInScope('p')) { - array_pop($this->stack); - - } else { - break; - } - } - } - break; - - /* An end tag whose tag name is "dd", "dt", or "li" */ - case 'dd': case 'dt': case 'li': - /* If the stack of open elements has an element in scope - whose tag name matches the tag name of the token, then - generate implied end tags, except for elements with the - same tag name as the token. */ - if($this->elementInScope($token['name'])) { - $this->generateImpliedEndTags(array($token['name'])); - - /* If the current node is not an element with the same - tag name as the token, then this is a parse error. */ - // w/e - - /* If the stack of open elements has an element in scope - whose tag name matches the tag name of the token, then - pop elements from this stack until an element with that - tag name has been popped from the stack. */ - for($n = count($this->stack) - 1; $n >= 0; $n--) { - if($this->stack[$n]->nodeName === $token['name']) { - $n = -1; - } - - array_pop($this->stack); - } - } - break; - - /* An end tag whose tag name is one of: "h1", "h2", "h3", "h4", - "h5", "h6" */ - case 'h1': case 'h2': case 'h3': case 'h4': case 'h5': case 'h6': - $elements = array('h1', 'h2', 'h3', 'h4', 'h5', 'h6'); - - /* If the stack of open elements has in scope an element whose - tag name is one of "h1", "h2", "h3", "h4", "h5", or "h6", then - generate implied end tags. */ - if($this->elementInScope($elements)) { - $this->generateImpliedEndTags(); - - /* Now, if the current node is not an element with the same - tag name as that of the token, then this is a parse error. */ - // w/e - - /* If the stack of open elements has in scope an element - whose tag name is one of "h1", "h2", "h3", "h4", "h5", or - "h6", then pop elements from the stack until an element - with one of those tag names has been popped from the stack. */ - while($this->elementInScope($elements)) { - array_pop($this->stack); - } - } - break; - - /* An end tag whose tag name is one of: "a", "b", "big", "em", - "font", "i", "nobr", "s", "small", "strike", "strong", "tt", "u" */ - case 'a': case 'b': case 'big': case 'em': case 'font': - case 'i': case 'nobr': case 's': case 'small': case 'strike': - case 'strong': case 'tt': case 'u': - /* 1. Let the formatting element be the last element in - the list of active formatting elements that: - * is between the end of the list and the last scope - marker in the list, if any, or the start of the list - otherwise, and - * has the same tag name as the token. - */ - while(true) { - for($a = count($this->a_formatting) - 1; $a >= 0; $a--) { - if($this->a_formatting[$a] === self::MARKER) { - break; - - } elseif($this->a_formatting[$a]->tagName === $token['name']) { - $formatting_element = $this->a_formatting[$a]; - $in_stack = in_array($formatting_element, $this->stack, true); - $fe_af_pos = $a; - break; - } - } - - /* If there is no such node, or, if that node is - also in the stack of open elements but the element - is not in scope, then this is a parse error. Abort - these steps. The token is ignored. */ - if(!isset($formatting_element) || ($in_stack && - !$this->elementInScope($token['name']))) { - break; - - /* Otherwise, if there is such a node, but that node - is not in the stack of open elements, then this is a - parse error; remove the element from the list, and - abort these steps. */ - } elseif(isset($formatting_element) && !$in_stack) { - unset($this->a_formatting[$fe_af_pos]); - $this->a_formatting = array_merge($this->a_formatting); - break; - } - - /* 2. Let the furthest block be the topmost node in the - stack of open elements that is lower in the stack - than the formatting element, and is not an element in - the phrasing or formatting categories. There might - not be one. */ - $fe_s_pos = array_search($formatting_element, $this->stack, true); - $length = count($this->stack); - - for($s = $fe_s_pos + 1; $s < $length; $s++) { - $category = $this->getElementCategory($this->stack[$s]->nodeName); - - if($category !== self::PHRASING && $category !== self::FORMATTING) { - $furthest_block = $this->stack[$s]; - } - } - - /* 3. If there is no furthest block, then the UA must - skip the subsequent steps and instead just pop all - the nodes from the bottom of the stack of open - elements, from the current node up to the formatting - element, and remove the formatting element from the - list of active formatting elements. */ - if(!isset($furthest_block)) { - for($n = $length - 1; $n >= $fe_s_pos; $n--) { - array_pop($this->stack); - } - - unset($this->a_formatting[$fe_af_pos]); - $this->a_formatting = array_merge($this->a_formatting); - break; - } - - /* 4. Let the common ancestor be the element - immediately above the formatting element in the stack - of open elements. */ - $common_ancestor = $this->stack[$fe_s_pos - 1]; - - /* 5. If the furthest block has a parent node, then - remove the furthest block from its parent node. */ - if($furthest_block->parentNode !== null) { - $furthest_block->parentNode->removeChild($furthest_block); - } - - /* 6. Let a bookmark note the position of the - formatting element in the list of active formatting - elements relative to the elements on either side - of it in the list. */ - $bookmark = $fe_af_pos; - - /* 7. Let node and last node be the furthest block. - Follow these steps: */ - $node = $furthest_block; - $last_node = $furthest_block; - - while(true) { - for($n = array_search($node, $this->stack, true) - 1; $n >= 0; $n--) { - /* 7.1 Let node be the element immediately - prior to node in the stack of open elements. */ - $node = $this->stack[$n]; - - /* 7.2 If node is not in the list of active - formatting elements, then remove node from - the stack of open elements and then go back - to step 1. */ - if(!in_array($node, $this->a_formatting, true)) { - unset($this->stack[$n]); - $this->stack = array_merge($this->stack); - - } else { - break; - } - } - - /* 7.3 Otherwise, if node is the formatting - element, then go to the next step in the overall - algorithm. */ - if($node === $formatting_element) { - break; - - /* 7.4 Otherwise, if last node is the furthest - block, then move the aforementioned bookmark to - be immediately after the node in the list of - active formatting elements. */ - } elseif($last_node === $furthest_block) { - $bookmark = array_search($node, $this->a_formatting, true) + 1; - } - - /* 7.5 If node has any children, perform a - shallow clone of node, replace the entry for - node in the list of active formatting elements - with an entry for the clone, replace the entry - for node in the stack of open elements with an - entry for the clone, and let node be the clone. */ - if($node->hasChildNodes()) { - $clone = $node->cloneNode(); - $s_pos = array_search($node, $this->stack, true); - $a_pos = array_search($node, $this->a_formatting, true); - - $this->stack[$s_pos] = $clone; - $this->a_formatting[$a_pos] = $clone; - $node = $clone; - } - - /* 7.6 Insert last node into node, first removing - it from its previous parent node if any. */ - if($last_node->parentNode !== null) { - $last_node->parentNode->removeChild($last_node); - } - - $node->appendChild($last_node); - - /* 7.7 Let last node be node. */ - $last_node = $node; - } - - /* 8. Insert whatever last node ended up being in - the previous step into the common ancestor node, - first removing it from its previous parent node if - any. */ - if($last_node->parentNode !== null) { - $last_node->parentNode->removeChild($last_node); - } - - $common_ancestor->appendChild($last_node); - - /* 9. Perform a shallow clone of the formatting - element. */ - $clone = $formatting_element->cloneNode(); - - /* 10. Take all of the child nodes of the furthest - block and append them to the clone created in the - last step. */ - while($furthest_block->hasChildNodes()) { - $child = $furthest_block->firstChild; - $furthest_block->removeChild($child); - $clone->appendChild($child); - } - - /* 11. Append that clone to the furthest block. */ - $furthest_block->appendChild($clone); - - /* 12. Remove the formatting element from the list - of active formatting elements, and insert the clone - into the list of active formatting elements at the - position of the aforementioned bookmark. */ - $fe_af_pos = array_search($formatting_element, $this->a_formatting, true); - unset($this->a_formatting[$fe_af_pos]); - $this->a_formatting = array_merge($this->a_formatting); - - $af_part1 = array_slice($this->a_formatting, 0, $bookmark - 1); - $af_part2 = array_slice($this->a_formatting, $bookmark, count($this->a_formatting)); - $this->a_formatting = array_merge($af_part1, array($clone), $af_part2); - - /* 13. Remove the formatting element from the stack - of open elements, and insert the clone into the stack - of open elements immediately after (i.e. in a more - deeply nested position than) the position of the - furthest block in that stack. */ - $fe_s_pos = array_search($formatting_element, $this->stack, true); - $fb_s_pos = array_search($furthest_block, $this->stack, true); - unset($this->stack[$fe_s_pos]); - - $s_part1 = array_slice($this->stack, 0, $fb_s_pos); - $s_part2 = array_slice($this->stack, $fb_s_pos + 1, count($this->stack)); - $this->stack = array_merge($s_part1, array($clone), $s_part2); - - /* 14. Jump back to step 1 in this series of steps. */ - unset($formatting_element, $fe_af_pos, $fe_s_pos, $furthest_block); - } - break; - - /* An end tag token whose tag name is one of: "button", - "marquee", "object" */ - case 'button': case 'marquee': case 'object': - /* If the stack of open elements has an element in scope whose - tag name matches the tag name of the token, then generate implied - tags. */ - if($this->elementInScope($token['name'])) { - $this->generateImpliedEndTags(); - - /* Now, if the current node is not an element with the same - tag name as the token, then this is a parse error. */ - // k - - /* Now, if the stack of open elements has an element in scope - whose tag name matches the tag name of the token, then pop - elements from the stack until that element has been popped from - the stack, and clear the list of active formatting elements up - to the last marker. */ - for($n = count($this->stack) - 1; $n >= 0; $n--) { - if($this->stack[$n]->nodeName === $token['name']) { - $n = -1; - } - - array_pop($this->stack); - } - - $marker = end(array_keys($this->a_formatting, self::MARKER, true)); - - for($n = count($this->a_formatting) - 1; $n > $marker; $n--) { - array_pop($this->a_formatting); - } - } - break; - - /* Or an end tag whose tag name is one of: "area", "basefont", - "bgsound", "br", "embed", "hr", "iframe", "image", "img", - "input", "isindex", "noembed", "noframes", "param", "select", - "spacer", "table", "textarea", "wbr" */ - case 'area': case 'basefont': case 'bgsound': case 'br': - case 'embed': case 'hr': case 'iframe': case 'image': - case 'img': case 'input': case 'isindex': case 'noembed': - case 'noframes': case 'param': case 'select': case 'spacer': - case 'table': case 'textarea': case 'wbr': - // Parse error. Ignore the token. - break; - - /* An end tag token not covered by the previous entries */ - default: - for($n = count($this->stack) - 1; $n >= 0; $n--) { - /* Initialise node to be the current node (the bottommost - node of the stack). */ - $node = end($this->stack); - - /* If node has the same tag name as the end tag token, - then: */ - if($token['name'] === $node->nodeName) { - /* Generate implied end tags. */ - $this->generateImpliedEndTags(); - - /* If the tag name of the end tag token does not - match the tag name of the current node, this is a - parse error. */ - // k - - /* Pop all the nodes from the current node up to - node, including node, then stop this algorithm. */ - for($x = count($this->stack) - $n; $x >= $n; $x--) { - array_pop($this->stack); - } - - } else { - $category = $this->getElementCategory($node); - - if($category !== self::SPECIAL && $category !== self::SCOPING) { - /* Otherwise, if node is in neither the formatting - category nor the phrasing category, then this is a - parse error. Stop this algorithm. The end tag token - is ignored. */ - return false; - } - } - } - break; - } - break; - } - } - - private function inTable($token) { - $clear = array('html', 'table'); - - /* A character token that is one of one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF), - or U+0020 SPACE */ - if($token['type'] === HTML5::CHARACTR && - preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) { - /* Append the character to the current node. */ - $text = $this->dom->createTextNode($token['data']); - end($this->stack)->appendChild($text); - - /* A comment token */ - } elseif($token['type'] === HTML5::COMMENT) { - /* Append a Comment node to the current node with the data - attribute set to the data given in the comment token. */ - $comment = $this->dom->createComment($token['data']); - end($this->stack)->appendChild($comment); - - /* A start tag whose tag name is "caption" */ - } elseif($token['type'] === HTML5::STARTTAG && - $token['name'] === 'caption') { - /* Clear the stack back to a table context. */ - $this->clearStackToTableContext($clear); - - /* Insert a marker at the end of the list of active - formatting elements. */ - $this->a_formatting[] = self::MARKER; - - /* Insert an HTML element for the token, then switch the - insertion mode to "in caption". */ - $this->insertElement($token); - $this->mode = self::IN_CAPTION; - - /* A start tag whose tag name is "colgroup" */ - } elseif($token['type'] === HTML5::STARTTAG && - $token['name'] === 'colgroup') { - /* Clear the stack back to a table context. */ - $this->clearStackToTableContext($clear); - - /* Insert an HTML element for the token, then switch the - insertion mode to "in column group". */ - $this->insertElement($token); - $this->mode = self::IN_CGROUP; - - /* A start tag whose tag name is "col" */ - } elseif($token['type'] === HTML5::STARTTAG && - $token['name'] === 'col') { - $this->inTable(array( - 'name' => 'colgroup', - 'type' => HTML5::STARTTAG, - 'attr' => array() - )); - - $this->inColumnGroup($token); - - /* A start tag whose tag name is one of: "tbody", "tfoot", "thead" */ - } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'], - array('tbody', 'tfoot', 'thead'))) { - /* Clear the stack back to a table context. */ - $this->clearStackToTableContext($clear); - - /* Insert an HTML element for the token, then switch the insertion - mode to "in table body". */ - $this->insertElement($token); - $this->mode = self::IN_TBODY; - - /* A start tag whose tag name is one of: "td", "th", "tr" */ - } elseif($token['type'] === HTML5::STARTTAG && - in_array($token['name'], array('td', 'th', 'tr'))) { - /* Act as if a start tag token with the tag name "tbody" had been - seen, then reprocess the current token. */ - $this->inTable(array( - 'name' => 'tbody', - 'type' => HTML5::STARTTAG, - 'attr' => array() - )); - - return $this->inTableBody($token); - - /* A start tag whose tag name is "table" */ - } elseif($token['type'] === HTML5::STARTTAG && - $token['name'] === 'table') { - /* Parse error. Act as if an end tag token with the tag name "table" - had been seen, then, if that token wasn't ignored, reprocess the - current token. */ - $this->inTable(array( - 'name' => 'table', - 'type' => HTML5::ENDTAG - )); - - return $this->mainPhase($token); - - /* An end tag whose tag name is "table" */ - } elseif($token['type'] === HTML5::ENDTAG && - $token['name'] === 'table') { - /* If the stack of open elements does not have an element in table - scope with the same tag name as the token, this is a parse error. - Ignore the token. (innerHTML case) */ - if(!$this->elementInScope($token['name'], true)) { - return false; - - /* Otherwise: */ - } else { - /* Generate implied end tags. */ - $this->generateImpliedEndTags(); - - /* Now, if the current node is not a table element, then this - is a parse error. */ - // w/e - - /* Pop elements from this stack until a table element has been - popped from the stack. */ - while(true) { - $current = end($this->stack)->nodeName; - array_pop($this->stack); - - if($current === 'table') { - break; - } - } - - /* Reset the insertion mode appropriately. */ - $this->resetInsertionMode(); - } - - /* An end tag whose tag name is one of: "body", "caption", "col", - "colgroup", "html", "tbody", "td", "tfoot", "th", "thead", "tr" */ - } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'], - array('body', 'caption', 'col', 'colgroup', 'html', 'tbody', 'td', - 'tfoot', 'th', 'thead', 'tr'))) { - // Parse error. Ignore the token. - - /* Anything else */ - } else { - /* Parse error. Process the token as if the insertion mode was "in - body", with the following exception: */ - - /* If the current node is a table, tbody, tfoot, thead, or tr - element, then, whenever a node would be inserted into the current - node, it must instead be inserted into the foster parent element. */ - if(in_array(end($this->stack)->nodeName, - array('table', 'tbody', 'tfoot', 'thead', 'tr'))) { - /* The foster parent element is the parent element of the last - table element in the stack of open elements, if there is a - table element and it has such a parent element. If there is no - table element in the stack of open elements (innerHTML case), - then the foster parent element is the first element in the - stack of open elements (the html element). Otherwise, if there - is a table element in the stack of open elements, but the last - table element in the stack of open elements has no parent, or - its parent node is not an element, then the foster parent - element is the element before the last table element in the - stack of open elements. */ - for($n = count($this->stack) - 1; $n >= 0; $n--) { - if($this->stack[$n]->nodeName === 'table') { - $table = $this->stack[$n]; - break; - } - } - - if(isset($table) && $table->parentNode !== null) { - $this->foster_parent = $table->parentNode; - - } elseif(!isset($table)) { - $this->foster_parent = $this->stack[0]; - - } elseif(isset($table) && ($table->parentNode === null || - $table->parentNode->nodeType !== XML_ELEMENT_NODE)) { - $this->foster_parent = $this->stack[$n - 1]; - } - } - - $this->inBody($token); - } - } - - private function inCaption($token) { - /* An end tag whose tag name is "caption" */ - if($token['type'] === HTML5::ENDTAG && $token['name'] === 'caption') { - /* If the stack of open elements does not have an element in table - scope with the same tag name as the token, this is a parse error. - Ignore the token. (innerHTML case) */ - if(!$this->elementInScope($token['name'], true)) { - // Ignore - - /* Otherwise: */ - } else { - /* Generate implied end tags. */ - $this->generateImpliedEndTags(); - - /* Now, if the current node is not a caption element, then this - is a parse error. */ - // w/e - - /* Pop elements from this stack until a caption element has - been popped from the stack. */ - while(true) { - $node = end($this->stack)->nodeName; - array_pop($this->stack); - - if($node === 'caption') { - break; - } - } - - /* Clear the list of active formatting elements up to the last - marker. */ - $this->clearTheActiveFormattingElementsUpToTheLastMarker(); - - /* Switch the insertion mode to "in table". */ - $this->mode = self::IN_TABLE; - } - - /* A start tag whose tag name is one of: "caption", "col", "colgroup", - "tbody", "td", "tfoot", "th", "thead", "tr", or an end tag whose tag - name is "table" */ - } elseif(($token['type'] === HTML5::STARTTAG && in_array($token['name'], - array('caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th', - 'thead', 'tr'))) || ($token['type'] === HTML5::ENDTAG && - $token['name'] === 'table')) { - /* Parse error. Act as if an end tag with the tag name "caption" - had been seen, then, if that token wasn't ignored, reprocess the - current token. */ - $this->inCaption(array( - 'name' => 'caption', - 'type' => HTML5::ENDTAG - )); - - return $this->inTable($token); - - /* An end tag whose tag name is one of: "body", "col", "colgroup", - "html", "tbody", "td", "tfoot", "th", "thead", "tr" */ - } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'], - array('body', 'col', 'colgroup', 'html', 'tbody', 'tfoot', 'th', - 'thead', 'tr'))) { - // Parse error. Ignore the token. - - /* Anything else */ - } else { - /* Process the token as if the insertion mode was "in body". */ - $this->inBody($token); - } - } - - private function inColumnGroup($token) { - /* A character token that is one of one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF), - or U+0020 SPACE */ - if($token['type'] === HTML5::CHARACTR && - preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) { - /* Append the character to the current node. */ - $text = $this->dom->createTextNode($token['data']); - end($this->stack)->appendChild($text); - - /* A comment token */ - } elseif($token['type'] === HTML5::COMMENT) { - /* Append a Comment node to the current node with the data - attribute set to the data given in the comment token. */ - $comment = $this->dom->createComment($token['data']); - end($this->stack)->appendChild($comment); - - /* A start tag whose tag name is "col" */ - } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'col') { - /* Insert a col element for the token. Immediately pop the current - node off the stack of open elements. */ - $this->insertElement($token); - array_pop($this->stack); - - /* An end tag whose tag name is "colgroup" */ - } elseif($token['type'] === HTML5::ENDTAG && - $token['name'] === 'colgroup') { - /* If the current node is the root html element, then this is a - parse error, ignore the token. (innerHTML case) */ - if(end($this->stack)->nodeName === 'html') { - // Ignore - - /* Otherwise, pop the current node (which will be a colgroup - element) from the stack of open elements. Switch the insertion - mode to "in table". */ - } else { - array_pop($this->stack); - $this->mode = self::IN_TABLE; - } - - /* An end tag whose tag name is "col" */ - } elseif($token['type'] === HTML5::ENDTAG && $token['name'] === 'col') { - /* Parse error. Ignore the token. */ - - /* Anything else */ - } else { - /* Act as if an end tag with the tag name "colgroup" had been seen, - and then, if that token wasn't ignored, reprocess the current token. */ - $this->inColumnGroup(array( - 'name' => 'colgroup', - 'type' => HTML5::ENDTAG - )); - - return $this->inTable($token); - } - } - - private function inTableBody($token) { - $clear = array('tbody', 'tfoot', 'thead', 'html'); - - /* A start tag whose tag name is "tr" */ - if($token['type'] === HTML5::STARTTAG && $token['name'] === 'tr') { - /* Clear the stack back to a table body context. */ - $this->clearStackToTableContext($clear); - - /* Insert a tr element for the token, then switch the insertion - mode to "in row". */ - $this->insertElement($token); - $this->mode = self::IN_ROW; - - /* A start tag whose tag name is one of: "th", "td" */ - } elseif($token['type'] === HTML5::STARTTAG && - ($token['name'] === 'th' || $token['name'] === 'td')) { - /* Parse error. Act as if a start tag with the tag name "tr" had - been seen, then reprocess the current token. */ - $this->inTableBody(array( - 'name' => 'tr', - 'type' => HTML5::STARTTAG, - 'attr' => array() - )); - - return $this->inRow($token); - - /* An end tag whose tag name is one of: "tbody", "tfoot", "thead" */ - } elseif($token['type'] === HTML5::ENDTAG && - in_array($token['name'], array('tbody', 'tfoot', 'thead'))) { - /* If the stack of open elements does not have an element in table - scope with the same tag name as the token, this is a parse error. - Ignore the token. */ - if(!$this->elementInScope($token['name'], true)) { - // Ignore - - /* Otherwise: */ - } else { - /* Clear the stack back to a table body context. */ - $this->clearStackToTableContext($clear); - - /* Pop the current node from the stack of open elements. Switch - the insertion mode to "in table". */ - array_pop($this->stack); - $this->mode = self::IN_TABLE; - } - - /* A start tag whose tag name is one of: "caption", "col", "colgroup", - "tbody", "tfoot", "thead", or an end tag whose tag name is "table" */ - } elseif(($token['type'] === HTML5::STARTTAG && in_array($token['name'], - array('caption', 'col', 'colgroup', 'tbody', 'tfoor', 'thead'))) || - ($token['type'] === HTML5::STARTTAG && $token['name'] === 'table')) { - /* If the stack of open elements does not have a tbody, thead, or - tfoot element in table scope, this is a parse error. Ignore the - token. (innerHTML case) */ - if(!$this->elementInScope(array('tbody', 'thead', 'tfoot'), true)) { - // Ignore. - - /* Otherwise: */ - } else { - /* Clear the stack back to a table body context. */ - $this->clearStackToTableContext($clear); - - /* Act as if an end tag with the same tag name as the current - node ("tbody", "tfoot", or "thead") had been seen, then - reprocess the current token. */ - $this->inTableBody(array( - 'name' => end($this->stack)->nodeName, - 'type' => HTML5::ENDTAG - )); - - return $this->mainPhase($token); - } - - /* An end tag whose tag name is one of: "body", "caption", "col", - "colgroup", "html", "td", "th", "tr" */ - } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'], - array('body', 'caption', 'col', 'colgroup', 'html', 'td', 'th', 'tr'))) { - /* Parse error. Ignore the token. */ - - /* Anything else */ - } else { - /* Process the token as if the insertion mode was "in table". */ - $this->inTable($token); - } - } - - private function inRow($token) { - $clear = array('tr', 'html'); - - /* A start tag whose tag name is one of: "th", "td" */ - if($token['type'] === HTML5::STARTTAG && - ($token['name'] === 'th' || $token['name'] === 'td')) { - /* Clear the stack back to a table row context. */ - $this->clearStackToTableContext($clear); - - /* Insert an HTML element for the token, then switch the insertion - mode to "in cell". */ - $this->insertElement($token); - $this->mode = self::IN_CELL; - - /* Insert a marker at the end of the list of active formatting - elements. */ - $this->a_formatting[] = self::MARKER; - - /* An end tag whose tag name is "tr" */ - } elseif($token['type'] === HTML5::ENDTAG && $token['name'] === 'tr') { - /* If the stack of open elements does not have an element in table - scope with the same tag name as the token, this is a parse error. - Ignore the token. (innerHTML case) */ - if(!$this->elementInScope($token['name'], true)) { - // Ignore. - - /* Otherwise: */ - } else { - /* Clear the stack back to a table row context. */ - $this->clearStackToTableContext($clear); - - /* Pop the current node (which will be a tr element) from the - stack of open elements. Switch the insertion mode to "in table - body". */ - array_pop($this->stack); - $this->mode = self::IN_TBODY; - } - - /* A start tag whose tag name is one of: "caption", "col", "colgroup", - "tbody", "tfoot", "thead", "tr" or an end tag whose tag name is "table" */ - } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'], - array('caption', 'col', 'colgroup', 'tbody', 'tfoot', 'thead', 'tr'))) { - /* Act as if an end tag with the tag name "tr" had been seen, then, - if that token wasn't ignored, reprocess the current token. */ - $this->inRow(array( - 'name' => 'tr', - 'type' => HTML5::ENDTAG - )); - - return $this->inCell($token); - - /* An end tag whose tag name is one of: "tbody", "tfoot", "thead" */ - } elseif($token['type'] === HTML5::ENDTAG && - in_array($token['name'], array('tbody', 'tfoot', 'thead'))) { - /* If the stack of open elements does not have an element in table - scope with the same tag name as the token, this is a parse error. - Ignore the token. */ - if(!$this->elementInScope($token['name'], true)) { - // Ignore. - - /* Otherwise: */ - } else { - /* Otherwise, act as if an end tag with the tag name "tr" had - been seen, then reprocess the current token. */ - $this->inRow(array( - 'name' => 'tr', - 'type' => HTML5::ENDTAG - )); - - return $this->inCell($token); - } - - /* An end tag whose tag name is one of: "body", "caption", "col", - "colgroup", "html", "td", "th" */ - } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'], - array('body', 'caption', 'col', 'colgroup', 'html', 'td', 'th', 'tr'))) { - /* Parse error. Ignore the token. */ - - /* Anything else */ - } else { - /* Process the token as if the insertion mode was "in table". */ - $this->inTable($token); - } - } - - private function inCell($token) { - /* An end tag whose tag name is one of: "td", "th" */ - if($token['type'] === HTML5::ENDTAG && - ($token['name'] === 'td' || $token['name'] === 'th')) { - /* If the stack of open elements does not have an element in table - scope with the same tag name as that of the token, then this is a - parse error and the token must be ignored. */ - if(!$this->elementInScope($token['name'], true)) { - // Ignore. - - /* Otherwise: */ - } else { - /* Generate implied end tags, except for elements with the same - tag name as the token. */ - $this->generateImpliedEndTags(array($token['name'])); - - /* Now, if the current node is not an element with the same tag - name as the token, then this is a parse error. */ - // k - - /* Pop elements from this stack until an element with the same - tag name as the token has been popped from the stack. */ - while(true) { - $node = end($this->stack)->nodeName; - array_pop($this->stack); - - if($node === $token['name']) { - break; - } - } - - /* Clear the list of active formatting elements up to the last - marker. */ - $this->clearTheActiveFormattingElementsUpToTheLastMarker(); - - /* Switch the insertion mode to "in row". (The current node - will be a tr element at this point.) */ - $this->mode = self::IN_ROW; - } - - /* A start tag whose tag name is one of: "caption", "col", "colgroup", - "tbody", "td", "tfoot", "th", "thead", "tr" */ - } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'], - array('caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th', - 'thead', 'tr'))) { - /* If the stack of open elements does not have a td or th element - in table scope, then this is a parse error; ignore the token. - (innerHTML case) */ - if(!$this->elementInScope(array('td', 'th'), true)) { - // Ignore. - - /* Otherwise, close the cell (see below) and reprocess the current - token. */ - } else { - $this->closeCell(); - return $this->inRow($token); - } - - /* A start tag whose tag name is one of: "caption", "col", "colgroup", - "tbody", "td", "tfoot", "th", "thead", "tr" */ - } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'], - array('caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th', - 'thead', 'tr'))) { - /* If the stack of open elements does not have a td or th element - in table scope, then this is a parse error; ignore the token. - (innerHTML case) */ - if(!$this->elementInScope(array('td', 'th'), true)) { - // Ignore. - - /* Otherwise, close the cell (see below) and reprocess the current - token. */ - } else { - $this->closeCell(); - return $this->inRow($token); - } - - /* An end tag whose tag name is one of: "body", "caption", "col", - "colgroup", "html" */ - } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'], - array('body', 'caption', 'col', 'colgroup', 'html'))) { - /* Parse error. Ignore the token. */ - - /* An end tag whose tag name is one of: "table", "tbody", "tfoot", - "thead", "tr" */ - } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'], - array('table', 'tbody', 'tfoot', 'thead', 'tr'))) { - /* If the stack of open elements does not have an element in table - scope with the same tag name as that of the token (which can only - happen for "tbody", "tfoot" and "thead", or, in the innerHTML case), - then this is a parse error and the token must be ignored. */ - if(!$this->elementInScope($token['name'], true)) { - // Ignore. - - /* Otherwise, close the cell (see below) and reprocess the current - token. */ - } else { - $this->closeCell(); - return $this->inRow($token); - } - - /* Anything else */ - } else { - /* Process the token as if the insertion mode was "in body". */ - $this->inBody($token); - } - } - - private function inSelect($token) { - /* Handle the token as follows: */ - - /* A character token */ - if($token['type'] === HTML5::CHARACTR) { - /* Append the token's character to the current node. */ - $this->insertText($token['data']); - - /* A comment token */ - } elseif($token['type'] === HTML5::COMMENT) { - /* Append a Comment node to the current node with the data - attribute set to the data given in the comment token. */ - $this->insertComment($token['data']); - - /* A start tag token whose tag name is "option" */ - } elseif($token['type'] === HTML5::STARTTAG && - $token['name'] === 'option') { - /* If the current node is an option element, act as if an end tag - with the tag name "option" had been seen. */ - if(end($this->stack)->nodeName === 'option') { - $this->inSelect(array( - 'name' => 'option', - 'type' => HTML5::ENDTAG - )); - } - - /* Insert an HTML element for the token. */ - $this->insertElement($token); - - /* A start tag token whose tag name is "optgroup" */ - } elseif($token['type'] === HTML5::STARTTAG && - $token['name'] === 'optgroup') { - /* If the current node is an option element, act as if an end tag - with the tag name "option" had been seen. */ - if(end($this->stack)->nodeName === 'option') { - $this->inSelect(array( - 'name' => 'option', - 'type' => HTML5::ENDTAG - )); - } - - /* If the current node is an optgroup element, act as if an end tag - with the tag name "optgroup" had been seen. */ - if(end($this->stack)->nodeName === 'optgroup') { - $this->inSelect(array( - 'name' => 'optgroup', - 'type' => HTML5::ENDTAG - )); - } - - /* Insert an HTML element for the token. */ - $this->insertElement($token); - - /* An end tag token whose tag name is "optgroup" */ - } elseif($token['type'] === HTML5::ENDTAG && - $token['name'] === 'optgroup') { - /* First, if the current node is an option element, and the node - immediately before it in the stack of open elements is an optgroup - element, then act as if an end tag with the tag name "option" had - been seen. */ - $elements_in_stack = count($this->stack); - - if($this->stack[$elements_in_stack - 1]->nodeName === 'option' && - $this->stack[$elements_in_stack - 2]->nodeName === 'optgroup') { - $this->inSelect(array( - 'name' => 'option', - 'type' => HTML5::ENDTAG - )); - } - - /* If the current node is an optgroup element, then pop that node - from the stack of open elements. Otherwise, this is a parse error, - ignore the token. */ - if($this->stack[$elements_in_stack - 1] === 'optgroup') { - array_pop($this->stack); - } - - /* An end tag token whose tag name is "option" */ - } elseif($token['type'] === HTML5::ENDTAG && - $token['name'] === 'option') { - /* If the current node is an option element, then pop that node - from the stack of open elements. Otherwise, this is a parse error, - ignore the token. */ - if(end($this->stack)->nodeName === 'option') { - array_pop($this->stack); - } - - /* An end tag whose tag name is "select" */ - } elseif($token['type'] === HTML5::ENDTAG && - $token['name'] === 'select') { - /* If the stack of open elements does not have an element in table - scope with the same tag name as the token, this is a parse error. - Ignore the token. (innerHTML case) */ - if(!$this->elementInScope($token['name'], true)) { - // w/e - - /* Otherwise: */ - } else { - /* Pop elements from the stack of open elements until a select - element has been popped from the stack. */ - while(true) { - $current = end($this->stack)->nodeName; - array_pop($this->stack); - - if($current === 'select') { - break; - } - } - - /* Reset the insertion mode appropriately. */ - $this->resetInsertionMode(); - } - - /* A start tag whose tag name is "select" */ - } elseif($token['name'] === 'select' && - $token['type'] === HTML5::STARTTAG) { - /* Parse error. Act as if the token had been an end tag with the - tag name "select" instead. */ - $this->inSelect(array( - 'name' => 'select', - 'type' => HTML5::ENDTAG - )); - - /* An end tag whose tag name is one of: "caption", "table", "tbody", - "tfoot", "thead", "tr", "td", "th" */ - } elseif(in_array($token['name'], array('caption', 'table', 'tbody', - 'tfoot', 'thead', 'tr', 'td', 'th')) && $token['type'] === HTML5::ENDTAG) { - /* Parse error. */ - // w/e - - /* If the stack of open elements has an element in table scope with - the same tag name as that of the token, then act as if an end tag - with the tag name "select" had been seen, and reprocess the token. - Otherwise, ignore the token. */ - if($this->elementInScope($token['name'], true)) { - $this->inSelect(array( - 'name' => 'select', - 'type' => HTML5::ENDTAG - )); - - $this->mainPhase($token); - } - - /* Anything else */ - } else { - /* Parse error. Ignore the token. */ - } - } - - private function afterBody($token) { - /* Handle the token as follows: */ - - /* A character token that is one of one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF), - or U+0020 SPACE */ - if($token['type'] === HTML5::CHARACTR && - preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) { - /* Process the token as it would be processed if the insertion mode - was "in body". */ - $this->inBody($token); - - /* A comment token */ - } elseif($token['type'] === HTML5::COMMENT) { - /* Append a Comment node to the first element in the stack of open - elements (the html element), with the data attribute set to the - data given in the comment token. */ - $comment = $this->dom->createComment($token['data']); - $this->stack[0]->appendChild($comment); - - /* An end tag with the tag name "html" */ - } elseif($token['type'] === HTML5::ENDTAG && $token['name'] === 'html') { - /* If the parser was originally created in order to handle the - setting of an element's innerHTML attribute, this is a parse error; - ignore the token. (The element will be an html element in this - case.) (innerHTML case) */ - - /* Otherwise, switch to the trailing end phase. */ - $this->phase = self::END_PHASE; - - /* Anything else */ - } else { - /* Parse error. Set the insertion mode to "in body" and reprocess - the token. */ - $this->mode = self::IN_BODY; - return $this->inBody($token); - } - } - - private function inFrameset($token) { - /* Handle the token as follows: */ - - /* A character token that is one of one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF), - U+000D CARRIAGE RETURN (CR), or U+0020 SPACE */ - if($token['type'] === HTML5::CHARACTR && - preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) { - /* Append the character to the current node. */ - $this->insertText($token['data']); - - /* A comment token */ - } elseif($token['type'] === HTML5::COMMENT) { - /* Append a Comment node to the current node with the data - attribute set to the data given in the comment token. */ - $this->insertComment($token['data']); - - /* A start tag with the tag name "frameset" */ - } elseif($token['name'] === 'frameset' && - $token['type'] === HTML5::STARTTAG) { - $this->insertElement($token); - - /* An end tag with the tag name "frameset" */ - } elseif($token['name'] === 'frameset' && - $token['type'] === HTML5::ENDTAG) { - /* If the current node is the root html element, then this is a - parse error; ignore the token. (innerHTML case) */ - if(end($this->stack)->nodeName === 'html') { - // Ignore - - } else { - /* Otherwise, pop the current node from the stack of open - elements. */ - array_pop($this->stack); - - /* If the parser was not originally created in order to handle - the setting of an element's innerHTML attribute (innerHTML case), - and the current node is no longer a frameset element, then change - the insertion mode to "after frameset". */ - $this->mode = self::AFTR_FRAME; - } - - /* A start tag with the tag name "frame" */ - } elseif($token['name'] === 'frame' && - $token['type'] === HTML5::STARTTAG) { - /* Insert an HTML element for the token. */ - $this->insertElement($token); - - /* Immediately pop the current node off the stack of open elements. */ - array_pop($this->stack); - - /* A start tag with the tag name "noframes" */ - } elseif($token['name'] === 'noframes' && - $token['type'] === HTML5::STARTTAG) { - /* Process the token as if the insertion mode had been "in body". */ - $this->inBody($token); - - /* Anything else */ - } else { - /* Parse error. Ignore the token. */ - } - } - - private function afterFrameset($token) { - /* Handle the token as follows: */ - - /* A character token that is one of one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF), - U+000D CARRIAGE RETURN (CR), or U+0020 SPACE */ - if($token['type'] === HTML5::CHARACTR && - preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) { - /* Append the character to the current node. */ - $this->insertText($token['data']); - - /* A comment token */ - } elseif($token['type'] === HTML5::COMMENT) { - /* Append a Comment node to the current node with the data - attribute set to the data given in the comment token. */ - $this->insertComment($token['data']); - - /* An end tag with the tag name "html" */ - } elseif($token['name'] === 'html' && - $token['type'] === HTML5::ENDTAG) { - /* Switch to the trailing end phase. */ - $this->phase = self::END_PHASE; - - /* A start tag with the tag name "noframes" */ - } elseif($token['name'] === 'noframes' && - $token['type'] === HTML5::STARTTAG) { - /* Process the token as if the insertion mode had been "in body". */ - $this->inBody($token); - - /* Anything else */ - } else { - /* Parse error. Ignore the token. */ - } - } - - private function trailingEndPhase($token) { - /* After the main phase, as each token is emitted from the tokenisation - stage, it must be processed as described in this section. */ - - /* A DOCTYPE token */ - if($token['type'] === HTML5::DOCTYPE) { - // Parse error. Ignore the token. - - /* A comment token */ - } elseif($token['type'] === HTML5::COMMENT) { - /* Append a Comment node to the Document object with the data - attribute set to the data given in the comment token. */ - $comment = $this->dom->createComment($token['data']); - $this->dom->appendChild($comment); - - /* A character token that is one of one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF), - or U+0020 SPACE */ - } elseif($token['type'] === HTML5::CHARACTR && - preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) { - /* Process the token as it would be processed in the main phase. */ - $this->mainPhase($token); - - /* A character token that is not one of U+0009 CHARACTER TABULATION, - U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF), - or U+0020 SPACE. Or a start tag token. Or an end tag token. */ - } elseif(($token['type'] === HTML5::CHARACTR && - preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) || - $token['type'] === HTML5::STARTTAG || $token['type'] === HTML5::ENDTAG) { - /* Parse error. Switch back to the main phase and reprocess the - token. */ - $this->phase = self::MAIN_PHASE; - return $this->mainPhase($token); - - /* An end-of-file token */ - } elseif($token['type'] === HTML5::EOF) { - /* OMG DONE!! */ - } - } - - private function insertElement($token, $append = true, $check = false) { - // Proprietary workaround for libxml2's limitations with tag names - if ($check) { - // Slightly modified HTML5 tag-name modification, - // removing anything that's not an ASCII letter, digit, or hyphen - $token['name'] = preg_replace('/[^a-z0-9-]/i', '', $token['name']); - // Remove leading hyphens and numbers - $token['name'] = ltrim($token['name'], '-0..9'); - // In theory, this should ever be needed, but just in case - if ($token['name'] === '') $token['name'] = 'span'; // arbitrary generic choice - } - - $el = $this->dom->createElement($token['name']); - - foreach($token['attr'] as $attr) { - if(!$el->hasAttribute($attr['name'])) { - $el->setAttribute($attr['name'], $attr['value']); - } - } - - $this->appendToRealParent($el); - $this->stack[] = $el; - - return $el; - } - - private function insertText($data) { - $text = $this->dom->createTextNode($data); - $this->appendToRealParent($text); - } - - private function insertComment($data) { - $comment = $this->dom->createComment($data); - $this->appendToRealParent($comment); - } - - private function appendToRealParent($node) { - if($this->foster_parent === null) { - end($this->stack)->appendChild($node); - - } elseif($this->foster_parent !== null) { - /* If the foster parent element is the parent element of the - last table element in the stack of open elements, then the new - node must be inserted immediately before the last table element - in the stack of open elements in the foster parent element; - otherwise, the new node must be appended to the foster parent - element. */ - for($n = count($this->stack) - 1; $n >= 0; $n--) { - if($this->stack[$n]->nodeName === 'table' && - $this->stack[$n]->parentNode !== null) { - $table = $this->stack[$n]; - break; - } - } - - if(isset($table) && $this->foster_parent->isSameNode($table->parentNode)) - $this->foster_parent->insertBefore($node, $table); - else - $this->foster_parent->appendChild($node); - - $this->foster_parent = null; - } - } - - private function elementInScope($el, $table = false) { - if(is_array($el)) { - foreach($el as $element) { - if($this->elementInScope($element, $table)) { - return true; - } - } - - return false; - } - - $leng = count($this->stack); - - for($n = 0; $n < $leng; $n++) { - /* 1. Initialise node to be the current node (the bottommost node of - the stack). */ - $node = $this->stack[$leng - 1 - $n]; - - if($node->tagName === $el) { - /* 2. If node is the target node, terminate in a match state. */ - return true; - - } elseif($node->tagName === 'table') { - /* 3. Otherwise, if node is a table element, terminate in a failure - state. */ - return false; - - } elseif($table === true && in_array($node->tagName, array('caption', 'td', - 'th', 'button', 'marquee', 'object'))) { - /* 4. Otherwise, if the algorithm is the "has an element in scope" - variant (rather than the "has an element in table scope" variant), - and node is one of the following, terminate in a failure state. */ - return false; - - } elseif($node === $node->ownerDocument->documentElement) { - /* 5. Otherwise, if node is an html element (root element), terminate - in a failure state. (This can only happen if the node is the topmost - node of the stack of open elements, and prevents the next step from - being invoked if there are no more elements in the stack.) */ - return false; - } - - /* Otherwise, set node to the previous entry in the stack of open - elements and return to step 2. (This will never fail, since the loop - will always terminate in the previous step if the top of the stack - is reached.) */ - } - } - - private function reconstructActiveFormattingElements() { - /* 1. If there are no entries in the list of active formatting elements, - then there is nothing to reconstruct; stop this algorithm. */ - $formatting_elements = count($this->a_formatting); - - if($formatting_elements === 0) { - return false; - } - - /* 3. Let entry be the last (most recently added) element in the list - of active formatting elements. */ - $entry = end($this->a_formatting); - - /* 2. If the last (most recently added) entry in the list of active - formatting elements is a marker, or if it is an element that is in the - stack of open elements, then there is nothing to reconstruct; stop this - algorithm. */ - if($entry === self::MARKER || in_array($entry, $this->stack, true)) { - return false; - } - - for($a = $formatting_elements - 1; $a >= 0; true) { - /* 4. If there are no entries before entry in the list of active - formatting elements, then jump to step 8. */ - if($a === 0) { - $step_seven = false; - break; - } - - /* 5. Let entry be the entry one earlier than entry in the list of - active formatting elements. */ - $a--; - $entry = $this->a_formatting[$a]; - - /* 6. If entry is neither a marker nor an element that is also in - thetack of open elements, go to step 4. */ - if($entry === self::MARKER || in_array($entry, $this->stack, true)) { - break; - } - } - - while(true) { - /* 7. Let entry be the element one later than entry in the list of - active formatting elements. */ - if(isset($step_seven) && $step_seven === true) { - $a++; - $entry = $this->a_formatting[$a]; - } - - /* 8. Perform a shallow clone of the element entry to obtain clone. */ - $clone = $entry->cloneNode(); - - /* 9. Append clone to the current node and push it onto the stack - of open elements so that it is the new current node. */ - end($this->stack)->appendChild($clone); - $this->stack[] = $clone; - - /* 10. Replace the entry for entry in the list with an entry for - clone. */ - $this->a_formatting[$a] = $clone; - - /* 11. If the entry for clone in the list of active formatting - elements is not the last entry in the list, return to step 7. */ - if(end($this->a_formatting) !== $clone) { - $step_seven = true; - } else { - break; - } - } - } - - private function clearTheActiveFormattingElementsUpToTheLastMarker() { - /* When the steps below require the UA to clear the list of active - formatting elements up to the last marker, the UA must perform the - following steps: */ - - while(true) { - /* 1. Let entry be the last (most recently added) entry in the list - of active formatting elements. */ - $entry = end($this->a_formatting); - - /* 2. Remove entry from the list of active formatting elements. */ - array_pop($this->a_formatting); - - /* 3. If entry was a marker, then stop the algorithm at this point. - The list has been cleared up to the last marker. */ - if($entry === self::MARKER) { - break; - } - } - } - - private function generateImpliedEndTags($exclude = array()) { - /* When the steps below require the UA to generate implied end tags, - then, if the current node is a dd element, a dt element, an li element, - a p element, a td element, a th element, or a tr element, the UA must - act as if an end tag with the respective tag name had been seen and - then generate implied end tags again. */ - $node = end($this->stack); - $elements = array_diff(array('dd', 'dt', 'li', 'p', 'td', 'th', 'tr'), $exclude); - - while(in_array(end($this->stack)->nodeName, $elements)) { - array_pop($this->stack); - } - } - - private function getElementCategory($node) { - $name = $node->tagName; - if(in_array($name, $this->special)) - return self::SPECIAL; - - elseif(in_array($name, $this->scoping)) - return self::SCOPING; - - elseif(in_array($name, $this->formatting)) - return self::FORMATTING; - - else - return self::PHRASING; - } - - private function clearStackToTableContext($elements) { - /* When the steps above require the UA to clear the stack back to a - table context, it means that the UA must, while the current node is not - a table element or an html element, pop elements from the stack of open - elements. If this causes any elements to be popped from the stack, then - this is a parse error. */ - while(true) { - $node = end($this->stack)->nodeName; - - if(in_array($node, $elements)) { - break; - } else { - array_pop($this->stack); - } - } - } - - private function resetInsertionMode() { - /* 1. Let last be false. */ - $last = false; - $leng = count($this->stack); - - for($n = $leng - 1; $n >= 0; $n--) { - /* 2. Let node be the last node in the stack of open elements. */ - $node = $this->stack[$n]; - - /* 3. If node is the first node in the stack of open elements, then - set last to true. If the element whose innerHTML attribute is being - set is neither a td element nor a th element, then set node to the - element whose innerHTML attribute is being set. (innerHTML case) */ - if($this->stack[0]->isSameNode($node)) { - $last = true; - } - - /* 4. If node is a select element, then switch the insertion mode to - "in select" and abort these steps. (innerHTML case) */ - if($node->nodeName === 'select') { - $this->mode = self::IN_SELECT; - break; - - /* 5. If node is a td or th element, then switch the insertion mode - to "in cell" and abort these steps. */ - } elseif($node->nodeName === 'td' || $node->nodeName === 'th') { - $this->mode = self::IN_CELL; - break; - - /* 6. If node is a tr element, then switch the insertion mode to - "in row" and abort these steps. */ - } elseif($node->nodeName === 'tr') { - $this->mode = self::IN_ROW; - break; - - /* 7. If node is a tbody, thead, or tfoot element, then switch the - insertion mode to "in table body" and abort these steps. */ - } elseif(in_array($node->nodeName, array('tbody', 'thead', 'tfoot'))) { - $this->mode = self::IN_TBODY; - break; - - /* 8. If node is a caption element, then switch the insertion mode - to "in caption" and abort these steps. */ - } elseif($node->nodeName === 'caption') { - $this->mode = self::IN_CAPTION; - break; - - /* 9. If node is a colgroup element, then switch the insertion mode - to "in column group" and abort these steps. (innerHTML case) */ - } elseif($node->nodeName === 'colgroup') { - $this->mode = self::IN_CGROUP; - break; - - /* 10. If node is a table element, then switch the insertion mode - to "in table" and abort these steps. */ - } elseif($node->nodeName === 'table') { - $this->mode = self::IN_TABLE; - break; - - /* 11. If node is a head element, then switch the insertion mode - to "in body" ("in body"! not "in head"!) and abort these steps. - (innerHTML case) */ - } elseif($node->nodeName === 'head') { - $this->mode = self::IN_BODY; - break; - - /* 12. If node is a body element, then switch the insertion mode to - "in body" and abort these steps. */ - } elseif($node->nodeName === 'body') { - $this->mode = self::IN_BODY; - break; - - /* 13. If node is a frameset element, then switch the insertion - mode to "in frameset" and abort these steps. (innerHTML case) */ - } elseif($node->nodeName === 'frameset') { - $this->mode = self::IN_FRAME; - break; - - /* 14. If node is an html element, then: if the head element - pointer is null, switch the insertion mode to "before head", - otherwise, switch the insertion mode to "after head". In either - case, abort these steps. (innerHTML case) */ - } elseif($node->nodeName === 'html') { - $this->mode = ($this->head_pointer === null) - ? self::BEFOR_HEAD - : self::AFTER_HEAD; - - break; - - /* 15. If last is true, then set the insertion mode to "in body" - and abort these steps. (innerHTML case) */ - } elseif($last) { - $this->mode = self::IN_BODY; - break; - } - } - } - - private function closeCell() { - /* If the stack of open elements has a td or th element in table scope, - then act as if an end tag token with that tag name had been seen. */ - foreach(array('td', 'th') as $cell) { - if($this->elementInScope($cell, true)) { - $this->inCell(array( - 'name' => $cell, - 'type' => HTML5::ENDTAG - )); - - break; - } - } - } - - public function save() { - return $this->dom; - } -} -?> diff --git a/web/framework-1.1.17/.htaccess b/web/framework/.htaccess similarity index 100% rename from web/framework-1.1.17/.htaccess rename to web/framework/.htaccess diff --git a/web/framework-1.1.17/YiiBase.php b/web/framework/YiiBase.php similarity index 99% rename from web/framework-1.1.17/YiiBase.php rename to web/framework/YiiBase.php index 289b7f962..f406cff00 100644 --- a/web/framework-1.1.17/YiiBase.php +++ b/web/framework/YiiBase.php @@ -80,7 +80,7 @@ class YiiBase */ public static function getVersion() { - return '1.1.17'; + return '1.1.18'; } /** @@ -179,6 +179,7 @@ public static function getFrameworkPath() */ public static function createComponent($config) { + $args = func_get_args(); if(is_string($config)) { $type=$config; @@ -197,7 +198,6 @@ public static function createComponent($config) if(($n=func_num_args())>1) { - $args=func_get_args(); if($n===2) $object=new $type($args[1]); elseif($n===3) diff --git a/web/framework-1.1.17/base/CApplication.php b/web/framework/base/CApplication.php similarity index 99% rename from web/framework-1.1.17/base/CApplication.php rename to web/framework/base/CApplication.php index 8c44e27fb..5d891bd5d 100644 --- a/web/framework-1.1.17/base/CApplication.php +++ b/web/framework/base/CApplication.php @@ -133,7 +133,7 @@ public function __construct($config=null) { Yii::setApplication($this); - // set basePath at early as possible to avoid trouble + // set basePath as early as possible to avoid trouble if(is_string($config)) $config=require($config); if(isset($config['basePath'])) @@ -400,7 +400,7 @@ public function findLocalizedFile($srcFile,$srcLanguage=null,$language=null) /** * Returns the locale instance. * @param string $localeID the locale ID (e.g. en_US). If null, the {@link getLanguage application language ID} will be used. - * @return an instance of CLocale + * @return CLocale an instance of CLocale */ public function getLocale($localeID=null) { @@ -572,7 +572,7 @@ public function createUrl($route,$params=array(),$ampersand='&') public function createAbsoluteUrl($route,$params=array(),$schema='',$ampersand='&') { $url=$this->createUrl($route,$params,$ampersand); - if(strpos($url,'http')===0) + if(strpos($url,'http')===0 || strpos($url,'//')===0) return $url; else return $this->getRequest()->getHostInfo($schema).$url; diff --git a/web/framework-1.1.17/base/CApplicationComponent.php b/web/framework/base/CApplicationComponent.php similarity index 100% rename from web/framework-1.1.17/base/CApplicationComponent.php rename to web/framework/base/CApplicationComponent.php diff --git a/web/framework-1.1.17/base/CBehavior.php b/web/framework/base/CBehavior.php similarity index 100% rename from web/framework-1.1.17/base/CBehavior.php rename to web/framework/base/CBehavior.php diff --git a/web/framework-1.1.17/base/CComponent.php b/web/framework/base/CComponent.php similarity index 99% rename from web/framework-1.1.17/base/CComponent.php rename to web/framework/base/CComponent.php index 13d81f5a3..ed6901fbd 100644 --- a/web/framework-1.1.17/base/CComponent.php +++ b/web/framework/base/CComponent.php @@ -609,7 +609,14 @@ public function evaluateExpression($_expression_,$_data_=array()) if(is_string($_expression_)) { extract($_data_); - return eval('return '.$_expression_.';'); + try + { + return eval('return ' . $_expression_ . ';'); + } + catch (ParseError $e) + { + return false; + } } else { diff --git a/web/framework-1.1.17/base/CDbStatePersister.php b/web/framework/base/CDbStatePersister.php similarity index 100% rename from web/framework-1.1.17/base/CDbStatePersister.php rename to web/framework/base/CDbStatePersister.php diff --git a/web/framework-1.1.17/base/CErrorEvent.php b/web/framework/base/CErrorEvent.php similarity index 100% rename from web/framework-1.1.17/base/CErrorEvent.php rename to web/framework/base/CErrorEvent.php diff --git a/web/framework-1.1.17/base/CErrorHandler.php b/web/framework/base/CErrorHandler.php similarity index 100% rename from web/framework-1.1.17/base/CErrorHandler.php rename to web/framework/base/CErrorHandler.php diff --git a/web/framework-1.1.17/base/CException.php b/web/framework/base/CException.php similarity index 100% rename from web/framework-1.1.17/base/CException.php rename to web/framework/base/CException.php diff --git a/web/framework-1.1.17/base/CExceptionEvent.php b/web/framework/base/CExceptionEvent.php similarity index 100% rename from web/framework-1.1.17/base/CExceptionEvent.php rename to web/framework/base/CExceptionEvent.php diff --git a/web/framework-1.1.17/base/CHttpException.php b/web/framework/base/CHttpException.php similarity index 100% rename from web/framework-1.1.17/base/CHttpException.php rename to web/framework/base/CHttpException.php diff --git a/web/framework-1.1.17/base/CModel.php b/web/framework/base/CModel.php similarity index 100% rename from web/framework-1.1.17/base/CModel.php rename to web/framework/base/CModel.php diff --git a/web/framework-1.1.17/base/CModelBehavior.php b/web/framework/base/CModelBehavior.php similarity index 100% rename from web/framework-1.1.17/base/CModelBehavior.php rename to web/framework/base/CModelBehavior.php diff --git a/web/framework-1.1.17/base/CModelEvent.php b/web/framework/base/CModelEvent.php similarity index 100% rename from web/framework-1.1.17/base/CModelEvent.php rename to web/framework/base/CModelEvent.php diff --git a/web/framework-1.1.17/base/CModule.php b/web/framework/base/CModule.php similarity index 99% rename from web/framework-1.1.17/base/CModule.php rename to web/framework/base/CModule.php index b81b2bd41..57f27252a 100644 --- a/web/framework-1.1.17/base/CModule.php +++ b/web/framework/base/CModule.php @@ -71,7 +71,7 @@ public function __construct($id,$parent,$config=null) $this->_id=$id; $this->_parentModule=$parent; - // set basePath at early as possible to avoid trouble + // set basePath as early as possible to avoid trouble if(is_string($config)) $config=require($config); if(isset($config['basePath'])) diff --git a/web/framework-1.1.17/base/CSecurityManager.php b/web/framework/base/CSecurityManager.php similarity index 95% rename from web/framework-1.1.17/base/CSecurityManager.php rename to web/framework/base/CSecurityManager.php index 6f339c6da..9832498a1 100644 --- a/web/framework-1.1.17/base/CSecurityManager.php +++ b/web/framework/base/CSecurityManager.php @@ -614,4 +614,35 @@ public function compareString($expected,$actual) $diff|=(ord($actual[$i])^ord($expected[$i%$expectedLength])); return $diff===0; } + + /** + * Masks a token to make it uncompressible. + * Applies a random mask to the token and prepends the mask used to the result making the string always unique. + * Used to mitigate BREACH attack by randomizing how token is outputted on each request. + * @param string $token An unmasked token. + * @return string A masked token. + * @since 1.1.18 + */ + public function maskToken($token) + { + // The number of bytes in a mask is always equal to the number of bytes in a token. + $mask=$this->generateRandomString($this->strlen($token)); + return strtr(base64_encode($mask.($mask^$token)),'+/','-_'); + } + + /** + * Unmasks a token previously masked by `maskToken`. + * @param string $maskedToken A masked token. + * @return string An unmasked token, or an empty string in case of token format is invalid. + * @since 1.1.18 + */ + public function unmaskToken($maskedToken) + { + $decoded=base64_decode(strtr($maskedToken,'-_','+/')); + $length=$this->strlen($decoded)/2; + // Check if the masked token has an even length. + if(!is_int($length)) + return ''; + return $this->substr($decoded,$length,$length)^$this->substr($decoded,0,$length); + } } diff --git a/web/framework-1.1.17/base/CStatePersister.php b/web/framework/base/CStatePersister.php similarity index 98% rename from web/framework-1.1.17/base/CStatePersister.php rename to web/framework/base/CStatePersister.php index 86e3d9d2e..75b56f003 100644 --- a/web/framework-1.1.17/base/CStatePersister.php +++ b/web/framework/base/CStatePersister.php @@ -105,7 +105,8 @@ public function load() * Loads content from file using a shared lock to avoid data corruption when reading * the file while it is being written by save() * - * @return string file contents + * @param string $filename file name + * @return bool|string file contents * @since 1.1.17 */ protected function getContent($filename) diff --git a/web/framework-1.1.17/base/interfaces.php b/web/framework/base/interfaces.php similarity index 100% rename from web/framework-1.1.17/base/interfaces.php rename to web/framework/base/interfaces.php diff --git a/web/framework-1.1.17/caching/CApcCache.php b/web/framework/caching/CApcCache.php similarity index 100% rename from web/framework-1.1.17/caching/CApcCache.php rename to web/framework/caching/CApcCache.php diff --git a/web/framework-1.1.17/caching/CCache.php b/web/framework/caching/CCache.php similarity index 100% rename from web/framework-1.1.17/caching/CCache.php rename to web/framework/caching/CCache.php diff --git a/web/framework-1.1.17/caching/CDbCache.php b/web/framework/caching/CDbCache.php similarity index 100% rename from web/framework-1.1.17/caching/CDbCache.php rename to web/framework/caching/CDbCache.php diff --git a/web/framework-1.1.17/caching/CDummyCache.php b/web/framework/caching/CDummyCache.php similarity index 100% rename from web/framework-1.1.17/caching/CDummyCache.php rename to web/framework/caching/CDummyCache.php diff --git a/web/framework-1.1.17/caching/CEAcceleratorCache.php b/web/framework/caching/CEAcceleratorCache.php similarity index 100% rename from web/framework-1.1.17/caching/CEAcceleratorCache.php rename to web/framework/caching/CEAcceleratorCache.php diff --git a/web/framework-1.1.17/caching/CFileCache.php b/web/framework/caching/CFileCache.php similarity index 99% rename from web/framework-1.1.17/caching/CFileCache.php rename to web/framework/caching/CFileCache.php index 330e74d4d..6ecff4864 100644 --- a/web/framework-1.1.17/caching/CFileCache.php +++ b/web/framework/caching/CFileCache.php @@ -130,7 +130,7 @@ protected function getValue($key) { $cacheFile=$this->getCacheFile($key); if(($time=$this->filemtime($cacheFile))>time()) - return @file_get_contents($cacheFile,false,null,$this->embedExpiry ? 10 : -1); + return @file_get_contents($cacheFile,false,null,$this->embedExpiry ? 10 : null); elseif($time>0) @unlink($cacheFile); return false; diff --git a/web/framework-1.1.17/caching/CMemCache.php b/web/framework/caching/CMemCache.php similarity index 100% rename from web/framework-1.1.17/caching/CMemCache.php rename to web/framework/caching/CMemCache.php diff --git a/web/framework-1.1.17/caching/CRedisCache.php b/web/framework/caching/CRedisCache.php similarity index 99% rename from web/framework-1.1.17/caching/CRedisCache.php rename to web/framework/caching/CRedisCache.php index 3d19b8407..c122bff3d 100644 --- a/web/framework-1.1.17/caching/CRedisCache.php +++ b/web/framework/caching/CRedisCache.php @@ -95,7 +95,10 @@ protected function connect() $this->executeCommand('SELECT',array($this->database)); } else + { + $this->_socket = null; throw new CException('Failed to connect to redis: '.$errorDescription,(int)$errorNumber); + } } /** diff --git a/web/framework-1.1.17/caching/CWinCache.php b/web/framework/caching/CWinCache.php similarity index 100% rename from web/framework-1.1.17/caching/CWinCache.php rename to web/framework/caching/CWinCache.php diff --git a/web/framework-1.1.17/caching/CXCache.php b/web/framework/caching/CXCache.php similarity index 100% rename from web/framework-1.1.17/caching/CXCache.php rename to web/framework/caching/CXCache.php diff --git a/web/framework-1.1.17/caching/CZendDataCache.php b/web/framework/caching/CZendDataCache.php similarity index 100% rename from web/framework-1.1.17/caching/CZendDataCache.php rename to web/framework/caching/CZendDataCache.php diff --git a/web/framework-1.1.17/caching/dependencies/CCacheDependency.php b/web/framework/caching/dependencies/CCacheDependency.php similarity index 100% rename from web/framework-1.1.17/caching/dependencies/CCacheDependency.php rename to web/framework/caching/dependencies/CCacheDependency.php diff --git a/web/framework-1.1.17/caching/dependencies/CChainedCacheDependency.php b/web/framework/caching/dependencies/CChainedCacheDependency.php similarity index 100% rename from web/framework-1.1.17/caching/dependencies/CChainedCacheDependency.php rename to web/framework/caching/dependencies/CChainedCacheDependency.php diff --git a/web/framework-1.1.17/caching/dependencies/CDbCacheDependency.php b/web/framework/caching/dependencies/CDbCacheDependency.php similarity index 100% rename from web/framework-1.1.17/caching/dependencies/CDbCacheDependency.php rename to web/framework/caching/dependencies/CDbCacheDependency.php diff --git a/web/framework-1.1.17/caching/dependencies/CDirectoryCacheDependency.php b/web/framework/caching/dependencies/CDirectoryCacheDependency.php similarity index 100% rename from web/framework-1.1.17/caching/dependencies/CDirectoryCacheDependency.php rename to web/framework/caching/dependencies/CDirectoryCacheDependency.php diff --git a/web/framework-1.1.17/caching/dependencies/CExpressionDependency.php b/web/framework/caching/dependencies/CExpressionDependency.php similarity index 100% rename from web/framework-1.1.17/caching/dependencies/CExpressionDependency.php rename to web/framework/caching/dependencies/CExpressionDependency.php diff --git a/web/framework-1.1.17/caching/dependencies/CFileCacheDependency.php b/web/framework/caching/dependencies/CFileCacheDependency.php similarity index 100% rename from web/framework-1.1.17/caching/dependencies/CFileCacheDependency.php rename to web/framework/caching/dependencies/CFileCacheDependency.php diff --git a/web/framework-1.1.17/caching/dependencies/CGlobalStateCacheDependency.php b/web/framework/caching/dependencies/CGlobalStateCacheDependency.php similarity index 100% rename from web/framework-1.1.17/caching/dependencies/CGlobalStateCacheDependency.php rename to web/framework/caching/dependencies/CGlobalStateCacheDependency.php diff --git a/web/framework-1.1.17/cli/commands/MessageCommand.php b/web/framework/cli/commands/MessageCommand.php similarity index 97% rename from web/framework-1.1.17/cli/commands/MessageCommand.php rename to web/framework/cli/commands/MessageCommand.php index d1e0e2cfb..00d3b749e 100644 --- a/web/framework-1.1.17/cli/commands/MessageCommand.php +++ b/web/framework/cli/commands/MessageCommand.php @@ -147,7 +147,15 @@ protected function extractMessages($fileName,$translator) else $category=substr($matches[$i][1],1,-1); $message=$matches[$i][2]; - $messages[$category][]=eval("return $message;"); // use eval to eliminate quote escape + try + { + $evalResult = eval("return $message;"); // use eval to eliminate quote escape + } + catch (ParseError $e) + { + $evalResult = false; + } + $messages[$category][] = $evalResult; } } return $messages; diff --git a/web/framework-1.1.17/cli/commands/MigrateCommand.php b/web/framework/cli/commands/MigrateCommand.php similarity index 100% rename from web/framework-1.1.17/cli/commands/MigrateCommand.php rename to web/framework/cli/commands/MigrateCommand.php diff --git a/web/framework-1.1.17/cli/commands/ShellCommand.php b/web/framework/cli/commands/ShellCommand.php similarity index 96% rename from web/framework-1.1.17/cli/commands/ShellCommand.php rename to web/framework/cli/commands/ShellCommand.php index 5855f261a..06aa82b57 100644 --- a/web/framework-1.1.17/cli/commands/ShellCommand.php +++ b/web/framework/cli/commands/ShellCommand.php @@ -125,7 +125,18 @@ protected function runShell() $_command_->run($_args_); } else - echo eval($_line_.';'); + { + try + { + $evalResult = eval($_line_ . ';'); + } + catch (ParseError $e) + { + $evalResult = false; + } + + echo $evalResult; + } } catch(Exception $e) { diff --git a/web/framework-1.1.17/cli/commands/WebAppCommand.php b/web/framework/cli/commands/WebAppCommand.php similarity index 100% rename from web/framework-1.1.17/cli/commands/WebAppCommand.php rename to web/framework/cli/commands/WebAppCommand.php diff --git a/web/framework-1.1.17/cli/commands/shell/ControllerCommand.php b/web/framework/cli/commands/shell/ControllerCommand.php similarity index 100% rename from web/framework-1.1.17/cli/commands/shell/ControllerCommand.php rename to web/framework/cli/commands/shell/ControllerCommand.php diff --git a/web/framework-1.1.17/cli/commands/shell/CrudCommand.php b/web/framework/cli/commands/shell/CrudCommand.php similarity index 100% rename from web/framework-1.1.17/cli/commands/shell/CrudCommand.php rename to web/framework/cli/commands/shell/CrudCommand.php diff --git a/web/framework-1.1.17/cli/commands/shell/FormCommand.php b/web/framework/cli/commands/shell/FormCommand.php similarity index 100% rename from web/framework-1.1.17/cli/commands/shell/FormCommand.php rename to web/framework/cli/commands/shell/FormCommand.php diff --git a/web/framework-1.1.17/cli/commands/shell/HelpCommand.php b/web/framework/cli/commands/shell/HelpCommand.php similarity index 100% rename from web/framework-1.1.17/cli/commands/shell/HelpCommand.php rename to web/framework/cli/commands/shell/HelpCommand.php diff --git a/web/framework-1.1.17/cli/commands/shell/ModelCommand.php b/web/framework/cli/commands/shell/ModelCommand.php similarity index 100% rename from web/framework-1.1.17/cli/commands/shell/ModelCommand.php rename to web/framework/cli/commands/shell/ModelCommand.php diff --git a/web/framework-1.1.17/cli/commands/shell/ModuleCommand.php b/web/framework/cli/commands/shell/ModuleCommand.php similarity index 100% rename from web/framework-1.1.17/cli/commands/shell/ModuleCommand.php rename to web/framework/cli/commands/shell/ModuleCommand.php diff --git a/web/framework-1.1.17/cli/views/shell/controller/controller.php b/web/framework/cli/views/shell/controller/controller.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/controller/controller.php rename to web/framework/cli/views/shell/controller/controller.php diff --git a/web/framework-1.1.17/cli/views/shell/controller/view.php b/web/framework/cli/views/shell/controller/view.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/controller/view.php rename to web/framework/cli/views/shell/controller/view.php diff --git a/web/framework-1.1.17/cli/views/shell/crud/_form.php b/web/framework/cli/views/shell/crud/_form.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/crud/_form.php rename to web/framework/cli/views/shell/crud/_form.php diff --git a/web/framework-1.1.17/cli/views/shell/crud/_search.php b/web/framework/cli/views/shell/crud/_search.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/crud/_search.php rename to web/framework/cli/views/shell/crud/_search.php diff --git a/web/framework-1.1.17/cli/views/shell/crud/_view.php b/web/framework/cli/views/shell/crud/_view.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/crud/_view.php rename to web/framework/cli/views/shell/crud/_view.php diff --git a/web/framework-1.1.17/cli/views/shell/crud/admin.php b/web/framework/cli/views/shell/crud/admin.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/crud/admin.php rename to web/framework/cli/views/shell/crud/admin.php diff --git a/web/framework-1.1.17/cli/views/shell/crud/controller.php b/web/framework/cli/views/shell/crud/controller.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/crud/controller.php rename to web/framework/cli/views/shell/crud/controller.php diff --git a/web/framework-1.1.17/cli/views/shell/crud/create.php b/web/framework/cli/views/shell/crud/create.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/crud/create.php rename to web/framework/cli/views/shell/crud/create.php diff --git a/web/framework-1.1.17/cli/views/shell/crud/index.php b/web/framework/cli/views/shell/crud/index.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/crud/index.php rename to web/framework/cli/views/shell/crud/index.php diff --git a/web/framework-1.1.17/cli/views/shell/crud/test.php b/web/framework/cli/views/shell/crud/test.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/crud/test.php rename to web/framework/cli/views/shell/crud/test.php diff --git a/web/framework-1.1.17/cli/views/shell/crud/update.php b/web/framework/cli/views/shell/crud/update.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/crud/update.php rename to web/framework/cli/views/shell/crud/update.php diff --git a/web/framework-1.1.17/cli/views/shell/crud/view.php b/web/framework/cli/views/shell/crud/view.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/crud/view.php rename to web/framework/cli/views/shell/crud/view.php diff --git a/web/framework-1.1.17/cli/views/shell/form/action.php b/web/framework/cli/views/shell/form/action.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/form/action.php rename to web/framework/cli/views/shell/form/action.php diff --git a/web/framework-1.1.17/cli/views/shell/form/form.php b/web/framework/cli/views/shell/form/form.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/form/form.php rename to web/framework/cli/views/shell/form/form.php diff --git a/web/framework-1.1.17/cli/views/shell/model/fixture.php b/web/framework/cli/views/shell/model/fixture.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/model/fixture.php rename to web/framework/cli/views/shell/model/fixture.php diff --git a/web/framework-1.1.17/cli/views/shell/model/model.php b/web/framework/cli/views/shell/model/model.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/model/model.php rename to web/framework/cli/views/shell/model/model.php diff --git a/web/framework-1.1.17/cli/views/shell/model/test.php b/web/framework/cli/views/shell/model/test.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/model/test.php rename to web/framework/cli/views/shell/model/test.php diff --git a/web/framework-1.1.17/cli/views/shell/module/controllers/DefaultController.php b/web/framework/cli/views/shell/module/controllers/DefaultController.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/module/controllers/DefaultController.php rename to web/framework/cli/views/shell/module/controllers/DefaultController.php diff --git a/web/framework-1.1.17/cli/views/shell/module/module.php b/web/framework/cli/views/shell/module/module.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/module/module.php rename to web/framework/cli/views/shell/module/module.php diff --git a/web/framework-1.1.17/cli/views/shell/module/views/default/index.php b/web/framework/cli/views/shell/module/views/default/index.php similarity index 100% rename from web/framework-1.1.17/cli/views/shell/module/views/default/index.php rename to web/framework/cli/views/shell/module/views/default/index.php diff --git a/web/framework-1.1.17/cli/views/webapp/assets/git-gitignore b/web/framework/cli/views/webapp/assets/git-gitignore similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/assets/git-gitignore rename to web/framework/cli/views/webapp/assets/git-gitignore diff --git a/web/framework-1.1.17/cli/views/webapp/assets/hg-hgkeep b/web/framework/cli/views/webapp/assets/hg-hgkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/assets/hg-hgkeep rename to web/framework/cli/views/webapp/assets/hg-hgkeep diff --git a/web/framework-1.1.17/cli/views/webapp/css/bg.gif b/web/framework/cli/views/webapp/css/bg.gif similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/css/bg.gif rename to web/framework/cli/views/webapp/css/bg.gif diff --git a/web/framework-1.1.17/cli/views/webapp/css/form.css b/web/framework/cli/views/webapp/css/form.css similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/css/form.css rename to web/framework/cli/views/webapp/css/form.css diff --git a/web/framework-1.1.17/cli/views/webapp/css/ie.css b/web/framework/cli/views/webapp/css/ie.css similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/css/ie.css rename to web/framework/cli/views/webapp/css/ie.css diff --git a/web/framework-1.1.17/cli/views/webapp/css/main.css b/web/framework/cli/views/webapp/css/main.css similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/css/main.css rename to web/framework/cli/views/webapp/css/main.css diff --git a/web/framework-1.1.17/cli/views/webapp/css/print.css b/web/framework/cli/views/webapp/css/print.css similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/css/print.css rename to web/framework/cli/views/webapp/css/print.css diff --git a/web/framework-1.1.17/cli/views/webapp/css/screen.css b/web/framework/cli/views/webapp/css/screen.css similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/css/screen.css rename to web/framework/cli/views/webapp/css/screen.css diff --git a/web/framework-1.1.17/cli/views/webapp/hg-hgignore b/web/framework/cli/views/webapp/hg-hgignore similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/hg-hgignore rename to web/framework/cli/views/webapp/hg-hgignore diff --git a/web/framework-1.1.17/cli/views/webapp/images/git-gitkeep b/web/framework/cli/views/webapp/images/git-gitkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/images/git-gitkeep rename to web/framework/cli/views/webapp/images/git-gitkeep diff --git a/web/framework-1.1.17/cli/views/webapp/images/hg-hgkeep b/web/framework/cli/views/webapp/images/hg-hgkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/images/hg-hgkeep rename to web/framework/cli/views/webapp/images/hg-hgkeep diff --git a/web/framework-1.1.17/cli/views/webapp/index-test.php b/web/framework/cli/views/webapp/index-test.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/index-test.php rename to web/framework/cli/views/webapp/index-test.php diff --git a/web/framework-1.1.17/cli/views/webapp/index.php b/web/framework/cli/views/webapp/index.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/index.php rename to web/framework/cli/views/webapp/index.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/.htaccess b/web/framework/cli/views/webapp/protected/.htaccess similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/.htaccess rename to web/framework/cli/views/webapp/protected/.htaccess diff --git a/web/framework-1.1.17/cli/views/webapp/protected/commands/shell/git-gitkeep b/web/framework/cli/views/webapp/protected/commands/shell/git-gitkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/commands/shell/git-gitkeep rename to web/framework/cli/views/webapp/protected/commands/shell/git-gitkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/commands/shell/hg-hgkeep b/web/framework/cli/views/webapp/protected/commands/shell/hg-hgkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/commands/shell/hg-hgkeep rename to web/framework/cli/views/webapp/protected/commands/shell/hg-hgkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/components/Controller.php b/web/framework/cli/views/webapp/protected/components/Controller.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/components/Controller.php rename to web/framework/cli/views/webapp/protected/components/Controller.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/components/UserIdentity.php b/web/framework/cli/views/webapp/protected/components/UserIdentity.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/components/UserIdentity.php rename to web/framework/cli/views/webapp/protected/components/UserIdentity.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/config/console.php b/web/framework/cli/views/webapp/protected/config/console.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/config/console.php rename to web/framework/cli/views/webapp/protected/config/console.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/config/database.php b/web/framework/cli/views/webapp/protected/config/database.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/config/database.php rename to web/framework/cli/views/webapp/protected/config/database.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/config/main.php b/web/framework/cli/views/webapp/protected/config/main.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/config/main.php rename to web/framework/cli/views/webapp/protected/config/main.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/config/test.php b/web/framework/cli/views/webapp/protected/config/test.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/config/test.php rename to web/framework/cli/views/webapp/protected/config/test.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/controllers/SiteController.php b/web/framework/cli/views/webapp/protected/controllers/SiteController.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/controllers/SiteController.php rename to web/framework/cli/views/webapp/protected/controllers/SiteController.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/data/schema.mysql.sql b/web/framework/cli/views/webapp/protected/data/schema.mysql.sql similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/data/schema.mysql.sql rename to web/framework/cli/views/webapp/protected/data/schema.mysql.sql diff --git a/web/framework-1.1.17/cli/views/webapp/protected/data/schema.sqlite.sql b/web/framework/cli/views/webapp/protected/data/schema.sqlite.sql similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/data/schema.sqlite.sql rename to web/framework/cli/views/webapp/protected/data/schema.sqlite.sql diff --git a/web/framework-1.1.17/cli/views/webapp/protected/data/testdrive.db b/web/framework/cli/views/webapp/protected/data/testdrive.db similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/data/testdrive.db rename to web/framework/cli/views/webapp/protected/data/testdrive.db diff --git a/web/framework-1.1.17/cli/views/webapp/protected/extensions/git-gitkeep b/web/framework/cli/views/webapp/protected/extensions/git-gitkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/extensions/git-gitkeep rename to web/framework/cli/views/webapp/protected/extensions/git-gitkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/extensions/hg-hgkeep b/web/framework/cli/views/webapp/protected/extensions/hg-hgkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/extensions/hg-hgkeep rename to web/framework/cli/views/webapp/protected/extensions/hg-hgkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/messages/git-gitkeep b/web/framework/cli/views/webapp/protected/messages/git-gitkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/messages/git-gitkeep rename to web/framework/cli/views/webapp/protected/messages/git-gitkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/messages/hg-hgkeep b/web/framework/cli/views/webapp/protected/messages/hg-hgkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/messages/hg-hgkeep rename to web/framework/cli/views/webapp/protected/messages/hg-hgkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/migrations/git-gitkeep b/web/framework/cli/views/webapp/protected/migrations/git-gitkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/migrations/git-gitkeep rename to web/framework/cli/views/webapp/protected/migrations/git-gitkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/migrations/hg-hgkeep b/web/framework/cli/views/webapp/protected/migrations/hg-hgkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/migrations/hg-hgkeep rename to web/framework/cli/views/webapp/protected/migrations/hg-hgkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/models/ContactForm.php b/web/framework/cli/views/webapp/protected/models/ContactForm.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/models/ContactForm.php rename to web/framework/cli/views/webapp/protected/models/ContactForm.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/models/LoginForm.php b/web/framework/cli/views/webapp/protected/models/LoginForm.php similarity index 91% rename from web/framework-1.1.17/cli/views/webapp/protected/models/LoginForm.php rename to web/framework/cli/views/webapp/protected/models/LoginForm.php index eb36e4a99..632c47578 100644 --- a/web/framework-1.1.17/cli/views/webapp/protected/models/LoginForm.php +++ b/web/framework/cli/views/webapp/protected/models/LoginForm.php @@ -43,6 +43,8 @@ public function attributeLabels() /** * Authenticates the password. * This is the 'authenticate' validator as declared in rules(). + * @param string $attribute the name of the attribute to be validated. + * @param array $params additional parameters passed with rule when being executed. */ public function authenticate($attribute,$params) { diff --git a/web/framework-1.1.17/cli/views/webapp/protected/runtime/git-gitignore b/web/framework/cli/views/webapp/protected/runtime/git-gitignore similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/runtime/git-gitignore rename to web/framework/cli/views/webapp/protected/runtime/git-gitignore diff --git a/web/framework-1.1.17/cli/views/webapp/protected/runtime/hg-hgkeep b/web/framework/cli/views/webapp/protected/runtime/hg-hgkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/runtime/hg-hgkeep rename to web/framework/cli/views/webapp/protected/runtime/hg-hgkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/WebTestCase.php b/web/framework/cli/views/webapp/protected/tests/WebTestCase.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/tests/WebTestCase.php rename to web/framework/cli/views/webapp/protected/tests/WebTestCase.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/bootstrap.php b/web/framework/cli/views/webapp/protected/tests/bootstrap.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/tests/bootstrap.php rename to web/framework/cli/views/webapp/protected/tests/bootstrap.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/fixtures/git-gitkeep b/web/framework/cli/views/webapp/protected/tests/fixtures/git-gitkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/tests/fixtures/git-gitkeep rename to web/framework/cli/views/webapp/protected/tests/fixtures/git-gitkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/fixtures/hg-hgkeep b/web/framework/cli/views/webapp/protected/tests/fixtures/hg-hgkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/tests/fixtures/hg-hgkeep rename to web/framework/cli/views/webapp/protected/tests/fixtures/hg-hgkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/functional/SiteTest.php b/web/framework/cli/views/webapp/protected/tests/functional/SiteTest.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/tests/functional/SiteTest.php rename to web/framework/cli/views/webapp/protected/tests/functional/SiteTest.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/phpunit.xml b/web/framework/cli/views/webapp/protected/tests/phpunit.xml similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/tests/phpunit.xml rename to web/framework/cli/views/webapp/protected/tests/phpunit.xml diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/report/git-gitignore b/web/framework/cli/views/webapp/protected/tests/report/git-gitignore similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/tests/report/git-gitignore rename to web/framework/cli/views/webapp/protected/tests/report/git-gitignore diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/report/hg-hgkeep b/web/framework/cli/views/webapp/protected/tests/report/hg-hgkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/tests/report/hg-hgkeep rename to web/framework/cli/views/webapp/protected/tests/report/hg-hgkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/unit/git-gitkeep b/web/framework/cli/views/webapp/protected/tests/unit/git-gitkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/tests/unit/git-gitkeep rename to web/framework/cli/views/webapp/protected/tests/unit/git-gitkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/unit/hg-hgkeep b/web/framework/cli/views/webapp/protected/tests/unit/hg-hgkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/tests/unit/hg-hgkeep rename to web/framework/cli/views/webapp/protected/tests/unit/hg-hgkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/vendor/git-gitkeep b/web/framework/cli/views/webapp/protected/vendor/git-gitkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/vendor/git-gitkeep rename to web/framework/cli/views/webapp/protected/vendor/git-gitkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/vendor/hg-hgkeep b/web/framework/cli/views/webapp/protected/vendor/hg-hgkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/vendor/hg-hgkeep rename to web/framework/cli/views/webapp/protected/vendor/hg-hgkeep diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/layouts/column1.php b/web/framework/cli/views/webapp/protected/views/layouts/column1.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/views/layouts/column1.php rename to web/framework/cli/views/webapp/protected/views/layouts/column1.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/layouts/column2.php b/web/framework/cli/views/webapp/protected/views/layouts/column2.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/views/layouts/column2.php rename to web/framework/cli/views/webapp/protected/views/layouts/column2.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/layouts/main.php b/web/framework/cli/views/webapp/protected/views/layouts/main.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/views/layouts/main.php rename to web/framework/cli/views/webapp/protected/views/layouts/main.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/site/contact.php b/web/framework/cli/views/webapp/protected/views/site/contact.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/views/site/contact.php rename to web/framework/cli/views/webapp/protected/views/site/contact.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/site/error.php b/web/framework/cli/views/webapp/protected/views/site/error.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/views/site/error.php rename to web/framework/cli/views/webapp/protected/views/site/error.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/site/index.php b/web/framework/cli/views/webapp/protected/views/site/index.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/views/site/index.php rename to web/framework/cli/views/webapp/protected/views/site/index.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/site/login.php b/web/framework/cli/views/webapp/protected/views/site/login.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/views/site/login.php rename to web/framework/cli/views/webapp/protected/views/site/login.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/site/pages/about.php b/web/framework/cli/views/webapp/protected/views/site/pages/about.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/views/site/pages/about.php rename to web/framework/cli/views/webapp/protected/views/site/pages/about.php diff --git a/web/framework-1.1.17/cli/views/webapp/protected/yiic b/web/framework/cli/views/webapp/protected/yiic similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/yiic rename to web/framework/cli/views/webapp/protected/yiic diff --git a/web/framework-1.1.17/cli/views/webapp/protected/yiic.bat b/web/framework/cli/views/webapp/protected/yiic.bat similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/yiic.bat rename to web/framework/cli/views/webapp/protected/yiic.bat diff --git a/web/framework-1.1.17/cli/views/webapp/protected/yiic.php b/web/framework/cli/views/webapp/protected/yiic.php similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/protected/yiic.php rename to web/framework/cli/views/webapp/protected/yiic.php diff --git a/web/framework-1.1.17/cli/views/webapp/themes/classic/views/.htaccess b/web/framework/cli/views/webapp/themes/classic/views/.htaccess similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/themes/classic/views/.htaccess rename to web/framework/cli/views/webapp/themes/classic/views/.htaccess diff --git a/web/framework-1.1.17/cli/views/webapp/themes/classic/views/layouts/git-gitkeep b/web/framework/cli/views/webapp/themes/classic/views/layouts/git-gitkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/themes/classic/views/layouts/git-gitkeep rename to web/framework/cli/views/webapp/themes/classic/views/layouts/git-gitkeep diff --git a/web/framework-1.1.17/cli/views/webapp/themes/classic/views/layouts/hg-hgkeep b/web/framework/cli/views/webapp/themes/classic/views/layouts/hg-hgkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/themes/classic/views/layouts/hg-hgkeep rename to web/framework/cli/views/webapp/themes/classic/views/layouts/hg-hgkeep diff --git a/web/framework-1.1.17/cli/views/webapp/themes/classic/views/site/git-gitkeep b/web/framework/cli/views/webapp/themes/classic/views/site/git-gitkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/themes/classic/views/site/git-gitkeep rename to web/framework/cli/views/webapp/themes/classic/views/site/git-gitkeep diff --git a/web/framework-1.1.17/cli/views/webapp/themes/classic/views/site/hg-hgkeep b/web/framework/cli/views/webapp/themes/classic/views/site/hg-hgkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/themes/classic/views/site/hg-hgkeep rename to web/framework/cli/views/webapp/themes/classic/views/site/hg-hgkeep diff --git a/web/framework-1.1.17/cli/views/webapp/themes/classic/views/system/git-gitkeep b/web/framework/cli/views/webapp/themes/classic/views/system/git-gitkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/themes/classic/views/system/git-gitkeep rename to web/framework/cli/views/webapp/themes/classic/views/system/git-gitkeep diff --git a/web/framework-1.1.17/cli/views/webapp/themes/classic/views/system/hg-hgkeep b/web/framework/cli/views/webapp/themes/classic/views/system/hg-hgkeep similarity index 100% rename from web/framework-1.1.17/cli/views/webapp/themes/classic/views/system/hg-hgkeep rename to web/framework/cli/views/webapp/themes/classic/views/system/hg-hgkeep diff --git a/web/framework-1.1.17/collections/CAttributeCollection.php b/web/framework/collections/CAttributeCollection.php similarity index 100% rename from web/framework-1.1.17/collections/CAttributeCollection.php rename to web/framework/collections/CAttributeCollection.php diff --git a/web/framework-1.1.17/collections/CConfiguration.php b/web/framework/collections/CConfiguration.php similarity index 100% rename from web/framework-1.1.17/collections/CConfiguration.php rename to web/framework/collections/CConfiguration.php diff --git a/web/framework-1.1.17/collections/CList.php b/web/framework/collections/CList.php similarity index 100% rename from web/framework-1.1.17/collections/CList.php rename to web/framework/collections/CList.php diff --git a/web/framework-1.1.17/collections/CListIterator.php b/web/framework/collections/CListIterator.php similarity index 100% rename from web/framework-1.1.17/collections/CListIterator.php rename to web/framework/collections/CListIterator.php diff --git a/web/framework-1.1.17/collections/CMap.php b/web/framework/collections/CMap.php similarity index 100% rename from web/framework-1.1.17/collections/CMap.php rename to web/framework/collections/CMap.php diff --git a/web/framework-1.1.17/collections/CMapIterator.php b/web/framework/collections/CMapIterator.php similarity index 100% rename from web/framework-1.1.17/collections/CMapIterator.php rename to web/framework/collections/CMapIterator.php diff --git a/web/framework-1.1.17/collections/CQueue.php b/web/framework/collections/CQueue.php similarity index 100% rename from web/framework-1.1.17/collections/CQueue.php rename to web/framework/collections/CQueue.php diff --git a/web/framework-1.1.17/collections/CQueueIterator.php b/web/framework/collections/CQueueIterator.php similarity index 100% rename from web/framework-1.1.17/collections/CQueueIterator.php rename to web/framework/collections/CQueueIterator.php diff --git a/web/framework-1.1.17/collections/CStack.php b/web/framework/collections/CStack.php similarity index 100% rename from web/framework-1.1.17/collections/CStack.php rename to web/framework/collections/CStack.php diff --git a/web/framework-1.1.17/collections/CStackIterator.php b/web/framework/collections/CStackIterator.php similarity index 100% rename from web/framework-1.1.17/collections/CStackIterator.php rename to web/framework/collections/CStackIterator.php diff --git a/web/framework-1.1.17/collections/CTypedList.php b/web/framework/collections/CTypedList.php similarity index 100% rename from web/framework-1.1.17/collections/CTypedList.php rename to web/framework/collections/CTypedList.php diff --git a/web/framework-1.1.17/collections/CTypedMap.php b/web/framework/collections/CTypedMap.php similarity index 100% rename from web/framework-1.1.17/collections/CTypedMap.php rename to web/framework/collections/CTypedMap.php diff --git a/web/framework-1.1.17/console/CConsoleApplication.php b/web/framework/console/CConsoleApplication.php similarity index 100% rename from web/framework-1.1.17/console/CConsoleApplication.php rename to web/framework/console/CConsoleApplication.php diff --git a/web/framework-1.1.17/console/CConsoleCommand.php b/web/framework/console/CConsoleCommand.php similarity index 100% rename from web/framework-1.1.17/console/CConsoleCommand.php rename to web/framework/console/CConsoleCommand.php diff --git a/web/framework-1.1.17/console/CConsoleCommandBehavior.php b/web/framework/console/CConsoleCommandBehavior.php similarity index 100% rename from web/framework-1.1.17/console/CConsoleCommandBehavior.php rename to web/framework/console/CConsoleCommandBehavior.php diff --git a/web/framework-1.1.17/console/CConsoleCommandEvent.php b/web/framework/console/CConsoleCommandEvent.php similarity index 100% rename from web/framework-1.1.17/console/CConsoleCommandEvent.php rename to web/framework/console/CConsoleCommandEvent.php diff --git a/web/framework-1.1.17/console/CConsoleCommandRunner.php b/web/framework/console/CConsoleCommandRunner.php similarity index 100% rename from web/framework-1.1.17/console/CConsoleCommandRunner.php rename to web/framework/console/CConsoleCommandRunner.php diff --git a/web/framework-1.1.17/console/CHelpCommand.php b/web/framework/console/CHelpCommand.php similarity index 100% rename from web/framework-1.1.17/console/CHelpCommand.php rename to web/framework/console/CHelpCommand.php diff --git a/web/framework-1.1.17/db/CDbCommand.php b/web/framework/db/CDbCommand.php similarity index 100% rename from web/framework-1.1.17/db/CDbCommand.php rename to web/framework/db/CDbCommand.php diff --git a/web/framework-1.1.17/db/CDbConnection.php b/web/framework/db/CDbConnection.php similarity index 97% rename from web/framework-1.1.17/db/CDbConnection.php rename to web/framework/db/CDbConnection.php index 3fd88d833..0de608045 100644 --- a/web/framework-1.1.17/db/CDbConnection.php +++ b/web/framework/db/CDbConnection.php @@ -582,6 +582,26 @@ public function quoteValue($str) return "'" . addcslashes(str_replace("'", "''", $str), "\000\n\r\\\032") . "'"; } + /** + * Quotes a value for use in a query using a given type. + * @param mixed $value the value to be quoted. + * @param integer $type The type to be used for quoting. + * This should be one of the `PDO::PARAM_*` constants described in + * {@link http://www.php.net/manual/en/pdo.constants.php PDO documentation}. + * This parameter will be passed to the `PDO::quote()` function. + * @return string the properly quoted string. + * @see http://www.php.net/manual/en/function.PDO-quote.php + * @since 1.1.18 + */ + public function quoteValueWithType($value, $type) + { + $this->setActive(true); + if(($quoted=$this->_pdo->quote($value, $type))!==false) + return $quoted; + else // the driver doesn't support quote (e.g. oci) + return "'" . addcslashes(str_replace("'", "''", $value), "\000\n\r\\\032") . "'"; + } + /** * Quotes a table name for use in a query. * If the table name contains schema prefix, the prefix will also be properly quoted. diff --git a/web/framework-1.1.17/db/CDbDataReader.php b/web/framework/db/CDbDataReader.php similarity index 100% rename from web/framework-1.1.17/db/CDbDataReader.php rename to web/framework/db/CDbDataReader.php diff --git a/web/framework-1.1.17/db/CDbException.php b/web/framework/db/CDbException.php similarity index 100% rename from web/framework-1.1.17/db/CDbException.php rename to web/framework/db/CDbException.php diff --git a/web/framework-1.1.17/db/CDbMigration.php b/web/framework/db/CDbMigration.php similarity index 100% rename from web/framework-1.1.17/db/CDbMigration.php rename to web/framework/db/CDbMigration.php diff --git a/web/framework-1.1.17/db/CDbTransaction.php b/web/framework/db/CDbTransaction.php similarity index 100% rename from web/framework-1.1.17/db/CDbTransaction.php rename to web/framework/db/CDbTransaction.php diff --git a/web/framework-1.1.17/db/ar/CActiveFinder.php b/web/framework/db/ar/CActiveFinder.php similarity index 99% rename from web/framework-1.1.17/db/ar/CActiveFinder.php rename to web/framework/db/ar/CActiveFinder.php index 36eb86c85..4af164cdb 100644 --- a/web/framework-1.1.17/db/ar/CActiveFinder.php +++ b/web/framework/db/ar/CActiveFinder.php @@ -194,6 +194,7 @@ private function destroyJoinTree() * @param CJoinElement $parent the parent tree node * @param mixed $with the names of the related objects relative to the parent tree node * @param array $options additional query options to be merged with the relation + * @return CJoinElement|mixed * @throws CDbException if given parent tree node is an instance of {@link CStatElement} * or relation is not defined in the given parent's tree node model class */ diff --git a/web/framework-1.1.17/db/ar/CActiveRecord.php b/web/framework/db/ar/CActiveRecord.php similarity index 99% rename from web/framework-1.1.17/db/ar/CActiveRecord.php rename to web/framework/db/ar/CActiveRecord.php index 0619ee23c..5f1d1d619 100644 --- a/web/framework-1.1.17/db/ar/CActiveRecord.php +++ b/web/framework/db/ar/CActiveRecord.php @@ -150,6 +150,7 @@ public function __get($name) * This method is overridden so that AR attributes can be accessed like properties. * @param string $name property name * @param mixed $value property value + * @throws CException */ public function __set($name,$value) { @@ -188,6 +189,7 @@ public function __isset($name) * This method overrides the parent implementation by clearing * the specified attribute value. * @param string $name the property name or the event name + * @throws CException */ public function __unset($name) { @@ -812,9 +814,10 @@ public function save($runValidation=true,$attributes=null) } /** - * Returns if the current record is new. + * Returns if the current record is new (was never saved to database) * @return boolean whether the record is new and should be inserted when calling {@link save}. - * This property is automatically set in constructor and {@link populateRecord}. + * This property is automatically set in constructor and {@link populateRecord} and is set + * to false right after inserting record to database. * Defaults to false, but it will be set to true if the instance is created using * the new operator. */ diff --git a/web/framework-1.1.17/db/ar/CActiveRecordBehavior.php b/web/framework/db/ar/CActiveRecordBehavior.php similarity index 100% rename from web/framework-1.1.17/db/ar/CActiveRecordBehavior.php rename to web/framework/db/ar/CActiveRecordBehavior.php diff --git a/web/framework-1.1.17/db/schema/CDbColumnSchema.php b/web/framework/db/schema/CDbColumnSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/CDbColumnSchema.php rename to web/framework/db/schema/CDbColumnSchema.php diff --git a/web/framework-1.1.17/db/schema/CDbCommandBuilder.php b/web/framework/db/schema/CDbCommandBuilder.php similarity index 100% rename from web/framework-1.1.17/db/schema/CDbCommandBuilder.php rename to web/framework/db/schema/CDbCommandBuilder.php diff --git a/web/framework-1.1.17/db/schema/CDbCriteria.php b/web/framework/db/schema/CDbCriteria.php similarity index 100% rename from web/framework-1.1.17/db/schema/CDbCriteria.php rename to web/framework/db/schema/CDbCriteria.php diff --git a/web/framework-1.1.17/db/schema/CDbExpression.php b/web/framework/db/schema/CDbExpression.php similarity index 100% rename from web/framework-1.1.17/db/schema/CDbExpression.php rename to web/framework/db/schema/CDbExpression.php diff --git a/web/framework-1.1.17/db/schema/CDbSchema.php b/web/framework/db/schema/CDbSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/CDbSchema.php rename to web/framework/db/schema/CDbSchema.php diff --git a/web/framework-1.1.17/db/schema/CDbTableSchema.php b/web/framework/db/schema/CDbTableSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/CDbTableSchema.php rename to web/framework/db/schema/CDbTableSchema.php diff --git a/web/framework-1.1.17/db/schema/cubrid/CCubridColumnSchema.php b/web/framework/db/schema/cubrid/CCubridColumnSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/cubrid/CCubridColumnSchema.php rename to web/framework/db/schema/cubrid/CCubridColumnSchema.php diff --git a/web/framework-1.1.17/db/schema/cubrid/CCubridSchema.php b/web/framework/db/schema/cubrid/CCubridSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/cubrid/CCubridSchema.php rename to web/framework/db/schema/cubrid/CCubridSchema.php diff --git a/web/framework-1.1.17/db/schema/cubrid/CCubridTableSchema.php b/web/framework/db/schema/cubrid/CCubridTableSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/cubrid/CCubridTableSchema.php rename to web/framework/db/schema/cubrid/CCubridTableSchema.php diff --git a/web/framework-1.1.17/db/schema/mssql/CMssqlColumnSchema.php b/web/framework/db/schema/mssql/CMssqlColumnSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/mssql/CMssqlColumnSchema.php rename to web/framework/db/schema/mssql/CMssqlColumnSchema.php diff --git a/web/framework-1.1.17/db/schema/mssql/CMssqlCommandBuilder.php b/web/framework/db/schema/mssql/CMssqlCommandBuilder.php similarity index 100% rename from web/framework-1.1.17/db/schema/mssql/CMssqlCommandBuilder.php rename to web/framework/db/schema/mssql/CMssqlCommandBuilder.php diff --git a/web/framework-1.1.17/db/schema/mssql/CMssqlPdoAdapter.php b/web/framework/db/schema/mssql/CMssqlPdoAdapter.php similarity index 100% rename from web/framework-1.1.17/db/schema/mssql/CMssqlPdoAdapter.php rename to web/framework/db/schema/mssql/CMssqlPdoAdapter.php diff --git a/web/framework-1.1.17/db/schema/mssql/CMssqlSchema.php b/web/framework/db/schema/mssql/CMssqlSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/mssql/CMssqlSchema.php rename to web/framework/db/schema/mssql/CMssqlSchema.php diff --git a/web/framework-1.1.17/db/schema/mssql/CMssqlSqlsrvPdoAdapter.php b/web/framework/db/schema/mssql/CMssqlSqlsrvPdoAdapter.php similarity index 100% rename from web/framework-1.1.17/db/schema/mssql/CMssqlSqlsrvPdoAdapter.php rename to web/framework/db/schema/mssql/CMssqlSqlsrvPdoAdapter.php diff --git a/web/framework-1.1.17/db/schema/mssql/CMssqlTableSchema.php b/web/framework/db/schema/mssql/CMssqlTableSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/mssql/CMssqlTableSchema.php rename to web/framework/db/schema/mssql/CMssqlTableSchema.php diff --git a/web/framework-1.1.17/db/schema/mysql/CMysqlColumnSchema.php b/web/framework/db/schema/mysql/CMysqlColumnSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/mysql/CMysqlColumnSchema.php rename to web/framework/db/schema/mysql/CMysqlColumnSchema.php diff --git a/web/framework-1.1.17/db/schema/mysql/CMysqlCommandBuilder.php b/web/framework/db/schema/mysql/CMysqlCommandBuilder.php similarity index 100% rename from web/framework-1.1.17/db/schema/mysql/CMysqlCommandBuilder.php rename to web/framework/db/schema/mysql/CMysqlCommandBuilder.php diff --git a/web/framework-1.1.17/db/schema/mysql/CMysqlSchema.php b/web/framework/db/schema/mysql/CMysqlSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/mysql/CMysqlSchema.php rename to web/framework/db/schema/mysql/CMysqlSchema.php diff --git a/web/framework-1.1.17/db/schema/mysql/CMysqlTableSchema.php b/web/framework/db/schema/mysql/CMysqlTableSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/mysql/CMysqlTableSchema.php rename to web/framework/db/schema/mysql/CMysqlTableSchema.php diff --git a/web/framework-1.1.17/db/schema/oci/COciColumnSchema.php b/web/framework/db/schema/oci/COciColumnSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/oci/COciColumnSchema.php rename to web/framework/db/schema/oci/COciColumnSchema.php diff --git a/web/framework-1.1.17/db/schema/oci/COciCommandBuilder.php b/web/framework/db/schema/oci/COciCommandBuilder.php similarity index 100% rename from web/framework-1.1.17/db/schema/oci/COciCommandBuilder.php rename to web/framework/db/schema/oci/COciCommandBuilder.php diff --git a/web/framework-1.1.17/db/schema/oci/COciSchema.php b/web/framework/db/schema/oci/COciSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/oci/COciSchema.php rename to web/framework/db/schema/oci/COciSchema.php diff --git a/web/framework-1.1.17/db/schema/oci/COciTableSchema.php b/web/framework/db/schema/oci/COciTableSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/oci/COciTableSchema.php rename to web/framework/db/schema/oci/COciTableSchema.php diff --git a/web/framework-1.1.17/db/schema/pgsql/CPgsqlColumnSchema.php b/web/framework/db/schema/pgsql/CPgsqlColumnSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/pgsql/CPgsqlColumnSchema.php rename to web/framework/db/schema/pgsql/CPgsqlColumnSchema.php diff --git a/web/framework-1.1.17/db/schema/pgsql/CPgsqlCommandBuilder.php b/web/framework/db/schema/pgsql/CPgsqlCommandBuilder.php similarity index 100% rename from web/framework-1.1.17/db/schema/pgsql/CPgsqlCommandBuilder.php rename to web/framework/db/schema/pgsql/CPgsqlCommandBuilder.php diff --git a/web/framework-1.1.17/db/schema/pgsql/CPgsqlSchema.php b/web/framework/db/schema/pgsql/CPgsqlSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/pgsql/CPgsqlSchema.php rename to web/framework/db/schema/pgsql/CPgsqlSchema.php diff --git a/web/framework-1.1.17/db/schema/pgsql/CPgsqlTableSchema.php b/web/framework/db/schema/pgsql/CPgsqlTableSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/pgsql/CPgsqlTableSchema.php rename to web/framework/db/schema/pgsql/CPgsqlTableSchema.php diff --git a/web/framework-1.1.17/db/schema/sqlite/CSqliteColumnSchema.php b/web/framework/db/schema/sqlite/CSqliteColumnSchema.php similarity index 100% rename from web/framework-1.1.17/db/schema/sqlite/CSqliteColumnSchema.php rename to web/framework/db/schema/sqlite/CSqliteColumnSchema.php diff --git a/web/framework-1.1.17/db/schema/sqlite/CSqliteCommandBuilder.php b/web/framework/db/schema/sqlite/CSqliteCommandBuilder.php similarity index 100% rename from web/framework-1.1.17/db/schema/sqlite/CSqliteCommandBuilder.php rename to web/framework/db/schema/sqlite/CSqliteCommandBuilder.php diff --git a/web/framework-1.1.17/db/schema/sqlite/CSqliteSchema.php b/web/framework/db/schema/sqlite/CSqliteSchema.php similarity index 98% rename from web/framework-1.1.17/db/schema/sqlite/CSqliteSchema.php rename to web/framework/db/schema/sqlite/CSqliteSchema.php index bdf31be61..b6294b1e6 100644 --- a/web/framework-1.1.17/db/schema/sqlite/CSqliteSchema.php +++ b/web/framework/db/schema/sqlite/CSqliteSchema.php @@ -225,6 +225,7 @@ public function truncateTable($table) * @param string $column the name of the column to be dropped. The name will be properly quoted by the method. * @return string the SQL statement for dropping a DB column. * @since 1.1.6 + * @throws CDbException */ public function dropColumn($table, $column) { @@ -239,6 +240,7 @@ public function dropColumn($table, $column) * @param string $newName the new name of the column. The name will be properly quoted by the method. * @return string the SQL statement for renaming a DB column. * @since 1.1.6 + * @throws CDbException */ public function renameColumn($table, $name, $newName) { @@ -257,6 +259,7 @@ public function renameColumn($table, $name, $newName) * @param string $update the ON UPDATE option. Most DBMS support these options: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL * @return string the SQL statement for adding a foreign key constraint to an existing table. * @since 1.1.6 + * @throws CDbException */ public function addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete=null, $update=null) { @@ -270,6 +273,7 @@ public function addForeignKey($name, $table, $columns, $refTable, $refColumns, $ * @param string $table the table whose foreign is to be dropped. The name will be properly quoted by the method. * @return string the SQL statement for dropping a foreign key constraint. * @since 1.1.6 + * @throws CDbException */ public function dropForeignKey($name, $table) { @@ -286,6 +290,7 @@ public function dropForeignKey($name, $table) * For example, 'string' will be turned into 'varchar(255)', while 'string not null' will become 'varchar(255) not null'. * @return string the SQL statement for changing the definition of a column. * @since 1.1.6 + * @throws CDbException */ public function alterColumn($table, $column, $type) { @@ -312,6 +317,7 @@ public function dropIndex($name, $table) * @param string|array $columns comma separated string or array of columns that the primary key will consist of. * @return string the SQL statement for adding a primary key constraint to an existing table. * @since 1.1.13 + * @throws CDbException */ public function addPrimaryKey($name,$table,$columns) { @@ -326,6 +332,7 @@ public function addPrimaryKey($name,$table,$columns) * @param string $table the table that the primary key constraint will be removed from. * @return string the SQL statement for removing a primary key constraint from an existing table. * @since 1.1.13 + * @throws CDbException */ public function dropPrimaryKey($name,$table) { diff --git a/web/framework-1.1.17/gii/CCodeFile.php b/web/framework/gii/CCodeFile.php similarity index 100% rename from web/framework-1.1.17/gii/CCodeFile.php rename to web/framework/gii/CCodeFile.php diff --git a/web/framework-1.1.17/gii/CCodeForm.php b/web/framework/gii/CCodeForm.php similarity index 100% rename from web/framework-1.1.17/gii/CCodeForm.php rename to web/framework/gii/CCodeForm.php diff --git a/web/framework-1.1.17/gii/CCodeGenerator.php b/web/framework/gii/CCodeGenerator.php similarity index 100% rename from web/framework-1.1.17/gii/CCodeGenerator.php rename to web/framework/gii/CCodeGenerator.php diff --git a/web/framework-1.1.17/gii/CCodeModel.php b/web/framework/gii/CCodeModel.php similarity index 100% rename from web/framework-1.1.17/gii/CCodeModel.php rename to web/framework/gii/CCodeModel.php diff --git a/web/framework-1.1.17/gii/GiiModule.php b/web/framework/gii/GiiModule.php similarity index 100% rename from web/framework-1.1.17/gii/GiiModule.php rename to web/framework/gii/GiiModule.php diff --git a/web/framework-1.1.17/gii/assets/css/ie.css b/web/framework/gii/assets/css/ie.css similarity index 100% rename from web/framework-1.1.17/gii/assets/css/ie.css rename to web/framework/gii/assets/css/ie.css diff --git a/web/framework-1.1.17/gii/assets/css/main.css b/web/framework/gii/assets/css/main.css similarity index 100% rename from web/framework-1.1.17/gii/assets/css/main.css rename to web/framework/gii/assets/css/main.css diff --git a/web/framework-1.1.17/gii/assets/css/print.css b/web/framework/gii/assets/css/print.css similarity index 100% rename from web/framework-1.1.17/gii/assets/css/print.css rename to web/framework/gii/assets/css/print.css diff --git a/web/framework-1.1.17/gii/assets/css/screen.css b/web/framework/gii/assets/css/screen.css similarity index 100% rename from web/framework-1.1.17/gii/assets/css/screen.css rename to web/framework/gii/assets/css/screen.css diff --git a/web/framework-1.1.17/gii/assets/images/logo.png b/web/framework/gii/assets/images/logo.png similarity index 100% rename from web/framework-1.1.17/gii/assets/images/logo.png rename to web/framework/gii/assets/images/logo.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/blank.gif b/web/framework/gii/assets/js/fancybox/blank.gif similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/blank.gif rename to web/framework/gii/assets/js/fancybox/blank.gif diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_close.png b/web/framework/gii/assets/js/fancybox/fancy_close.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_close.png rename to web/framework/gii/assets/js/fancybox/fancy_close.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_loading.png b/web/framework/gii/assets/js/fancybox/fancy_loading.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_loading.png rename to web/framework/gii/assets/js/fancybox/fancy_loading.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_nav_left.png b/web/framework/gii/assets/js/fancybox/fancy_nav_left.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_nav_left.png rename to web/framework/gii/assets/js/fancybox/fancy_nav_left.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_nav_right.png b/web/framework/gii/assets/js/fancybox/fancy_nav_right.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_nav_right.png rename to web/framework/gii/assets/js/fancybox/fancy_nav_right.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_e.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_e.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_e.png rename to web/framework/gii/assets/js/fancybox/fancy_shadow_e.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_n.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_n.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_n.png rename to web/framework/gii/assets/js/fancybox/fancy_shadow_n.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_ne.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_ne.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_ne.png rename to web/framework/gii/assets/js/fancybox/fancy_shadow_ne.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_nw.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_nw.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_nw.png rename to web/framework/gii/assets/js/fancybox/fancy_shadow_nw.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_s.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_s.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_s.png rename to web/framework/gii/assets/js/fancybox/fancy_shadow_s.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_se.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_se.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_se.png rename to web/framework/gii/assets/js/fancybox/fancy_shadow_se.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_sw.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_sw.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_sw.png rename to web/framework/gii/assets/js/fancybox/fancy_shadow_sw.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_w.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_w.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_w.png rename to web/framework/gii/assets/js/fancybox/fancy_shadow_w.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_left.png b/web/framework/gii/assets/js/fancybox/fancy_title_left.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_left.png rename to web/framework/gii/assets/js/fancybox/fancy_title_left.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_main.png b/web/framework/gii/assets/js/fancybox/fancy_title_main.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_main.png rename to web/framework/gii/assets/js/fancybox/fancy_title_main.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_over.png b/web/framework/gii/assets/js/fancybox/fancy_title_over.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_over.png rename to web/framework/gii/assets/js/fancybox/fancy_title_over.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_right.png b/web/framework/gii/assets/js/fancybox/fancy_title_right.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_right.png rename to web/framework/gii/assets/js/fancybox/fancy_title_right.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancybox-x.png b/web/framework/gii/assets/js/fancybox/fancybox-x.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancybox-x.png rename to web/framework/gii/assets/js/fancybox/fancybox-x.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancybox-y.png b/web/framework/gii/assets/js/fancybox/fancybox-y.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancybox-y.png rename to web/framework/gii/assets/js/fancybox/fancybox-y.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancybox.png b/web/framework/gii/assets/js/fancybox/fancybox.png similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/fancybox.png rename to web/framework/gii/assets/js/fancybox/fancybox.png diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/jquery.fancybox-1.3.1.css b/web/framework/gii/assets/js/fancybox/jquery.fancybox-1.3.1.css similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/jquery.fancybox-1.3.1.css rename to web/framework/gii/assets/js/fancybox/jquery.fancybox-1.3.1.css diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/jquery.fancybox-1.3.1.pack.js b/web/framework/gii/assets/js/fancybox/jquery.fancybox-1.3.1.pack.js similarity index 100% rename from web/framework-1.1.17/gii/assets/js/fancybox/jquery.fancybox-1.3.1.pack.js rename to web/framework/gii/assets/js/fancybox/jquery.fancybox-1.3.1.pack.js diff --git a/web/framework-1.1.17/gii/assets/js/main.js b/web/framework/gii/assets/js/main.js similarity index 100% rename from web/framework-1.1.17/gii/assets/js/main.js rename to web/framework/gii/assets/js/main.js diff --git a/web/framework-1.1.17/gii/assets/js/tooltip.js b/web/framework/gii/assets/js/tooltip.js similarity index 100% rename from web/framework-1.1.17/gii/assets/js/tooltip.js rename to web/framework/gii/assets/js/tooltip.js diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff.php b/web/framework/gii/components/Pear/Text/Diff.php similarity index 95% rename from web/framework-1.1.17/gii/components/Pear/Text/Diff.php rename to web/framework/gii/components/Pear/Text/Diff.php index 4b30968f9..eb0079a73 100644 --- a/web/framework-1.1.17/gii/components/Pear/Text/Diff.php +++ b/web/framework/gii/components/Pear/Text/Diff.php @@ -6,10 +6,10 @@ * The original PHP version of this code was written by Geoffrey T. Dairiki * , and is used/adapted with his permission. * - * $Horde: framework/Text_Diff/Diff.php,v 1.11.2.11 2008/02/24 10:57:46 jan Exp $ + * $Horde: framework/Text_Diff/Diff.php,v 1.11.2.12 2009/01/06 15:23:41 jan Exp $ * * Copyright 2004 Geoffrey T. Dairiki - * Copyright 2004-2008 The Horde Project (http://www.horde.org/) + * Copyright 2004-2009 The Horde Project (http://www.horde.org/) * * See the enclosed file COPYING for license information (LGPL). If you did * not receive this file, see http://opensource.org/licenses/lgpl-license.php. @@ -35,7 +35,7 @@ class Text_Diff { * Normally an array of two arrays, each * containing the lines from a file. */ - function Text_Diff($engine, $params) + function __construct($engine, $params) { // Backward compatibility workaround. if (!is_string($engine)) { @@ -307,13 +307,13 @@ class Text_MappedDiff extends Text_Diff { * @param array $mapped_to_lines This array should have the same number * of elements as $to_lines. */ - function Text_MappedDiff($from_lines, $to_lines, + function __construct($from_lines, $to_lines, $mapped_from_lines, $mapped_to_lines) { assert(count($from_lines) == count($mapped_from_lines)); assert(count($to_lines) == count($mapped_to_lines)); - parent::Text_Diff($mapped_from_lines, $mapped_to_lines); + parent::__construct($mapped_from_lines, $mapped_to_lines); $xi = $yi = 0; for ($i = 0; $i < count($this->_edits); $i++) { @@ -369,7 +369,7 @@ function nfinal() */ class Text_Diff_Op_copy extends Text_Diff_Op { - function Text_Diff_Op_copy($orig, $final = false) + function __construct($orig, $final = false) { if (!is_array($final)) { $final = $orig; @@ -394,7 +394,7 @@ function &reverse() */ class Text_Diff_Op_delete extends Text_Diff_Op { - function Text_Diff_Op_delete($lines) + function __construct($lines) { $this->orig = $lines; $this->final = false; @@ -416,7 +416,7 @@ function &reverse() */ class Text_Diff_Op_add extends Text_Diff_Op { - function Text_Diff_Op_add($lines) + function __construct($lines) { $this->final = $lines; $this->orig = false; @@ -438,7 +438,7 @@ function &reverse() */ class Text_Diff_Op_change extends Text_Diff_Op { - function Text_Diff_Op_change($orig, $final) + function __construct($orig, $final) { $this->orig = $orig; $this->final = $final; diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/native.php b/web/framework/gii/components/Pear/Text/Diff/Engine/native.php similarity index 99% rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/native.php rename to web/framework/gii/components/Pear/Text/Diff/Engine/native.php index 410f84995..86240e598 100644 --- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/native.php +++ b/web/framework/gii/components/Pear/Text/Diff/Engine/native.php @@ -18,9 +18,9 @@ * Geoffrey T. Dairiki . The original PHP version of this * code was written by him, and is used/adapted with his permission. * - * $Horde: framework/Text_Diff/Diff/Engine/native.php,v 1.7.2.4 2008/01/04 10:38:10 jan Exp $ + * $Horde: framework/Text_Diff/Diff/Engine/native.php,v 1.7.2.5 2009/01/06 15:23:41 jan Exp $ * - * Copyright 2004-2008 The Horde Project (http://www.horde.org/) + * Copyright 2004-2009 The Horde Project (http://www.horde.org/) * * See the enclosed file COPYING for license information (LGPL). If you did * not receive this file, see http://opensource.org/licenses/lgpl-license.php. diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/shell.php b/web/framework/gii/components/Pear/Text/Diff/Engine/shell.php similarity index 93% rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/shell.php rename to web/framework/gii/components/Pear/Text/Diff/Engine/shell.php index f1aaa98f0..7f858cbff 100644 --- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/shell.php +++ b/web/framework/gii/components/Pear/Text/Diff/Engine/shell.php @@ -5,9 +5,9 @@ * This class uses the Unix `diff` program via shell_exec to compute the * differences between the two input arrays. * - * $Horde: framework/Text_Diff/Diff/Engine/shell.php,v 1.6.2.3 2008/01/04 10:37:27 jan Exp $ + * $Horde: framework/Text_Diff/Diff/Engine/shell.php,v 1.6.2.4 2009/01/06 15:23:41 jan Exp $ * - * Copyright 2007-2008 The Horde Project (http://www.horde.org/) + * Copyright 2007-2009 The Horde Project (http://www.horde.org/) * * See the enclosed file COPYING for license information (LGPL). If you did * not receive this file, see http://opensource.org/licenses/lgpl-license.php. @@ -138,8 +138,10 @@ function diff($from_lines, $to_lines) * @access private * * @param array &$text_lines Either $from_lines or $to_lines - * @param integer &$line_no Current line number - * @param integer $end Optional end line, when we want to chop more than one line. + * @param int &$line_no Current line number + * @param int $end Optional end line, when we want to chop more + * than one line. + * * @return array The chopped lines */ function _getLines(&$text_lines, &$line_no, $end = false) diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/string.php b/web/framework/gii/components/Pear/Text/Diff/Engine/string.php similarity index 93% rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/string.php rename to web/framework/gii/components/Pear/Text/Diff/Engine/string.php index 4b29daafe..9352e60d6 100644 --- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/string.php +++ b/web/framework/gii/components/Pear/Text/Diff/Engine/string.php @@ -10,10 +10,10 @@ * echo $renderer->render($diff); * * - * $Horde: framework/Text_Diff/Diff/Engine/string.php,v 1.5.2.5 2008/09/10 08:31:58 jan Exp $ + * $Horde: framework/Text_Diff/Diff/Engine/string.php,v 1.5.2.7 2009/07/24 13:04:43 jan Exp $ * * Copyright 2005 Örjan Persson - * Copyright 2005-2008 The Horde Project (http://www.horde.org/) + * Copyright 2005-2009 The Horde Project (http://www.horde.org/) * * See the enclosed file COPYING for license information (LGPL). If you did * not receive this file, see http://opensource.org/licenses/lgpl-license.php. @@ -39,6 +39,19 @@ class Text_Diff_Engine_string { */ function diff($diff, $mode = 'autodetect') { + // Detect line breaks. + $lnbr = "\n"; + if (strpos($diff, "\r\n") !== false) { + $lnbr = "\r\n"; + } elseif (strpos($diff, "\r") !== false) { + $lnbr = "\r"; + } + + // Make sure we have a line break at the EOF. + if (substr($diff, -strlen($lnbr)) != $lnbr) { + $diff .= $lnbr; + } + if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') { return PEAR::raiseError('Type of diff is unsupported'); } @@ -56,7 +69,7 @@ function diff($diff, $mode = 'autodetect') } // Split by new line and remove the diff header, if there is one. - $diff = explode("\n", $diff); + $diff = explode($lnbr, $diff); if (($mode == 'context' && strpos($diff[0], '***') === 0) || ($mode == 'unified' && strpos($diff[0], '---') === 0)) { array_shift($diff); diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/xdiff.php b/web/framework/gii/components/Pear/Text/Diff/Engine/xdiff.php similarity index 89% rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/xdiff.php rename to web/framework/gii/components/Pear/Text/Diff/Engine/xdiff.php index 681ea4cf8..da8f174fb 100644 --- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/xdiff.php +++ b/web/framework/gii/components/Pear/Text/Diff/Engine/xdiff.php @@ -5,9 +5,9 @@ * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff) * to compute the differences between the two input arrays. * - * $Horde: framework/Text_Diff/Diff/Engine/xdiff.php,v 1.4.2.3 2008/01/04 10:37:27 jan Exp $ + * $Horde: framework/Text_Diff/Diff/Engine/xdiff.php,v 1.4.2.5 2009/07/24 13:06:24 jan Exp $ * - * Copyright 2004-2008 The Horde Project (http://www.horde.org/) + * Copyright 2004-2009 The Horde Project (http://www.horde.org/) * * See the enclosed file COPYING for license information (LGPL). If you did * not receive this file, see http://opensource.org/licenses/lgpl-license.php. @@ -42,6 +42,9 @@ function diff($from_lines, $to_lines) * valid, albeit a little less descriptive and efficient. */ $edits = array(); foreach ($diff as $line) { + if (!strlen($line)) { + continue; + } switch ($line[0]) { case ' ': $edits[] = new Text_Diff_Op_copy(array(substr($line, 1))); diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Mapped.php b/web/framework/gii/components/Pear/Text/Diff/Mapped.php similarity index 86% rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Mapped.php rename to web/framework/gii/components/Pear/Text/Diff/Mapped.php index 7f671844e..e4a3e013b 100644 --- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Mapped.php +++ b/web/framework/gii/components/Pear/Text/Diff/Mapped.php @@ -1,8 +1,8 @@ $value) { $v = '_' . $param; diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/context.php b/web/framework/gii/components/Pear/Text/Diff/Renderer/context.php similarity index 94% rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/context.php rename to web/framework/gii/components/Pear/Text/Diff/Renderer/context.php index 79775006a..af538015f 100644 --- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/context.php +++ b/web/framework/gii/components/Pear/Text/Diff/Renderer/context.php @@ -4,9 +4,9 @@ * * This class renders the diff in classic "context diff" format. * - * $Horde: framework/Text_Diff/Diff/Renderer/context.php,v 1.3.2.3 2008/01/04 10:37:27 jan Exp $ + * $Horde: framework/Text_Diff/Diff/Renderer/context.php,v 1.3.2.4 2009/01/06 15:23:42 jan Exp $ * - * Copyright 2004-2008 The Horde Project (http://www.horde.org/) + * Copyright 2004-2009 The Horde Project (http://www.horde.org/) * * See the enclosed file COPYING for license information (LGPL). If you did * not receive this file, see http://opensource.org/licenses/lgpl-license.php. diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/inline.php b/web/framework/gii/components/Pear/Text/Diff/Renderer/inline.php similarity index 90% rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/inline.php rename to web/framework/gii/components/Pear/Text/Diff/Renderer/inline.php index 7f4e5ef2c..5dd20d2f3 100644 --- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/inline.php +++ b/web/framework/gii/components/Pear/Text/Diff/Renderer/inline.php @@ -2,9 +2,9 @@ /** * "Inline" diff renderer. * - * $Horde: framework/Text_Diff/Diff/Renderer/inline.php,v 1.4.10.14 2008/01/04 10:37:27 jan Exp $ + * $Horde: framework/Text_Diff/Diff/Renderer/inline.php,v 1.4.10.16 2009/07/24 13:25:29 jan Exp $ * - * Copyright 2004-2008 The Horde Project (http://www.horde.org/) + * Copyright 2004-2009 The Horde Project (http://www.horde.org/) * * See the enclosed file COPYING for license information (LGPL). If you did * not receive this file, see http://opensource.org/licenses/lgpl-license.php. @@ -131,12 +131,14 @@ function _changed($orig, $final) /* We want to split on word boundaries, but we need to * preserve whitespace as well. Therefore we split on words, * but include all blocks of whitespace in the wordlist. */ - $diff = new Text_Diff($this->_splitOnWords($text1, $nl), - $this->_splitOnWords($text2, $nl)); + $diff = new Text_Diff('native', + array($this->_splitOnWords($text1, $nl), + $this->_splitOnWords($text2, $nl))); /* Get the diff in inline format. */ - $renderer = new Text_Diff_Renderer_inline(array_merge($this->getParams(), - array('split_level' => 'words'))); + $renderer = new Text_Diff_Renderer_inline + (array_merge($this->getParams(), + array('split_level' => 'words'))); /* Run the diff and get the output. */ return str_replace($nl, "\n", $renderer->render($diff)) . "\n"; diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/unified.php b/web/framework/gii/components/Pear/Text/Diff/Renderer/unified.php similarity index 93% rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/unified.php rename to web/framework/gii/components/Pear/Text/Diff/Renderer/unified.php index 943d519ac..f990f7295 100644 --- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/unified.php +++ b/web/framework/gii/components/Pear/Text/Diff/Renderer/unified.php @@ -4,9 +4,9 @@ * * This class renders the diff in classic "unified diff" format. * - * $Horde: framework/Text_Diff/Diff/Renderer/unified.php,v 1.3.10.6 2008/01/04 10:37:27 jan Exp $ + * $Horde: framework/Text_Diff/Diff/Renderer/unified.php,v 1.3.10.7 2009/01/06 15:23:42 jan Exp $ * - * Copyright 2004-2008 The Horde Project (http://www.horde.org/) + * Copyright 2004-2009 The Horde Project (http://www.horde.org/) * * See the enclosed file COPYING for license information (LGPL). If you did * not receive this file, see http://opensource.org/licenses/lgpl-license.php. diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/ThreeWay.php b/web/framework/gii/components/Pear/Text/Diff/ThreeWay.php similarity index 94% rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/ThreeWay.php rename to web/framework/gii/components/Pear/Text/Diff/ThreeWay.php index 4e4b939d0..a24757417 100644 --- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/ThreeWay.php +++ b/web/framework/gii/components/Pear/Text/Diff/ThreeWay.php @@ -2,9 +2,9 @@ /** * A class for computing three way diffs. * - * $Horde: framework/Text_Diff/Diff/ThreeWay.php,v 1.3.2.3 2008/01/04 10:37:27 jan Exp $ + * $Horde: framework/Text_Diff/Diff/ThreeWay.php,v 1.3.2.4 2009/01/06 15:23:41 jan Exp $ * - * Copyright 2007-2008 The Horde Project (http://www.horde.org/) + * Copyright 2007-2009 The Horde Project (http://www.horde.org/) * * See the enclosed file COPYING for license information (LGPL). If you did * not receive this file, see http://opensource.org/licenses/lgpl-license.php. @@ -38,7 +38,7 @@ class Text_Diff_ThreeWay extends Text_Diff { * @param array $final1 The first version to compare to. * @param array $final2 The second version to compare to. */ - function Text_Diff_ThreeWay($orig, $final1, $final2) + function __construct($orig, $final1, $final2) { if (extension_loaded('xdiff')) { $engine = new Text_Diff_Engine_xdiff(); @@ -155,7 +155,7 @@ function _diff3($edits1, $edits2) */ class Text_Diff_ThreeWay_Op { - function Text_Diff_ThreeWay_Op($orig = false, $final1 = false, $final2 = false) + function __construct($orig = false, $final1 = false, $final2 = false) { $this->orig = $orig ? $orig : array(); $this->final1 = $final1 ? $final1 : array(); @@ -194,7 +194,7 @@ function isConflict() */ class Text_Diff_ThreeWay_Op_copy extends Text_Diff_ThreeWay_Op { - function Text_Diff_ThreeWay_Op_Copy($lines = false) + function __construct($lines = false) { $this->orig = $lines ? $lines : array(); $this->final1 = &$this->orig; @@ -221,7 +221,7 @@ function isConflict() */ class Text_Diff_ThreeWay_BlockBuilder { - function Text_Diff_ThreeWay_BlockBuilder() + function __construct() { $this->_init(); } diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff3.php b/web/framework/gii/components/Pear/Text/Diff3.php similarity index 95% rename from web/framework-1.1.17/gii/components/Pear/Text/Diff3.php rename to web/framework/gii/components/Pear/Text/Diff3.php index 2c2837070..fa6eb0be8 100644 --- a/web/framework-1.1.17/gii/components/Pear/Text/Diff3.php +++ b/web/framework/gii/components/Pear/Text/Diff3.php @@ -2,9 +2,9 @@ /** * A class for computing three way diffs. * - * $Horde: framework/Text_Diff/Diff3.php,v 1.2.10.6 2008/01/04 10:37:26 jan Exp $ + * $Horde: framework/Text_Diff/Diff3.php,v 1.2.10.7 2009/01/06 15:23:41 jan Exp $ * - * Copyright 2007-2008 The Horde Project (http://www.horde.org/) + * Copyright 2007-2009 The Horde Project (http://www.horde.org/) * * See the enclosed file COPYING for license information (LGPL). If you did * not receive this file, see http://opensource.org/licenses/lgpl-license.php. @@ -38,7 +38,7 @@ class Text_Diff3 extends Text_Diff { * @param array $final1 The first version to compare to. * @param array $final2 The second version to compare to. */ - function Text_Diff3($orig, $final1, $final2) + function __construct($orig, $final1, $final2) { if (extension_loaded('xdiff')) { $engine = new Text_Diff_Engine_xdiff(); @@ -155,7 +155,7 @@ function _diff3($edits1, $edits2) */ class Text_Diff3_Op { - function Text_Diff3_Op($orig = false, $final1 = false, $final2 = false) + function __construct($orig = false, $final1 = false, $final2 = false) { $this->orig = $orig ? $orig : array(); $this->final1 = $final1 ? $final1 : array(); @@ -221,7 +221,7 @@ function isConflict() */ class Text_Diff3_BlockBuilder { - function Text_Diff3_BlockBuilder() + function __construct() { $this->_init(); } diff --git a/web/framework-1.1.17/gii/components/TextDiff.php b/web/framework/gii/components/TextDiff.php similarity index 100% rename from web/framework-1.1.17/gii/components/TextDiff.php rename to web/framework/gii/components/TextDiff.php diff --git a/web/framework-1.1.17/gii/components/UserIdentity.php b/web/framework/gii/components/UserIdentity.php similarity index 96% rename from web/framework-1.1.17/gii/components/UserIdentity.php rename to web/framework/gii/components/UserIdentity.php index 81d6aa129..94798af0e 100644 --- a/web/framework-1.1.17/gii/components/UserIdentity.php +++ b/web/framework/gii/components/UserIdentity.php @@ -5,6 +5,7 @@ class UserIdentity extends CUserIdentity /** * Authenticates a user. * @return boolean whether authentication succeeds. + * @throws CException */ public function authenticate() { diff --git a/web/framework-1.1.17/gii/controllers/DefaultController.php b/web/framework/gii/controllers/DefaultController.php similarity index 100% rename from web/framework-1.1.17/gii/controllers/DefaultController.php rename to web/framework/gii/controllers/DefaultController.php diff --git a/web/framework-1.1.17/gii/generators/controller/ControllerCode.php b/web/framework/gii/generators/controller/ControllerCode.php similarity index 100% rename from web/framework-1.1.17/gii/generators/controller/ControllerCode.php rename to web/framework/gii/generators/controller/ControllerCode.php diff --git a/web/framework-1.1.17/gii/generators/controller/ControllerGenerator.php b/web/framework/gii/generators/controller/ControllerGenerator.php similarity index 100% rename from web/framework-1.1.17/gii/generators/controller/ControllerGenerator.php rename to web/framework/gii/generators/controller/ControllerGenerator.php diff --git a/web/framework-1.1.17/gii/generators/controller/templates/default/controller.php b/web/framework/gii/generators/controller/templates/default/controller.php similarity index 100% rename from web/framework-1.1.17/gii/generators/controller/templates/default/controller.php rename to web/framework/gii/generators/controller/templates/default/controller.php diff --git a/web/framework-1.1.17/gii/generators/controller/templates/default/view.php b/web/framework/gii/generators/controller/templates/default/view.php similarity index 100% rename from web/framework-1.1.17/gii/generators/controller/templates/default/view.php rename to web/framework/gii/generators/controller/templates/default/view.php diff --git a/web/framework-1.1.17/gii/generators/controller/views/index.php b/web/framework/gii/generators/controller/views/index.php similarity index 100% rename from web/framework-1.1.17/gii/generators/controller/views/index.php rename to web/framework/gii/generators/controller/views/index.php diff --git a/web/framework-1.1.17/gii/generators/crud/CrudCode.php b/web/framework/gii/generators/crud/CrudCode.php similarity index 100% rename from web/framework-1.1.17/gii/generators/crud/CrudCode.php rename to web/framework/gii/generators/crud/CrudCode.php diff --git a/web/framework-1.1.17/gii/generators/crud/CrudGenerator.php b/web/framework/gii/generators/crud/CrudGenerator.php similarity index 100% rename from web/framework-1.1.17/gii/generators/crud/CrudGenerator.php rename to web/framework/gii/generators/crud/CrudGenerator.php diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/_form.php b/web/framework/gii/generators/crud/templates/default/_form.php similarity index 100% rename from web/framework-1.1.17/gii/generators/crud/templates/default/_form.php rename to web/framework/gii/generators/crud/templates/default/_form.php diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/_search.php b/web/framework/gii/generators/crud/templates/default/_search.php similarity index 100% rename from web/framework-1.1.17/gii/generators/crud/templates/default/_search.php rename to web/framework/gii/generators/crud/templates/default/_search.php diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/_view.php b/web/framework/gii/generators/crud/templates/default/_view.php similarity index 100% rename from web/framework-1.1.17/gii/generators/crud/templates/default/_view.php rename to web/framework/gii/generators/crud/templates/default/_view.php diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/admin.php b/web/framework/gii/generators/crud/templates/default/admin.php similarity index 100% rename from web/framework-1.1.17/gii/generators/crud/templates/default/admin.php rename to web/framework/gii/generators/crud/templates/default/admin.php diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/controller.php b/web/framework/gii/generators/crud/templates/default/controller.php similarity index 100% rename from web/framework-1.1.17/gii/generators/crud/templates/default/controller.php rename to web/framework/gii/generators/crud/templates/default/controller.php diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/create.php b/web/framework/gii/generators/crud/templates/default/create.php similarity index 100% rename from web/framework-1.1.17/gii/generators/crud/templates/default/create.php rename to web/framework/gii/generators/crud/templates/default/create.php diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/index.php b/web/framework/gii/generators/crud/templates/default/index.php similarity index 100% rename from web/framework-1.1.17/gii/generators/crud/templates/default/index.php rename to web/framework/gii/generators/crud/templates/default/index.php diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/update.php b/web/framework/gii/generators/crud/templates/default/update.php similarity index 100% rename from web/framework-1.1.17/gii/generators/crud/templates/default/update.php rename to web/framework/gii/generators/crud/templates/default/update.php diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/view.php b/web/framework/gii/generators/crud/templates/default/view.php similarity index 100% rename from web/framework-1.1.17/gii/generators/crud/templates/default/view.php rename to web/framework/gii/generators/crud/templates/default/view.php diff --git a/web/framework-1.1.17/gii/generators/crud/views/index.php b/web/framework/gii/generators/crud/views/index.php similarity index 100% rename from web/framework-1.1.17/gii/generators/crud/views/index.php rename to web/framework/gii/generators/crud/views/index.php diff --git a/web/framework-1.1.17/gii/generators/form/FormCode.php b/web/framework/gii/generators/form/FormCode.php similarity index 100% rename from web/framework-1.1.17/gii/generators/form/FormCode.php rename to web/framework/gii/generators/form/FormCode.php diff --git a/web/framework-1.1.17/gii/generators/form/FormGenerator.php b/web/framework/gii/generators/form/FormGenerator.php similarity index 100% rename from web/framework-1.1.17/gii/generators/form/FormGenerator.php rename to web/framework/gii/generators/form/FormGenerator.php diff --git a/web/framework-1.1.17/gii/generators/form/templates/default/action.php b/web/framework/gii/generators/form/templates/default/action.php similarity index 100% rename from web/framework-1.1.17/gii/generators/form/templates/default/action.php rename to web/framework/gii/generators/form/templates/default/action.php diff --git a/web/framework-1.1.17/gii/generators/form/templates/default/form.php b/web/framework/gii/generators/form/templates/default/form.php similarity index 100% rename from web/framework-1.1.17/gii/generators/form/templates/default/form.php rename to web/framework/gii/generators/form/templates/default/form.php diff --git a/web/framework-1.1.17/gii/generators/form/views/index.php b/web/framework/gii/generators/form/views/index.php similarity index 100% rename from web/framework-1.1.17/gii/generators/form/views/index.php rename to web/framework/gii/generators/form/views/index.php diff --git a/web/framework-1.1.17/gii/generators/model/ModelCode.php b/web/framework/gii/generators/model/ModelCode.php similarity index 100% rename from web/framework-1.1.17/gii/generators/model/ModelCode.php rename to web/framework/gii/generators/model/ModelCode.php diff --git a/web/framework-1.1.17/gii/generators/model/ModelGenerator.php b/web/framework/gii/generators/model/ModelGenerator.php similarity index 100% rename from web/framework-1.1.17/gii/generators/model/ModelGenerator.php rename to web/framework/gii/generators/model/ModelGenerator.php diff --git a/web/framework-1.1.17/gii/generators/model/templates/default/model.php b/web/framework/gii/generators/model/templates/default/model.php similarity index 100% rename from web/framework-1.1.17/gii/generators/model/templates/default/model.php rename to web/framework/gii/generators/model/templates/default/model.php diff --git a/web/framework-1.1.17/gii/generators/model/views/index.php b/web/framework/gii/generators/model/views/index.php similarity index 100% rename from web/framework-1.1.17/gii/generators/model/views/index.php rename to web/framework/gii/generators/model/views/index.php diff --git a/web/framework-1.1.17/gii/generators/module/ModuleCode.php b/web/framework/gii/generators/module/ModuleCode.php similarity index 100% rename from web/framework-1.1.17/gii/generators/module/ModuleCode.php rename to web/framework/gii/generators/module/ModuleCode.php diff --git a/web/framework-1.1.17/gii/generators/module/ModuleGenerator.php b/web/framework/gii/generators/module/ModuleGenerator.php similarity index 100% rename from web/framework-1.1.17/gii/generators/module/ModuleGenerator.php rename to web/framework/gii/generators/module/ModuleGenerator.php diff --git a/web/framework-1.1.17/gii/generators/module/templates/default/components/.gitkeep b/web/framework/gii/generators/module/templates/default/components/.gitkeep similarity index 100% rename from web/framework-1.1.17/gii/generators/module/templates/default/components/.gitkeep rename to web/framework/gii/generators/module/templates/default/components/.gitkeep diff --git a/web/framework-1.1.17/gii/generators/module/templates/default/controllers/DefaultController.php b/web/framework/gii/generators/module/templates/default/controllers/DefaultController.php similarity index 100% rename from web/framework-1.1.17/gii/generators/module/templates/default/controllers/DefaultController.php rename to web/framework/gii/generators/module/templates/default/controllers/DefaultController.php diff --git a/web/framework-1.1.17/gii/generators/module/templates/default/messages/.gitkeep b/web/framework/gii/generators/module/templates/default/messages/.gitkeep similarity index 100% rename from web/framework-1.1.17/gii/generators/module/templates/default/messages/.gitkeep rename to web/framework/gii/generators/module/templates/default/messages/.gitkeep diff --git a/web/framework-1.1.17/gii/generators/module/templates/default/models/.gitkeep b/web/framework/gii/generators/module/templates/default/models/.gitkeep similarity index 100% rename from web/framework-1.1.17/gii/generators/module/templates/default/models/.gitkeep rename to web/framework/gii/generators/module/templates/default/models/.gitkeep diff --git a/web/framework-1.1.17/gii/generators/module/templates/default/module.php b/web/framework/gii/generators/module/templates/default/module.php similarity index 100% rename from web/framework-1.1.17/gii/generators/module/templates/default/module.php rename to web/framework/gii/generators/module/templates/default/module.php diff --git a/web/framework-1.1.17/gii/generators/module/templates/default/views/default/index.php b/web/framework/gii/generators/module/templates/default/views/default/index.php similarity index 100% rename from web/framework-1.1.17/gii/generators/module/templates/default/views/default/index.php rename to web/framework/gii/generators/module/templates/default/views/default/index.php diff --git a/web/framework-1.1.17/gii/generators/module/templates/default/views/layouts/.gitkeep b/web/framework/gii/generators/module/templates/default/views/layouts/.gitkeep similarity index 100% rename from web/framework-1.1.17/gii/generators/module/templates/default/views/layouts/.gitkeep rename to web/framework/gii/generators/module/templates/default/views/layouts/.gitkeep diff --git a/web/framework-1.1.17/gii/generators/module/views/index.php b/web/framework/gii/generators/module/views/index.php similarity index 100% rename from web/framework-1.1.17/gii/generators/module/views/index.php rename to web/framework/gii/generators/module/views/index.php diff --git a/web/framework-1.1.17/gii/models/LoginForm.php b/web/framework/gii/models/LoginForm.php similarity index 86% rename from web/framework-1.1.17/gii/models/LoginForm.php rename to web/framework/gii/models/LoginForm.php index f4b838c5e..31118abce 100644 --- a/web/framework-1.1.17/gii/models/LoginForm.php +++ b/web/framework/gii/models/LoginForm.php @@ -19,6 +19,8 @@ public function rules() /** * Authenticates the password. * This is the 'authenticate' validator as declared in rules(). + * @param string $attribute the name of the attribute to be validated. + * @param array $params additional parameters passed with rule when being executed. */ public function authenticate($attribute,$params) { diff --git a/web/framework-1.1.17/gii/views/common/code.php b/web/framework/gii/views/common/code.php similarity index 100% rename from web/framework-1.1.17/gii/views/common/code.php rename to web/framework/gii/views/common/code.php diff --git a/web/framework-1.1.17/gii/views/common/diff.php b/web/framework/gii/views/common/diff.php similarity index 100% rename from web/framework-1.1.17/gii/views/common/diff.php rename to web/framework/gii/views/common/diff.php diff --git a/web/framework-1.1.17/gii/views/common/generator.php b/web/framework/gii/views/common/generator.php similarity index 100% rename from web/framework-1.1.17/gii/views/common/generator.php rename to web/framework/gii/views/common/generator.php diff --git a/web/framework-1.1.17/gii/views/default/error.php b/web/framework/gii/views/default/error.php similarity index 100% rename from web/framework-1.1.17/gii/views/default/error.php rename to web/framework/gii/views/default/error.php diff --git a/web/framework-1.1.17/gii/views/default/index.php b/web/framework/gii/views/default/index.php similarity index 100% rename from web/framework-1.1.17/gii/views/default/index.php rename to web/framework/gii/views/default/index.php diff --git a/web/framework-1.1.17/gii/views/default/login.php b/web/framework/gii/views/default/login.php similarity index 100% rename from web/framework-1.1.17/gii/views/default/login.php rename to web/framework/gii/views/default/login.php diff --git a/web/framework-1.1.17/gii/views/layouts/column1.php b/web/framework/gii/views/layouts/column1.php similarity index 100% rename from web/framework-1.1.17/gii/views/layouts/column1.php rename to web/framework/gii/views/layouts/column1.php diff --git a/web/framework-1.1.17/gii/views/layouts/generator.php b/web/framework/gii/views/layouts/generator.php similarity index 100% rename from web/framework-1.1.17/gii/views/layouts/generator.php rename to web/framework/gii/views/layouts/generator.php diff --git a/web/framework-1.1.17/gii/views/layouts/main.php b/web/framework/gii/views/layouts/main.php similarity index 100% rename from web/framework-1.1.17/gii/views/layouts/main.php rename to web/framework/gii/views/layouts/main.php diff --git a/web/framework-1.1.17/i18n/CChoiceFormat.php b/web/framework/i18n/CChoiceFormat.php similarity index 100% rename from web/framework-1.1.17/i18n/CChoiceFormat.php rename to web/framework/i18n/CChoiceFormat.php diff --git a/web/framework-1.1.17/i18n/CDateFormatter.php b/web/framework/i18n/CDateFormatter.php similarity index 100% rename from web/framework-1.1.17/i18n/CDateFormatter.php rename to web/framework/i18n/CDateFormatter.php diff --git a/web/framework-1.1.17/i18n/CDbMessageSource.php b/web/framework/i18n/CDbMessageSource.php similarity index 100% rename from web/framework-1.1.17/i18n/CDbMessageSource.php rename to web/framework/i18n/CDbMessageSource.php diff --git a/web/framework-1.1.17/i18n/CGettextMessageSource.php b/web/framework/i18n/CGettextMessageSource.php similarity index 98% rename from web/framework-1.1.17/i18n/CGettextMessageSource.php rename to web/framework/i18n/CGettextMessageSource.php index 881d0981f..bf1ed878e 100644 --- a/web/framework-1.1.17/i18n/CGettextMessageSource.php +++ b/web/framework/i18n/CGettextMessageSource.php @@ -53,7 +53,7 @@ class CGettextMessageSource extends CMessageSource */ public $useMoFile=true; /** - * @var boolean whether to use Big Endian to read and write MO files. + * @var boolean whether to use Big Endian to read MO files. * Defaults to false. This property is only used when {@link useMoFile} is true. */ public $useBigEndian=false; diff --git a/web/framework-1.1.17/i18n/CLocale.php b/web/framework/i18n/CLocale.php similarity index 100% rename from web/framework-1.1.17/i18n/CLocale.php rename to web/framework/i18n/CLocale.php diff --git a/web/framework-1.1.17/i18n/CMessageSource.php b/web/framework/i18n/CMessageSource.php similarity index 100% rename from web/framework-1.1.17/i18n/CMessageSource.php rename to web/framework/i18n/CMessageSource.php diff --git a/web/framework-1.1.17/i18n/CNumberFormatter.php b/web/framework/i18n/CNumberFormatter.php similarity index 100% rename from web/framework-1.1.17/i18n/CNumberFormatter.php rename to web/framework/i18n/CNumberFormatter.php diff --git a/web/framework-1.1.17/i18n/CPhpMessageSource.php b/web/framework/i18n/CPhpMessageSource.php similarity index 100% rename from web/framework-1.1.17/i18n/CPhpMessageSource.php rename to web/framework/i18n/CPhpMessageSource.php diff --git a/web/framework-1.1.17/i18n/data/README.txt b/web/framework/i18n/data/README.txt similarity index 100% rename from web/framework-1.1.17/i18n/data/README.txt rename to web/framework/i18n/data/README.txt diff --git a/web/framework-1.1.17/i18n/data/aa.php b/web/framework/i18n/data/aa.php similarity index 100% rename from web/framework-1.1.17/i18n/data/aa.php rename to web/framework/i18n/data/aa.php diff --git a/web/framework-1.1.17/i18n/data/aa_dj.php b/web/framework/i18n/data/aa_dj.php similarity index 100% rename from web/framework-1.1.17/i18n/data/aa_dj.php rename to web/framework/i18n/data/aa_dj.php diff --git a/web/framework-1.1.17/i18n/data/aa_er.php b/web/framework/i18n/data/aa_er.php similarity index 100% rename from web/framework-1.1.17/i18n/data/aa_er.php rename to web/framework/i18n/data/aa_er.php diff --git a/web/framework-1.1.17/i18n/data/aa_et.php b/web/framework/i18n/data/aa_et.php similarity index 100% rename from web/framework-1.1.17/i18n/data/aa_et.php rename to web/framework/i18n/data/aa_et.php diff --git a/web/framework-1.1.17/i18n/data/af.php b/web/framework/i18n/data/af.php similarity index 100% rename from web/framework-1.1.17/i18n/data/af.php rename to web/framework/i18n/data/af.php diff --git a/web/framework-1.1.17/i18n/data/af_na.php b/web/framework/i18n/data/af_na.php similarity index 100% rename from web/framework-1.1.17/i18n/data/af_na.php rename to web/framework/i18n/data/af_na.php diff --git a/web/framework-1.1.17/i18n/data/af_za.php b/web/framework/i18n/data/af_za.php similarity index 100% rename from web/framework-1.1.17/i18n/data/af_za.php rename to web/framework/i18n/data/af_za.php diff --git a/web/framework-1.1.17/i18n/data/agq.php b/web/framework/i18n/data/agq.php similarity index 100% rename from web/framework-1.1.17/i18n/data/agq.php rename to web/framework/i18n/data/agq.php diff --git a/web/framework-1.1.17/i18n/data/agq_cm.php b/web/framework/i18n/data/agq_cm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/agq_cm.php rename to web/framework/i18n/data/agq_cm.php diff --git a/web/framework-1.1.17/i18n/data/ak.php b/web/framework/i18n/data/ak.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ak.php rename to web/framework/i18n/data/ak.php diff --git a/web/framework-1.1.17/i18n/data/ak_gh.php b/web/framework/i18n/data/ak_gh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ak_gh.php rename to web/framework/i18n/data/ak_gh.php diff --git a/web/framework-1.1.17/i18n/data/am.php b/web/framework/i18n/data/am.php similarity index 100% rename from web/framework-1.1.17/i18n/data/am.php rename to web/framework/i18n/data/am.php diff --git a/web/framework-1.1.17/i18n/data/am_et.php b/web/framework/i18n/data/am_et.php similarity index 100% rename from web/framework-1.1.17/i18n/data/am_et.php rename to web/framework/i18n/data/am_et.php diff --git a/web/framework-1.1.17/i18n/data/ar.php b/web/framework/i18n/data/ar.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar.php rename to web/framework/i18n/data/ar.php diff --git a/web/framework-1.1.17/i18n/data/ar_001.php b/web/framework/i18n/data/ar_001.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_001.php rename to web/framework/i18n/data/ar_001.php diff --git a/web/framework-1.1.17/i18n/data/ar_ae.php b/web/framework/i18n/data/ar_ae.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_ae.php rename to web/framework/i18n/data/ar_ae.php diff --git a/web/framework-1.1.17/i18n/data/ar_bh.php b/web/framework/i18n/data/ar_bh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_bh.php rename to web/framework/i18n/data/ar_bh.php diff --git a/web/framework-1.1.17/i18n/data/ar_dj.php b/web/framework/i18n/data/ar_dj.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_dj.php rename to web/framework/i18n/data/ar_dj.php diff --git a/web/framework-1.1.17/i18n/data/ar_dz.php b/web/framework/i18n/data/ar_dz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_dz.php rename to web/framework/i18n/data/ar_dz.php diff --git a/web/framework-1.1.17/i18n/data/ar_eg.php b/web/framework/i18n/data/ar_eg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_eg.php rename to web/framework/i18n/data/ar_eg.php diff --git a/web/framework-1.1.17/i18n/data/ar_eh.php b/web/framework/i18n/data/ar_eh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_eh.php rename to web/framework/i18n/data/ar_eh.php diff --git a/web/framework-1.1.17/i18n/data/ar_er.php b/web/framework/i18n/data/ar_er.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_er.php rename to web/framework/i18n/data/ar_er.php diff --git a/web/framework-1.1.17/i18n/data/ar_il.php b/web/framework/i18n/data/ar_il.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_il.php rename to web/framework/i18n/data/ar_il.php diff --git a/web/framework-1.1.17/i18n/data/ar_iq.php b/web/framework/i18n/data/ar_iq.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_iq.php rename to web/framework/i18n/data/ar_iq.php diff --git a/web/framework-1.1.17/i18n/data/ar_jo.php b/web/framework/i18n/data/ar_jo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_jo.php rename to web/framework/i18n/data/ar_jo.php diff --git a/web/framework-1.1.17/i18n/data/ar_km.php b/web/framework/i18n/data/ar_km.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_km.php rename to web/framework/i18n/data/ar_km.php diff --git a/web/framework-1.1.17/i18n/data/ar_kw.php b/web/framework/i18n/data/ar_kw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_kw.php rename to web/framework/i18n/data/ar_kw.php diff --git a/web/framework-1.1.17/i18n/data/ar_lb.php b/web/framework/i18n/data/ar_lb.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_lb.php rename to web/framework/i18n/data/ar_lb.php diff --git a/web/framework-1.1.17/i18n/data/ar_ly.php b/web/framework/i18n/data/ar_ly.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_ly.php rename to web/framework/i18n/data/ar_ly.php diff --git a/web/framework-1.1.17/i18n/data/ar_ma.php b/web/framework/i18n/data/ar_ma.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_ma.php rename to web/framework/i18n/data/ar_ma.php diff --git a/web/framework-1.1.17/i18n/data/ar_mr.php b/web/framework/i18n/data/ar_mr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_mr.php rename to web/framework/i18n/data/ar_mr.php diff --git a/web/framework-1.1.17/i18n/data/ar_om.php b/web/framework/i18n/data/ar_om.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_om.php rename to web/framework/i18n/data/ar_om.php diff --git a/web/framework-1.1.17/i18n/data/ar_ps.php b/web/framework/i18n/data/ar_ps.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_ps.php rename to web/framework/i18n/data/ar_ps.php diff --git a/web/framework-1.1.17/i18n/data/ar_qa.php b/web/framework/i18n/data/ar_qa.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_qa.php rename to web/framework/i18n/data/ar_qa.php diff --git a/web/framework-1.1.17/i18n/data/ar_sa.php b/web/framework/i18n/data/ar_sa.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_sa.php rename to web/framework/i18n/data/ar_sa.php diff --git a/web/framework-1.1.17/i18n/data/ar_sd.php b/web/framework/i18n/data/ar_sd.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_sd.php rename to web/framework/i18n/data/ar_sd.php diff --git a/web/framework-1.1.17/i18n/data/ar_so.php b/web/framework/i18n/data/ar_so.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_so.php rename to web/framework/i18n/data/ar_so.php diff --git a/web/framework-1.1.17/i18n/data/ar_sy.php b/web/framework/i18n/data/ar_sy.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_sy.php rename to web/framework/i18n/data/ar_sy.php diff --git a/web/framework-1.1.17/i18n/data/ar_td.php b/web/framework/i18n/data/ar_td.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_td.php rename to web/framework/i18n/data/ar_td.php diff --git a/web/framework-1.1.17/i18n/data/ar_tn.php b/web/framework/i18n/data/ar_tn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_tn.php rename to web/framework/i18n/data/ar_tn.php diff --git a/web/framework-1.1.17/i18n/data/ar_ye.php b/web/framework/i18n/data/ar_ye.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ar_ye.php rename to web/framework/i18n/data/ar_ye.php diff --git a/web/framework-1.1.17/i18n/data/as.php b/web/framework/i18n/data/as.php similarity index 100% rename from web/framework-1.1.17/i18n/data/as.php rename to web/framework/i18n/data/as.php diff --git a/web/framework-1.1.17/i18n/data/as_in.php b/web/framework/i18n/data/as_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/as_in.php rename to web/framework/i18n/data/as_in.php diff --git a/web/framework-1.1.17/i18n/data/asa.php b/web/framework/i18n/data/asa.php similarity index 100% rename from web/framework-1.1.17/i18n/data/asa.php rename to web/framework/i18n/data/asa.php diff --git a/web/framework-1.1.17/i18n/data/asa_tz.php b/web/framework/i18n/data/asa_tz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/asa_tz.php rename to web/framework/i18n/data/asa_tz.php diff --git a/web/framework-1.1.17/i18n/data/ast.php b/web/framework/i18n/data/ast.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ast.php rename to web/framework/i18n/data/ast.php diff --git a/web/framework-1.1.17/i18n/data/ast_es.php b/web/framework/i18n/data/ast_es.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ast_es.php rename to web/framework/i18n/data/ast_es.php diff --git a/web/framework-1.1.17/i18n/data/az.php b/web/framework/i18n/data/az.php similarity index 100% rename from web/framework-1.1.17/i18n/data/az.php rename to web/framework/i18n/data/az.php diff --git a/web/framework-1.1.17/i18n/data/az_arab.php b/web/framework/i18n/data/az_arab.php similarity index 100% rename from web/framework-1.1.17/i18n/data/az_arab.php rename to web/framework/i18n/data/az_arab.php diff --git a/web/framework-1.1.17/i18n/data/az_arab_ir.php b/web/framework/i18n/data/az_arab_ir.php similarity index 100% rename from web/framework-1.1.17/i18n/data/az_arab_ir.php rename to web/framework/i18n/data/az_arab_ir.php diff --git a/web/framework-1.1.17/i18n/data/az_az.php b/web/framework/i18n/data/az_az.php similarity index 100% rename from web/framework-1.1.17/i18n/data/az_az.php rename to web/framework/i18n/data/az_az.php diff --git a/web/framework-1.1.17/i18n/data/az_cyrl.php b/web/framework/i18n/data/az_cyrl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/az_cyrl.php rename to web/framework/i18n/data/az_cyrl.php diff --git a/web/framework-1.1.17/i18n/data/az_cyrl_az.php b/web/framework/i18n/data/az_cyrl_az.php similarity index 100% rename from web/framework-1.1.17/i18n/data/az_cyrl_az.php rename to web/framework/i18n/data/az_cyrl_az.php diff --git a/web/framework-1.1.17/i18n/data/az_ir.php b/web/framework/i18n/data/az_ir.php similarity index 100% rename from web/framework-1.1.17/i18n/data/az_ir.php rename to web/framework/i18n/data/az_ir.php diff --git a/web/framework-1.1.17/i18n/data/az_latn.php b/web/framework/i18n/data/az_latn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/az_latn.php rename to web/framework/i18n/data/az_latn.php diff --git a/web/framework-1.1.17/i18n/data/az_latn_az.php b/web/framework/i18n/data/az_latn_az.php similarity index 100% rename from web/framework-1.1.17/i18n/data/az_latn_az.php rename to web/framework/i18n/data/az_latn_az.php diff --git a/web/framework-1.1.17/i18n/data/bas.php b/web/framework/i18n/data/bas.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bas.php rename to web/framework/i18n/data/bas.php diff --git a/web/framework-1.1.17/i18n/data/bas_cm.php b/web/framework/i18n/data/bas_cm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bas_cm.php rename to web/framework/i18n/data/bas_cm.php diff --git a/web/framework-1.1.17/i18n/data/be.php b/web/framework/i18n/data/be.php similarity index 100% rename from web/framework-1.1.17/i18n/data/be.php rename to web/framework/i18n/data/be.php diff --git a/web/framework-1.1.17/i18n/data/be_by.php b/web/framework/i18n/data/be_by.php similarity index 100% rename from web/framework-1.1.17/i18n/data/be_by.php rename to web/framework/i18n/data/be_by.php diff --git a/web/framework-1.1.17/i18n/data/bem.php b/web/framework/i18n/data/bem.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bem.php rename to web/framework/i18n/data/bem.php diff --git a/web/framework-1.1.17/i18n/data/bem_zm.php b/web/framework/i18n/data/bem_zm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bem_zm.php rename to web/framework/i18n/data/bem_zm.php diff --git a/web/framework-1.1.17/i18n/data/bez.php b/web/framework/i18n/data/bez.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bez.php rename to web/framework/i18n/data/bez.php diff --git a/web/framework-1.1.17/i18n/data/bez_tz.php b/web/framework/i18n/data/bez_tz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bez_tz.php rename to web/framework/i18n/data/bez_tz.php diff --git a/web/framework-1.1.17/i18n/data/bg.php b/web/framework/i18n/data/bg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bg.php rename to web/framework/i18n/data/bg.php diff --git a/web/framework-1.1.17/i18n/data/bg_bg.php b/web/framework/i18n/data/bg_bg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bg_bg.php rename to web/framework/i18n/data/bg_bg.php diff --git a/web/framework-1.1.17/i18n/data/bm.php b/web/framework/i18n/data/bm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bm.php rename to web/framework/i18n/data/bm.php diff --git a/web/framework-1.1.17/i18n/data/bm_ml.php b/web/framework/i18n/data/bm_ml.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bm_ml.php rename to web/framework/i18n/data/bm_ml.php diff --git a/web/framework-1.1.17/i18n/data/bn.php b/web/framework/i18n/data/bn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bn.php rename to web/framework/i18n/data/bn.php diff --git a/web/framework-1.1.17/i18n/data/bn_bd.php b/web/framework/i18n/data/bn_bd.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bn_bd.php rename to web/framework/i18n/data/bn_bd.php diff --git a/web/framework-1.1.17/i18n/data/bn_in.php b/web/framework/i18n/data/bn_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bn_in.php rename to web/framework/i18n/data/bn_in.php diff --git a/web/framework-1.1.17/i18n/data/bo.php b/web/framework/i18n/data/bo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bo.php rename to web/framework/i18n/data/bo.php diff --git a/web/framework-1.1.17/i18n/data/bo_cn.php b/web/framework/i18n/data/bo_cn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bo_cn.php rename to web/framework/i18n/data/bo_cn.php diff --git a/web/framework-1.1.17/i18n/data/bo_in.php b/web/framework/i18n/data/bo_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bo_in.php rename to web/framework/i18n/data/bo_in.php diff --git a/web/framework-1.1.17/i18n/data/br.php b/web/framework/i18n/data/br.php similarity index 100% rename from web/framework-1.1.17/i18n/data/br.php rename to web/framework/i18n/data/br.php diff --git a/web/framework-1.1.17/i18n/data/br_fr.php b/web/framework/i18n/data/br_fr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/br_fr.php rename to web/framework/i18n/data/br_fr.php diff --git a/web/framework-1.1.17/i18n/data/brx.php b/web/framework/i18n/data/brx.php similarity index 100% rename from web/framework-1.1.17/i18n/data/brx.php rename to web/framework/i18n/data/brx.php diff --git a/web/framework-1.1.17/i18n/data/brx_in.php b/web/framework/i18n/data/brx_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/brx_in.php rename to web/framework/i18n/data/brx_in.php diff --git a/web/framework-1.1.17/i18n/data/bs.php b/web/framework/i18n/data/bs.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bs.php rename to web/framework/i18n/data/bs.php diff --git a/web/framework-1.1.17/i18n/data/bs_ba.php b/web/framework/i18n/data/bs_ba.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bs_ba.php rename to web/framework/i18n/data/bs_ba.php diff --git a/web/framework-1.1.17/i18n/data/bs_cyrl.php b/web/framework/i18n/data/bs_cyrl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bs_cyrl.php rename to web/framework/i18n/data/bs_cyrl.php diff --git a/web/framework-1.1.17/i18n/data/bs_cyrl_ba.php b/web/framework/i18n/data/bs_cyrl_ba.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bs_cyrl_ba.php rename to web/framework/i18n/data/bs_cyrl_ba.php diff --git a/web/framework-1.1.17/i18n/data/bs_latn.php b/web/framework/i18n/data/bs_latn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bs_latn.php rename to web/framework/i18n/data/bs_latn.php diff --git a/web/framework-1.1.17/i18n/data/bs_latn_ba.php b/web/framework/i18n/data/bs_latn_ba.php similarity index 100% rename from web/framework-1.1.17/i18n/data/bs_latn_ba.php rename to web/framework/i18n/data/bs_latn_ba.php diff --git a/web/framework-1.1.17/i18n/data/byn.php b/web/framework/i18n/data/byn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/byn.php rename to web/framework/i18n/data/byn.php diff --git a/web/framework-1.1.17/i18n/data/byn_er.php b/web/framework/i18n/data/byn_er.php similarity index 100% rename from web/framework-1.1.17/i18n/data/byn_er.php rename to web/framework/i18n/data/byn_er.php diff --git a/web/framework-1.1.17/i18n/data/ca.php b/web/framework/i18n/data/ca.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ca.php rename to web/framework/i18n/data/ca.php diff --git a/web/framework-1.1.17/i18n/data/ca_ad.php b/web/framework/i18n/data/ca_ad.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ca_ad.php rename to web/framework/i18n/data/ca_ad.php diff --git a/web/framework-1.1.17/i18n/data/ca_es.php b/web/framework/i18n/data/ca_es.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ca_es.php rename to web/framework/i18n/data/ca_es.php diff --git a/web/framework-1.1.17/i18n/data/cch.php b/web/framework/i18n/data/cch.php similarity index 100% rename from web/framework-1.1.17/i18n/data/cch.php rename to web/framework/i18n/data/cch.php diff --git a/web/framework-1.1.17/i18n/data/cch_ng.php b/web/framework/i18n/data/cch_ng.php similarity index 100% rename from web/framework-1.1.17/i18n/data/cch_ng.php rename to web/framework/i18n/data/cch_ng.php diff --git a/web/framework-1.1.17/i18n/data/cgg.php b/web/framework/i18n/data/cgg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/cgg.php rename to web/framework/i18n/data/cgg.php diff --git a/web/framework-1.1.17/i18n/data/cgg_ug.php b/web/framework/i18n/data/cgg_ug.php similarity index 100% rename from web/framework-1.1.17/i18n/data/cgg_ug.php rename to web/framework/i18n/data/cgg_ug.php diff --git a/web/framework-1.1.17/i18n/data/chr.php b/web/framework/i18n/data/chr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/chr.php rename to web/framework/i18n/data/chr.php diff --git a/web/framework-1.1.17/i18n/data/chr_us.php b/web/framework/i18n/data/chr_us.php similarity index 100% rename from web/framework-1.1.17/i18n/data/chr_us.php rename to web/framework/i18n/data/chr_us.php diff --git a/web/framework-1.1.17/i18n/data/cs.php b/web/framework/i18n/data/cs.php similarity index 100% rename from web/framework-1.1.17/i18n/data/cs.php rename to web/framework/i18n/data/cs.php diff --git a/web/framework-1.1.17/i18n/data/cs_cz.php b/web/framework/i18n/data/cs_cz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/cs_cz.php rename to web/framework/i18n/data/cs_cz.php diff --git a/web/framework-1.1.17/i18n/data/cy.php b/web/framework/i18n/data/cy.php similarity index 100% rename from web/framework-1.1.17/i18n/data/cy.php rename to web/framework/i18n/data/cy.php diff --git a/web/framework-1.1.17/i18n/data/cy_gb.php b/web/framework/i18n/data/cy_gb.php similarity index 100% rename from web/framework-1.1.17/i18n/data/cy_gb.php rename to web/framework/i18n/data/cy_gb.php diff --git a/web/framework-1.1.17/i18n/data/da.php b/web/framework/i18n/data/da.php similarity index 100% rename from web/framework-1.1.17/i18n/data/da.php rename to web/framework/i18n/data/da.php diff --git a/web/framework-1.1.17/i18n/data/da_dk.php b/web/framework/i18n/data/da_dk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/da_dk.php rename to web/framework/i18n/data/da_dk.php diff --git a/web/framework-1.1.17/i18n/data/dav.php b/web/framework/i18n/data/dav.php similarity index 100% rename from web/framework-1.1.17/i18n/data/dav.php rename to web/framework/i18n/data/dav.php diff --git a/web/framework-1.1.17/i18n/data/dav_ke.php b/web/framework/i18n/data/dav_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/dav_ke.php rename to web/framework/i18n/data/dav_ke.php diff --git a/web/framework-1.1.17/i18n/data/de.php b/web/framework/i18n/data/de.php similarity index 100% rename from web/framework-1.1.17/i18n/data/de.php rename to web/framework/i18n/data/de.php diff --git a/web/framework-1.1.17/i18n/data/de_at.php b/web/framework/i18n/data/de_at.php similarity index 100% rename from web/framework-1.1.17/i18n/data/de_at.php rename to web/framework/i18n/data/de_at.php diff --git a/web/framework-1.1.17/i18n/data/de_be.php b/web/framework/i18n/data/de_be.php similarity index 100% rename from web/framework-1.1.17/i18n/data/de_be.php rename to web/framework/i18n/data/de_be.php diff --git a/web/framework-1.1.17/i18n/data/de_ch.php b/web/framework/i18n/data/de_ch.php similarity index 100% rename from web/framework-1.1.17/i18n/data/de_ch.php rename to web/framework/i18n/data/de_ch.php diff --git a/web/framework-1.1.17/i18n/data/de_de.php b/web/framework/i18n/data/de_de.php similarity index 100% rename from web/framework-1.1.17/i18n/data/de_de.php rename to web/framework/i18n/data/de_de.php diff --git a/web/framework-1.1.17/i18n/data/de_li.php b/web/framework/i18n/data/de_li.php similarity index 100% rename from web/framework-1.1.17/i18n/data/de_li.php rename to web/framework/i18n/data/de_li.php diff --git a/web/framework-1.1.17/i18n/data/de_lu.php b/web/framework/i18n/data/de_lu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/de_lu.php rename to web/framework/i18n/data/de_lu.php diff --git a/web/framework-1.1.17/i18n/data/dje.php b/web/framework/i18n/data/dje.php similarity index 100% rename from web/framework-1.1.17/i18n/data/dje.php rename to web/framework/i18n/data/dje.php diff --git a/web/framework-1.1.17/i18n/data/dje_ne.php b/web/framework/i18n/data/dje_ne.php similarity index 100% rename from web/framework-1.1.17/i18n/data/dje_ne.php rename to web/framework/i18n/data/dje_ne.php diff --git a/web/framework-1.1.17/i18n/data/dua.php b/web/framework/i18n/data/dua.php similarity index 100% rename from web/framework-1.1.17/i18n/data/dua.php rename to web/framework/i18n/data/dua.php diff --git a/web/framework-1.1.17/i18n/data/dua_cm.php b/web/framework/i18n/data/dua_cm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/dua_cm.php rename to web/framework/i18n/data/dua_cm.php diff --git a/web/framework-1.1.17/i18n/data/dv.php b/web/framework/i18n/data/dv.php similarity index 100% rename from web/framework-1.1.17/i18n/data/dv.php rename to web/framework/i18n/data/dv.php diff --git a/web/framework-1.1.17/i18n/data/dv_mv.php b/web/framework/i18n/data/dv_mv.php similarity index 100% rename from web/framework-1.1.17/i18n/data/dv_mv.php rename to web/framework/i18n/data/dv_mv.php diff --git a/web/framework-1.1.17/i18n/data/dyo.php b/web/framework/i18n/data/dyo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/dyo.php rename to web/framework/i18n/data/dyo.php diff --git a/web/framework-1.1.17/i18n/data/dyo_sn.php b/web/framework/i18n/data/dyo_sn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/dyo_sn.php rename to web/framework/i18n/data/dyo_sn.php diff --git a/web/framework-1.1.17/i18n/data/dz.php b/web/framework/i18n/data/dz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/dz.php rename to web/framework/i18n/data/dz.php diff --git a/web/framework-1.1.17/i18n/data/dz_bt.php b/web/framework/i18n/data/dz_bt.php similarity index 100% rename from web/framework-1.1.17/i18n/data/dz_bt.php rename to web/framework/i18n/data/dz_bt.php diff --git a/web/framework-1.1.17/i18n/data/ebu.php b/web/framework/i18n/data/ebu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ebu.php rename to web/framework/i18n/data/ebu.php diff --git a/web/framework-1.1.17/i18n/data/ebu_ke.php b/web/framework/i18n/data/ebu_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ebu_ke.php rename to web/framework/i18n/data/ebu_ke.php diff --git a/web/framework-1.1.17/i18n/data/ee.php b/web/framework/i18n/data/ee.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ee.php rename to web/framework/i18n/data/ee.php diff --git a/web/framework-1.1.17/i18n/data/ee_gh.php b/web/framework/i18n/data/ee_gh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ee_gh.php rename to web/framework/i18n/data/ee_gh.php diff --git a/web/framework-1.1.17/i18n/data/ee_tg.php b/web/framework/i18n/data/ee_tg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ee_tg.php rename to web/framework/i18n/data/ee_tg.php diff --git a/web/framework-1.1.17/i18n/data/el.php b/web/framework/i18n/data/el.php similarity index 100% rename from web/framework-1.1.17/i18n/data/el.php rename to web/framework/i18n/data/el.php diff --git a/web/framework-1.1.17/i18n/data/el_cy.php b/web/framework/i18n/data/el_cy.php similarity index 100% rename from web/framework-1.1.17/i18n/data/el_cy.php rename to web/framework/i18n/data/el_cy.php diff --git a/web/framework-1.1.17/i18n/data/el_gr.php b/web/framework/i18n/data/el_gr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/el_gr.php rename to web/framework/i18n/data/el_gr.php diff --git a/web/framework-1.1.17/i18n/data/el_polyton.php b/web/framework/i18n/data/el_polyton.php similarity index 100% rename from web/framework-1.1.17/i18n/data/el_polyton.php rename to web/framework/i18n/data/el_polyton.php diff --git a/web/framework-1.1.17/i18n/data/en.php b/web/framework/i18n/data/en.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en.php rename to web/framework/i18n/data/en.php diff --git a/web/framework-1.1.17/i18n/data/en_150.php b/web/framework/i18n/data/en_150.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_150.php rename to web/framework/i18n/data/en_150.php diff --git a/web/framework-1.1.17/i18n/data/en_ag.php b/web/framework/i18n/data/en_ag.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_ag.php rename to web/framework/i18n/data/en_ag.php diff --git a/web/framework-1.1.17/i18n/data/en_as.php b/web/framework/i18n/data/en_as.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_as.php rename to web/framework/i18n/data/en_as.php diff --git a/web/framework-1.1.17/i18n/data/en_au.php b/web/framework/i18n/data/en_au.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_au.php rename to web/framework/i18n/data/en_au.php diff --git a/web/framework-1.1.17/i18n/data/en_bb.php b/web/framework/i18n/data/en_bb.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_bb.php rename to web/framework/i18n/data/en_bb.php diff --git a/web/framework-1.1.17/i18n/data/en_be.php b/web/framework/i18n/data/en_be.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_be.php rename to web/framework/i18n/data/en_be.php diff --git a/web/framework-1.1.17/i18n/data/en_bm.php b/web/framework/i18n/data/en_bm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_bm.php rename to web/framework/i18n/data/en_bm.php diff --git a/web/framework-1.1.17/i18n/data/en_bs.php b/web/framework/i18n/data/en_bs.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_bs.php rename to web/framework/i18n/data/en_bs.php diff --git a/web/framework-1.1.17/i18n/data/en_bw.php b/web/framework/i18n/data/en_bw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_bw.php rename to web/framework/i18n/data/en_bw.php diff --git a/web/framework-1.1.17/i18n/data/en_bz.php b/web/framework/i18n/data/en_bz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_bz.php rename to web/framework/i18n/data/en_bz.php diff --git a/web/framework-1.1.17/i18n/data/en_ca.php b/web/framework/i18n/data/en_ca.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_ca.php rename to web/framework/i18n/data/en_ca.php diff --git a/web/framework-1.1.17/i18n/data/en_cm.php b/web/framework/i18n/data/en_cm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_cm.php rename to web/framework/i18n/data/en_cm.php diff --git a/web/framework-1.1.17/i18n/data/en_dm.php b/web/framework/i18n/data/en_dm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_dm.php rename to web/framework/i18n/data/en_dm.php diff --git a/web/framework-1.1.17/i18n/data/en_dsrt.php b/web/framework/i18n/data/en_dsrt.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_dsrt.php rename to web/framework/i18n/data/en_dsrt.php diff --git a/web/framework-1.1.17/i18n/data/en_dsrt_us.php b/web/framework/i18n/data/en_dsrt_us.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_dsrt_us.php rename to web/framework/i18n/data/en_dsrt_us.php diff --git a/web/framework-1.1.17/i18n/data/en_fj.php b/web/framework/i18n/data/en_fj.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_fj.php rename to web/framework/i18n/data/en_fj.php diff --git a/web/framework-1.1.17/i18n/data/en_fm.php b/web/framework/i18n/data/en_fm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_fm.php rename to web/framework/i18n/data/en_fm.php diff --git a/web/framework-1.1.17/i18n/data/en_gb.php b/web/framework/i18n/data/en_gb.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_gb.php rename to web/framework/i18n/data/en_gb.php diff --git a/web/framework-1.1.17/i18n/data/en_gd.php b/web/framework/i18n/data/en_gd.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_gd.php rename to web/framework/i18n/data/en_gd.php diff --git a/web/framework-1.1.17/i18n/data/en_gg.php b/web/framework/i18n/data/en_gg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_gg.php rename to web/framework/i18n/data/en_gg.php diff --git a/web/framework-1.1.17/i18n/data/en_gh.php b/web/framework/i18n/data/en_gh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_gh.php rename to web/framework/i18n/data/en_gh.php diff --git a/web/framework-1.1.17/i18n/data/en_gi.php b/web/framework/i18n/data/en_gi.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_gi.php rename to web/framework/i18n/data/en_gi.php diff --git a/web/framework-1.1.17/i18n/data/en_gm.php b/web/framework/i18n/data/en_gm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_gm.php rename to web/framework/i18n/data/en_gm.php diff --git a/web/framework-1.1.17/i18n/data/en_gu.php b/web/framework/i18n/data/en_gu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_gu.php rename to web/framework/i18n/data/en_gu.php diff --git a/web/framework-1.1.17/i18n/data/en_gy.php b/web/framework/i18n/data/en_gy.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_gy.php rename to web/framework/i18n/data/en_gy.php diff --git a/web/framework-1.1.17/i18n/data/en_hk.php b/web/framework/i18n/data/en_hk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_hk.php rename to web/framework/i18n/data/en_hk.php diff --git a/web/framework-1.1.17/i18n/data/en_ie.php b/web/framework/i18n/data/en_ie.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_ie.php rename to web/framework/i18n/data/en_ie.php diff --git a/web/framework-1.1.17/i18n/data/en_im.php b/web/framework/i18n/data/en_im.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_im.php rename to web/framework/i18n/data/en_im.php diff --git a/web/framework-1.1.17/i18n/data/en_in.php b/web/framework/i18n/data/en_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_in.php rename to web/framework/i18n/data/en_in.php diff --git a/web/framework-1.1.17/i18n/data/en_je.php b/web/framework/i18n/data/en_je.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_je.php rename to web/framework/i18n/data/en_je.php diff --git a/web/framework-1.1.17/i18n/data/en_jm.php b/web/framework/i18n/data/en_jm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_jm.php rename to web/framework/i18n/data/en_jm.php diff --git a/web/framework-1.1.17/i18n/data/en_ke.php b/web/framework/i18n/data/en_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_ke.php rename to web/framework/i18n/data/en_ke.php diff --git a/web/framework-1.1.17/i18n/data/en_ki.php b/web/framework/i18n/data/en_ki.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_ki.php rename to web/framework/i18n/data/en_ki.php diff --git a/web/framework-1.1.17/i18n/data/en_kn.php b/web/framework/i18n/data/en_kn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_kn.php rename to web/framework/i18n/data/en_kn.php diff --git a/web/framework-1.1.17/i18n/data/en_ky.php b/web/framework/i18n/data/en_ky.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_ky.php rename to web/framework/i18n/data/en_ky.php diff --git a/web/framework-1.1.17/i18n/data/en_lc.php b/web/framework/i18n/data/en_lc.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_lc.php rename to web/framework/i18n/data/en_lc.php diff --git a/web/framework-1.1.17/i18n/data/en_lr.php b/web/framework/i18n/data/en_lr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_lr.php rename to web/framework/i18n/data/en_lr.php diff --git a/web/framework-1.1.17/i18n/data/en_ls.php b/web/framework/i18n/data/en_ls.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_ls.php rename to web/framework/i18n/data/en_ls.php diff --git a/web/framework-1.1.17/i18n/data/en_mg.php b/web/framework/i18n/data/en_mg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_mg.php rename to web/framework/i18n/data/en_mg.php diff --git a/web/framework-1.1.17/i18n/data/en_mh.php b/web/framework/i18n/data/en_mh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_mh.php rename to web/framework/i18n/data/en_mh.php diff --git a/web/framework-1.1.17/i18n/data/en_mp.php b/web/framework/i18n/data/en_mp.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_mp.php rename to web/framework/i18n/data/en_mp.php diff --git a/web/framework-1.1.17/i18n/data/en_mt.php b/web/framework/i18n/data/en_mt.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_mt.php rename to web/framework/i18n/data/en_mt.php diff --git a/web/framework-1.1.17/i18n/data/en_mu.php b/web/framework/i18n/data/en_mu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_mu.php rename to web/framework/i18n/data/en_mu.php diff --git a/web/framework-1.1.17/i18n/data/en_mw.php b/web/framework/i18n/data/en_mw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_mw.php rename to web/framework/i18n/data/en_mw.php diff --git a/web/framework-1.1.17/i18n/data/en_na.php b/web/framework/i18n/data/en_na.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_na.php rename to web/framework/i18n/data/en_na.php diff --git a/web/framework-1.1.17/i18n/data/en_ng.php b/web/framework/i18n/data/en_ng.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_ng.php rename to web/framework/i18n/data/en_ng.php diff --git a/web/framework-1.1.17/i18n/data/en_nz.php b/web/framework/i18n/data/en_nz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_nz.php rename to web/framework/i18n/data/en_nz.php diff --git a/web/framework-1.1.17/i18n/data/en_pg.php b/web/framework/i18n/data/en_pg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_pg.php rename to web/framework/i18n/data/en_pg.php diff --git a/web/framework-1.1.17/i18n/data/en_ph.php b/web/framework/i18n/data/en_ph.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_ph.php rename to web/framework/i18n/data/en_ph.php diff --git a/web/framework-1.1.17/i18n/data/en_pk.php b/web/framework/i18n/data/en_pk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_pk.php rename to web/framework/i18n/data/en_pk.php diff --git a/web/framework-1.1.17/i18n/data/en_pr.php b/web/framework/i18n/data/en_pr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_pr.php rename to web/framework/i18n/data/en_pr.php diff --git a/web/framework-1.1.17/i18n/data/en_pw.php b/web/framework/i18n/data/en_pw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_pw.php rename to web/framework/i18n/data/en_pw.php diff --git a/web/framework-1.1.17/i18n/data/en_sb.php b/web/framework/i18n/data/en_sb.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_sb.php rename to web/framework/i18n/data/en_sb.php diff --git a/web/framework-1.1.17/i18n/data/en_sc.php b/web/framework/i18n/data/en_sc.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_sc.php rename to web/framework/i18n/data/en_sc.php diff --git a/web/framework-1.1.17/i18n/data/en_sg.php b/web/framework/i18n/data/en_sg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_sg.php rename to web/framework/i18n/data/en_sg.php diff --git a/web/framework-1.1.17/i18n/data/en_shaw.php b/web/framework/i18n/data/en_shaw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_shaw.php rename to web/framework/i18n/data/en_shaw.php diff --git a/web/framework-1.1.17/i18n/data/en_sl.php b/web/framework/i18n/data/en_sl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_sl.php rename to web/framework/i18n/data/en_sl.php diff --git a/web/framework-1.1.17/i18n/data/en_ss.php b/web/framework/i18n/data/en_ss.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_ss.php rename to web/framework/i18n/data/en_ss.php diff --git a/web/framework-1.1.17/i18n/data/en_sz.php b/web/framework/i18n/data/en_sz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_sz.php rename to web/framework/i18n/data/en_sz.php diff --git a/web/framework-1.1.17/i18n/data/en_tc.php b/web/framework/i18n/data/en_tc.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_tc.php rename to web/framework/i18n/data/en_tc.php diff --git a/web/framework-1.1.17/i18n/data/en_to.php b/web/framework/i18n/data/en_to.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_to.php rename to web/framework/i18n/data/en_to.php diff --git a/web/framework-1.1.17/i18n/data/en_tt.php b/web/framework/i18n/data/en_tt.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_tt.php rename to web/framework/i18n/data/en_tt.php diff --git a/web/framework-1.1.17/i18n/data/en_tz.php b/web/framework/i18n/data/en_tz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_tz.php rename to web/framework/i18n/data/en_tz.php diff --git a/web/framework-1.1.17/i18n/data/en_ug.php b/web/framework/i18n/data/en_ug.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_ug.php rename to web/framework/i18n/data/en_ug.php diff --git a/web/framework-1.1.17/i18n/data/en_um.php b/web/framework/i18n/data/en_um.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_um.php rename to web/framework/i18n/data/en_um.php diff --git a/web/framework-1.1.17/i18n/data/en_us.php b/web/framework/i18n/data/en_us.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_us.php rename to web/framework/i18n/data/en_us.php diff --git a/web/framework-1.1.17/i18n/data/en_us_posix.php b/web/framework/i18n/data/en_us_posix.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_us_posix.php rename to web/framework/i18n/data/en_us_posix.php diff --git a/web/framework-1.1.17/i18n/data/en_vc.php b/web/framework/i18n/data/en_vc.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_vc.php rename to web/framework/i18n/data/en_vc.php diff --git a/web/framework-1.1.17/i18n/data/en_vg.php b/web/framework/i18n/data/en_vg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_vg.php rename to web/framework/i18n/data/en_vg.php diff --git a/web/framework-1.1.17/i18n/data/en_vi.php b/web/framework/i18n/data/en_vi.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_vi.php rename to web/framework/i18n/data/en_vi.php diff --git a/web/framework-1.1.17/i18n/data/en_vu.php b/web/framework/i18n/data/en_vu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_vu.php rename to web/framework/i18n/data/en_vu.php diff --git a/web/framework-1.1.17/i18n/data/en_ws.php b/web/framework/i18n/data/en_ws.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_ws.php rename to web/framework/i18n/data/en_ws.php diff --git a/web/framework-1.1.17/i18n/data/en_za.php b/web/framework/i18n/data/en_za.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_za.php rename to web/framework/i18n/data/en_za.php diff --git a/web/framework-1.1.17/i18n/data/en_zm.php b/web/framework/i18n/data/en_zm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_zm.php rename to web/framework/i18n/data/en_zm.php diff --git a/web/framework-1.1.17/i18n/data/en_zw.php b/web/framework/i18n/data/en_zw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_zw.php rename to web/framework/i18n/data/en_zw.php diff --git a/web/framework-1.1.17/i18n/data/en_zz.php b/web/framework/i18n/data/en_zz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/en_zz.php rename to web/framework/i18n/data/en_zz.php diff --git a/web/framework-1.1.17/i18n/data/eo.php b/web/framework/i18n/data/eo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/eo.php rename to web/framework/i18n/data/eo.php diff --git a/web/framework-1.1.17/i18n/data/es.php b/web/framework/i18n/data/es.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es.php rename to web/framework/i18n/data/es.php diff --git a/web/framework-1.1.17/i18n/data/es_419.php b/web/framework/i18n/data/es_419.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_419.php rename to web/framework/i18n/data/es_419.php diff --git a/web/framework-1.1.17/i18n/data/es_ar.php b/web/framework/i18n/data/es_ar.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_ar.php rename to web/framework/i18n/data/es_ar.php diff --git a/web/framework-1.1.17/i18n/data/es_bo.php b/web/framework/i18n/data/es_bo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_bo.php rename to web/framework/i18n/data/es_bo.php diff --git a/web/framework-1.1.17/i18n/data/es_cl.php b/web/framework/i18n/data/es_cl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_cl.php rename to web/framework/i18n/data/es_cl.php diff --git a/web/framework-1.1.17/i18n/data/es_co.php b/web/framework/i18n/data/es_co.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_co.php rename to web/framework/i18n/data/es_co.php diff --git a/web/framework-1.1.17/i18n/data/es_cr.php b/web/framework/i18n/data/es_cr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_cr.php rename to web/framework/i18n/data/es_cr.php diff --git a/web/framework-1.1.17/i18n/data/es_cu.php b/web/framework/i18n/data/es_cu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_cu.php rename to web/framework/i18n/data/es_cu.php diff --git a/web/framework-1.1.17/i18n/data/es_do.php b/web/framework/i18n/data/es_do.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_do.php rename to web/framework/i18n/data/es_do.php diff --git a/web/framework-1.1.17/i18n/data/es_ea.php b/web/framework/i18n/data/es_ea.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_ea.php rename to web/framework/i18n/data/es_ea.php diff --git a/web/framework-1.1.17/i18n/data/es_ec.php b/web/framework/i18n/data/es_ec.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_ec.php rename to web/framework/i18n/data/es_ec.php diff --git a/web/framework-1.1.17/i18n/data/es_es.php b/web/framework/i18n/data/es_es.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_es.php rename to web/framework/i18n/data/es_es.php diff --git a/web/framework-1.1.17/i18n/data/es_gq.php b/web/framework/i18n/data/es_gq.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_gq.php rename to web/framework/i18n/data/es_gq.php diff --git a/web/framework-1.1.17/i18n/data/es_gt.php b/web/framework/i18n/data/es_gt.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_gt.php rename to web/framework/i18n/data/es_gt.php diff --git a/web/framework-1.1.17/i18n/data/es_hn.php b/web/framework/i18n/data/es_hn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_hn.php rename to web/framework/i18n/data/es_hn.php diff --git a/web/framework-1.1.17/i18n/data/es_ic.php b/web/framework/i18n/data/es_ic.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_ic.php rename to web/framework/i18n/data/es_ic.php diff --git a/web/framework-1.1.17/i18n/data/es_mx.php b/web/framework/i18n/data/es_mx.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_mx.php rename to web/framework/i18n/data/es_mx.php diff --git a/web/framework-1.1.17/i18n/data/es_ni.php b/web/framework/i18n/data/es_ni.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_ni.php rename to web/framework/i18n/data/es_ni.php diff --git a/web/framework-1.1.17/i18n/data/es_pa.php b/web/framework/i18n/data/es_pa.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_pa.php rename to web/framework/i18n/data/es_pa.php diff --git a/web/framework-1.1.17/i18n/data/es_pe.php b/web/framework/i18n/data/es_pe.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_pe.php rename to web/framework/i18n/data/es_pe.php diff --git a/web/framework-1.1.17/i18n/data/es_ph.php b/web/framework/i18n/data/es_ph.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_ph.php rename to web/framework/i18n/data/es_ph.php diff --git a/web/framework-1.1.17/i18n/data/es_pr.php b/web/framework/i18n/data/es_pr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_pr.php rename to web/framework/i18n/data/es_pr.php diff --git a/web/framework-1.1.17/i18n/data/es_py.php b/web/framework/i18n/data/es_py.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_py.php rename to web/framework/i18n/data/es_py.php diff --git a/web/framework-1.1.17/i18n/data/es_sv.php b/web/framework/i18n/data/es_sv.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_sv.php rename to web/framework/i18n/data/es_sv.php diff --git a/web/framework-1.1.17/i18n/data/es_us.php b/web/framework/i18n/data/es_us.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_us.php rename to web/framework/i18n/data/es_us.php diff --git a/web/framework-1.1.17/i18n/data/es_uy.php b/web/framework/i18n/data/es_uy.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_uy.php rename to web/framework/i18n/data/es_uy.php diff --git a/web/framework-1.1.17/i18n/data/es_ve.php b/web/framework/i18n/data/es_ve.php similarity index 100% rename from web/framework-1.1.17/i18n/data/es_ve.php rename to web/framework/i18n/data/es_ve.php diff --git a/web/framework-1.1.17/i18n/data/et.php b/web/framework/i18n/data/et.php similarity index 100% rename from web/framework-1.1.17/i18n/data/et.php rename to web/framework/i18n/data/et.php diff --git a/web/framework-1.1.17/i18n/data/et_ee.php b/web/framework/i18n/data/et_ee.php similarity index 100% rename from web/framework-1.1.17/i18n/data/et_ee.php rename to web/framework/i18n/data/et_ee.php diff --git a/web/framework-1.1.17/i18n/data/eu.php b/web/framework/i18n/data/eu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/eu.php rename to web/framework/i18n/data/eu.php diff --git a/web/framework-1.1.17/i18n/data/eu_es.php b/web/framework/i18n/data/eu_es.php similarity index 100% rename from web/framework-1.1.17/i18n/data/eu_es.php rename to web/framework/i18n/data/eu_es.php diff --git a/web/framework-1.1.17/i18n/data/ewo.php b/web/framework/i18n/data/ewo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ewo.php rename to web/framework/i18n/data/ewo.php diff --git a/web/framework-1.1.17/i18n/data/ewo_cm.php b/web/framework/i18n/data/ewo_cm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ewo_cm.php rename to web/framework/i18n/data/ewo_cm.php diff --git a/web/framework-1.1.17/i18n/data/fa.php b/web/framework/i18n/data/fa.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fa.php rename to web/framework/i18n/data/fa.php diff --git a/web/framework-1.1.17/i18n/data/fa_af.php b/web/framework/i18n/data/fa_af.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fa_af.php rename to web/framework/i18n/data/fa_af.php diff --git a/web/framework-1.1.17/i18n/data/fa_ir.php b/web/framework/i18n/data/fa_ir.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fa_ir.php rename to web/framework/i18n/data/fa_ir.php diff --git a/web/framework-1.1.17/i18n/data/ff.php b/web/framework/i18n/data/ff.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ff.php rename to web/framework/i18n/data/ff.php diff --git a/web/framework-1.1.17/i18n/data/ff_sn.php b/web/framework/i18n/data/ff_sn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ff_sn.php rename to web/framework/i18n/data/ff_sn.php diff --git a/web/framework-1.1.17/i18n/data/fi.php b/web/framework/i18n/data/fi.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fi.php rename to web/framework/i18n/data/fi.php diff --git a/web/framework-1.1.17/i18n/data/fi_fi.php b/web/framework/i18n/data/fi_fi.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fi_fi.php rename to web/framework/i18n/data/fi_fi.php diff --git a/web/framework-1.1.17/i18n/data/fil.php b/web/framework/i18n/data/fil.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fil.php rename to web/framework/i18n/data/fil.php diff --git a/web/framework-1.1.17/i18n/data/fil_ph.php b/web/framework/i18n/data/fil_ph.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fil_ph.php rename to web/framework/i18n/data/fil_ph.php diff --git a/web/framework-1.1.17/i18n/data/fo.php b/web/framework/i18n/data/fo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fo.php rename to web/framework/i18n/data/fo.php diff --git a/web/framework-1.1.17/i18n/data/fo_fo.php b/web/framework/i18n/data/fo_fo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fo_fo.php rename to web/framework/i18n/data/fo_fo.php diff --git a/web/framework-1.1.17/i18n/data/fr.php b/web/framework/i18n/data/fr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr.php rename to web/framework/i18n/data/fr.php diff --git a/web/framework-1.1.17/i18n/data/fr_be.php b/web/framework/i18n/data/fr_be.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_be.php rename to web/framework/i18n/data/fr_be.php diff --git a/web/framework-1.1.17/i18n/data/fr_bf.php b/web/framework/i18n/data/fr_bf.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_bf.php rename to web/framework/i18n/data/fr_bf.php diff --git a/web/framework-1.1.17/i18n/data/fr_bi.php b/web/framework/i18n/data/fr_bi.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_bi.php rename to web/framework/i18n/data/fr_bi.php diff --git a/web/framework-1.1.17/i18n/data/fr_bj.php b/web/framework/i18n/data/fr_bj.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_bj.php rename to web/framework/i18n/data/fr_bj.php diff --git a/web/framework-1.1.17/i18n/data/fr_bl.php b/web/framework/i18n/data/fr_bl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_bl.php rename to web/framework/i18n/data/fr_bl.php diff --git a/web/framework-1.1.17/i18n/data/fr_ca.php b/web/framework/i18n/data/fr_ca.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_ca.php rename to web/framework/i18n/data/fr_ca.php diff --git a/web/framework-1.1.17/i18n/data/fr_cd.php b/web/framework/i18n/data/fr_cd.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_cd.php rename to web/framework/i18n/data/fr_cd.php diff --git a/web/framework-1.1.17/i18n/data/fr_cf.php b/web/framework/i18n/data/fr_cf.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_cf.php rename to web/framework/i18n/data/fr_cf.php diff --git a/web/framework-1.1.17/i18n/data/fr_cg.php b/web/framework/i18n/data/fr_cg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_cg.php rename to web/framework/i18n/data/fr_cg.php diff --git a/web/framework-1.1.17/i18n/data/fr_ch.php b/web/framework/i18n/data/fr_ch.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_ch.php rename to web/framework/i18n/data/fr_ch.php diff --git a/web/framework-1.1.17/i18n/data/fr_ci.php b/web/framework/i18n/data/fr_ci.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_ci.php rename to web/framework/i18n/data/fr_ci.php diff --git a/web/framework-1.1.17/i18n/data/fr_cm.php b/web/framework/i18n/data/fr_cm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_cm.php rename to web/framework/i18n/data/fr_cm.php diff --git a/web/framework-1.1.17/i18n/data/fr_dj.php b/web/framework/i18n/data/fr_dj.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_dj.php rename to web/framework/i18n/data/fr_dj.php diff --git a/web/framework-1.1.17/i18n/data/fr_dz.php b/web/framework/i18n/data/fr_dz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_dz.php rename to web/framework/i18n/data/fr_dz.php diff --git a/web/framework-1.1.17/i18n/data/fr_fr.php b/web/framework/i18n/data/fr_fr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_fr.php rename to web/framework/i18n/data/fr_fr.php diff --git a/web/framework-1.1.17/i18n/data/fr_ga.php b/web/framework/i18n/data/fr_ga.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_ga.php rename to web/framework/i18n/data/fr_ga.php diff --git a/web/framework-1.1.17/i18n/data/fr_gf.php b/web/framework/i18n/data/fr_gf.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_gf.php rename to web/framework/i18n/data/fr_gf.php diff --git a/web/framework-1.1.17/i18n/data/fr_gn.php b/web/framework/i18n/data/fr_gn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_gn.php rename to web/framework/i18n/data/fr_gn.php diff --git a/web/framework-1.1.17/i18n/data/fr_gp.php b/web/framework/i18n/data/fr_gp.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_gp.php rename to web/framework/i18n/data/fr_gp.php diff --git a/web/framework-1.1.17/i18n/data/fr_gq.php b/web/framework/i18n/data/fr_gq.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_gq.php rename to web/framework/i18n/data/fr_gq.php diff --git a/web/framework-1.1.17/i18n/data/fr_ht.php b/web/framework/i18n/data/fr_ht.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_ht.php rename to web/framework/i18n/data/fr_ht.php diff --git a/web/framework-1.1.17/i18n/data/fr_km.php b/web/framework/i18n/data/fr_km.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_km.php rename to web/framework/i18n/data/fr_km.php diff --git a/web/framework-1.1.17/i18n/data/fr_lu.php b/web/framework/i18n/data/fr_lu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_lu.php rename to web/framework/i18n/data/fr_lu.php diff --git a/web/framework-1.1.17/i18n/data/fr_ma.php b/web/framework/i18n/data/fr_ma.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_ma.php rename to web/framework/i18n/data/fr_ma.php diff --git a/web/framework-1.1.17/i18n/data/fr_mc.php b/web/framework/i18n/data/fr_mc.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_mc.php rename to web/framework/i18n/data/fr_mc.php diff --git a/web/framework-1.1.17/i18n/data/fr_mf.php b/web/framework/i18n/data/fr_mf.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_mf.php rename to web/framework/i18n/data/fr_mf.php diff --git a/web/framework-1.1.17/i18n/data/fr_mg.php b/web/framework/i18n/data/fr_mg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_mg.php rename to web/framework/i18n/data/fr_mg.php diff --git a/web/framework-1.1.17/i18n/data/fr_ml.php b/web/framework/i18n/data/fr_ml.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_ml.php rename to web/framework/i18n/data/fr_ml.php diff --git a/web/framework-1.1.17/i18n/data/fr_mq.php b/web/framework/i18n/data/fr_mq.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_mq.php rename to web/framework/i18n/data/fr_mq.php diff --git a/web/framework-1.1.17/i18n/data/fr_mr.php b/web/framework/i18n/data/fr_mr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_mr.php rename to web/framework/i18n/data/fr_mr.php diff --git a/web/framework-1.1.17/i18n/data/fr_mu.php b/web/framework/i18n/data/fr_mu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_mu.php rename to web/framework/i18n/data/fr_mu.php diff --git a/web/framework-1.1.17/i18n/data/fr_nc.php b/web/framework/i18n/data/fr_nc.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_nc.php rename to web/framework/i18n/data/fr_nc.php diff --git a/web/framework-1.1.17/i18n/data/fr_ne.php b/web/framework/i18n/data/fr_ne.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_ne.php rename to web/framework/i18n/data/fr_ne.php diff --git a/web/framework-1.1.17/i18n/data/fr_pf.php b/web/framework/i18n/data/fr_pf.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_pf.php rename to web/framework/i18n/data/fr_pf.php diff --git a/web/framework-1.1.17/i18n/data/fr_re.php b/web/framework/i18n/data/fr_re.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_re.php rename to web/framework/i18n/data/fr_re.php diff --git a/web/framework-1.1.17/i18n/data/fr_rw.php b/web/framework/i18n/data/fr_rw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_rw.php rename to web/framework/i18n/data/fr_rw.php diff --git a/web/framework-1.1.17/i18n/data/fr_sc.php b/web/framework/i18n/data/fr_sc.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_sc.php rename to web/framework/i18n/data/fr_sc.php diff --git a/web/framework-1.1.17/i18n/data/fr_sn.php b/web/framework/i18n/data/fr_sn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_sn.php rename to web/framework/i18n/data/fr_sn.php diff --git a/web/framework-1.1.17/i18n/data/fr_sy.php b/web/framework/i18n/data/fr_sy.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_sy.php rename to web/framework/i18n/data/fr_sy.php diff --git a/web/framework-1.1.17/i18n/data/fr_td.php b/web/framework/i18n/data/fr_td.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_td.php rename to web/framework/i18n/data/fr_td.php diff --git a/web/framework-1.1.17/i18n/data/fr_tg.php b/web/framework/i18n/data/fr_tg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_tg.php rename to web/framework/i18n/data/fr_tg.php diff --git a/web/framework-1.1.17/i18n/data/fr_tn.php b/web/framework/i18n/data/fr_tn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_tn.php rename to web/framework/i18n/data/fr_tn.php diff --git a/web/framework-1.1.17/i18n/data/fr_vu.php b/web/framework/i18n/data/fr_vu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_vu.php rename to web/framework/i18n/data/fr_vu.php diff --git a/web/framework-1.1.17/i18n/data/fr_yt.php b/web/framework/i18n/data/fr_yt.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fr_yt.php rename to web/framework/i18n/data/fr_yt.php diff --git a/web/framework-1.1.17/i18n/data/fur.php b/web/framework/i18n/data/fur.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fur.php rename to web/framework/i18n/data/fur.php diff --git a/web/framework-1.1.17/i18n/data/fur_it.php b/web/framework/i18n/data/fur_it.php similarity index 100% rename from web/framework-1.1.17/i18n/data/fur_it.php rename to web/framework/i18n/data/fur_it.php diff --git a/web/framework-1.1.17/i18n/data/ga.php b/web/framework/i18n/data/ga.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ga.php rename to web/framework/i18n/data/ga.php diff --git a/web/framework-1.1.17/i18n/data/ga_ie.php b/web/framework/i18n/data/ga_ie.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ga_ie.php rename to web/framework/i18n/data/ga_ie.php diff --git a/web/framework-1.1.17/i18n/data/gaa.php b/web/framework/i18n/data/gaa.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gaa.php rename to web/framework/i18n/data/gaa.php diff --git a/web/framework-1.1.17/i18n/data/gaa_gh.php b/web/framework/i18n/data/gaa_gh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gaa_gh.php rename to web/framework/i18n/data/gaa_gh.php diff --git a/web/framework-1.1.17/i18n/data/gd.php b/web/framework/i18n/data/gd.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gd.php rename to web/framework/i18n/data/gd.php diff --git a/web/framework-1.1.17/i18n/data/gd_gb.php b/web/framework/i18n/data/gd_gb.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gd_gb.php rename to web/framework/i18n/data/gd_gb.php diff --git a/web/framework-1.1.17/i18n/data/gez.php b/web/framework/i18n/data/gez.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gez.php rename to web/framework/i18n/data/gez.php diff --git a/web/framework-1.1.17/i18n/data/gez_er.php b/web/framework/i18n/data/gez_er.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gez_er.php rename to web/framework/i18n/data/gez_er.php diff --git a/web/framework-1.1.17/i18n/data/gez_et.php b/web/framework/i18n/data/gez_et.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gez_et.php rename to web/framework/i18n/data/gez_et.php diff --git a/web/framework-1.1.17/i18n/data/gl.php b/web/framework/i18n/data/gl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gl.php rename to web/framework/i18n/data/gl.php diff --git a/web/framework-1.1.17/i18n/data/gl_es.php b/web/framework/i18n/data/gl_es.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gl_es.php rename to web/framework/i18n/data/gl_es.php diff --git a/web/framework-1.1.17/i18n/data/gsw.php b/web/framework/i18n/data/gsw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gsw.php rename to web/framework/i18n/data/gsw.php diff --git a/web/framework-1.1.17/i18n/data/gsw_ch.php b/web/framework/i18n/data/gsw_ch.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gsw_ch.php rename to web/framework/i18n/data/gsw_ch.php diff --git a/web/framework-1.1.17/i18n/data/gu.php b/web/framework/i18n/data/gu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gu.php rename to web/framework/i18n/data/gu.php diff --git a/web/framework-1.1.17/i18n/data/gu_in.php b/web/framework/i18n/data/gu_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gu_in.php rename to web/framework/i18n/data/gu_in.php diff --git a/web/framework-1.1.17/i18n/data/guz.php b/web/framework/i18n/data/guz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/guz.php rename to web/framework/i18n/data/guz.php diff --git a/web/framework-1.1.17/i18n/data/guz_ke.php b/web/framework/i18n/data/guz_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/guz_ke.php rename to web/framework/i18n/data/guz_ke.php diff --git a/web/framework-1.1.17/i18n/data/gv.php b/web/framework/i18n/data/gv.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gv.php rename to web/framework/i18n/data/gv.php diff --git a/web/framework-1.1.17/i18n/data/gv_gb.php b/web/framework/i18n/data/gv_gb.php similarity index 100% rename from web/framework-1.1.17/i18n/data/gv_gb.php rename to web/framework/i18n/data/gv_gb.php diff --git a/web/framework-1.1.17/i18n/data/ha.php b/web/framework/i18n/data/ha.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ha.php rename to web/framework/i18n/data/ha.php diff --git a/web/framework-1.1.17/i18n/data/ha_arab.php b/web/framework/i18n/data/ha_arab.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ha_arab.php rename to web/framework/i18n/data/ha_arab.php diff --git a/web/framework-1.1.17/i18n/data/ha_arab_ng.php b/web/framework/i18n/data/ha_arab_ng.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ha_arab_ng.php rename to web/framework/i18n/data/ha_arab_ng.php diff --git a/web/framework-1.1.17/i18n/data/ha_arab_sd.php b/web/framework/i18n/data/ha_arab_sd.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ha_arab_sd.php rename to web/framework/i18n/data/ha_arab_sd.php diff --git a/web/framework-1.1.17/i18n/data/ha_gh.php b/web/framework/i18n/data/ha_gh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ha_gh.php rename to web/framework/i18n/data/ha_gh.php diff --git a/web/framework-1.1.17/i18n/data/ha_latn.php b/web/framework/i18n/data/ha_latn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ha_latn.php rename to web/framework/i18n/data/ha_latn.php diff --git a/web/framework-1.1.17/i18n/data/ha_latn_gh.php b/web/framework/i18n/data/ha_latn_gh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ha_latn_gh.php rename to web/framework/i18n/data/ha_latn_gh.php diff --git a/web/framework-1.1.17/i18n/data/ha_latn_ne.php b/web/framework/i18n/data/ha_latn_ne.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ha_latn_ne.php rename to web/framework/i18n/data/ha_latn_ne.php diff --git a/web/framework-1.1.17/i18n/data/ha_latn_ng.php b/web/framework/i18n/data/ha_latn_ng.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ha_latn_ng.php rename to web/framework/i18n/data/ha_latn_ng.php diff --git a/web/framework-1.1.17/i18n/data/ha_ne.php b/web/framework/i18n/data/ha_ne.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ha_ne.php rename to web/framework/i18n/data/ha_ne.php diff --git a/web/framework-1.1.17/i18n/data/ha_ng.php b/web/framework/i18n/data/ha_ng.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ha_ng.php rename to web/framework/i18n/data/ha_ng.php diff --git a/web/framework-1.1.17/i18n/data/ha_sd.php b/web/framework/i18n/data/ha_sd.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ha_sd.php rename to web/framework/i18n/data/ha_sd.php diff --git a/web/framework-1.1.17/i18n/data/haw.php b/web/framework/i18n/data/haw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/haw.php rename to web/framework/i18n/data/haw.php diff --git a/web/framework-1.1.17/i18n/data/haw_us.php b/web/framework/i18n/data/haw_us.php similarity index 100% rename from web/framework-1.1.17/i18n/data/haw_us.php rename to web/framework/i18n/data/haw_us.php diff --git a/web/framework-1.1.17/i18n/data/he.php b/web/framework/i18n/data/he.php similarity index 100% rename from web/framework-1.1.17/i18n/data/he.php rename to web/framework/i18n/data/he.php diff --git a/web/framework-1.1.17/i18n/data/he_il.php b/web/framework/i18n/data/he_il.php similarity index 100% rename from web/framework-1.1.17/i18n/data/he_il.php rename to web/framework/i18n/data/he_il.php diff --git a/web/framework-1.1.17/i18n/data/hi.php b/web/framework/i18n/data/hi.php similarity index 100% rename from web/framework-1.1.17/i18n/data/hi.php rename to web/framework/i18n/data/hi.php diff --git a/web/framework-1.1.17/i18n/data/hi_in.php b/web/framework/i18n/data/hi_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/hi_in.php rename to web/framework/i18n/data/hi_in.php diff --git a/web/framework-1.1.17/i18n/data/hr.php b/web/framework/i18n/data/hr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/hr.php rename to web/framework/i18n/data/hr.php diff --git a/web/framework-1.1.17/i18n/data/hr_ba.php b/web/framework/i18n/data/hr_ba.php similarity index 100% rename from web/framework-1.1.17/i18n/data/hr_ba.php rename to web/framework/i18n/data/hr_ba.php diff --git a/web/framework-1.1.17/i18n/data/hr_hr.php b/web/framework/i18n/data/hr_hr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/hr_hr.php rename to web/framework/i18n/data/hr_hr.php diff --git a/web/framework-1.1.17/i18n/data/hu.php b/web/framework/i18n/data/hu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/hu.php rename to web/framework/i18n/data/hu.php diff --git a/web/framework-1.1.17/i18n/data/hu_hu.php b/web/framework/i18n/data/hu_hu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/hu_hu.php rename to web/framework/i18n/data/hu_hu.php diff --git a/web/framework-1.1.17/i18n/data/hy.php b/web/framework/i18n/data/hy.php similarity index 100% rename from web/framework-1.1.17/i18n/data/hy.php rename to web/framework/i18n/data/hy.php diff --git a/web/framework-1.1.17/i18n/data/hy_am.php b/web/framework/i18n/data/hy_am.php similarity index 100% rename from web/framework-1.1.17/i18n/data/hy_am.php rename to web/framework/i18n/data/hy_am.php diff --git a/web/framework-1.1.17/i18n/data/ia.php b/web/framework/i18n/data/ia.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ia.php rename to web/framework/i18n/data/ia.php diff --git a/web/framework-1.1.17/i18n/data/ia_fr.php b/web/framework/i18n/data/ia_fr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ia_fr.php rename to web/framework/i18n/data/ia_fr.php diff --git a/web/framework-1.1.17/i18n/data/id.php b/web/framework/i18n/data/id.php similarity index 100% rename from web/framework-1.1.17/i18n/data/id.php rename to web/framework/i18n/data/id.php diff --git a/web/framework-1.1.17/i18n/data/id_id.php b/web/framework/i18n/data/id_id.php similarity index 100% rename from web/framework-1.1.17/i18n/data/id_id.php rename to web/framework/i18n/data/id_id.php diff --git a/web/framework-1.1.17/i18n/data/ig.php b/web/framework/i18n/data/ig.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ig.php rename to web/framework/i18n/data/ig.php diff --git a/web/framework-1.1.17/i18n/data/ig_ng.php b/web/framework/i18n/data/ig_ng.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ig_ng.php rename to web/framework/i18n/data/ig_ng.php diff --git a/web/framework-1.1.17/i18n/data/ii.php b/web/framework/i18n/data/ii.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ii.php rename to web/framework/i18n/data/ii.php diff --git a/web/framework-1.1.17/i18n/data/ii_cn.php b/web/framework/i18n/data/ii_cn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ii_cn.php rename to web/framework/i18n/data/ii_cn.php diff --git a/web/framework-1.1.17/i18n/data/in.php b/web/framework/i18n/data/in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/in.php rename to web/framework/i18n/data/in.php diff --git a/web/framework-1.1.17/i18n/data/is.php b/web/framework/i18n/data/is.php similarity index 100% rename from web/framework-1.1.17/i18n/data/is.php rename to web/framework/i18n/data/is.php diff --git a/web/framework-1.1.17/i18n/data/is_is.php b/web/framework/i18n/data/is_is.php similarity index 100% rename from web/framework-1.1.17/i18n/data/is_is.php rename to web/framework/i18n/data/is_is.php diff --git a/web/framework-1.1.17/i18n/data/it.php b/web/framework/i18n/data/it.php similarity index 100% rename from web/framework-1.1.17/i18n/data/it.php rename to web/framework/i18n/data/it.php diff --git a/web/framework-1.1.17/i18n/data/it_ch.php b/web/framework/i18n/data/it_ch.php similarity index 100% rename from web/framework-1.1.17/i18n/data/it_ch.php rename to web/framework/i18n/data/it_ch.php diff --git a/web/framework-1.1.17/i18n/data/it_it.php b/web/framework/i18n/data/it_it.php similarity index 100% rename from web/framework-1.1.17/i18n/data/it_it.php rename to web/framework/i18n/data/it_it.php diff --git a/web/framework-1.1.17/i18n/data/it_sm.php b/web/framework/i18n/data/it_sm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/it_sm.php rename to web/framework/i18n/data/it_sm.php diff --git a/web/framework-1.1.17/i18n/data/iu.php b/web/framework/i18n/data/iu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/iu.php rename to web/framework/i18n/data/iu.php diff --git a/web/framework-1.1.17/i18n/data/iw.php b/web/framework/i18n/data/iw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/iw.php rename to web/framework/i18n/data/iw.php diff --git a/web/framework-1.1.17/i18n/data/ja.php b/web/framework/i18n/data/ja.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ja.php rename to web/framework/i18n/data/ja.php diff --git a/web/framework-1.1.17/i18n/data/ja_jp.php b/web/framework/i18n/data/ja_jp.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ja_jp.php rename to web/framework/i18n/data/ja_jp.php diff --git a/web/framework-1.1.17/i18n/data/jgo.php b/web/framework/i18n/data/jgo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/jgo.php rename to web/framework/i18n/data/jgo.php diff --git a/web/framework-1.1.17/i18n/data/jgo_cm.php b/web/framework/i18n/data/jgo_cm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/jgo_cm.php rename to web/framework/i18n/data/jgo_cm.php diff --git a/web/framework-1.1.17/i18n/data/jmc.php b/web/framework/i18n/data/jmc.php similarity index 100% rename from web/framework-1.1.17/i18n/data/jmc.php rename to web/framework/i18n/data/jmc.php diff --git a/web/framework-1.1.17/i18n/data/jmc_tz.php b/web/framework/i18n/data/jmc_tz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/jmc_tz.php rename to web/framework/i18n/data/jmc_tz.php diff --git a/web/framework-1.1.17/i18n/data/ka.php b/web/framework/i18n/data/ka.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ka.php rename to web/framework/i18n/data/ka.php diff --git a/web/framework-1.1.17/i18n/data/ka_ge.php b/web/framework/i18n/data/ka_ge.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ka_ge.php rename to web/framework/i18n/data/ka_ge.php diff --git a/web/framework-1.1.17/i18n/data/kab.php b/web/framework/i18n/data/kab.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kab.php rename to web/framework/i18n/data/kab.php diff --git a/web/framework-1.1.17/i18n/data/kab_dz.php b/web/framework/i18n/data/kab_dz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kab_dz.php rename to web/framework/i18n/data/kab_dz.php diff --git a/web/framework-1.1.17/i18n/data/kaj.php b/web/framework/i18n/data/kaj.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kaj.php rename to web/framework/i18n/data/kaj.php diff --git a/web/framework-1.1.17/i18n/data/kaj_ng.php b/web/framework/i18n/data/kaj_ng.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kaj_ng.php rename to web/framework/i18n/data/kaj_ng.php diff --git a/web/framework-1.1.17/i18n/data/kam.php b/web/framework/i18n/data/kam.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kam.php rename to web/framework/i18n/data/kam.php diff --git a/web/framework-1.1.17/i18n/data/kam_ke.php b/web/framework/i18n/data/kam_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kam_ke.php rename to web/framework/i18n/data/kam_ke.php diff --git a/web/framework-1.1.17/i18n/data/kcg.php b/web/framework/i18n/data/kcg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kcg.php rename to web/framework/i18n/data/kcg.php diff --git a/web/framework-1.1.17/i18n/data/kcg_ng.php b/web/framework/i18n/data/kcg_ng.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kcg_ng.php rename to web/framework/i18n/data/kcg_ng.php diff --git a/web/framework-1.1.17/i18n/data/kde.php b/web/framework/i18n/data/kde.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kde.php rename to web/framework/i18n/data/kde.php diff --git a/web/framework-1.1.17/i18n/data/kde_tz.php b/web/framework/i18n/data/kde_tz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kde_tz.php rename to web/framework/i18n/data/kde_tz.php diff --git a/web/framework-1.1.17/i18n/data/kea.php b/web/framework/i18n/data/kea.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kea.php rename to web/framework/i18n/data/kea.php diff --git a/web/framework-1.1.17/i18n/data/kea_cv.php b/web/framework/i18n/data/kea_cv.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kea_cv.php rename to web/framework/i18n/data/kea_cv.php diff --git a/web/framework-1.1.17/i18n/data/kfo.php b/web/framework/i18n/data/kfo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kfo.php rename to web/framework/i18n/data/kfo.php diff --git a/web/framework-1.1.17/i18n/data/kfo_ci.php b/web/framework/i18n/data/kfo_ci.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kfo_ci.php rename to web/framework/i18n/data/kfo_ci.php diff --git a/web/framework-1.1.17/i18n/data/khq.php b/web/framework/i18n/data/khq.php similarity index 100% rename from web/framework-1.1.17/i18n/data/khq.php rename to web/framework/i18n/data/khq.php diff --git a/web/framework-1.1.17/i18n/data/khq_ml.php b/web/framework/i18n/data/khq_ml.php similarity index 100% rename from web/framework-1.1.17/i18n/data/khq_ml.php rename to web/framework/i18n/data/khq_ml.php diff --git a/web/framework-1.1.17/i18n/data/ki.php b/web/framework/i18n/data/ki.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ki.php rename to web/framework/i18n/data/ki.php diff --git a/web/framework-1.1.17/i18n/data/ki_ke.php b/web/framework/i18n/data/ki_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ki_ke.php rename to web/framework/i18n/data/ki_ke.php diff --git a/web/framework-1.1.17/i18n/data/kk.php b/web/framework/i18n/data/kk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kk.php rename to web/framework/i18n/data/kk.php diff --git a/web/framework-1.1.17/i18n/data/kk_cyrl.php b/web/framework/i18n/data/kk_cyrl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kk_cyrl.php rename to web/framework/i18n/data/kk_cyrl.php diff --git a/web/framework-1.1.17/i18n/data/kk_cyrl_kz.php b/web/framework/i18n/data/kk_cyrl_kz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kk_cyrl_kz.php rename to web/framework/i18n/data/kk_cyrl_kz.php diff --git a/web/framework-1.1.17/i18n/data/kk_kz.php b/web/framework/i18n/data/kk_kz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kk_kz.php rename to web/framework/i18n/data/kk_kz.php diff --git a/web/framework-1.1.17/i18n/data/kkj.php b/web/framework/i18n/data/kkj.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kkj.php rename to web/framework/i18n/data/kkj.php diff --git a/web/framework-1.1.17/i18n/data/kkj_cm.php b/web/framework/i18n/data/kkj_cm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kkj_cm.php rename to web/framework/i18n/data/kkj_cm.php diff --git a/web/framework-1.1.17/i18n/data/kl.php b/web/framework/i18n/data/kl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kl.php rename to web/framework/i18n/data/kl.php diff --git a/web/framework-1.1.17/i18n/data/kl_gl.php b/web/framework/i18n/data/kl_gl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kl_gl.php rename to web/framework/i18n/data/kl_gl.php diff --git a/web/framework-1.1.17/i18n/data/kln.php b/web/framework/i18n/data/kln.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kln.php rename to web/framework/i18n/data/kln.php diff --git a/web/framework-1.1.17/i18n/data/kln_ke.php b/web/framework/i18n/data/kln_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kln_ke.php rename to web/framework/i18n/data/kln_ke.php diff --git a/web/framework-1.1.17/i18n/data/km.php b/web/framework/i18n/data/km.php similarity index 100% rename from web/framework-1.1.17/i18n/data/km.php rename to web/framework/i18n/data/km.php diff --git a/web/framework-1.1.17/i18n/data/km_kh.php b/web/framework/i18n/data/km_kh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/km_kh.php rename to web/framework/i18n/data/km_kh.php diff --git a/web/framework-1.1.17/i18n/data/kn.php b/web/framework/i18n/data/kn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kn.php rename to web/framework/i18n/data/kn.php diff --git a/web/framework-1.1.17/i18n/data/kn_in.php b/web/framework/i18n/data/kn_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kn_in.php rename to web/framework/i18n/data/kn_in.php diff --git a/web/framework-1.1.17/i18n/data/ko.php b/web/framework/i18n/data/ko.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ko.php rename to web/framework/i18n/data/ko.php diff --git a/web/framework-1.1.17/i18n/data/ko_kp.php b/web/framework/i18n/data/ko_kp.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ko_kp.php rename to web/framework/i18n/data/ko_kp.php diff --git a/web/framework-1.1.17/i18n/data/ko_kr.php b/web/framework/i18n/data/ko_kr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ko_kr.php rename to web/framework/i18n/data/ko_kr.php diff --git a/web/framework-1.1.17/i18n/data/kok.php b/web/framework/i18n/data/kok.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kok.php rename to web/framework/i18n/data/kok.php diff --git a/web/framework-1.1.17/i18n/data/kok_in.php b/web/framework/i18n/data/kok_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kok_in.php rename to web/framework/i18n/data/kok_in.php diff --git a/web/framework-1.1.17/i18n/data/kpe.php b/web/framework/i18n/data/kpe.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kpe.php rename to web/framework/i18n/data/kpe.php diff --git a/web/framework-1.1.17/i18n/data/kpe_gn.php b/web/framework/i18n/data/kpe_gn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kpe_gn.php rename to web/framework/i18n/data/kpe_gn.php diff --git a/web/framework-1.1.17/i18n/data/kpe_lr.php b/web/framework/i18n/data/kpe_lr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kpe_lr.php rename to web/framework/i18n/data/kpe_lr.php diff --git a/web/framework-1.1.17/i18n/data/ks.php b/web/framework/i18n/data/ks.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ks.php rename to web/framework/i18n/data/ks.php diff --git a/web/framework-1.1.17/i18n/data/ks_arab.php b/web/framework/i18n/data/ks_arab.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ks_arab.php rename to web/framework/i18n/data/ks_arab.php diff --git a/web/framework-1.1.17/i18n/data/ks_arab_in.php b/web/framework/i18n/data/ks_arab_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ks_arab_in.php rename to web/framework/i18n/data/ks_arab_in.php diff --git a/web/framework-1.1.17/i18n/data/ksb.php b/web/framework/i18n/data/ksb.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ksb.php rename to web/framework/i18n/data/ksb.php diff --git a/web/framework-1.1.17/i18n/data/ksb_tz.php b/web/framework/i18n/data/ksb_tz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ksb_tz.php rename to web/framework/i18n/data/ksb_tz.php diff --git a/web/framework-1.1.17/i18n/data/ksf.php b/web/framework/i18n/data/ksf.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ksf.php rename to web/framework/i18n/data/ksf.php diff --git a/web/framework-1.1.17/i18n/data/ksf_cm.php b/web/framework/i18n/data/ksf_cm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ksf_cm.php rename to web/framework/i18n/data/ksf_cm.php diff --git a/web/framework-1.1.17/i18n/data/ksh.php b/web/framework/i18n/data/ksh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ksh.php rename to web/framework/i18n/data/ksh.php diff --git a/web/framework-1.1.17/i18n/data/ksh_de.php b/web/framework/i18n/data/ksh_de.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ksh_de.php rename to web/framework/i18n/data/ksh_de.php diff --git a/web/framework-1.1.17/i18n/data/ku.php b/web/framework/i18n/data/ku.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ku.php rename to web/framework/i18n/data/ku.php diff --git a/web/framework-1.1.17/i18n/data/ku_arab.php b/web/framework/i18n/data/ku_arab.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ku_arab.php rename to web/framework/i18n/data/ku_arab.php diff --git a/web/framework-1.1.17/i18n/data/ku_arab_iq.php b/web/framework/i18n/data/ku_arab_iq.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ku_arab_iq.php rename to web/framework/i18n/data/ku_arab_iq.php diff --git a/web/framework-1.1.17/i18n/data/ku_arab_ir.php b/web/framework/i18n/data/ku_arab_ir.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ku_arab_ir.php rename to web/framework/i18n/data/ku_arab_ir.php diff --git a/web/framework-1.1.17/i18n/data/ku_iq.php b/web/framework/i18n/data/ku_iq.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ku_iq.php rename to web/framework/i18n/data/ku_iq.php diff --git a/web/framework-1.1.17/i18n/data/ku_ir.php b/web/framework/i18n/data/ku_ir.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ku_ir.php rename to web/framework/i18n/data/ku_ir.php diff --git a/web/framework-1.1.17/i18n/data/ku_latn.php b/web/framework/i18n/data/ku_latn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ku_latn.php rename to web/framework/i18n/data/ku_latn.php diff --git a/web/framework-1.1.17/i18n/data/ku_latn_sy.php b/web/framework/i18n/data/ku_latn_sy.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ku_latn_sy.php rename to web/framework/i18n/data/ku_latn_sy.php diff --git a/web/framework-1.1.17/i18n/data/ku_latn_tr.php b/web/framework/i18n/data/ku_latn_tr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ku_latn_tr.php rename to web/framework/i18n/data/ku_latn_tr.php diff --git a/web/framework-1.1.17/i18n/data/ku_sy.php b/web/framework/i18n/data/ku_sy.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ku_sy.php rename to web/framework/i18n/data/ku_sy.php diff --git a/web/framework-1.1.17/i18n/data/ku_tr.php b/web/framework/i18n/data/ku_tr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ku_tr.php rename to web/framework/i18n/data/ku_tr.php diff --git a/web/framework-1.1.17/i18n/data/kw.php b/web/framework/i18n/data/kw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kw.php rename to web/framework/i18n/data/kw.php diff --git a/web/framework-1.1.17/i18n/data/kw_gb.php b/web/framework/i18n/data/kw_gb.php similarity index 100% rename from web/framework-1.1.17/i18n/data/kw_gb.php rename to web/framework/i18n/data/kw_gb.php diff --git a/web/framework-1.1.17/i18n/data/ky.php b/web/framework/i18n/data/ky.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ky.php rename to web/framework/i18n/data/ky.php diff --git a/web/framework-1.1.17/i18n/data/ky_kg.php b/web/framework/i18n/data/ky_kg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ky_kg.php rename to web/framework/i18n/data/ky_kg.php diff --git a/web/framework-1.1.17/i18n/data/lag.php b/web/framework/i18n/data/lag.php similarity index 100% rename from web/framework-1.1.17/i18n/data/lag.php rename to web/framework/i18n/data/lag.php diff --git a/web/framework-1.1.17/i18n/data/lag_tz.php b/web/framework/i18n/data/lag_tz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/lag_tz.php rename to web/framework/i18n/data/lag_tz.php diff --git a/web/framework-1.1.17/i18n/data/lg.php b/web/framework/i18n/data/lg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/lg.php rename to web/framework/i18n/data/lg.php diff --git a/web/framework-1.1.17/i18n/data/lg_ug.php b/web/framework/i18n/data/lg_ug.php similarity index 100% rename from web/framework-1.1.17/i18n/data/lg_ug.php rename to web/framework/i18n/data/lg_ug.php diff --git a/web/framework-1.1.17/i18n/data/ln.php b/web/framework/i18n/data/ln.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ln.php rename to web/framework/i18n/data/ln.php diff --git a/web/framework-1.1.17/i18n/data/ln_ao.php b/web/framework/i18n/data/ln_ao.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ln_ao.php rename to web/framework/i18n/data/ln_ao.php diff --git a/web/framework-1.1.17/i18n/data/ln_cd.php b/web/framework/i18n/data/ln_cd.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ln_cd.php rename to web/framework/i18n/data/ln_cd.php diff --git a/web/framework-1.1.17/i18n/data/ln_cf.php b/web/framework/i18n/data/ln_cf.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ln_cf.php rename to web/framework/i18n/data/ln_cf.php diff --git a/web/framework-1.1.17/i18n/data/ln_cg.php b/web/framework/i18n/data/ln_cg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ln_cg.php rename to web/framework/i18n/data/ln_cg.php diff --git a/web/framework-1.1.17/i18n/data/lo.php b/web/framework/i18n/data/lo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/lo.php rename to web/framework/i18n/data/lo.php diff --git a/web/framework-1.1.17/i18n/data/lo_la.php b/web/framework/i18n/data/lo_la.php similarity index 100% rename from web/framework-1.1.17/i18n/data/lo_la.php rename to web/framework/i18n/data/lo_la.php diff --git a/web/framework-1.1.17/i18n/data/lt.php b/web/framework/i18n/data/lt.php similarity index 100% rename from web/framework-1.1.17/i18n/data/lt.php rename to web/framework/i18n/data/lt.php diff --git a/web/framework-1.1.17/i18n/data/lt_lt.php b/web/framework/i18n/data/lt_lt.php similarity index 100% rename from web/framework-1.1.17/i18n/data/lt_lt.php rename to web/framework/i18n/data/lt_lt.php diff --git a/web/framework-1.1.17/i18n/data/lu.php b/web/framework/i18n/data/lu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/lu.php rename to web/framework/i18n/data/lu.php diff --git a/web/framework-1.1.17/i18n/data/lu_cd.php b/web/framework/i18n/data/lu_cd.php similarity index 100% rename from web/framework-1.1.17/i18n/data/lu_cd.php rename to web/framework/i18n/data/lu_cd.php diff --git a/web/framework-1.1.17/i18n/data/luo.php b/web/framework/i18n/data/luo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/luo.php rename to web/framework/i18n/data/luo.php diff --git a/web/framework-1.1.17/i18n/data/luo_ke.php b/web/framework/i18n/data/luo_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/luo_ke.php rename to web/framework/i18n/data/luo_ke.php diff --git a/web/framework-1.1.17/i18n/data/luy.php b/web/framework/i18n/data/luy.php similarity index 100% rename from web/framework-1.1.17/i18n/data/luy.php rename to web/framework/i18n/data/luy.php diff --git a/web/framework-1.1.17/i18n/data/luy_ke.php b/web/framework/i18n/data/luy_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/luy_ke.php rename to web/framework/i18n/data/luy_ke.php diff --git a/web/framework-1.1.17/i18n/data/lv.php b/web/framework/i18n/data/lv.php similarity index 100% rename from web/framework-1.1.17/i18n/data/lv.php rename to web/framework/i18n/data/lv.php diff --git a/web/framework-1.1.17/i18n/data/lv_lv.php b/web/framework/i18n/data/lv_lv.php similarity index 100% rename from web/framework-1.1.17/i18n/data/lv_lv.php rename to web/framework/i18n/data/lv_lv.php diff --git a/web/framework-1.1.17/i18n/data/mas.php b/web/framework/i18n/data/mas.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mas.php rename to web/framework/i18n/data/mas.php diff --git a/web/framework-1.1.17/i18n/data/mas_ke.php b/web/framework/i18n/data/mas_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mas_ke.php rename to web/framework/i18n/data/mas_ke.php diff --git a/web/framework-1.1.17/i18n/data/mas_tz.php b/web/framework/i18n/data/mas_tz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mas_tz.php rename to web/framework/i18n/data/mas_tz.php diff --git a/web/framework-1.1.17/i18n/data/mer.php b/web/framework/i18n/data/mer.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mer.php rename to web/framework/i18n/data/mer.php diff --git a/web/framework-1.1.17/i18n/data/mer_ke.php b/web/framework/i18n/data/mer_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mer_ke.php rename to web/framework/i18n/data/mer_ke.php diff --git a/web/framework-1.1.17/i18n/data/mfe.php b/web/framework/i18n/data/mfe.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mfe.php rename to web/framework/i18n/data/mfe.php diff --git a/web/framework-1.1.17/i18n/data/mfe_mu.php b/web/framework/i18n/data/mfe_mu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mfe_mu.php rename to web/framework/i18n/data/mfe_mu.php diff --git a/web/framework-1.1.17/i18n/data/mg.php b/web/framework/i18n/data/mg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mg.php rename to web/framework/i18n/data/mg.php diff --git a/web/framework-1.1.17/i18n/data/mg_mg.php b/web/framework/i18n/data/mg_mg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mg_mg.php rename to web/framework/i18n/data/mg_mg.php diff --git a/web/framework-1.1.17/i18n/data/mgh.php b/web/framework/i18n/data/mgh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mgh.php rename to web/framework/i18n/data/mgh.php diff --git a/web/framework-1.1.17/i18n/data/mgh_mz.php b/web/framework/i18n/data/mgh_mz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mgh_mz.php rename to web/framework/i18n/data/mgh_mz.php diff --git a/web/framework-1.1.17/i18n/data/mgo.php b/web/framework/i18n/data/mgo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mgo.php rename to web/framework/i18n/data/mgo.php diff --git a/web/framework-1.1.17/i18n/data/mgo_cm.php b/web/framework/i18n/data/mgo_cm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mgo_cm.php rename to web/framework/i18n/data/mgo_cm.php diff --git a/web/framework-1.1.17/i18n/data/mi.php b/web/framework/i18n/data/mi.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mi.php rename to web/framework/i18n/data/mi.php diff --git a/web/framework-1.1.17/i18n/data/mi_nz.php b/web/framework/i18n/data/mi_nz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mi_nz.php rename to web/framework/i18n/data/mi_nz.php diff --git a/web/framework-1.1.17/i18n/data/mk.php b/web/framework/i18n/data/mk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mk.php rename to web/framework/i18n/data/mk.php diff --git a/web/framework-1.1.17/i18n/data/mk_mk.php b/web/framework/i18n/data/mk_mk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mk_mk.php rename to web/framework/i18n/data/mk_mk.php diff --git a/web/framework-1.1.17/i18n/data/ml.php b/web/framework/i18n/data/ml.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ml.php rename to web/framework/i18n/data/ml.php diff --git a/web/framework-1.1.17/i18n/data/ml_in.php b/web/framework/i18n/data/ml_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ml_in.php rename to web/framework/i18n/data/ml_in.php diff --git a/web/framework-1.1.17/i18n/data/mn.php b/web/framework/i18n/data/mn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mn.php rename to web/framework/i18n/data/mn.php diff --git a/web/framework-1.1.17/i18n/data/mn_cn.php b/web/framework/i18n/data/mn_cn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mn_cn.php rename to web/framework/i18n/data/mn_cn.php diff --git a/web/framework-1.1.17/i18n/data/mn_cyrl.php b/web/framework/i18n/data/mn_cyrl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mn_cyrl.php rename to web/framework/i18n/data/mn_cyrl.php diff --git a/web/framework-1.1.17/i18n/data/mn_cyrl_mn.php b/web/framework/i18n/data/mn_cyrl_mn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mn_cyrl_mn.php rename to web/framework/i18n/data/mn_cyrl_mn.php diff --git a/web/framework-1.1.17/i18n/data/mn_mn.php b/web/framework/i18n/data/mn_mn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mn_mn.php rename to web/framework/i18n/data/mn_mn.php diff --git a/web/framework-1.1.17/i18n/data/mn_mong.php b/web/framework/i18n/data/mn_mong.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mn_mong.php rename to web/framework/i18n/data/mn_mong.php diff --git a/web/framework-1.1.17/i18n/data/mn_mong_cn.php b/web/framework/i18n/data/mn_mong_cn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mn_mong_cn.php rename to web/framework/i18n/data/mn_mong_cn.php diff --git a/web/framework-1.1.17/i18n/data/mo.php b/web/framework/i18n/data/mo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mo.php rename to web/framework/i18n/data/mo.php diff --git a/web/framework-1.1.17/i18n/data/mr.php b/web/framework/i18n/data/mr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mr.php rename to web/framework/i18n/data/mr.php diff --git a/web/framework-1.1.17/i18n/data/mr_in.php b/web/framework/i18n/data/mr_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mr_in.php rename to web/framework/i18n/data/mr_in.php diff --git a/web/framework-1.1.17/i18n/data/ms.php b/web/framework/i18n/data/ms.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ms.php rename to web/framework/i18n/data/ms.php diff --git a/web/framework-1.1.17/i18n/data/ms_bn.php b/web/framework/i18n/data/ms_bn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ms_bn.php rename to web/framework/i18n/data/ms_bn.php diff --git a/web/framework-1.1.17/i18n/data/ms_latn.php b/web/framework/i18n/data/ms_latn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ms_latn.php rename to web/framework/i18n/data/ms_latn.php diff --git a/web/framework-1.1.17/i18n/data/ms_latn_bn.php b/web/framework/i18n/data/ms_latn_bn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ms_latn_bn.php rename to web/framework/i18n/data/ms_latn_bn.php diff --git a/web/framework-1.1.17/i18n/data/ms_latn_my.php b/web/framework/i18n/data/ms_latn_my.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ms_latn_my.php rename to web/framework/i18n/data/ms_latn_my.php diff --git a/web/framework-1.1.17/i18n/data/ms_latn_sg.php b/web/framework/i18n/data/ms_latn_sg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ms_latn_sg.php rename to web/framework/i18n/data/ms_latn_sg.php diff --git a/web/framework-1.1.17/i18n/data/ms_my.php b/web/framework/i18n/data/ms_my.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ms_my.php rename to web/framework/i18n/data/ms_my.php diff --git a/web/framework-1.1.17/i18n/data/mt.php b/web/framework/i18n/data/mt.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mt.php rename to web/framework/i18n/data/mt.php diff --git a/web/framework-1.1.17/i18n/data/mt_mt.php b/web/framework/i18n/data/mt_mt.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mt_mt.php rename to web/framework/i18n/data/mt_mt.php diff --git a/web/framework-1.1.17/i18n/data/mua.php b/web/framework/i18n/data/mua.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mua.php rename to web/framework/i18n/data/mua.php diff --git a/web/framework-1.1.17/i18n/data/mua_cm.php b/web/framework/i18n/data/mua_cm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/mua_cm.php rename to web/framework/i18n/data/mua_cm.php diff --git a/web/framework-1.1.17/i18n/data/my.php b/web/framework/i18n/data/my.php similarity index 100% rename from web/framework-1.1.17/i18n/data/my.php rename to web/framework/i18n/data/my.php diff --git a/web/framework-1.1.17/i18n/data/my_mm.php b/web/framework/i18n/data/my_mm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/my_mm.php rename to web/framework/i18n/data/my_mm.php diff --git a/web/framework-1.1.17/i18n/data/naq.php b/web/framework/i18n/data/naq.php similarity index 100% rename from web/framework-1.1.17/i18n/data/naq.php rename to web/framework/i18n/data/naq.php diff --git a/web/framework-1.1.17/i18n/data/naq_na.php b/web/framework/i18n/data/naq_na.php similarity index 100% rename from web/framework-1.1.17/i18n/data/naq_na.php rename to web/framework/i18n/data/naq_na.php diff --git a/web/framework-1.1.17/i18n/data/nb.php b/web/framework/i18n/data/nb.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nb.php rename to web/framework/i18n/data/nb.php diff --git a/web/framework-1.1.17/i18n/data/nb_no.php b/web/framework/i18n/data/nb_no.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nb_no.php rename to web/framework/i18n/data/nb_no.php diff --git a/web/framework-1.1.17/i18n/data/nd.php b/web/framework/i18n/data/nd.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nd.php rename to web/framework/i18n/data/nd.php diff --git a/web/framework-1.1.17/i18n/data/nd_zw.php b/web/framework/i18n/data/nd_zw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nd_zw.php rename to web/framework/i18n/data/nd_zw.php diff --git a/web/framework-1.1.17/i18n/data/nds.php b/web/framework/i18n/data/nds.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nds.php rename to web/framework/i18n/data/nds.php diff --git a/web/framework-1.1.17/i18n/data/nds_de.php b/web/framework/i18n/data/nds_de.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nds_de.php rename to web/framework/i18n/data/nds_de.php diff --git a/web/framework-1.1.17/i18n/data/ne.php b/web/framework/i18n/data/ne.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ne.php rename to web/framework/i18n/data/ne.php diff --git a/web/framework-1.1.17/i18n/data/ne_in.php b/web/framework/i18n/data/ne_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ne_in.php rename to web/framework/i18n/data/ne_in.php diff --git a/web/framework-1.1.17/i18n/data/ne_np.php b/web/framework/i18n/data/ne_np.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ne_np.php rename to web/framework/i18n/data/ne_np.php diff --git a/web/framework-1.1.17/i18n/data/nl.php b/web/framework/i18n/data/nl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nl.php rename to web/framework/i18n/data/nl.php diff --git a/web/framework-1.1.17/i18n/data/nl_aw.php b/web/framework/i18n/data/nl_aw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nl_aw.php rename to web/framework/i18n/data/nl_aw.php diff --git a/web/framework-1.1.17/i18n/data/nl_be.php b/web/framework/i18n/data/nl_be.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nl_be.php rename to web/framework/i18n/data/nl_be.php diff --git a/web/framework-1.1.17/i18n/data/nl_cw.php b/web/framework/i18n/data/nl_cw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nl_cw.php rename to web/framework/i18n/data/nl_cw.php diff --git a/web/framework-1.1.17/i18n/data/nl_nl.php b/web/framework/i18n/data/nl_nl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nl_nl.php rename to web/framework/i18n/data/nl_nl.php diff --git a/web/framework-1.1.17/i18n/data/nl_sr.php b/web/framework/i18n/data/nl_sr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nl_sr.php rename to web/framework/i18n/data/nl_sr.php diff --git a/web/framework-1.1.17/i18n/data/nl_sx.php b/web/framework/i18n/data/nl_sx.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nl_sx.php rename to web/framework/i18n/data/nl_sx.php diff --git a/web/framework-1.1.17/i18n/data/nmg.php b/web/framework/i18n/data/nmg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nmg.php rename to web/framework/i18n/data/nmg.php diff --git a/web/framework-1.1.17/i18n/data/nmg_cm.php b/web/framework/i18n/data/nmg_cm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nmg_cm.php rename to web/framework/i18n/data/nmg_cm.php diff --git a/web/framework-1.1.17/i18n/data/nn.php b/web/framework/i18n/data/nn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nn.php rename to web/framework/i18n/data/nn.php diff --git a/web/framework-1.1.17/i18n/data/nn_no.php b/web/framework/i18n/data/nn_no.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nn_no.php rename to web/framework/i18n/data/nn_no.php diff --git a/web/framework-1.1.17/i18n/data/nnh.php b/web/framework/i18n/data/nnh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nnh.php rename to web/framework/i18n/data/nnh.php diff --git a/web/framework-1.1.17/i18n/data/nnh_cm.php b/web/framework/i18n/data/nnh_cm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nnh_cm.php rename to web/framework/i18n/data/nnh_cm.php diff --git a/web/framework-1.1.17/i18n/data/no.php b/web/framework/i18n/data/no.php similarity index 100% rename from web/framework-1.1.17/i18n/data/no.php rename to web/framework/i18n/data/no.php diff --git a/web/framework-1.1.17/i18n/data/nr.php b/web/framework/i18n/data/nr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nr.php rename to web/framework/i18n/data/nr.php diff --git a/web/framework-1.1.17/i18n/data/nr_za.php b/web/framework/i18n/data/nr_za.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nr_za.php rename to web/framework/i18n/data/nr_za.php diff --git a/web/framework-1.1.17/i18n/data/nso.php b/web/framework/i18n/data/nso.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nso.php rename to web/framework/i18n/data/nso.php diff --git a/web/framework-1.1.17/i18n/data/nso_za.php b/web/framework/i18n/data/nso_za.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nso_za.php rename to web/framework/i18n/data/nso_za.php diff --git a/web/framework-1.1.17/i18n/data/nus.php b/web/framework/i18n/data/nus.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nus.php rename to web/framework/i18n/data/nus.php diff --git a/web/framework-1.1.17/i18n/data/nus_sd.php b/web/framework/i18n/data/nus_sd.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nus_sd.php rename to web/framework/i18n/data/nus_sd.php diff --git a/web/framework-1.1.17/i18n/data/ny.php b/web/framework/i18n/data/ny.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ny.php rename to web/framework/i18n/data/ny.php diff --git a/web/framework-1.1.17/i18n/data/ny_mw.php b/web/framework/i18n/data/ny_mw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ny_mw.php rename to web/framework/i18n/data/ny_mw.php diff --git a/web/framework-1.1.17/i18n/data/nyn.php b/web/framework/i18n/data/nyn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nyn.php rename to web/framework/i18n/data/nyn.php diff --git a/web/framework-1.1.17/i18n/data/nyn_ug.php b/web/framework/i18n/data/nyn_ug.php similarity index 100% rename from web/framework-1.1.17/i18n/data/nyn_ug.php rename to web/framework/i18n/data/nyn_ug.php diff --git a/web/framework-1.1.17/i18n/data/oc.php b/web/framework/i18n/data/oc.php similarity index 100% rename from web/framework-1.1.17/i18n/data/oc.php rename to web/framework/i18n/data/oc.php diff --git a/web/framework-1.1.17/i18n/data/oc_fr.php b/web/framework/i18n/data/oc_fr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/oc_fr.php rename to web/framework/i18n/data/oc_fr.php diff --git a/web/framework-1.1.17/i18n/data/om.php b/web/framework/i18n/data/om.php similarity index 100% rename from web/framework-1.1.17/i18n/data/om.php rename to web/framework/i18n/data/om.php diff --git a/web/framework-1.1.17/i18n/data/om_et.php b/web/framework/i18n/data/om_et.php similarity index 100% rename from web/framework-1.1.17/i18n/data/om_et.php rename to web/framework/i18n/data/om_et.php diff --git a/web/framework-1.1.17/i18n/data/om_ke.php b/web/framework/i18n/data/om_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/om_ke.php rename to web/framework/i18n/data/om_ke.php diff --git a/web/framework-1.1.17/i18n/data/or.php b/web/framework/i18n/data/or.php similarity index 100% rename from web/framework-1.1.17/i18n/data/or.php rename to web/framework/i18n/data/or.php diff --git a/web/framework-1.1.17/i18n/data/or_in.php b/web/framework/i18n/data/or_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/or_in.php rename to web/framework/i18n/data/or_in.php diff --git a/web/framework-1.1.17/i18n/data/os.php b/web/framework/i18n/data/os.php similarity index 100% rename from web/framework-1.1.17/i18n/data/os.php rename to web/framework/i18n/data/os.php diff --git a/web/framework-1.1.17/i18n/data/os_ge.php b/web/framework/i18n/data/os_ge.php similarity index 100% rename from web/framework-1.1.17/i18n/data/os_ge.php rename to web/framework/i18n/data/os_ge.php diff --git a/web/framework-1.1.17/i18n/data/os_ru.php b/web/framework/i18n/data/os_ru.php similarity index 100% rename from web/framework-1.1.17/i18n/data/os_ru.php rename to web/framework/i18n/data/os_ru.php diff --git a/web/framework-1.1.17/i18n/data/pa.php b/web/framework/i18n/data/pa.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pa.php rename to web/framework/i18n/data/pa.php diff --git a/web/framework-1.1.17/i18n/data/pa_arab.php b/web/framework/i18n/data/pa_arab.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pa_arab.php rename to web/framework/i18n/data/pa_arab.php diff --git a/web/framework-1.1.17/i18n/data/pa_arab_pk.php b/web/framework/i18n/data/pa_arab_pk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pa_arab_pk.php rename to web/framework/i18n/data/pa_arab_pk.php diff --git a/web/framework-1.1.17/i18n/data/pa_guru.php b/web/framework/i18n/data/pa_guru.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pa_guru.php rename to web/framework/i18n/data/pa_guru.php diff --git a/web/framework-1.1.17/i18n/data/pa_guru_in.php b/web/framework/i18n/data/pa_guru_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pa_guru_in.php rename to web/framework/i18n/data/pa_guru_in.php diff --git a/web/framework-1.1.17/i18n/data/pa_in.php b/web/framework/i18n/data/pa_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pa_in.php rename to web/framework/i18n/data/pa_in.php diff --git a/web/framework-1.1.17/i18n/data/pa_pk.php b/web/framework/i18n/data/pa_pk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pa_pk.php rename to web/framework/i18n/data/pa_pk.php diff --git a/web/framework-1.1.17/i18n/data/pl.php b/web/framework/i18n/data/pl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pl.php rename to web/framework/i18n/data/pl.php diff --git a/web/framework-1.1.17/i18n/data/pl_pl.php b/web/framework/i18n/data/pl_pl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pl_pl.php rename to web/framework/i18n/data/pl_pl.php diff --git a/web/framework-1.1.17/i18n/data/ps.php b/web/framework/i18n/data/ps.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ps.php rename to web/framework/i18n/data/ps.php diff --git a/web/framework-1.1.17/i18n/data/ps_af.php b/web/framework/i18n/data/ps_af.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ps_af.php rename to web/framework/i18n/data/ps_af.php diff --git a/web/framework-1.1.17/i18n/data/pt.php b/web/framework/i18n/data/pt.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pt.php rename to web/framework/i18n/data/pt.php diff --git a/web/framework-1.1.17/i18n/data/pt_ao.php b/web/framework/i18n/data/pt_ao.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pt_ao.php rename to web/framework/i18n/data/pt_ao.php diff --git a/web/framework-1.1.17/i18n/data/pt_br.php b/web/framework/i18n/data/pt_br.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pt_br.php rename to web/framework/i18n/data/pt_br.php diff --git a/web/framework-1.1.17/i18n/data/pt_cv.php b/web/framework/i18n/data/pt_cv.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pt_cv.php rename to web/framework/i18n/data/pt_cv.php diff --git a/web/framework-1.1.17/i18n/data/pt_gw.php b/web/framework/i18n/data/pt_gw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pt_gw.php rename to web/framework/i18n/data/pt_gw.php diff --git a/web/framework-1.1.17/i18n/data/pt_mo.php b/web/framework/i18n/data/pt_mo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pt_mo.php rename to web/framework/i18n/data/pt_mo.php diff --git a/web/framework-1.1.17/i18n/data/pt_mz.php b/web/framework/i18n/data/pt_mz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pt_mz.php rename to web/framework/i18n/data/pt_mz.php diff --git a/web/framework-1.1.17/i18n/data/pt_pt.php b/web/framework/i18n/data/pt_pt.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pt_pt.php rename to web/framework/i18n/data/pt_pt.php diff --git a/web/framework-1.1.17/i18n/data/pt_st.php b/web/framework/i18n/data/pt_st.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pt_st.php rename to web/framework/i18n/data/pt_st.php diff --git a/web/framework-1.1.17/i18n/data/pt_tl.php b/web/framework/i18n/data/pt_tl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/pt_tl.php rename to web/framework/i18n/data/pt_tl.php diff --git a/web/framework-1.1.17/i18n/data/rm.php b/web/framework/i18n/data/rm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/rm.php rename to web/framework/i18n/data/rm.php diff --git a/web/framework-1.1.17/i18n/data/rm_ch.php b/web/framework/i18n/data/rm_ch.php similarity index 100% rename from web/framework-1.1.17/i18n/data/rm_ch.php rename to web/framework/i18n/data/rm_ch.php diff --git a/web/framework-1.1.17/i18n/data/rn.php b/web/framework/i18n/data/rn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/rn.php rename to web/framework/i18n/data/rn.php diff --git a/web/framework-1.1.17/i18n/data/rn_bi.php b/web/framework/i18n/data/rn_bi.php similarity index 100% rename from web/framework-1.1.17/i18n/data/rn_bi.php rename to web/framework/i18n/data/rn_bi.php diff --git a/web/framework-1.1.17/i18n/data/ro.php b/web/framework/i18n/data/ro.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ro.php rename to web/framework/i18n/data/ro.php diff --git a/web/framework-1.1.17/i18n/data/ro_md.php b/web/framework/i18n/data/ro_md.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ro_md.php rename to web/framework/i18n/data/ro_md.php diff --git a/web/framework-1.1.17/i18n/data/ro_ro.php b/web/framework/i18n/data/ro_ro.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ro_ro.php rename to web/framework/i18n/data/ro_ro.php diff --git a/web/framework-1.1.17/i18n/data/rof.php b/web/framework/i18n/data/rof.php similarity index 100% rename from web/framework-1.1.17/i18n/data/rof.php rename to web/framework/i18n/data/rof.php diff --git a/web/framework-1.1.17/i18n/data/rof_tz.php b/web/framework/i18n/data/rof_tz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/rof_tz.php rename to web/framework/i18n/data/rof_tz.php diff --git a/web/framework-1.1.17/i18n/data/root.php b/web/framework/i18n/data/root.php similarity index 100% rename from web/framework-1.1.17/i18n/data/root.php rename to web/framework/i18n/data/root.php diff --git a/web/framework-1.1.17/i18n/data/ru.php b/web/framework/i18n/data/ru.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ru.php rename to web/framework/i18n/data/ru.php diff --git a/web/framework-1.1.17/i18n/data/ru_by.php b/web/framework/i18n/data/ru_by.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ru_by.php rename to web/framework/i18n/data/ru_by.php diff --git a/web/framework-1.1.17/i18n/data/ru_kg.php b/web/framework/i18n/data/ru_kg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ru_kg.php rename to web/framework/i18n/data/ru_kg.php diff --git a/web/framework-1.1.17/i18n/data/ru_kz.php b/web/framework/i18n/data/ru_kz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ru_kz.php rename to web/framework/i18n/data/ru_kz.php diff --git a/web/framework-1.1.17/i18n/data/ru_md.php b/web/framework/i18n/data/ru_md.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ru_md.php rename to web/framework/i18n/data/ru_md.php diff --git a/web/framework-1.1.17/i18n/data/ru_ru.php b/web/framework/i18n/data/ru_ru.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ru_ru.php rename to web/framework/i18n/data/ru_ru.php diff --git a/web/framework-1.1.17/i18n/data/ru_ua.php b/web/framework/i18n/data/ru_ua.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ru_ua.php rename to web/framework/i18n/data/ru_ua.php diff --git a/web/framework-1.1.17/i18n/data/rw.php b/web/framework/i18n/data/rw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/rw.php rename to web/framework/i18n/data/rw.php diff --git a/web/framework-1.1.17/i18n/data/rw_rw.php b/web/framework/i18n/data/rw_rw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/rw_rw.php rename to web/framework/i18n/data/rw_rw.php diff --git a/web/framework-1.1.17/i18n/data/rwk.php b/web/framework/i18n/data/rwk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/rwk.php rename to web/framework/i18n/data/rwk.php diff --git a/web/framework-1.1.17/i18n/data/rwk_tz.php b/web/framework/i18n/data/rwk_tz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/rwk_tz.php rename to web/framework/i18n/data/rwk_tz.php diff --git a/web/framework-1.1.17/i18n/data/sa.php b/web/framework/i18n/data/sa.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sa.php rename to web/framework/i18n/data/sa.php diff --git a/web/framework-1.1.17/i18n/data/sa_in.php b/web/framework/i18n/data/sa_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sa_in.php rename to web/framework/i18n/data/sa_in.php diff --git a/web/framework-1.1.17/i18n/data/sah.php b/web/framework/i18n/data/sah.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sah.php rename to web/framework/i18n/data/sah.php diff --git a/web/framework-1.1.17/i18n/data/sah_ru.php b/web/framework/i18n/data/sah_ru.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sah_ru.php rename to web/framework/i18n/data/sah_ru.php diff --git a/web/framework-1.1.17/i18n/data/saq.php b/web/framework/i18n/data/saq.php similarity index 100% rename from web/framework-1.1.17/i18n/data/saq.php rename to web/framework/i18n/data/saq.php diff --git a/web/framework-1.1.17/i18n/data/saq_ke.php b/web/framework/i18n/data/saq_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/saq_ke.php rename to web/framework/i18n/data/saq_ke.php diff --git a/web/framework-1.1.17/i18n/data/sbp.php b/web/framework/i18n/data/sbp.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sbp.php rename to web/framework/i18n/data/sbp.php diff --git a/web/framework-1.1.17/i18n/data/sbp_tz.php b/web/framework/i18n/data/sbp_tz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sbp_tz.php rename to web/framework/i18n/data/sbp_tz.php diff --git a/web/framework-1.1.17/i18n/data/se.php b/web/framework/i18n/data/se.php similarity index 100% rename from web/framework-1.1.17/i18n/data/se.php rename to web/framework/i18n/data/se.php diff --git a/web/framework-1.1.17/i18n/data/se_fi.php b/web/framework/i18n/data/se_fi.php similarity index 100% rename from web/framework-1.1.17/i18n/data/se_fi.php rename to web/framework/i18n/data/se_fi.php diff --git a/web/framework-1.1.17/i18n/data/se_no.php b/web/framework/i18n/data/se_no.php similarity index 100% rename from web/framework-1.1.17/i18n/data/se_no.php rename to web/framework/i18n/data/se_no.php diff --git a/web/framework-1.1.17/i18n/data/seh.php b/web/framework/i18n/data/seh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/seh.php rename to web/framework/i18n/data/seh.php diff --git a/web/framework-1.1.17/i18n/data/seh_mz.php b/web/framework/i18n/data/seh_mz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/seh_mz.php rename to web/framework/i18n/data/seh_mz.php diff --git a/web/framework-1.1.17/i18n/data/ses.php b/web/framework/i18n/data/ses.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ses.php rename to web/framework/i18n/data/ses.php diff --git a/web/framework-1.1.17/i18n/data/ses_ml.php b/web/framework/i18n/data/ses_ml.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ses_ml.php rename to web/framework/i18n/data/ses_ml.php diff --git a/web/framework-1.1.17/i18n/data/sg.php b/web/framework/i18n/data/sg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sg.php rename to web/framework/i18n/data/sg.php diff --git a/web/framework-1.1.17/i18n/data/sg_cf.php b/web/framework/i18n/data/sg_cf.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sg_cf.php rename to web/framework/i18n/data/sg_cf.php diff --git a/web/framework-1.1.17/i18n/data/sh.php b/web/framework/i18n/data/sh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sh.php rename to web/framework/i18n/data/sh.php diff --git a/web/framework-1.1.17/i18n/data/sh_ba.php b/web/framework/i18n/data/sh_ba.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sh_ba.php rename to web/framework/i18n/data/sh_ba.php diff --git a/web/framework-1.1.17/i18n/data/sh_cs.php b/web/framework/i18n/data/sh_cs.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sh_cs.php rename to web/framework/i18n/data/sh_cs.php diff --git a/web/framework-1.1.17/i18n/data/sh_yu.php b/web/framework/i18n/data/sh_yu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sh_yu.php rename to web/framework/i18n/data/sh_yu.php diff --git a/web/framework-1.1.17/i18n/data/shi.php b/web/framework/i18n/data/shi.php similarity index 100% rename from web/framework-1.1.17/i18n/data/shi.php rename to web/framework/i18n/data/shi.php diff --git a/web/framework-1.1.17/i18n/data/shi_latn.php b/web/framework/i18n/data/shi_latn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/shi_latn.php rename to web/framework/i18n/data/shi_latn.php diff --git a/web/framework-1.1.17/i18n/data/shi_latn_ma.php b/web/framework/i18n/data/shi_latn_ma.php similarity index 100% rename from web/framework-1.1.17/i18n/data/shi_latn_ma.php rename to web/framework/i18n/data/shi_latn_ma.php diff --git a/web/framework-1.1.17/i18n/data/shi_ma.php b/web/framework/i18n/data/shi_ma.php similarity index 100% rename from web/framework-1.1.17/i18n/data/shi_ma.php rename to web/framework/i18n/data/shi_ma.php diff --git a/web/framework-1.1.17/i18n/data/shi_tfng.php b/web/framework/i18n/data/shi_tfng.php similarity index 100% rename from web/framework-1.1.17/i18n/data/shi_tfng.php rename to web/framework/i18n/data/shi_tfng.php diff --git a/web/framework-1.1.17/i18n/data/shi_tfng_ma.php b/web/framework/i18n/data/shi_tfng_ma.php similarity index 100% rename from web/framework-1.1.17/i18n/data/shi_tfng_ma.php rename to web/framework/i18n/data/shi_tfng_ma.php diff --git a/web/framework-1.1.17/i18n/data/si.php b/web/framework/i18n/data/si.php similarity index 100% rename from web/framework-1.1.17/i18n/data/si.php rename to web/framework/i18n/data/si.php diff --git a/web/framework-1.1.17/i18n/data/si_lk.php b/web/framework/i18n/data/si_lk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/si_lk.php rename to web/framework/i18n/data/si_lk.php diff --git a/web/framework-1.1.17/i18n/data/sid.php b/web/framework/i18n/data/sid.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sid.php rename to web/framework/i18n/data/sid.php diff --git a/web/framework-1.1.17/i18n/data/sid_et.php b/web/framework/i18n/data/sid_et.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sid_et.php rename to web/framework/i18n/data/sid_et.php diff --git a/web/framework-1.1.17/i18n/data/sk.php b/web/framework/i18n/data/sk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sk.php rename to web/framework/i18n/data/sk.php diff --git a/web/framework-1.1.17/i18n/data/sk_sk.php b/web/framework/i18n/data/sk_sk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sk_sk.php rename to web/framework/i18n/data/sk_sk.php diff --git a/web/framework-1.1.17/i18n/data/sl.php b/web/framework/i18n/data/sl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sl.php rename to web/framework/i18n/data/sl.php diff --git a/web/framework-1.1.17/i18n/data/sl_si.php b/web/framework/i18n/data/sl_si.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sl_si.php rename to web/framework/i18n/data/sl_si.php diff --git a/web/framework-1.1.17/i18n/data/sn.php b/web/framework/i18n/data/sn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sn.php rename to web/framework/i18n/data/sn.php diff --git a/web/framework-1.1.17/i18n/data/sn_zw.php b/web/framework/i18n/data/sn_zw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sn_zw.php rename to web/framework/i18n/data/sn_zw.php diff --git a/web/framework-1.1.17/i18n/data/so.php b/web/framework/i18n/data/so.php similarity index 100% rename from web/framework-1.1.17/i18n/data/so.php rename to web/framework/i18n/data/so.php diff --git a/web/framework-1.1.17/i18n/data/so_dj.php b/web/framework/i18n/data/so_dj.php similarity index 100% rename from web/framework-1.1.17/i18n/data/so_dj.php rename to web/framework/i18n/data/so_dj.php diff --git a/web/framework-1.1.17/i18n/data/so_et.php b/web/framework/i18n/data/so_et.php similarity index 100% rename from web/framework-1.1.17/i18n/data/so_et.php rename to web/framework/i18n/data/so_et.php diff --git a/web/framework-1.1.17/i18n/data/so_ke.php b/web/framework/i18n/data/so_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/so_ke.php rename to web/framework/i18n/data/so_ke.php diff --git a/web/framework-1.1.17/i18n/data/so_so.php b/web/framework/i18n/data/so_so.php similarity index 100% rename from web/framework-1.1.17/i18n/data/so_so.php rename to web/framework/i18n/data/so_so.php diff --git a/web/framework-1.1.17/i18n/data/sq.php b/web/framework/i18n/data/sq.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sq.php rename to web/framework/i18n/data/sq.php diff --git a/web/framework-1.1.17/i18n/data/sq_al.php b/web/framework/i18n/data/sq_al.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sq_al.php rename to web/framework/i18n/data/sq_al.php diff --git a/web/framework-1.1.17/i18n/data/sq_mk.php b/web/framework/i18n/data/sq_mk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sq_mk.php rename to web/framework/i18n/data/sq_mk.php diff --git a/web/framework-1.1.17/i18n/data/sq_xk.php b/web/framework/i18n/data/sq_xk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sq_xk.php rename to web/framework/i18n/data/sq_xk.php diff --git a/web/framework-1.1.17/i18n/data/sr.php b/web/framework/i18n/data/sr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr.php rename to web/framework/i18n/data/sr.php diff --git a/web/framework-1.1.17/i18n/data/sr_ba.php b/web/framework/i18n/data/sr_ba.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_ba.php rename to web/framework/i18n/data/sr_ba.php diff --git a/web/framework-1.1.17/i18n/data/sr_cs.php b/web/framework/i18n/data/sr_cs.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_cs.php rename to web/framework/i18n/data/sr_cs.php diff --git a/web/framework-1.1.17/i18n/data/sr_cyrl.php b/web/framework/i18n/data/sr_cyrl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_cyrl.php rename to web/framework/i18n/data/sr_cyrl.php diff --git a/web/framework-1.1.17/i18n/data/sr_cyrl_ba.php b/web/framework/i18n/data/sr_cyrl_ba.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_cyrl_ba.php rename to web/framework/i18n/data/sr_cyrl_ba.php diff --git a/web/framework-1.1.17/i18n/data/sr_cyrl_cs.php b/web/framework/i18n/data/sr_cyrl_cs.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_cyrl_cs.php rename to web/framework/i18n/data/sr_cyrl_cs.php diff --git a/web/framework-1.1.17/i18n/data/sr_cyrl_me.php b/web/framework/i18n/data/sr_cyrl_me.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_cyrl_me.php rename to web/framework/i18n/data/sr_cyrl_me.php diff --git a/web/framework-1.1.17/i18n/data/sr_cyrl_rs.php b/web/framework/i18n/data/sr_cyrl_rs.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_cyrl_rs.php rename to web/framework/i18n/data/sr_cyrl_rs.php diff --git a/web/framework-1.1.17/i18n/data/sr_cyrl_xk.php b/web/framework/i18n/data/sr_cyrl_xk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_cyrl_xk.php rename to web/framework/i18n/data/sr_cyrl_xk.php diff --git a/web/framework-1.1.17/i18n/data/sr_cyrl_yu.php b/web/framework/i18n/data/sr_cyrl_yu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_cyrl_yu.php rename to web/framework/i18n/data/sr_cyrl_yu.php diff --git a/web/framework-1.1.17/i18n/data/sr_latn.php b/web/framework/i18n/data/sr_latn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_latn.php rename to web/framework/i18n/data/sr_latn.php diff --git a/web/framework-1.1.17/i18n/data/sr_latn_ba.php b/web/framework/i18n/data/sr_latn_ba.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_latn_ba.php rename to web/framework/i18n/data/sr_latn_ba.php diff --git a/web/framework-1.1.17/i18n/data/sr_latn_cs.php b/web/framework/i18n/data/sr_latn_cs.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_latn_cs.php rename to web/framework/i18n/data/sr_latn_cs.php diff --git a/web/framework-1.1.17/i18n/data/sr_latn_me.php b/web/framework/i18n/data/sr_latn_me.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_latn_me.php rename to web/framework/i18n/data/sr_latn_me.php diff --git a/web/framework-1.1.17/i18n/data/sr_latn_rs.php b/web/framework/i18n/data/sr_latn_rs.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_latn_rs.php rename to web/framework/i18n/data/sr_latn_rs.php diff --git a/web/framework-1.1.17/i18n/data/sr_latn_xk.php b/web/framework/i18n/data/sr_latn_xk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_latn_xk.php rename to web/framework/i18n/data/sr_latn_xk.php diff --git a/web/framework-1.1.17/i18n/data/sr_latn_yu.php b/web/framework/i18n/data/sr_latn_yu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_latn_yu.php rename to web/framework/i18n/data/sr_latn_yu.php diff --git a/web/framework-1.1.17/i18n/data/sr_me.php b/web/framework/i18n/data/sr_me.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_me.php rename to web/framework/i18n/data/sr_me.php diff --git a/web/framework-1.1.17/i18n/data/sr_rs.php b/web/framework/i18n/data/sr_rs.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_rs.php rename to web/framework/i18n/data/sr_rs.php diff --git a/web/framework-1.1.17/i18n/data/sr_yu.php b/web/framework/i18n/data/sr_yu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sr_yu.php rename to web/framework/i18n/data/sr_yu.php diff --git a/web/framework-1.1.17/i18n/data/ss.php b/web/framework/i18n/data/ss.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ss.php rename to web/framework/i18n/data/ss.php diff --git a/web/framework-1.1.17/i18n/data/ss_sz.php b/web/framework/i18n/data/ss_sz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ss_sz.php rename to web/framework/i18n/data/ss_sz.php diff --git a/web/framework-1.1.17/i18n/data/ss_za.php b/web/framework/i18n/data/ss_za.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ss_za.php rename to web/framework/i18n/data/ss_za.php diff --git a/web/framework-1.1.17/i18n/data/ssy.php b/web/framework/i18n/data/ssy.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ssy.php rename to web/framework/i18n/data/ssy.php diff --git a/web/framework-1.1.17/i18n/data/ssy_er.php b/web/framework/i18n/data/ssy_er.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ssy_er.php rename to web/framework/i18n/data/ssy_er.php diff --git a/web/framework-1.1.17/i18n/data/st.php b/web/framework/i18n/data/st.php similarity index 100% rename from web/framework-1.1.17/i18n/data/st.php rename to web/framework/i18n/data/st.php diff --git a/web/framework-1.1.17/i18n/data/st_ls.php b/web/framework/i18n/data/st_ls.php similarity index 100% rename from web/framework-1.1.17/i18n/data/st_ls.php rename to web/framework/i18n/data/st_ls.php diff --git a/web/framework-1.1.17/i18n/data/st_za.php b/web/framework/i18n/data/st_za.php similarity index 100% rename from web/framework-1.1.17/i18n/data/st_za.php rename to web/framework/i18n/data/st_za.php diff --git a/web/framework-1.1.17/i18n/data/sv.php b/web/framework/i18n/data/sv.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sv.php rename to web/framework/i18n/data/sv.php diff --git a/web/framework-1.1.17/i18n/data/sv_ax.php b/web/framework/i18n/data/sv_ax.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sv_ax.php rename to web/framework/i18n/data/sv_ax.php diff --git a/web/framework-1.1.17/i18n/data/sv_fi.php b/web/framework/i18n/data/sv_fi.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sv_fi.php rename to web/framework/i18n/data/sv_fi.php diff --git a/web/framework-1.1.17/i18n/data/sv_se.php b/web/framework/i18n/data/sv_se.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sv_se.php rename to web/framework/i18n/data/sv_se.php diff --git a/web/framework-1.1.17/i18n/data/sw.php b/web/framework/i18n/data/sw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sw.php rename to web/framework/i18n/data/sw.php diff --git a/web/framework-1.1.17/i18n/data/sw_ke.php b/web/framework/i18n/data/sw_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sw_ke.php rename to web/framework/i18n/data/sw_ke.php diff --git a/web/framework-1.1.17/i18n/data/sw_tz.php b/web/framework/i18n/data/sw_tz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sw_tz.php rename to web/framework/i18n/data/sw_tz.php diff --git a/web/framework-1.1.17/i18n/data/sw_ug.php b/web/framework/i18n/data/sw_ug.php similarity index 100% rename from web/framework-1.1.17/i18n/data/sw_ug.php rename to web/framework/i18n/data/sw_ug.php diff --git a/web/framework-1.1.17/i18n/data/swc.php b/web/framework/i18n/data/swc.php similarity index 100% rename from web/framework-1.1.17/i18n/data/swc.php rename to web/framework/i18n/data/swc.php diff --git a/web/framework-1.1.17/i18n/data/swc_cd.php b/web/framework/i18n/data/swc_cd.php similarity index 100% rename from web/framework-1.1.17/i18n/data/swc_cd.php rename to web/framework/i18n/data/swc_cd.php diff --git a/web/framework-1.1.17/i18n/data/syr.php b/web/framework/i18n/data/syr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/syr.php rename to web/framework/i18n/data/syr.php diff --git a/web/framework-1.1.17/i18n/data/syr_sy.php b/web/framework/i18n/data/syr_sy.php similarity index 100% rename from web/framework-1.1.17/i18n/data/syr_sy.php rename to web/framework/i18n/data/syr_sy.php diff --git a/web/framework-1.1.17/i18n/data/ta.php b/web/framework/i18n/data/ta.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ta.php rename to web/framework/i18n/data/ta.php diff --git a/web/framework-1.1.17/i18n/data/ta_in.php b/web/framework/i18n/data/ta_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ta_in.php rename to web/framework/i18n/data/ta_in.php diff --git a/web/framework-1.1.17/i18n/data/ta_lk.php b/web/framework/i18n/data/ta_lk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ta_lk.php rename to web/framework/i18n/data/ta_lk.php diff --git a/web/framework-1.1.17/i18n/data/ta_my.php b/web/framework/i18n/data/ta_my.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ta_my.php rename to web/framework/i18n/data/ta_my.php diff --git a/web/framework-1.1.17/i18n/data/ta_sg.php b/web/framework/i18n/data/ta_sg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ta_sg.php rename to web/framework/i18n/data/ta_sg.php diff --git a/web/framework-1.1.17/i18n/data/te.php b/web/framework/i18n/data/te.php similarity index 100% rename from web/framework-1.1.17/i18n/data/te.php rename to web/framework/i18n/data/te.php diff --git a/web/framework-1.1.17/i18n/data/te_in.php b/web/framework/i18n/data/te_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/te_in.php rename to web/framework/i18n/data/te_in.php diff --git a/web/framework-1.1.17/i18n/data/teo.php b/web/framework/i18n/data/teo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/teo.php rename to web/framework/i18n/data/teo.php diff --git a/web/framework-1.1.17/i18n/data/teo_ke.php b/web/framework/i18n/data/teo_ke.php similarity index 100% rename from web/framework-1.1.17/i18n/data/teo_ke.php rename to web/framework/i18n/data/teo_ke.php diff --git a/web/framework-1.1.17/i18n/data/teo_ug.php b/web/framework/i18n/data/teo_ug.php similarity index 100% rename from web/framework-1.1.17/i18n/data/teo_ug.php rename to web/framework/i18n/data/teo_ug.php diff --git a/web/framework-1.1.17/i18n/data/tg.php b/web/framework/i18n/data/tg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tg.php rename to web/framework/i18n/data/tg.php diff --git a/web/framework-1.1.17/i18n/data/tg_cyrl.php b/web/framework/i18n/data/tg_cyrl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tg_cyrl.php rename to web/framework/i18n/data/tg_cyrl.php diff --git a/web/framework-1.1.17/i18n/data/tg_cyrl_tj.php b/web/framework/i18n/data/tg_cyrl_tj.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tg_cyrl_tj.php rename to web/framework/i18n/data/tg_cyrl_tj.php diff --git a/web/framework-1.1.17/i18n/data/tg_tj.php b/web/framework/i18n/data/tg_tj.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tg_tj.php rename to web/framework/i18n/data/tg_tj.php diff --git a/web/framework-1.1.17/i18n/data/th.php b/web/framework/i18n/data/th.php similarity index 100% rename from web/framework-1.1.17/i18n/data/th.php rename to web/framework/i18n/data/th.php diff --git a/web/framework-1.1.17/i18n/data/th_th.php b/web/framework/i18n/data/th_th.php similarity index 100% rename from web/framework-1.1.17/i18n/data/th_th.php rename to web/framework/i18n/data/th_th.php diff --git a/web/framework-1.1.17/i18n/data/ti.php b/web/framework/i18n/data/ti.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ti.php rename to web/framework/i18n/data/ti.php diff --git a/web/framework-1.1.17/i18n/data/ti_er.php b/web/framework/i18n/data/ti_er.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ti_er.php rename to web/framework/i18n/data/ti_er.php diff --git a/web/framework-1.1.17/i18n/data/ti_et.php b/web/framework/i18n/data/ti_et.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ti_et.php rename to web/framework/i18n/data/ti_et.php diff --git a/web/framework-1.1.17/i18n/data/tig.php b/web/framework/i18n/data/tig.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tig.php rename to web/framework/i18n/data/tig.php diff --git a/web/framework-1.1.17/i18n/data/tig_er.php b/web/framework/i18n/data/tig_er.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tig_er.php rename to web/framework/i18n/data/tig_er.php diff --git a/web/framework-1.1.17/i18n/data/tl.php b/web/framework/i18n/data/tl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tl.php rename to web/framework/i18n/data/tl.php diff --git a/web/framework-1.1.17/i18n/data/tl_ph.php b/web/framework/i18n/data/tl_ph.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tl_ph.php rename to web/framework/i18n/data/tl_ph.php diff --git a/web/framework-1.1.17/i18n/data/tn.php b/web/framework/i18n/data/tn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tn.php rename to web/framework/i18n/data/tn.php diff --git a/web/framework-1.1.17/i18n/data/tn_bw.php b/web/framework/i18n/data/tn_bw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tn_bw.php rename to web/framework/i18n/data/tn_bw.php diff --git a/web/framework-1.1.17/i18n/data/tn_za.php b/web/framework/i18n/data/tn_za.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tn_za.php rename to web/framework/i18n/data/tn_za.php diff --git a/web/framework-1.1.17/i18n/data/to.php b/web/framework/i18n/data/to.php similarity index 100% rename from web/framework-1.1.17/i18n/data/to.php rename to web/framework/i18n/data/to.php diff --git a/web/framework-1.1.17/i18n/data/to_to.php b/web/framework/i18n/data/to_to.php similarity index 100% rename from web/framework-1.1.17/i18n/data/to_to.php rename to web/framework/i18n/data/to_to.php diff --git a/web/framework-1.1.17/i18n/data/tr.php b/web/framework/i18n/data/tr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tr.php rename to web/framework/i18n/data/tr.php diff --git a/web/framework-1.1.17/i18n/data/tr_cy.php b/web/framework/i18n/data/tr_cy.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tr_cy.php rename to web/framework/i18n/data/tr_cy.php diff --git a/web/framework-1.1.17/i18n/data/tr_tr.php b/web/framework/i18n/data/tr_tr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tr_tr.php rename to web/framework/i18n/data/tr_tr.php diff --git a/web/framework-1.1.17/i18n/data/trv.php b/web/framework/i18n/data/trv.php similarity index 100% rename from web/framework-1.1.17/i18n/data/trv.php rename to web/framework/i18n/data/trv.php diff --git a/web/framework-1.1.17/i18n/data/trv_tw.php b/web/framework/i18n/data/trv_tw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/trv_tw.php rename to web/framework/i18n/data/trv_tw.php diff --git a/web/framework-1.1.17/i18n/data/ts.php b/web/framework/i18n/data/ts.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ts.php rename to web/framework/i18n/data/ts.php diff --git a/web/framework-1.1.17/i18n/data/ts_za.php b/web/framework/i18n/data/ts_za.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ts_za.php rename to web/framework/i18n/data/ts_za.php diff --git a/web/framework-1.1.17/i18n/data/tt.php b/web/framework/i18n/data/tt.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tt.php rename to web/framework/i18n/data/tt.php diff --git a/web/framework-1.1.17/i18n/data/tt_ru.php b/web/framework/i18n/data/tt_ru.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tt_ru.php rename to web/framework/i18n/data/tt_ru.php diff --git a/web/framework-1.1.17/i18n/data/twq.php b/web/framework/i18n/data/twq.php similarity index 100% rename from web/framework-1.1.17/i18n/data/twq.php rename to web/framework/i18n/data/twq.php diff --git a/web/framework-1.1.17/i18n/data/twq_ne.php b/web/framework/i18n/data/twq_ne.php similarity index 100% rename from web/framework-1.1.17/i18n/data/twq_ne.php rename to web/framework/i18n/data/twq_ne.php diff --git a/web/framework-1.1.17/i18n/data/tzm.php b/web/framework/i18n/data/tzm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tzm.php rename to web/framework/i18n/data/tzm.php diff --git a/web/framework-1.1.17/i18n/data/tzm_latn.php b/web/framework/i18n/data/tzm_latn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tzm_latn.php rename to web/framework/i18n/data/tzm_latn.php diff --git a/web/framework-1.1.17/i18n/data/tzm_latn_ma.php b/web/framework/i18n/data/tzm_latn_ma.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tzm_latn_ma.php rename to web/framework/i18n/data/tzm_latn_ma.php diff --git a/web/framework-1.1.17/i18n/data/tzm_ma.php b/web/framework/i18n/data/tzm_ma.php similarity index 100% rename from web/framework-1.1.17/i18n/data/tzm_ma.php rename to web/framework/i18n/data/tzm_ma.php diff --git a/web/framework-1.1.17/i18n/data/ug.php b/web/framework/i18n/data/ug.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ug.php rename to web/framework/i18n/data/ug.php diff --git a/web/framework-1.1.17/i18n/data/ug_arab.php b/web/framework/i18n/data/ug_arab.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ug_arab.php rename to web/framework/i18n/data/ug_arab.php diff --git a/web/framework-1.1.17/i18n/data/ug_arab_cn.php b/web/framework/i18n/data/ug_arab_cn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ug_arab_cn.php rename to web/framework/i18n/data/ug_arab_cn.php diff --git a/web/framework-1.1.17/i18n/data/ug_cn.php b/web/framework/i18n/data/ug_cn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ug_cn.php rename to web/framework/i18n/data/ug_cn.php diff --git a/web/framework-1.1.17/i18n/data/uk.php b/web/framework/i18n/data/uk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/uk.php rename to web/framework/i18n/data/uk.php diff --git a/web/framework-1.1.17/i18n/data/uk_ua.php b/web/framework/i18n/data/uk_ua.php similarity index 100% rename from web/framework-1.1.17/i18n/data/uk_ua.php rename to web/framework/i18n/data/uk_ua.php diff --git a/web/framework-1.1.17/i18n/data/ur.php b/web/framework/i18n/data/ur.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ur.php rename to web/framework/i18n/data/ur.php diff --git a/web/framework-1.1.17/i18n/data/ur_in.php b/web/framework/i18n/data/ur_in.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ur_in.php rename to web/framework/i18n/data/ur_in.php diff --git a/web/framework-1.1.17/i18n/data/ur_pk.php b/web/framework/i18n/data/ur_pk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ur_pk.php rename to web/framework/i18n/data/ur_pk.php diff --git a/web/framework-1.1.17/i18n/data/uz.php b/web/framework/i18n/data/uz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/uz.php rename to web/framework/i18n/data/uz.php diff --git a/web/framework-1.1.17/i18n/data/uz_af.php b/web/framework/i18n/data/uz_af.php similarity index 100% rename from web/framework-1.1.17/i18n/data/uz_af.php rename to web/framework/i18n/data/uz_af.php diff --git a/web/framework-1.1.17/i18n/data/uz_arab.php b/web/framework/i18n/data/uz_arab.php similarity index 100% rename from web/framework-1.1.17/i18n/data/uz_arab.php rename to web/framework/i18n/data/uz_arab.php diff --git a/web/framework-1.1.17/i18n/data/uz_arab_af.php b/web/framework/i18n/data/uz_arab_af.php similarity index 100% rename from web/framework-1.1.17/i18n/data/uz_arab_af.php rename to web/framework/i18n/data/uz_arab_af.php diff --git a/web/framework-1.1.17/i18n/data/uz_cyrl.php b/web/framework/i18n/data/uz_cyrl.php similarity index 100% rename from web/framework-1.1.17/i18n/data/uz_cyrl.php rename to web/framework/i18n/data/uz_cyrl.php diff --git a/web/framework-1.1.17/i18n/data/uz_cyrl_uz.php b/web/framework/i18n/data/uz_cyrl_uz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/uz_cyrl_uz.php rename to web/framework/i18n/data/uz_cyrl_uz.php diff --git a/web/framework-1.1.17/i18n/data/uz_latn.php b/web/framework/i18n/data/uz_latn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/uz_latn.php rename to web/framework/i18n/data/uz_latn.php diff --git a/web/framework-1.1.17/i18n/data/uz_latn_uz.php b/web/framework/i18n/data/uz_latn_uz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/uz_latn_uz.php rename to web/framework/i18n/data/uz_latn_uz.php diff --git a/web/framework-1.1.17/i18n/data/uz_uz.php b/web/framework/i18n/data/uz_uz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/uz_uz.php rename to web/framework/i18n/data/uz_uz.php diff --git a/web/framework-1.1.17/i18n/data/vai.php b/web/framework/i18n/data/vai.php similarity index 100% rename from web/framework-1.1.17/i18n/data/vai.php rename to web/framework/i18n/data/vai.php diff --git a/web/framework-1.1.17/i18n/data/vai_latn.php b/web/framework/i18n/data/vai_latn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/vai_latn.php rename to web/framework/i18n/data/vai_latn.php diff --git a/web/framework-1.1.17/i18n/data/vai_latn_lr.php b/web/framework/i18n/data/vai_latn_lr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/vai_latn_lr.php rename to web/framework/i18n/data/vai_latn_lr.php diff --git a/web/framework-1.1.17/i18n/data/vai_vaii.php b/web/framework/i18n/data/vai_vaii.php similarity index 100% rename from web/framework-1.1.17/i18n/data/vai_vaii.php rename to web/framework/i18n/data/vai_vaii.php diff --git a/web/framework-1.1.17/i18n/data/vai_vaii_lr.php b/web/framework/i18n/data/vai_vaii_lr.php similarity index 100% rename from web/framework-1.1.17/i18n/data/vai_vaii_lr.php rename to web/framework/i18n/data/vai_vaii_lr.php diff --git a/web/framework-1.1.17/i18n/data/ve.php b/web/framework/i18n/data/ve.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ve.php rename to web/framework/i18n/data/ve.php diff --git a/web/framework-1.1.17/i18n/data/ve_za.php b/web/framework/i18n/data/ve_za.php similarity index 100% rename from web/framework-1.1.17/i18n/data/ve_za.php rename to web/framework/i18n/data/ve_za.php diff --git a/web/framework-1.1.17/i18n/data/vi.php b/web/framework/i18n/data/vi.php similarity index 100% rename from web/framework-1.1.17/i18n/data/vi.php rename to web/framework/i18n/data/vi.php diff --git a/web/framework-1.1.17/i18n/data/vi_vn.php b/web/framework/i18n/data/vi_vn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/vi_vn.php rename to web/framework/i18n/data/vi_vn.php diff --git a/web/framework-1.1.17/i18n/data/vo.php b/web/framework/i18n/data/vo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/vo.php rename to web/framework/i18n/data/vo.php diff --git a/web/framework-1.1.17/i18n/data/vun.php b/web/framework/i18n/data/vun.php similarity index 100% rename from web/framework-1.1.17/i18n/data/vun.php rename to web/framework/i18n/data/vun.php diff --git a/web/framework-1.1.17/i18n/data/vun_tz.php b/web/framework/i18n/data/vun_tz.php similarity index 100% rename from web/framework-1.1.17/i18n/data/vun_tz.php rename to web/framework/i18n/data/vun_tz.php diff --git a/web/framework-1.1.17/i18n/data/wae.php b/web/framework/i18n/data/wae.php similarity index 100% rename from web/framework-1.1.17/i18n/data/wae.php rename to web/framework/i18n/data/wae.php diff --git a/web/framework-1.1.17/i18n/data/wae_ch.php b/web/framework/i18n/data/wae_ch.php similarity index 100% rename from web/framework-1.1.17/i18n/data/wae_ch.php rename to web/framework/i18n/data/wae_ch.php diff --git a/web/framework-1.1.17/i18n/data/wal.php b/web/framework/i18n/data/wal.php similarity index 100% rename from web/framework-1.1.17/i18n/data/wal.php rename to web/framework/i18n/data/wal.php diff --git a/web/framework-1.1.17/i18n/data/wal_et.php b/web/framework/i18n/data/wal_et.php similarity index 100% rename from web/framework-1.1.17/i18n/data/wal_et.php rename to web/framework/i18n/data/wal_et.php diff --git a/web/framework-1.1.17/i18n/data/wo.php b/web/framework/i18n/data/wo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/wo.php rename to web/framework/i18n/data/wo.php diff --git a/web/framework-1.1.17/i18n/data/wo_latn.php b/web/framework/i18n/data/wo_latn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/wo_latn.php rename to web/framework/i18n/data/wo_latn.php diff --git a/web/framework-1.1.17/i18n/data/wo_latn_sn.php b/web/framework/i18n/data/wo_latn_sn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/wo_latn_sn.php rename to web/framework/i18n/data/wo_latn_sn.php diff --git a/web/framework-1.1.17/i18n/data/wo_sn.php b/web/framework/i18n/data/wo_sn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/wo_sn.php rename to web/framework/i18n/data/wo_sn.php diff --git a/web/framework-1.1.17/i18n/data/xh.php b/web/framework/i18n/data/xh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/xh.php rename to web/framework/i18n/data/xh.php diff --git a/web/framework-1.1.17/i18n/data/xh_za.php b/web/framework/i18n/data/xh_za.php similarity index 100% rename from web/framework-1.1.17/i18n/data/xh_za.php rename to web/framework/i18n/data/xh_za.php diff --git a/web/framework-1.1.17/i18n/data/xog.php b/web/framework/i18n/data/xog.php similarity index 100% rename from web/framework-1.1.17/i18n/data/xog.php rename to web/framework/i18n/data/xog.php diff --git a/web/framework-1.1.17/i18n/data/xog_ug.php b/web/framework/i18n/data/xog_ug.php similarity index 100% rename from web/framework-1.1.17/i18n/data/xog_ug.php rename to web/framework/i18n/data/xog_ug.php diff --git a/web/framework-1.1.17/i18n/data/yav.php b/web/framework/i18n/data/yav.php similarity index 100% rename from web/framework-1.1.17/i18n/data/yav.php rename to web/framework/i18n/data/yav.php diff --git a/web/framework-1.1.17/i18n/data/yav_cm.php b/web/framework/i18n/data/yav_cm.php similarity index 100% rename from web/framework-1.1.17/i18n/data/yav_cm.php rename to web/framework/i18n/data/yav_cm.php diff --git a/web/framework-1.1.17/i18n/data/yo.php b/web/framework/i18n/data/yo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/yo.php rename to web/framework/i18n/data/yo.php diff --git a/web/framework-1.1.17/i18n/data/yo_ng.php b/web/framework/i18n/data/yo_ng.php similarity index 100% rename from web/framework-1.1.17/i18n/data/yo_ng.php rename to web/framework/i18n/data/yo_ng.php diff --git a/web/framework-1.1.17/i18n/data/zh.php b/web/framework/i18n/data/zh.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh.php rename to web/framework/i18n/data/zh.php diff --git a/web/framework-1.1.17/i18n/data/zh_cn.php b/web/framework/i18n/data/zh_cn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh_cn.php rename to web/framework/i18n/data/zh_cn.php diff --git a/web/framework-1.1.17/i18n/data/zh_hans.php b/web/framework/i18n/data/zh_hans.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh_hans.php rename to web/framework/i18n/data/zh_hans.php diff --git a/web/framework-1.1.17/i18n/data/zh_hans_cn.php b/web/framework/i18n/data/zh_hans_cn.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh_hans_cn.php rename to web/framework/i18n/data/zh_hans_cn.php diff --git a/web/framework-1.1.17/i18n/data/zh_hans_hk.php b/web/framework/i18n/data/zh_hans_hk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh_hans_hk.php rename to web/framework/i18n/data/zh_hans_hk.php diff --git a/web/framework-1.1.17/i18n/data/zh_hans_mo.php b/web/framework/i18n/data/zh_hans_mo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh_hans_mo.php rename to web/framework/i18n/data/zh_hans_mo.php diff --git a/web/framework-1.1.17/i18n/data/zh_hans_sg.php b/web/framework/i18n/data/zh_hans_sg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh_hans_sg.php rename to web/framework/i18n/data/zh_hans_sg.php diff --git a/web/framework-1.1.17/i18n/data/zh_hant.php b/web/framework/i18n/data/zh_hant.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh_hant.php rename to web/framework/i18n/data/zh_hant.php diff --git a/web/framework-1.1.17/i18n/data/zh_hant_hk.php b/web/framework/i18n/data/zh_hant_hk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh_hant_hk.php rename to web/framework/i18n/data/zh_hant_hk.php diff --git a/web/framework-1.1.17/i18n/data/zh_hant_mo.php b/web/framework/i18n/data/zh_hant_mo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh_hant_mo.php rename to web/framework/i18n/data/zh_hant_mo.php diff --git a/web/framework-1.1.17/i18n/data/zh_hant_tw.php b/web/framework/i18n/data/zh_hant_tw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh_hant_tw.php rename to web/framework/i18n/data/zh_hant_tw.php diff --git a/web/framework-1.1.17/i18n/data/zh_hk.php b/web/framework/i18n/data/zh_hk.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh_hk.php rename to web/framework/i18n/data/zh_hk.php diff --git a/web/framework-1.1.17/i18n/data/zh_mo.php b/web/framework/i18n/data/zh_mo.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh_mo.php rename to web/framework/i18n/data/zh_mo.php diff --git a/web/framework-1.1.17/i18n/data/zh_sg.php b/web/framework/i18n/data/zh_sg.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh_sg.php rename to web/framework/i18n/data/zh_sg.php diff --git a/web/framework-1.1.17/i18n/data/zh_tw.php b/web/framework/i18n/data/zh_tw.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zh_tw.php rename to web/framework/i18n/data/zh_tw.php diff --git a/web/framework-1.1.17/i18n/data/zu.php b/web/framework/i18n/data/zu.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zu.php rename to web/framework/i18n/data/zu.php diff --git a/web/framework-1.1.17/i18n/data/zu_za.php b/web/framework/i18n/data/zu_za.php similarity index 100% rename from web/framework-1.1.17/i18n/data/zu_za.php rename to web/framework/i18n/data/zu_za.php diff --git a/web/framework-1.1.17/i18n/gettext/CGettextFile.php b/web/framework/i18n/gettext/CGettextFile.php similarity index 100% rename from web/framework-1.1.17/i18n/gettext/CGettextFile.php rename to web/framework/i18n/gettext/CGettextFile.php diff --git a/web/framework-1.1.17/i18n/gettext/CGettextMoFile.php b/web/framework/i18n/gettext/CGettextMoFile.php similarity index 99% rename from web/framework-1.1.17/i18n/gettext/CGettextMoFile.php rename to web/framework/i18n/gettext/CGettextMoFile.php index 221af6d03..af226f8be 100644 --- a/web/framework-1.1.17/i18n/gettext/CGettextMoFile.php +++ b/web/framework/i18n/gettext/CGettextMoFile.php @@ -62,6 +62,7 @@ public function __construct($useBigEndian=false) * @param string $file file path * @param string $context message context * @return array message translations (source message => translated message) + * @throws CException */ public function load($file,$context) { @@ -137,6 +138,7 @@ public function load($file,$context) * @param array $messages message translations (message id => translated message). * Note if the message has a context, the message id must be prefixed with * the context with chr(4) as the separator. + * @throws CException */ public function save($file,$messages) { diff --git a/web/framework-1.1.17/i18n/gettext/CGettextPoFile.php b/web/framework/i18n/gettext/CGettextPoFile.php similarity index 100% rename from web/framework-1.1.17/i18n/gettext/CGettextPoFile.php rename to web/framework/i18n/gettext/CGettextPoFile.php diff --git a/web/framework-1.1.17/logging/CChainedLogFilter.php b/web/framework/logging/CChainedLogFilter.php similarity index 100% rename from web/framework-1.1.17/logging/CChainedLogFilter.php rename to web/framework/logging/CChainedLogFilter.php diff --git a/web/framework-1.1.17/logging/CDbLogRoute.php b/web/framework/logging/CDbLogRoute.php similarity index 100% rename from web/framework-1.1.17/logging/CDbLogRoute.php rename to web/framework/logging/CDbLogRoute.php diff --git a/web/framework-1.1.17/logging/CEmailLogRoute.php b/web/framework/logging/CEmailLogRoute.php similarity index 100% rename from web/framework-1.1.17/logging/CEmailLogRoute.php rename to web/framework/logging/CEmailLogRoute.php diff --git a/web/framework-1.1.17/logging/CFileLogRoute.php b/web/framework/logging/CFileLogRoute.php similarity index 100% rename from web/framework-1.1.17/logging/CFileLogRoute.php rename to web/framework/logging/CFileLogRoute.php diff --git a/web/framework-1.1.17/logging/CLogFilter.php b/web/framework/logging/CLogFilter.php similarity index 100% rename from web/framework-1.1.17/logging/CLogFilter.php rename to web/framework/logging/CLogFilter.php diff --git a/web/framework-1.1.17/logging/CLogRoute.php b/web/framework/logging/CLogRoute.php similarity index 100% rename from web/framework-1.1.17/logging/CLogRoute.php rename to web/framework/logging/CLogRoute.php diff --git a/web/framework-1.1.17/logging/CLogRouter.php b/web/framework/logging/CLogRouter.php similarity index 100% rename from web/framework-1.1.17/logging/CLogRouter.php rename to web/framework/logging/CLogRouter.php diff --git a/web/framework-1.1.17/logging/CLogger.php b/web/framework/logging/CLogger.php similarity index 100% rename from web/framework-1.1.17/logging/CLogger.php rename to web/framework/logging/CLogger.php diff --git a/web/framework-1.1.17/logging/CProfileLogRoute.php b/web/framework/logging/CProfileLogRoute.php similarity index 100% rename from web/framework-1.1.17/logging/CProfileLogRoute.php rename to web/framework/logging/CProfileLogRoute.php diff --git a/web/framework-1.1.17/logging/CSysLogRoute.php b/web/framework/logging/CSysLogRoute.php similarity index 100% rename from web/framework-1.1.17/logging/CSysLogRoute.php rename to web/framework/logging/CSysLogRoute.php diff --git a/web/framework-1.1.17/logging/CWebLogRoute.php b/web/framework/logging/CWebLogRoute.php similarity index 100% rename from web/framework-1.1.17/logging/CWebLogRoute.php rename to web/framework/logging/CWebLogRoute.php diff --git a/web/framework-1.1.17/messages/ar/yii.php b/web/framework/messages/ar/yii.php similarity index 100% rename from web/framework-1.1.17/messages/ar/yii.php rename to web/framework/messages/ar/yii.php diff --git a/web/framework-1.1.17/messages/ar/zii.php b/web/framework/messages/ar/zii.php similarity index 100% rename from web/framework-1.1.17/messages/ar/zii.php rename to web/framework/messages/ar/zii.php diff --git a/web/framework-1.1.17/messages/bg/yii.php b/web/framework/messages/bg/yii.php similarity index 100% rename from web/framework-1.1.17/messages/bg/yii.php rename to web/framework/messages/bg/yii.php diff --git a/web/framework-1.1.17/messages/bg/zii.php b/web/framework/messages/bg/zii.php similarity index 100% rename from web/framework-1.1.17/messages/bg/zii.php rename to web/framework/messages/bg/zii.php diff --git a/web/framework-1.1.17/messages/bs/yii.php b/web/framework/messages/bs/yii.php similarity index 81% rename from web/framework-1.1.17/messages/bs/yii.php rename to web/framework/messages/bs/yii.php index e177f9d66..d41e4d90f 100644 --- a/web/framework-1.1.17/messages/bs/yii.php +++ b/web/framework/messages/bs/yii.php @@ -16,56 +16,56 @@ return array ( 0 => '0', 'Virtual attribute {name} must specify "asc" and "desc" options.' => 'Virtualni atribut {name} mora specificirati "asc"- i "desc" opcije.', - '"{path}" is not a valid directory.' => '"{path}" nije važeći direktorijum.', + '"{path}" is not a valid directory.' => '"{path}" nije važeći direktorij.', '< Previous' => '< Prethodna', '<< First' => '<< Prva', - 'Active Record requires a "db" CDbConnection application component.' => 'ActiveRecord zahtjeva "db" CDbConnection aplikacionu komponentu.', + 'Active Record requires a "db" CDbConnection application component.' => 'ActiveRecord zahtjeva "db" CDbConnection aplikacijsku komponentu.', 'Active record "{class}" has an invalid configuration for relation "{relation}". It must specify the relation type, the related active record class and the foreign key.' => 'ActiveRecord-Klasa "{class}" ima nevažeću konfiguraciju za odnos "{relation}". Tipa odnosa, odnosni ActiveRecord i strani kljuÄ (foreign key) moraju biti postavljeni.', - 'Active record "{class}" is trying to select an invalid column "{column}". Note, the column must exist in the table or be an expression with alias.' => 'ActiveRecord "{class}" koristi nevažećo polje "{column}" u SELECT. Pripazite da to polje mora da postoji u tabeli ili da bude alias izraz.', + 'Active record "{class}" is trying to select an invalid column "{column}". Note, the column must exist in the table or be an expression with alias.' => 'ActiveRecord "{class}" koristi nevažeće polje "{column}" u SELECT. Pripazite da to polje mora da postoji u tabeli ili da bude alias izraz.', 'Active record class "{class}" does not have a scope named "{scope}".' => 'ActiveRecord-Klasa "{class}" nema polje imenovano "{scope}".', - 'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Alias "{alias}" je nevažan. Molim vas, uspostavite da pokazuje do važećeg direktorija ili fajla.', - 'Application base path "{path}" is not a valid directory.' => 'Glavni put (base path) "{path}" aplikacije je nevažan.', + 'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Alias "{alias}" je validan. Molim vas, uspostavite da pokazuje do važećeg direktorija ili fajla.', + 'Application base path "{path}" is not a valid directory.' => 'Glavni put (base path) "{path}" aplikacije nije važeći.', 'Application runtime path "{path}" is not valid. Please make sure it is a directory writable by the Web server process.' => 'Prometni put (runtime path) "{path}" aplikacije je nevažan. Pripazite da proces web servera ima pravo da tamo piÅ¡e.', - 'Authorization item "{item}" has already been assigned to user "{user}".' => 'Element autorizacije "{item}" je već namjenjen "{user}".', + 'Authorization item "{item}" has already been assigned to user "{user}".' => 'Element autorizacije "{item}" je već namjenjen korisniku "{user}".', 'Base path "{path}" is not a valid directory.' => 'Glavni put "{path}" je nevažeći direktorijum.', 'CApcCache requires PHP apc extension to be loaded.' => 'CApcCache zahtjeva da je uÄitan PHP APC dodatak.', - 'CAssetManager.basePath "{path}" is invalid. Please make sure the directory exists and is writable by the Web server process.' => 'CAssetManager.basePath "{path}" je nevažna. Pripazite da postoji taj direktorijum i da proces web servera ima pravo da tamo piÅ¡e.', - 'CCacheHttpSession.cacheID is invalid. Please make sure "{id}" refers to a valid cache application component.' => 'CCacheHttpSession.cacheID je nevažna. Molim vas, uspostavite da se "{id}" odnosi na važeću cache aplikacionu komponentu.', - 'CCaptchaValidator.action "{id}" is invalid. Unable to find such an action in the current controller.' => 'CCaptchaValidator.action "{id}" je nevažna. Nemogu da pronaÄ‘em takvu akciju u trenutnom controlleru.', - 'CDbAuthManager.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbAuthManager.connectionID "{id}" je nevažna. Molim vas, uspostavite da se "{id}" odnosi na važeću aplikacionu komponentu od tipa CDbConnection.', - 'CDbCache.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCache.connectionID "{id}" je nevažna. Molim vas, uspostavite da se odnosi na važeću aplikacionu komponentu od tipa CDbConnection.', - 'CDbCacheDependency.sql cannot be empty.' => 'CDbCacheDependency.sql nesmije biti prazno.', - 'CDbCommand failed to execute the SQL statement: {error}' => 'CDbCommand nemože da izvrÅ¡i SQL-Statement: {error}', - 'CDbCommand failed to prepare the SQL statement: {error}' => 'CDbCommand nemože da pripremi SQL-Statement: {error}', - 'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection nepodržava Äitanje Å¡ema za {driver}-datoteke.', - 'CDbConnection failed to open the DB connection: {error}' => 'CDbConnection nemože da uspostavi spoj sa datotekom: {error}', - 'CDbConnection is inactive and cannot perform any DB operations.' => 'CDbConnection nije aktivna i nemože izvrÅ¡avati operacije na datoteki.', - 'CDbConnection.connectionString cannot be empty.' => 'CDbConnection.connectionString nesmije biti prazno.', - 'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader se nemože premotavati. On je forward-only (samo naprijed) ÄitaÄ.', - 'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" je nevažna. Molim vas, uspostavite da se "{id}" odnosi na važeću aplikacionu komponentu od tipa CDbConnection.', - 'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" ne pokazuje na važeću aplikacionu komponentu od tipa Typ CDbConnection.', - 'CDbMessageSource.connectionID is invalid. Please make sure "{id}" refers to a valid database application component.' => 'CDbMessageSource.connectionID je nevažna. Molim vas, uspostavite da se "{id}" odnosi na važeću aplikacionu komponentu od tipa CDbConnection.', - 'CDbTestFixture.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbFixture.connectionID "{id}" je nevažna. Molim vas, uspostavite da se odnosi na važeću aplikacionu komponentu od tipa CDbConnection.', - 'CDbTransaction is inactive and cannot perform commit or roll back operations.' => 'CDbTransaction nije aktivno i nemože da izvrÅ¡i Commit- ili Rollback operaciju.', - 'CDirectoryCacheDependency.directory cannot be empty.' => 'CDirectoryCacheDependency.directory nesmije biti prazno.', - 'CEAcceleratorCache requires PHP eAccelerator extension to be loaded, enabled or compiled with the "--with-eaccelerator-shared-memory" option.' => 'CEAcceleratorCache zahtjeva, da PHP eAccelerator dodatak je uÄitan i aktiviran ili sa kompajlira sa opcijom "--with-eaccelerator-shared-memory".', - 'CFileCacheDependency.fileName cannot be empty.' => 'CFileCacheDependency.fileName nesmije biti prazno.', - 'CFileLogRoute.logPath "{path}" does not point to a valid directory. Make sure the directory exists and is writable by the Web server process.' => 'CFileLogRoute.logPath "{path}" ne pokazuje na važeći direktorijum. Pripazite da postoji taj direktorijum i da proces web servera ima pravo da tamo piÅ¡e.', + 'CAssetManager.basePath "{path}" is invalid. Please make sure the directory exists and is writable by the Web server process.' => 'CAssetManager.basePath "{path}" nije važeća. Pripazite da postoji taj direktorijum i da proces web servera ima pravo da tamo piÅ¡e.', + 'CCacheHttpSession.cacheID is invalid. Please make sure "{id}" refers to a valid cache application component.' => 'CCacheHttpSession.cacheID nije važeća. Molim vas, uspostavite da se "{id}" odnosi na važeću cache aplikacionu komponentu.', + 'CCaptchaValidator.action "{id}" is invalid. Unable to find such an action in the current controller.' => 'CCaptchaValidator.action "{id}" nije važeća. Ne mogu da pronaÄ‘em takvu akciju u trenutnom controlleru.', + 'CDbAuthManager.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbAuthManager.connectionID "{id}" nije važeća. Molimo vas, uspostavite da se "{id}" odnosi na važeću aplikacijsku komponentu tipa CDbConnection.', + 'CDbCache.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCache.connectionID "{id}" nije važeća. Molimo vas, uspostavite da se odnosi na važeću aplikacijsku komponentu tipa CDbConnection.', + 'CDbCacheDependency.sql cannot be empty.' => 'CDbCacheDependency.sql ne smije biti prazno.', + 'CDbCommand failed to execute the SQL statement: {error}' => 'CDbCommand ne može da izvrÅ¡i SQL-Statement: {error}', + 'CDbCommand failed to prepare the SQL statement: {error}' => 'CDbCommand ne može da pripremi SQL-Statement: {error}', + 'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection ne podržava Äitanje Å¡ema za {driver}-datoteke.', + 'CDbConnection failed to open the DB connection: {error}' => 'CDbConnection ne može da uspostavi spoj sa datotekom: {error}', + 'CDbConnection is inactive and cannot perform any DB operations.' => 'CDbConnection nije aktivna i ne može izvrÅ¡avati operacije na datoteci.', + 'CDbConnection.connectionString cannot be empty.' => 'CDbConnection.connectionString ne smije biti prazno.', + 'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader se ne može premotavati. On je forward-only (samo naprijed) ÄitaÄ.', + 'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" nije važeća. Molimo vas, uspostavite da se "{id}" odnosi na važeću aplikacijsku komponentu tipa CDbConnection.', + 'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" ne pokazuje na važeću aplikacijsku komponentu od tipa Typ CDbConnection.', + 'CDbMessageSource.connectionID is invalid. Please make sure "{id}" refers to a valid database application component.' => 'CDbMessageSource.connectionID je nevažna. Molimo vas, uspostavite da se "{id}" odnosi na važeću aplikacijsku komponentu tipa CDbConnection.', + 'CDbTestFixture.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbFixture.connectionID "{id}" je nevažeća. Molim vas, uspostavite da se odnosi na važeću aplikacionu komponentu tipa CDbConnection.', + 'CDbTransaction is inactive and cannot perform commit or roll back operations.' => 'CDbTransaction nije aktivno i ne može da izvrÅ¡i Commit- ili Rollback operaciju.', + 'CDirectoryCacheDependency.directory cannot be empty.' => 'CDirectoryCacheDependency.directory ne smije biti prazno.', + 'CEAcceleratorCache requires PHP eAccelerator extension to be loaded, enabled or compiled with the "--with-eaccelerator-shared-memory" option.' => 'CEAcceleratorCache zahtjeva da je PHP eAccelerator dodatak uÄitan i aktiviran ili se kompajlira sa opcijom "--with-eaccelerator-shared-memory".', + 'CFileCacheDependency.fileName cannot be empty.' => 'CFileCacheDependency.fileName ne smije biti prazno.', + 'CFileLogRoute.logPath "{path}" does not point to a valid directory. Make sure the directory exists and is writable by the Web server process.' => 'CFileLogRoute.logPath "{path}" ne pokazuje na nevažeći direktorij. Pripazite da postoji taj direktorij i da proces web servera ima pravo da tamo piÅ¡e.', 'CFilterChain can only take objects implementing the IFilter interface.' => 'CFilterChain smije primiti samo objekte koje implementiraju IFilter-Interface.', - 'CFlexWidget.baseUrl cannot be empty.' => 'CFlexWidget.baseUrl nesmije biti prazno.', - 'CFlexWidget.name cannot be empty.' => 'CFlexWidget.name nesmije biti prazno.', - 'CGlobalStateCacheDependency.stateName cannot be empty.' => 'CGlobalStateCacheDependency.stateName nesmije biti prazno.', + 'CFlexWidget.baseUrl cannot be empty.' => 'CFlexWidget.baseUrl ne smije biti prazno.', + 'CFlexWidget.name cannot be empty.' => 'CFlexWidget.name ne smije biti prazno.', + 'CGlobalStateCacheDependency.stateName cannot be empty.' => 'CGlobalStateCacheDependency.stateName ne smije biti prazno.', 'CHttpCookieCollection can only hold CHttpCookie objects.' => 'CHttpCookieCollection smije da sadrži samo CHttpCookie-Objekte.', 'CHttpRequest is unable to determine the entry script URL.' => 'CHttpRequest ne može da ustanovi URL ulaznog skripta (entry script).', 'CHttpRequest is unable to determine the path info of the request.' => 'CHttpRequest ne može da ustanovi informacije o putu (path info) za tekući zahtjev (request).', 'CHttpRequest is unable to determine the request URI.' => 'CHttpRequest ne može da ustanovi URI za tekući zahtjev (request).', 'CHttpSession.cookieMode can only be "none", "allow" or "only".' => 'CHttpSession.cookieMode može biti jedino "none", "allow" ili "only".', 'CHttpSession.gcProbability "{value}" is invalid. It must be an integer between 0 and 100.' => 'CHttpSession.gcProbability "{value}" je pogreÅ¡an. Mora biti cijeli broj (integer) izmeÄ‘u 0 i 100.', - 'CHttpSession.savePath "{path}" is not a valid directory.' => 'CHttpSession.savePath "{path}" nije ispravan direktorijum.', + 'CHttpSession.savePath "{path}" is not a valid directory.' => 'CHttpSession.savePath "{path}" nije ispravan direktorij.', 'CMemCache server configuration must be an array.' => 'CMemCache server konfiguracija mora biti niz (array)', 'CMemCache server configuration must have "host" value.' => 'CMemCache server konfiguracija mora imati dodjeljenu vrijednost za "host".', 'CMultiFileUpload.name is required.' => 'CMultiFileUpload.name je obavezno.', - 'CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.' => 'CProfileLogRoute je naÅ¡ao nesaglaÅ¡en blok koda "{token}". Budite sigurni da su pozivi Yii::beginProfile() i Yii::endProfile() ispravno ugnježdeni.', + 'CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.' => 'CProfileLogRoute je naÅ¡ao neusaglaÅ¡en blok koda "{token}". Budite sigurni da su pozivi Yii::beginProfile() i Yii::endProfile() ispravno ugnježdeni.', 'CProfileLogRoute.report "{report}" is invalid. Valid values include "summary" and "callstack".' => 'CProfileLogRoute.report "{report}" je pogreÅ¡an. Ispravne vrijednosti ukljuÄuju "summary" i "callstack".', 'CSecurityManager requires PHP mcrypt extension to be loaded in order to use data encryption feature.' => 'CSecurityManager zahtjeva da PHP mcrypt ekstenzija bude ukljuÄena da bi se koristila mogućnost enkripcije podataka.', 'CSecurityManager.encryptionKey cannot be empty.' => 'CSecurityManager.encryptionKey ne može biti prazan.', @@ -87,11 +87,11 @@ 'Event "{class}.{event}" is attached with an invalid handler "{handler}".' => 'DogaÄ‘aj "{class}.{event}" je zakaÄen za pogreÅ¡an (nevažeći) hendler (handler) "{handler}".', 'Event "{class}.{event}" is not defined.' => 'DogaÄ‘aj (event) "{class}.{event}" nije definisan.', 'Extension path "{path}" does not exist.' => 'Put dodataka (extension path) "{path}" ne postoji.', - 'Failed to write the uploaded file "{file}" to disk.' => 'NeuspjeÅ¡no snimanje podignutog fajla (uploaded file) "{file}" na disk.', - 'File upload was stopped by extension.' => 'Podizanje fajla (file upload) je zaustavljeno od strane ekstenzije.', + 'Failed to write the uploaded file "{file}" to disk.' => 'NeuspjeÅ¡no snimanje uploadovanog fajla (uploaded file) "{file}" na disk.', + 'File upload was stopped by extension.' => 'Upload fajla (file upload) je zaustavljeno od strane ekstenzije.', 'Filter "{filter}" is invalid. Controller "{class}" does have the filter method "filter{filter}".' => 'Filter "{filter}" je pogreÅ¡an. Kontroler "{class}" sadrži filter metod "filter{filter}".', 'Get a new code' => 'Dobavi novi kod', - 'Go to page: ' => 'Do stranice: ', + 'Go to page: ' => 'Idi na stranicu: ', 'Invalid MO file revision: {revision}.' => 'PogreÅ¡na revizija MO fajla: {revision}.', 'Invalid MO file: {file} (magic: {magic}).' => 'PogreÅ¡an (neispravan) MO fajl: {file} (magic: {magic}).', 'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'PogreÅ¡na nabrojiva vrijednost "{value}". Molim vas, budite sigurni da je iz ({enum}).', @@ -101,19 +101,19 @@ 'List index "{index}" is out of bound.' => 'Indeks liste "{index}" je van opsega.', 'Login Required' => 'Potrebna prijava', 'Map data must be an array or an object implementing Traversable.' => 'Podatak mape (Map data) mora biti niz ili objekat koji implementira Traversable.', - 'Missing the temporary folder to store the uploaded file "{file}".' => 'Nedostaje privremeni folder za skladiÅ¡te podignutog fajla "{file}".', - 'Next >' => 'Slijedeća >', - 'No columns are being updated for table "{table}".' => 'Ni jedna kolona neće biti ažurirana u tabeli "{table}".', + 'Missing the temporary folder to store the uploaded file "{file}".' => 'Nedostaje privremeni folder za spremanje uÄitanog fajla "{file}".', + 'Next >' => 'Sljedeća >', + 'No columns are being updated for table "{table}".' => 'Nijedna kolona neće biti ažurirana u tabeli "{table}".', 'No counter columns are being updated for table "{table}".' => 'BrojaÄ kolona neće biti ažuriran za tabelu "{table}".', 'Object configuration must be an array containing a "class" element.' => 'Konfiguracija objekta mora biti niz koji sadrži "class" element.', 'Please fix the following input errors:' => 'Molim vas ispravite greÅ¡ke:', 'Property "{class}.{property}" is not defined.' => 'Svojstvo (property) "{class}.{property}" nije definisano.', 'Property "{class}.{property}" is read only.' => 'Svojstvo (property) "{class}.{property}" je samo za Äitanje.', 'Queue data must be an array or an object implementing Traversable.' => 'Podatak reda (Queue data) mora biti niz ili objekat koji implementira Traversable.', - 'Relation "{name}" is not defined in active record class "{class}".' => 'Odnos "{name}" nije definisana u active record klasi "{class}".', - 'Resetting PK sequence is not supported.' => 'Ne podržava se vraćanja PK sekvencije.', + 'Relation "{name}" is not defined in active record class "{class}".' => 'Odnos "{name}" nije definisan u active record klasi "{class}".', + 'Resetting PK sequence is not supported.' => 'Ne podržava vraćanje PK sekvence.', 'Setting integrity check is not supported.' => 'Ne podržava se aktivacija kontrole integracije postavki.', - 'Stack data must be an array or an object implementing Traversable.' => 'Podatak hrpe (Stack data) mora biti niz ili objekat koji implementira Traversable.', + 'Stack data must be an array or an object implementing Traversable.' => 'Podatak sa steka (Stack data) mora biti niz ili objekat koji implementira Traversable.', 'Table "{table}" does not have a column named "{column}".' => 'Tabela "{table}" ne posjeduje kolonu "{column}".', 'Table "{table}" does not have a primary key defined.' => 'Tabela "{table}" nema definisan primarni kljuÄ (primary key).', 'The "filter" property must be specified with a valid callback.' => '"Filter" svojstvo (property) mora biti specificirano povratnom funkcijom (callback).', @@ -125,35 +125,35 @@ 'The active record cannot be inserted to database because it is not new.' => 'Active record ne može biti ubaÄen u bazu zato Å¡to je nov.', 'The active record cannot be updated because it is new.' => 'Active record ne može biti ažuriran zato Å¡to je nov.', 'The asset "{asset}" to be pulished does not exist.' => 'Resurs "{asset}" koji treba biti objavljen ne postoji.', - 'The command path "{path}" is not a valid directory.' => 'Put direktorijuma do komande (command path) "{path}" nije ispravan.', - 'The controller path "{path}" is not a valid directory.' => 'Put direktorijuma do kontrolera "{path}" nije ispravan.', + 'The command path "{path}" is not a valid directory.' => 'Put direktorija do komande (command path) "{path}" nije ispravan.', + 'The controller path "{path}" is not a valid directory.' => 'Put direktorija do kontrolera "{path}" nije ispravan.', 'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'Fajl "{file}" ne može biti podignut (uploaded). Dozvoljeni su jedino fajlovi sa slijedećim ekstenzijama: {extensions}.', - 'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'Fajl "{file}" je prevelik. VeliÄina fajla ne sme da prekoraÄi {limit} bytes.', + 'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'Fajl "{file}" je prevelik. VeliÄina fajla ne smije da prekoraÄi {limit} bytes.', 'The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.' => 'Fajl "{file}" je premali. VeliÄina fajla ne smije biti manja od {limit} bytes.', - 'The file "{file}" was only partially uploaded.' => 'Fajl "{file}" je samo delimiÄno podignut (uploaded).', + 'The file "{file}" was only partially uploaded.' => 'Fajl "{file}" je samo djelimiÄno uÄitan (uploaded).', 'The first element in a filter configuration must be the filter class.' => 'Prvi element u konfiguraciji filtera mora biti klasa filtera.', 'The item "{name}" does not exist.' => 'Stavka "{name}" ne postoji.', 'The item "{parent}" already has a child "{child}".' => 'Stavka "{parent}" već ima dijete "{child}".', - 'The layout path "{path}" is not a valid directory.' => 'Put do direktorijuma layout "{path}" nije ispravan.', + 'The layout path "{path}" is not a valid directory.' => 'Put do direktorija layout "{path}" nije ispravan.', 'The list is read only.' => 'Lista (List) je samo za Äitanje', 'The map is read only.' => 'Mapa (Map) je samo za Äitanje', 'The module path "{path}" is not a valid directory.' => 'Put do modula "{path}" je nevažeći direktorijum.', - 'The pattern for 12 hour format must be "h" or "hh".' => 'Å ablona za 12 Äasovni format mora biti "h" ili "hh".', - 'The pattern for 24 hour format must be "H" or "HH".' => 'Å ablona za 24 Äasovni format mora biti "H" ili "HH".', + 'The pattern for 12 hour format must be "h" or "hh".' => 'Å ablon za 12 Äasovni format mora biti "h" ili "hh".', + 'The pattern for 24 hour format must be "H" or "HH".' => 'Å ablon za 24 Äasovni format mora biti "H" ili "HH".', 'The pattern for AM/PM marker must be "a".' => 'Å ablona za AM/PM marker mora biti "a".', 'The pattern for day in month must be "F".' => 'Å ablona za dan u mjesecu mora biti "F".', - 'The pattern for day in year must be "D", "DD" or "DDD".' => 'Å ablona za dan u godini mora biti "D", "DD" ili "DDD".', - 'The pattern for day of the month must be "d" or "dd".' => 'Å ablona za dan mjeseca mora biti "d" ili "dd".', - 'The pattern for day of the week must be "E", "EE", "EEE", "EEEE" or "EEEEE".' => 'Å ablona za dan sedmice mora biti "E", "EE", "EEE", "EEEE" ili "EEEEE".', - 'The pattern for era must be "G", "GG", "GGG", "GGGG" or "GGGGG".' => 'Å ablona za doba mora biti "G", "GG", "GGG", "GGGG" ili "GGGGG".', - 'The pattern for hour in AM/PM must be "K" or "KK".' => 'Å ablona za Äas u AM/PM mora biti "K" ili "KK".', - 'The pattern for hour in day must be "k" or "kk".' => 'Å ablona za Äas u danu mora biti "k" ili "kk".', - 'The pattern for minutes must be "m" or "mm".' => 'Å ablona za minute mora biti "m" ili "mm".', - 'The pattern for month must be "M", "MM", "MMM", or "MMMM".' => 'Å ablona za mjesec mora biti "M", "MM", "MMM" ili "MMMM".', - 'The pattern for seconds must be "s" or "ss".' => 'Å ablona za sekunde mora biti "s" ili "ss".', - 'The pattern for time zone must be "z" or "v".' => 'Å ablona za zonu mora biti "z" ili "v".', - 'The pattern for week in month must be "W".' => 'Å ablona za sedmicu u mjesecu mora biti "W".', - 'The pattern for week in year must be "w".' => 'Å ablona za sedmicu u godini mora biti "w".', + 'The pattern for day in year must be "D", "DD" or "DDD".' => 'Å ablon za dan u godini mora biti "D", "DD" ili "DDD".', + 'The pattern for day of the month must be "d" or "dd".' => 'Å ablon za dan mjeseca mora biti "d" ili "dd".', + 'The pattern for day of the week must be "E", "EE", "EEE", "EEEE" or "EEEEE".' => 'Å ablon za dan sedmice mora biti "E", "EE", "EEE", "EEEE" ili "EEEEE".', + 'The pattern for era must be "G", "GG", "GGG", "GGGG" or "GGGGG".' => 'Å ablon za doba mora biti "G", "GG", "GGG", "GGGG" ili "GGGGG".', + 'The pattern for hour in AM/PM must be "K" or "KK".' => 'Å ablon za Äas u AM/PM mora biti "K" ili "KK".', + 'The pattern for hour in day must be "k" or "kk".' => 'Å ablon za Äas u danu mora biti "k" ili "kk".', + 'The pattern for minutes must be "m" or "mm".' => 'Å ablon za minute mora biti "m" ili "mm".', + 'The pattern for month must be "M", "MM", "MMM", or "MMMM".' => 'Å ablon za mjesec mora biti "M", "MM", "MMM" ili "MMMM".', + 'The pattern for seconds must be "s" or "ss".' => 'Å ablon za sekunde mora biti "s" ili "ss".', + 'The pattern for time zone must be "z" or "v".' => 'Å ablon za zonu mora biti "z" ili "v".', + 'The pattern for week in month must be "W".' => 'Å ablon za sedmicu u mjesecu mora biti "W".', + 'The pattern for week in year must be "w".' => 'Å ablon za sedmicu u godini mora biti "w".', 'The queue is empty.' => 'Red (queue) je prazan.', 'The relation "{relation}" in active record class "{class}" is not specified correctly: The join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'Odnos "{relation}" u active record klasi "{class}" nije specificirana ispravno: pridružena tabela (join table) "{joinTable}" zadata u spoljnom kljuÄu (foreign key) ne može biti pronaÄ‘ena u bazi.', 'The relation "{relation}" in active record class "{class}" is not specified correctly: the join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'Odnos "{relation}" u active record klasi "{class}" nije specificirana ispravno: pridružena tabela (join table) "{joinTable}" zadata u spoljnom kljuÄu (foreign key) ne može biti pronaÄ‘ena u bazi.', @@ -164,13 +164,13 @@ 'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key. The columns in the key must match the primary keys of the table "{table}".' => 'Odnos "{relation}" u active record klasi "{class}" je specificirana pogreÅ¡nim spoljnim kljuÄem (foreign key). Kolone spoljnog kljuÄa (foreign key) moraju biti iste kao i primarnog kljuÄa od tabele "{table}".', 'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key. The format of the foreign key must be "joinTable(fk1,fk2,...)".' => 'Odnos "{relation}" u active record klasi "{class}" je specificirana pogreÅ¡nim spoljnim kljuÄem (foreign key). Format spoljnog kljuÄa (foreign key) mora biti "joinTable(fk1,fk2,...)', 'The requested view "{name}" was not found.' => 'zahtjevani pogled (view) "{name}" nije pronaÄ‘en.', - 'The stack is empty.' => 'Hrpa (stack) je prazna.', - 'The system is unable to find the requested action "{action}".' => 'Sistem ne može da pronaÄ‘e zahtjevanu akciju "{action}".', - 'The system view path "{path}" is not a valid directory.' => 'Put direktorijuma do sistemskog pogleda (system view) "{path}" nije ispravan.', + 'The stack is empty.' => 'Stek (stack) je prazna.', + 'The system is unable to find the requested action "{action}".' => 'Sistem ne može da pronaÄ‘e traženu akciju "{action}".', + 'The system view path "{path}" is not a valid directory.' => 'Put direktorija do sistemskog pogleda (system view) "{path}" nije ispravan.', 'The table "{table}" for active record class "{class}" cannot be found in the database.' => 'Tabela "{table}" za active record klasu "{class}" ne može biti pronaÄ‘ena u bazi.', 'The value for the primary key "{key}" is not supplied when querying the table "{table}".' => 'Vrijednost primarnog kljuÄa (primary key) "{key}" nije prosljeÄ‘ena prilikom izvrÅ¡enja upita nad tabelom "{table}".', 'The verification code is incorrect.' => 'Verifikacioni kod je pogreÅ¡an.', - 'The view path "{path}" is not a valid directory.' => 'Put do prikaznog direktorijuma (view path) "{path}" ne važi.', + 'The view path "{path}" is not a valid directory.' => 'Put do prikaznog direktorija (view path) "{path}" nije važeći.', 'Theme directory "{directory}" does not exist.' => 'Direktorijum za teme (theme directory) "{directory}" ne postoji.', 'This content requires the Adobe Flash Player.' => 'Ovaj sadržaj zahtjeva Adobe Flash Player.', 'Unable to add an item whose name is the same as an existing item.' => 'Ne mogu da dodam stavku sa istim imenom kao postojeća stavka.', @@ -184,7 +184,7 @@ 'Unable to write file "{file}".' => 'Ne mogu da upiÅ¡em fajl "{file}".', 'Unknown authorization item "{name}".' => 'Nepoznata stavka ovlašćenja (authorization item) "{name}', 'Unrecognized locale "{locale}".' => 'Lokalizacija nije prepoznata (unrecognized locale) "{locale}".', - 'View file "{file}" does not exist.' => 'Fajl pogleda (view file) "{file}" ne postoji.', + 'View file "{file}" does not exist.' => 'View fajl "{file}" ne postoji.', 'Yii application can only be created once.' => 'Yii aplikacija može biti kreirana samo jedanput.', 'You are not authorized to perform this action.' => 'Niste autorizovani da izvrÅ¡ite ovu akciju.', 'Your request is not valid.' => 'VaÅ¡ zahtjev nije ispravan.', @@ -211,7 +211,7 @@ '{attribute} must be repeated exactly.' => '{attribute} mora biti taÄno ponovljen.', '{attribute} must be {type}.' => '{attribute} mora biti {type}.', '{attribute} must be {value}.' => '{attribute} mora biti {value}.', - '{attribute} must not be equal to "{compareValue}".' => '{attribute} nesmije biti isti kao "{compareValue}".', + '{attribute} must not be equal to "{compareValue}".' => '{attribute} ne smije biti isti kao "{compareValue}".', '{className} does not support add() functionality.' => '{className} ne podržava add() funcionalnost.', '{className} does not support delete() functionality.' => '{className} ne podržava delete() funkcionalnost.', '{className} does not support flush() functionality.' => '{className} ne podržava flush() funkcionalnost.', @@ -223,9 +223,9 @@ '{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => '{class} ima pogreÅ¡no ovjereno pravilo (validation rule). Pravilo mora da specificira atribute koji ce biti ovjereni i ime ovjerenja.', '{class} must specify "model" and "attribute" or "name" property values.' => '{class} mora da specificira "model" i "attribute" ili "name" svojstvo (property) vrijednosti.', '{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => '{class}.allowAutoLogin mora biti podeÅ¡en na true da bi se koristila cookies autorizacija.', - '{class}::authenticate() must be implemented.' => '{class}::authenticate() mora biti implementirana.', - '{controller} cannot find the requested view "{view}".' => '{controller} ne može da pronaÄ‘e zahtjevani pogled (view) "{view}".', + '{class}::authenticate() must be implemented.' => '{class}::authenticate() metoda mora biti implementirana.', + '{controller} cannot find the requested view "{view}".' => '{controller} ne može da pronaÄ‘e zahtjevani view "{view}".', '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => '{controller} sadrži nepropisno ugnježdene widget tagove u svom pogledu (view) "{view}". {widget} widget nema endWidget() poziv.', - '{controller} has an extra endWidget({id}) call in its view.' => '{controller} ima suviÅ¡an endWidget({id}) poziv u svom pogledu (view).', - '{widget} cannot find the view "{view}".' => '{widget} ne može da pronaÄ‘e pogled (view) "{view}".', + '{controller} has an extra endWidget({id}) call in its view.' => '{controller} ima suviÅ¡an endWidget({id}) poziv u svom view-u.', + '{widget} cannot find the view "{view}".' => '{widget} ne može da pronaÄ‘e view "{view}".', ); \ No newline at end of file diff --git a/web/framework-1.1.17/messages/ca/yii.php b/web/framework/messages/ca/yii.php similarity index 100% rename from web/framework-1.1.17/messages/ca/yii.php rename to web/framework/messages/ca/yii.php diff --git a/web/framework-1.1.17/messages/ca/zii.php b/web/framework/messages/ca/zii.php similarity index 100% rename from web/framework-1.1.17/messages/ca/zii.php rename to web/framework/messages/ca/zii.php diff --git a/web/framework-1.1.17/messages/config.php b/web/framework/messages/config.php similarity index 100% rename from web/framework-1.1.17/messages/config.php rename to web/framework/messages/config.php diff --git a/web/framework-1.1.17/messages/cs/yii.php b/web/framework/messages/cs/yii.php similarity index 100% rename from web/framework-1.1.17/messages/cs/yii.php rename to web/framework/messages/cs/yii.php diff --git a/web/framework-1.1.17/messages/cs/zii.php b/web/framework/messages/cs/zii.php similarity index 100% rename from web/framework-1.1.17/messages/cs/zii.php rename to web/framework/messages/cs/zii.php diff --git a/web/framework-1.1.17/messages/da/yii.php b/web/framework/messages/da/yii.php similarity index 100% rename from web/framework-1.1.17/messages/da/yii.php rename to web/framework/messages/da/yii.php diff --git a/web/framework-1.1.17/messages/da/zii.php b/web/framework/messages/da/zii.php similarity index 100% rename from web/framework-1.1.17/messages/da/zii.php rename to web/framework/messages/da/zii.php diff --git a/web/framework-1.1.17/messages/de/yii.php b/web/framework/messages/de/yii.php similarity index 100% rename from web/framework-1.1.17/messages/de/yii.php rename to web/framework/messages/de/yii.php diff --git a/web/framework-1.1.17/messages/de/zii.php b/web/framework/messages/de/zii.php similarity index 100% rename from web/framework-1.1.17/messages/de/zii.php rename to web/framework/messages/de/zii.php diff --git a/web/framework-1.1.17/messages/el/yii.php b/web/framework/messages/el/yii.php similarity index 100% rename from web/framework-1.1.17/messages/el/yii.php rename to web/framework/messages/el/yii.php diff --git a/web/framework-1.1.17/messages/el/zii.php b/web/framework/messages/el/zii.php similarity index 100% rename from web/framework-1.1.17/messages/el/zii.php rename to web/framework/messages/el/zii.php diff --git a/web/framework-1.1.17/messages/es/yii.php b/web/framework/messages/es/yii.php similarity index 100% rename from web/framework-1.1.17/messages/es/yii.php rename to web/framework/messages/es/yii.php diff --git a/web/framework-1.1.17/messages/es/zii.php b/web/framework/messages/es/zii.php similarity index 100% rename from web/framework-1.1.17/messages/es/zii.php rename to web/framework/messages/es/zii.php diff --git a/web/framework-1.1.17/messages/fa_ir/yii.php b/web/framework/messages/fa_ir/yii.php similarity index 100% rename from web/framework-1.1.17/messages/fa_ir/yii.php rename to web/framework/messages/fa_ir/yii.php diff --git a/web/framework-1.1.17/messages/fa_ir/zii.php b/web/framework/messages/fa_ir/zii.php similarity index 100% rename from web/framework-1.1.17/messages/fa_ir/zii.php rename to web/framework/messages/fa_ir/zii.php diff --git a/web/framework-1.1.17/messages/fi/yii.php b/web/framework/messages/fi/yii.php similarity index 100% rename from web/framework-1.1.17/messages/fi/yii.php rename to web/framework/messages/fi/yii.php diff --git a/web/framework-1.1.17/messages/fi/zii.php b/web/framework/messages/fi/zii.php similarity index 100% rename from web/framework-1.1.17/messages/fi/zii.php rename to web/framework/messages/fi/zii.php diff --git a/web/framework-1.1.17/messages/fr/yii.php b/web/framework/messages/fr/yii.php similarity index 97% rename from web/framework-1.1.17/messages/fr/yii.php rename to web/framework/messages/fr/yii.php index e6fdb682f..df2c86e69 100644 --- a/web/framework-1.1.17/messages/fr/yii.php +++ b/web/framework/messages/fr/yii.php @@ -69,10 +69,10 @@ 'CDbAuthManager.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'La propriété CDbAuthManager.connectionID « {id} » est invalide. Vérifiez qu\'elle référence l\'ID d\'un composant d\'application de type CDbConnection.', 'CDbCache.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'La propriété CDbCache.connectionID « {id} » est invalide. Vérifiez qu\'elle référence l\'ID d\'un composant d\'application de type CDbConnection.', 'CDbCacheDependency.sql cannot be empty.' => 'La propriété CDbCacheDependency.sql ne peut être vide.', - 'CDbCommand failed to execute the SQL statement: {error}' => 'CDbCommand n\'a pas pu exécuter la commande SQL : {error}', - 'CDbCommand failed to prepare the SQL statement: {error}' => 'CDbCommand n\'a pas pu préparer la commande SQL : {error}', - 'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection ne supporte pas la lecture du schéma de la base de données {driver}.', - 'CDbConnection failed to open the DB connection: {error}' => 'CDbConnection n\'a pu ouvrir la connexion à la base de données : {error}', + 'CDbCommand failed to execute the SQL statement: {error}' => 'CDbCommand n\'a pas pu exécuter la commande SQL: {error}', + 'CDbCommand failed to prepare the SQL statement: {error}' => 'CDbCommand n\'a pas pu préparer la commande SQL: {error}', + 'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection ne supporte pas la lecture de schéma pour les bases de données {driver}.', + 'CDbConnection failed to open the DB connection: {error}' => 'CDbConnection n\'a pu ouvrir la connexion à la base de données: {error}', 'CDbConnection is inactive and cannot perform any DB operations.' => 'CDbConnection est inactive et ne peut effectuer aucune opération sur la base de données.', 'CDbConnection.connectionString cannot be empty.' => 'La propriété CDbConnection.connectionString ne peut être vide.', 'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader ne peut reculer. Seule la lecture en avant est possible.', @@ -111,9 +111,9 @@ 'Cannot add "{name}" as a child of itself.' => 'Impossible d\'ajouter « {name} » en tant qu\'enfant de lui-même.', 'Cannot add an item of type "{child}" to an item of type "{parent}".' => 'Impossible d\'ajouter un élément de type « {child} » à un élément de type « {parent} ».', 'Column name must be either a string or an array.' => 'Le nom de la colonne doit être une chaine de caractères ou un tableau.', - 'Either "{parent}" or "{child}" does not exist.' => 'Soit « {parent} » soit « {child} » n\'existe pas.', - 'Error: Table "{table}" does not have a primary key.' => 'Erreur : la table « {table} » n\'a pas de clef primaire.', - 'Error: Table "{table}" has a composite primary key which is not supported by crud command.' => 'Erreur : la table « {table} » a une clef primaire composite qui n\'est pas supportée par les commandes CRUD.', + 'Either "{parent}" or "{child}" does not exist.' => '« {parent} » ou « {child} » est inexistant.', + 'Error: Table "{table}" does not have a primary key.' => 'Erreur: la table « {table} » n\'a pas de clef primaire.', + 'Error: Table "{table}" has a composite primary key which is not supported by crud command.' => 'Erreur: la table « {table} » a une clef primaire composite qui n\'est pas supportée par les commandes CRUD.', 'Event "{class}.{event}" is attached with an invalid handler "{handler}".' => 'L\'événement « {class}.{event} » est associé à un gestionnaire d\'événement « {handler} » invalide.', 'Event "{class}.{event}" is not defined.' => 'L\'événement « {class}.{event} » n\'est pas défini.', 'Extension path "{path}" does not exist.' => 'Le chemin d\'accès « {path} » de l\'extension n\'existe pas.', @@ -121,7 +121,7 @@ 'File upload was stopped by extension.' => 'Le téléchargement a été stoppé par l\'extension.', 'Filter "{filter}" is invalid. Controller "{class}" does have the filter method "filter{filter}".' => 'Le filtre « {filter} » est invalide. Le contrôleur « {class} » possède la méthode de filtrage « filter{filter} ».', 'Get a new code' => 'Récupérez un nouveau code', - 'Go to page: ' => 'Aller à la page :', + 'Go to page: ' => 'Aller à la page:', 'Invalid MO file revision: {revision}.' => 'Version du fichier MO invalide: {revision}.', 'Invalid MO file: {file} (magic: {magic}).' => 'Fichier MO invalide: {file} (magic: {magic}).', 'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'Valeur « {value} » invalide. Vérifiez qu\'elle fait partie de ({enum}).', @@ -136,7 +136,7 @@ 'No columns are being updated for table "{table}".' => 'Aucune colonne de la table « {table} » ne sera mise à jour.', 'No counter columns are being updated for table "{table}".' => 'Aucune colonne incrémentale de la table « {table} » ne sera mise à jour.', 'Object configuration must be an array containing a "class" element.' => 'L\'objet configuration doit être un tableau contenant un élément « class ».', - 'Please fix the following input errors:' => 'Veuillez corriger les erreurs de saisie :', + 'Please fix the following input errors:' => 'Veuillez corriger les erreurs de saisie:', 'Property "{class}.{property}" is not defined.' => 'La propriété « {class}.{property} » est indéfinie.', 'Property "{class}.{property}" is read only.' => 'La propriété « {class}.{property} » est en lecture seule.', 'Queue data must be an array or an object implementing Traversable.' => 'Les données de la queue doivent être un tableau ou un objet qui implémente Traversable.', @@ -155,7 +155,7 @@ 'The asset "{asset}" to be published does not exist.' => 'L\'asset « {asset} » à publier n\'existe pas.', 'The command path "{path}" is not a valid directory.' => 'Le chemin d\'accès « {path} » à la ligne de commande n\'est pas un dossier valide.', 'The controller path "{path}" is not a valid directory.' => 'Le chemin d\'accès « {path} » au contrôleur n\'est pas un dossier valide.', - 'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'Le fichier « {file} » ne peut être téléchargé. Les extensions de fichier autorisées sont : {extensions}.', + 'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'Le fichier « {file} » ne peut être téléchargé. Les extensions de fichier autorisées sont: {extensions}.', 'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'Le fichier « {file} » est trop gros. Sa taille ne peut être supérieure à {limit} octets.', 'The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.' => 'Le fichier « {file} » est trop petit. Sa taille ne peut être inférieure à {limit} octets.', 'The file "{file}" was only partially uploaded.' => 'Le fichier « {file} » a été téléchargé partiellement.', @@ -182,8 +182,8 @@ 'The pattern for week in month must be "W".' => 'Le motif de définition du numéro de semaine dans le mois doit être « W ».', 'The pattern for week in year must be "w".' => 'Le motif de définition du numéro de semaine dans l\'année doit être « w ».', 'The queue is empty.' => 'La queue est vide.', - 'The relation "{relation}" in active record class "{class}" is not specified correctly. The join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'La relation « {relation} » dans la classe Active record « {class} » n\'est pas définie correctement. La table de jointure « {joinTable} » donnée par la clef étrangère n\'a pas été trouvée dans la base de données.', - 'The relation "{relation}" in active record class "{class}" is not specified correctly: the join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'La relation « {relation} » définie dans la classe Active record « {class} » est incorrecte : la table de jointure « {joinTable} » spécifiée par la clef étrangère est introuvable dans la base de données.', + 'The relation "{relation}" in active record class "{class}" is not specified correctly. The join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'La relation « {relation} » dans la classe Active record « {class} » n\'est pas définie correctement. La table de jointure « {joinTable} » donnée de la clef étrangère n\'est pas trouvée dans la base de données.', + 'The relation "{relation}" in active record class "{class}" is not specified correctly: the join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'La relation « {relation} » définie dans la classe Active record « {class} » est incorrecte: la table de jointure « {joinTable} » spécifiée par la clef étrangère est introuvable dans la base de données.', 'The relation "{relation}" in active record class "{class}" is specified with a foreign key "{key}" that does not point to the parent table "{table}".' => 'La relation « {relation} » dans la classe Active record « {class} » est définie avec la clef étrangère « {key} » qui ne pointe pas vers la table parente « {table} ».', 'The relation "{relation}" in active record class "{class}" is specified with an incomplete foreign key. The foreign key must consist of columns referencing both joining tables.' => 'La relation « {relation} » définie dans l\'active record « {class} » a une clef étrangère incomplète. La clef étrangère doit être constituée de colonnes qui font référence aux deux tables jointes.', 'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key "{key}". There is no such column in the table "{table}".' => 'La relation « {relation} » définie dans la classe active record « {class} » a une clef étrangère « {key} » invalide. Cette colonne n\'existe pas dans la table « {table} ».', @@ -221,10 +221,10 @@ '{attribute} is not a valid email address.' => '{attribute} n\'est pas une adresse email valide.', '{attribute} is not in the list.' => '{attribute} n\'est pas dans la liste.', '{attribute} is of the wrong length (should be {length} characters).' => '{attribute} n\'est pas de la bonne longueur ({length} caractères autorisés).', - '{attribute} is too big (maximum is {max}).' => '{attribute} est trop grand (maximum : {max}).', - '{attribute} is too long (maximum is {max} characters).' => '{attribute} est trop long (maximum : {max} caractères).', - '{attribute} is too short (minimum is {min} characters).' => '{attribute} est trop court (minimum : {min} caractères).', - '{attribute} is too small (minimum is {min}).' => '{attribute} est trop petit (minimum : {min}).', + '{attribute} is too big (maximum is {max}).' => '{attribute} est trop grand (maximum: {max}).', + '{attribute} is too long (maximum is {max} characters).' => '{attribute} est trop long (maximum: {max} caractères).', + '{attribute} is too short (minimum is {min} characters).' => '{attribute} est trop court (minimum: {min} caractères).', + '{attribute} is too small (minimum is {min}).' => '{attribute} est trop petit (minimum: {min}).', '{attribute} must be a number.' => '{attribute} doit être un nombre.', '{attribute} must be an integer.' => '{attribute} doit être un entier.', '{attribute} must be either {true} or {false}.' => '{attribute} doit être soit {true} soit {false}.', diff --git a/web/framework-1.1.17/messages/fr/zii.php b/web/framework/messages/fr/zii.php similarity index 100% rename from web/framework-1.1.17/messages/fr/zii.php rename to web/framework/messages/fr/zii.php diff --git a/web/framework-1.1.17/messages/he/yii.php b/web/framework/messages/he/yii.php similarity index 100% rename from web/framework-1.1.17/messages/he/yii.php rename to web/framework/messages/he/yii.php diff --git a/web/framework-1.1.17/messages/he/zii.php b/web/framework/messages/he/zii.php similarity index 100% rename from web/framework-1.1.17/messages/he/zii.php rename to web/framework/messages/he/zii.php diff --git a/web/framework/messages/hr/yii.php b/web/framework/messages/hr/yii.php new file mode 100644 index 000000000..d41e4d90f --- /dev/null +++ b/web/framework/messages/hr/yii.php @@ -0,0 +1,231 @@ + '0', + 'Virtual attribute {name} must specify "asc" and "desc" options.' => 'Virtualni atribut {name} mora specificirati "asc"- i "desc" opcije.', + '"{path}" is not a valid directory.' => '"{path}" nije važeći direktorij.', + '< Previous' => '< Prethodna', + '<< First' => '<< Prva', + 'Active Record requires a "db" CDbConnection application component.' => 'ActiveRecord zahtjeva "db" CDbConnection aplikacijsku komponentu.', + 'Active record "{class}" has an invalid configuration for relation "{relation}". It must specify the relation type, the related active record class and the foreign key.' => 'ActiveRecord-Klasa "{class}" ima nevažeću konfiguraciju za odnos "{relation}". Tipa odnosa, odnosni ActiveRecord i strani kljuÄ (foreign key) moraju biti postavljeni.', + 'Active record "{class}" is trying to select an invalid column "{column}". Note, the column must exist in the table or be an expression with alias.' => 'ActiveRecord "{class}" koristi nevažeće polje "{column}" u SELECT. Pripazite da to polje mora da postoji u tabeli ili da bude alias izraz.', + 'Active record class "{class}" does not have a scope named "{scope}".' => 'ActiveRecord-Klasa "{class}" nema polje imenovano "{scope}".', + 'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Alias "{alias}" je validan. Molim vas, uspostavite da pokazuje do važećeg direktorija ili fajla.', + 'Application base path "{path}" is not a valid directory.' => 'Glavni put (base path) "{path}" aplikacije nije važeći.', + 'Application runtime path "{path}" is not valid. Please make sure it is a directory writable by the Web server process.' => 'Prometni put (runtime path) "{path}" aplikacije je nevažan. Pripazite da proces web servera ima pravo da tamo piÅ¡e.', + 'Authorization item "{item}" has already been assigned to user "{user}".' => 'Element autorizacije "{item}" je već namjenjen korisniku "{user}".', + 'Base path "{path}" is not a valid directory.' => 'Glavni put "{path}" je nevažeći direktorijum.', + 'CApcCache requires PHP apc extension to be loaded.' => 'CApcCache zahtjeva da je uÄitan PHP APC dodatak.', + 'CAssetManager.basePath "{path}" is invalid. Please make sure the directory exists and is writable by the Web server process.' => 'CAssetManager.basePath "{path}" nije važeća. Pripazite da postoji taj direktorijum i da proces web servera ima pravo da tamo piÅ¡e.', + 'CCacheHttpSession.cacheID is invalid. Please make sure "{id}" refers to a valid cache application component.' => 'CCacheHttpSession.cacheID nije važeća. Molim vas, uspostavite da se "{id}" odnosi na važeću cache aplikacionu komponentu.', + 'CCaptchaValidator.action "{id}" is invalid. Unable to find such an action in the current controller.' => 'CCaptchaValidator.action "{id}" nije važeća. Ne mogu da pronaÄ‘em takvu akciju u trenutnom controlleru.', + 'CDbAuthManager.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbAuthManager.connectionID "{id}" nije važeća. Molimo vas, uspostavite da se "{id}" odnosi na važeću aplikacijsku komponentu tipa CDbConnection.', + 'CDbCache.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCache.connectionID "{id}" nije važeća. Molimo vas, uspostavite da se odnosi na važeću aplikacijsku komponentu tipa CDbConnection.', + 'CDbCacheDependency.sql cannot be empty.' => 'CDbCacheDependency.sql ne smije biti prazno.', + 'CDbCommand failed to execute the SQL statement: {error}' => 'CDbCommand ne može da izvrÅ¡i SQL-Statement: {error}', + 'CDbCommand failed to prepare the SQL statement: {error}' => 'CDbCommand ne može da pripremi SQL-Statement: {error}', + 'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection ne podržava Äitanje Å¡ema za {driver}-datoteke.', + 'CDbConnection failed to open the DB connection: {error}' => 'CDbConnection ne može da uspostavi spoj sa datotekom: {error}', + 'CDbConnection is inactive and cannot perform any DB operations.' => 'CDbConnection nije aktivna i ne može izvrÅ¡avati operacije na datoteci.', + 'CDbConnection.connectionString cannot be empty.' => 'CDbConnection.connectionString ne smije biti prazno.', + 'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader se ne može premotavati. On je forward-only (samo naprijed) ÄitaÄ.', + 'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" nije važeća. Molimo vas, uspostavite da se "{id}" odnosi na važeću aplikacijsku komponentu tipa CDbConnection.', + 'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" ne pokazuje na važeću aplikacijsku komponentu od tipa Typ CDbConnection.', + 'CDbMessageSource.connectionID is invalid. Please make sure "{id}" refers to a valid database application component.' => 'CDbMessageSource.connectionID je nevažna. Molimo vas, uspostavite da se "{id}" odnosi na važeću aplikacijsku komponentu tipa CDbConnection.', + 'CDbTestFixture.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbFixture.connectionID "{id}" je nevažeća. Molim vas, uspostavite da se odnosi na važeću aplikacionu komponentu tipa CDbConnection.', + 'CDbTransaction is inactive and cannot perform commit or roll back operations.' => 'CDbTransaction nije aktivno i ne može da izvrÅ¡i Commit- ili Rollback operaciju.', + 'CDirectoryCacheDependency.directory cannot be empty.' => 'CDirectoryCacheDependency.directory ne smije biti prazno.', + 'CEAcceleratorCache requires PHP eAccelerator extension to be loaded, enabled or compiled with the "--with-eaccelerator-shared-memory" option.' => 'CEAcceleratorCache zahtjeva da je PHP eAccelerator dodatak uÄitan i aktiviran ili se kompajlira sa opcijom "--with-eaccelerator-shared-memory".', + 'CFileCacheDependency.fileName cannot be empty.' => 'CFileCacheDependency.fileName ne smije biti prazno.', + 'CFileLogRoute.logPath "{path}" does not point to a valid directory. Make sure the directory exists and is writable by the Web server process.' => 'CFileLogRoute.logPath "{path}" ne pokazuje na nevažeći direktorij. Pripazite da postoji taj direktorij i da proces web servera ima pravo da tamo piÅ¡e.', + 'CFilterChain can only take objects implementing the IFilter interface.' => 'CFilterChain smije primiti samo objekte koje implementiraju IFilter-Interface.', + 'CFlexWidget.baseUrl cannot be empty.' => 'CFlexWidget.baseUrl ne smije biti prazno.', + 'CFlexWidget.name cannot be empty.' => 'CFlexWidget.name ne smije biti prazno.', + 'CGlobalStateCacheDependency.stateName cannot be empty.' => 'CGlobalStateCacheDependency.stateName ne smije biti prazno.', + 'CHttpCookieCollection can only hold CHttpCookie objects.' => 'CHttpCookieCollection smije da sadrži samo CHttpCookie-Objekte.', + 'CHttpRequest is unable to determine the entry script URL.' => 'CHttpRequest ne može da ustanovi URL ulaznog skripta (entry script).', + 'CHttpRequest is unable to determine the path info of the request.' => 'CHttpRequest ne može da ustanovi informacije o putu (path info) za tekući zahtjev (request).', + 'CHttpRequest is unable to determine the request URI.' => 'CHttpRequest ne može da ustanovi URI za tekući zahtjev (request).', + 'CHttpSession.cookieMode can only be "none", "allow" or "only".' => 'CHttpSession.cookieMode može biti jedino "none", "allow" ili "only".', + 'CHttpSession.gcProbability "{value}" is invalid. It must be an integer between 0 and 100.' => 'CHttpSession.gcProbability "{value}" je pogreÅ¡an. Mora biti cijeli broj (integer) izmeÄ‘u 0 i 100.', + 'CHttpSession.savePath "{path}" is not a valid directory.' => 'CHttpSession.savePath "{path}" nije ispravan direktorij.', + 'CMemCache server configuration must be an array.' => 'CMemCache server konfiguracija mora biti niz (array)', + 'CMemCache server configuration must have "host" value.' => 'CMemCache server konfiguracija mora imati dodjeljenu vrijednost za "host".', + 'CMultiFileUpload.name is required.' => 'CMultiFileUpload.name je obavezno.', + 'CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.' => 'CProfileLogRoute je naÅ¡ao neusaglaÅ¡en blok koda "{token}". Budite sigurni da su pozivi Yii::beginProfile() i Yii::endProfile() ispravno ugnježdeni.', + 'CProfileLogRoute.report "{report}" is invalid. Valid values include "summary" and "callstack".' => 'CProfileLogRoute.report "{report}" je pogreÅ¡an. Ispravne vrijednosti ukljuÄuju "summary" i "callstack".', + 'CSecurityManager requires PHP mcrypt extension to be loaded in order to use data encryption feature.' => 'CSecurityManager zahtjeva da PHP mcrypt ekstenzija bude ukljuÄena da bi se koristila mogućnost enkripcije podataka.', + 'CSecurityManager.encryptionKey cannot be empty.' => 'CSecurityManager.encryptionKey ne može biti prazan.', + 'CSecurityManager.validation must be either "MD5" or "SHA1".' => 'CSecurityManager.validation mora biti "MD5" ili "SHA1".', + 'CSecurityManager.validationKey cannot be empty.' => 'CSecurityManager.validationKey ne može biti prazan', + 'CTypedList<{type}> can only hold objects of {type} class.' => 'CTypedList<{type}> može da sadrži jedino objekte {type} klase.', + 'CUrlManager.UrlFormat must be either "path" or "get".' => 'CUrlManager.UrlFormat mora biti "path" ili "get".', + 'CXCache requires PHP XCache extension to be loaded.' => 'CXCache zahtjeva da ekstenzija PHP XCache bude uÄitana.', + 'CZendDataCache requires PHP Zend Data Cache extension to be loaded.' => 'CZendDataCache zahtjeva da ekstenzija PHP Zend Cache bude uÄitana.', + 'Cannot add "{child}" as a child of "{name}". A loop has been detected.' => 'Ne mogu da dodam "{child}" kao dijete od "{name}". Detektovana je petlja.', + 'Cannot add "{child}" as a child of "{parent}". A loop has been detected.' => 'Ne mogu da dodam "{child}" kao dijete od "{parent}". Detektovana je petlja.', + 'Cannot add an item of type "{child}" to an item of type "{parent}".' => 'Ne mogu da dodam stavku (item) tipa "{child}" u stavku (item) tipa "{parent}".', + 'Cannot add "{name}" as a child of itself.' => 'Ne mogu da dodam "{name}" kao svoje dijete.', + 'Column "{column} does not exist in table "{table}".' => 'Kolona "{column}" ne postoji u tabeli "{table}".', + 'Column name must be either a string or an array.' => 'Ime kolone mora biti string ili array.', + 'Either "{parent}" or "{child}" does not exist.' => 'Ni "{parent}" ni "{child}" ne postoje.', + 'Error: Table "{table}" does not have a primary key.' => 'GreÅ¡ka: Tabela "{table}" nema primarni kljuÄ (primary key).', + 'Error: Table "{table}" has a composite primary key which is not supported by crud command.' => 'GreÅ¡ka: Tabela "{table}" ima kompozitni primarni kljuÄ (composite primary key) koji nije podržan od strane "crud" komande.', + 'Event "{class}.{event}" is attached with an invalid handler "{handler}".' => 'DogaÄ‘aj "{class}.{event}" je zakaÄen za pogreÅ¡an (nevažeći) hendler (handler) "{handler}".', + 'Event "{class}.{event}" is not defined.' => 'DogaÄ‘aj (event) "{class}.{event}" nije definisan.', + 'Extension path "{path}" does not exist.' => 'Put dodataka (extension path) "{path}" ne postoji.', + 'Failed to write the uploaded file "{file}" to disk.' => 'NeuspjeÅ¡no snimanje uploadovanog fajla (uploaded file) "{file}" na disk.', + 'File upload was stopped by extension.' => 'Upload fajla (file upload) je zaustavljeno od strane ekstenzije.', + 'Filter "{filter}" is invalid. Controller "{class}" does have the filter method "filter{filter}".' => 'Filter "{filter}" je pogreÅ¡an. Kontroler "{class}" sadrži filter metod "filter{filter}".', + 'Get a new code' => 'Dobavi novi kod', + 'Go to page: ' => 'Idi na stranicu: ', + 'Invalid MO file revision: {revision}.' => 'PogreÅ¡na revizija MO fajla: {revision}.', + 'Invalid MO file: {file} (magic: {magic}).' => 'PogreÅ¡an (neispravan) MO fajl: {file} (magic: {magic}).', + 'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'PogreÅ¡na nabrojiva vrijednost "{value}". Molim vas, budite sigurni da je iz ({enum}).', + 'Invalid operator "{operator}".' => 'Nevažeći operator "{operator}".', + 'Last >>' => 'Zadnja >>', + 'List data must be an array or an object implementing Traversable.' => 'Podatak liste (List data) mora biti niz ili objekat koji implementira Traversable.', + 'List index "{index}" is out of bound.' => 'Indeks liste "{index}" je van opsega.', + 'Login Required' => 'Potrebna prijava', + 'Map data must be an array or an object implementing Traversable.' => 'Podatak mape (Map data) mora biti niz ili objekat koji implementira Traversable.', + 'Missing the temporary folder to store the uploaded file "{file}".' => 'Nedostaje privremeni folder za spremanje uÄitanog fajla "{file}".', + 'Next >' => 'Sljedeća >', + 'No columns are being updated for table "{table}".' => 'Nijedna kolona neće biti ažurirana u tabeli "{table}".', + 'No counter columns are being updated for table "{table}".' => 'BrojaÄ kolona neće biti ažuriran za tabelu "{table}".', + 'Object configuration must be an array containing a "class" element.' => 'Konfiguracija objekta mora biti niz koji sadrži "class" element.', + 'Please fix the following input errors:' => 'Molim vas ispravite greÅ¡ke:', + 'Property "{class}.{property}" is not defined.' => 'Svojstvo (property) "{class}.{property}" nije definisano.', + 'Property "{class}.{property}" is read only.' => 'Svojstvo (property) "{class}.{property}" je samo za Äitanje.', + 'Queue data must be an array or an object implementing Traversable.' => 'Podatak reda (Queue data) mora biti niz ili objekat koji implementira Traversable.', + 'Relation "{name}" is not defined in active record class "{class}".' => 'Odnos "{name}" nije definisan u active record klasi "{class}".', + 'Resetting PK sequence is not supported.' => 'Ne podržava vraćanje PK sekvence.', + 'Setting integrity check is not supported.' => 'Ne podržava se aktivacija kontrole integracije postavki.', + 'Stack data must be an array or an object implementing Traversable.' => 'Podatak sa steka (Stack data) mora biti niz ili objekat koji implementira Traversable.', + 'Table "{table}" does not have a column named "{column}".' => 'Tabela "{table}" ne posjeduje kolonu "{column}".', + 'Table "{table}" does not have a primary key defined.' => 'Tabela "{table}" nema definisan primarni kljuÄ (primary key).', + 'The "filter" property must be specified with a valid callback.' => '"Filter" svojstvo (property) mora biti specificirano povratnom funkcijom (callback).', + 'The "pattern" property must be specified with a valid regular expression.' => '"Pattern" svojstvo (property) mora biti specificirano ispravnim regularnim izrazom (regular expression).', + 'The "view" property is required.' => '"view" svojstvo (property) je obavezno.', + 'The CSRF token could not be verified.' => 'CSRF token ne može biti potvrÄ‘en (verifikovan).', + 'The URL pattern "{pattern}" for route "{route}" is not a valid regular expression.' => 'URL Å¡ablon (pattern) "{pattern}" za rutu "{route}" nije ispravan regularni izraz (regular expression).', + 'The active record cannot be deleted because it is new.' => 'Active record ne može biti izbrisan zato Å¡to je nov.', + 'The active record cannot be inserted to database because it is not new.' => 'Active record ne može biti ubaÄen u bazu zato Å¡to je nov.', + 'The active record cannot be updated because it is new.' => 'Active record ne može biti ažuriran zato Å¡to je nov.', + 'The asset "{asset}" to be pulished does not exist.' => 'Resurs "{asset}" koji treba biti objavljen ne postoji.', + 'The command path "{path}" is not a valid directory.' => 'Put direktorija do komande (command path) "{path}" nije ispravan.', + 'The controller path "{path}" is not a valid directory.' => 'Put direktorija do kontrolera "{path}" nije ispravan.', + 'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'Fajl "{file}" ne može biti podignut (uploaded). Dozvoljeni su jedino fajlovi sa slijedećim ekstenzijama: {extensions}.', + 'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'Fajl "{file}" je prevelik. VeliÄina fajla ne smije da prekoraÄi {limit} bytes.', + 'The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.' => 'Fajl "{file}" je premali. VeliÄina fajla ne smije biti manja od {limit} bytes.', + 'The file "{file}" was only partially uploaded.' => 'Fajl "{file}" je samo djelimiÄno uÄitan (uploaded).', + 'The first element in a filter configuration must be the filter class.' => 'Prvi element u konfiguraciji filtera mora biti klasa filtera.', + 'The item "{name}" does not exist.' => 'Stavka "{name}" ne postoji.', + 'The item "{parent}" already has a child "{child}".' => 'Stavka "{parent}" već ima dijete "{child}".', + 'The layout path "{path}" is not a valid directory.' => 'Put do direktorija layout "{path}" nije ispravan.', + 'The list is read only.' => 'Lista (List) je samo za Äitanje', + 'The map is read only.' => 'Mapa (Map) je samo za Äitanje', + 'The module path "{path}" is not a valid directory.' => 'Put do modula "{path}" je nevažeći direktorijum.', + 'The pattern for 12 hour format must be "h" or "hh".' => 'Å ablon za 12 Äasovni format mora biti "h" ili "hh".', + 'The pattern for 24 hour format must be "H" or "HH".' => 'Å ablon za 24 Äasovni format mora biti "H" ili "HH".', + 'The pattern for AM/PM marker must be "a".' => 'Å ablona za AM/PM marker mora biti "a".', + 'The pattern for day in month must be "F".' => 'Å ablona za dan u mjesecu mora biti "F".', + 'The pattern for day in year must be "D", "DD" or "DDD".' => 'Å ablon za dan u godini mora biti "D", "DD" ili "DDD".', + 'The pattern for day of the month must be "d" or "dd".' => 'Å ablon za dan mjeseca mora biti "d" ili "dd".', + 'The pattern for day of the week must be "E", "EE", "EEE", "EEEE" or "EEEEE".' => 'Å ablon za dan sedmice mora biti "E", "EE", "EEE", "EEEE" ili "EEEEE".', + 'The pattern for era must be "G", "GG", "GGG", "GGGG" or "GGGGG".' => 'Å ablon za doba mora biti "G", "GG", "GGG", "GGGG" ili "GGGGG".', + 'The pattern for hour in AM/PM must be "K" or "KK".' => 'Å ablon za Äas u AM/PM mora biti "K" ili "KK".', + 'The pattern for hour in day must be "k" or "kk".' => 'Å ablon za Äas u danu mora biti "k" ili "kk".', + 'The pattern for minutes must be "m" or "mm".' => 'Å ablon za minute mora biti "m" ili "mm".', + 'The pattern for month must be "M", "MM", "MMM", or "MMMM".' => 'Å ablon za mjesec mora biti "M", "MM", "MMM" ili "MMMM".', + 'The pattern for seconds must be "s" or "ss".' => 'Å ablon za sekunde mora biti "s" ili "ss".', + 'The pattern for time zone must be "z" or "v".' => 'Å ablon za zonu mora biti "z" ili "v".', + 'The pattern for week in month must be "W".' => 'Å ablon za sedmicu u mjesecu mora biti "W".', + 'The pattern for week in year must be "w".' => 'Å ablon za sedmicu u godini mora biti "w".', + 'The queue is empty.' => 'Red (queue) je prazan.', + 'The relation "{relation}" in active record class "{class}" is not specified correctly: The join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'Odnos "{relation}" u active record klasi "{class}" nije specificirana ispravno: pridružena tabela (join table) "{joinTable}" zadata u spoljnom kljuÄu (foreign key) ne može biti pronaÄ‘ena u bazi.', + 'The relation "{relation}" in active record class "{class}" is not specified correctly: the join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'Odnos "{relation}" u active record klasi "{class}" nije specificirana ispravno: pridružena tabela (join table) "{joinTable}" zadata u spoljnom kljuÄu (foreign key) ne može biti pronaÄ‘ena u bazi.', + 'The relation "{relation}" in active record class "{class}" is specified with a foreign key "{key}" that does not point to the parent table "{table}".' => 'Odnos "{relation}" u active record klasi "{class}" je ispisan sa spoljnim kljuÄem "{key}", koji ne prikazuje na tabelu "{table}".', + 'The relation "{relation}" in active record class "{class}" is specified with an incomplete foreign key. The foreign key must consist of columns referencing both joining tables.' => 'Odnos "{relation}" u active record klasi "{class}" je specificirana sa nekompletnim spoljnim kljuÄem (foreign key). Spoljni kljuÄ (foreign key) mora se sastojati od kolona koje referenciraju obadvije tabele za spajanje (joining tables).', + 'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key "{key}". The foreign key does not point to either joining table.' => 'Odnos "{relation}" u active record klasi "{class}" je specificirana pogreÅ¡nim spoljnim kljuÄem (foreign key) "{key}". Spoljni kljuÄ (foreign key) ne pokazuje ni na jednu tabelu za spajanje (joining tables).', + 'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key "{key}". There is no such column in the table "{table}".' => 'Odnos "{relation}" u active record klasi "{class}" je specificirana sa pogreÅ¡nim spoljnim kljuÄem "{key}". U tabeli "{table}" ne postoji takva kolona.', + 'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key. The columns in the key must match the primary keys of the table "{table}".' => 'Odnos "{relation}" u active record klasi "{class}" je specificirana pogreÅ¡nim spoljnim kljuÄem (foreign key). Kolone spoljnog kljuÄa (foreign key) moraju biti iste kao i primarnog kljuÄa od tabele "{table}".', + 'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key. The format of the foreign key must be "joinTable(fk1,fk2,...)".' => 'Odnos "{relation}" u active record klasi "{class}" je specificirana pogreÅ¡nim spoljnim kljuÄem (foreign key). Format spoljnog kljuÄa (foreign key) mora biti "joinTable(fk1,fk2,...)', + 'The requested view "{name}" was not found.' => 'zahtjevani pogled (view) "{name}" nije pronaÄ‘en.', + 'The stack is empty.' => 'Stek (stack) je prazna.', + 'The system is unable to find the requested action "{action}".' => 'Sistem ne može da pronaÄ‘e traženu akciju "{action}".', + 'The system view path "{path}" is not a valid directory.' => 'Put direktorija do sistemskog pogleda (system view) "{path}" nije ispravan.', + 'The table "{table}" for active record class "{class}" cannot be found in the database.' => 'Tabela "{table}" za active record klasu "{class}" ne može biti pronaÄ‘ena u bazi.', + 'The value for the primary key "{key}" is not supplied when querying the table "{table}".' => 'Vrijednost primarnog kljuÄa (primary key) "{key}" nije prosljeÄ‘ena prilikom izvrÅ¡enja upita nad tabelom "{table}".', + 'The verification code is incorrect.' => 'Verifikacioni kod je pogreÅ¡an.', + 'The view path "{path}" is not a valid directory.' => 'Put do prikaznog direktorija (view path) "{path}" nije važeći.', + 'Theme directory "{directory}" does not exist.' => 'Direktorijum za teme (theme directory) "{directory}" ne postoji.', + 'This content requires the Adobe Flash Player.' => 'Ovaj sadržaj zahtjeva Adobe Flash Player.', + 'Unable to add an item whose name is the same as an existing item.' => 'Ne mogu da dodam stavku sa istim imenom kao postojeća stavka.', + 'Unable to change the item name. The name "{name}" is already used by another item.' => 'Ne mogu da promjenim ime stavke (item name). Ime "{name}" već koristi neka druga stavka.', + 'Unable to create application state file "{file}". Make sure the directory containing the file exists and is writable by the Web server process.' => 'Ne mogu da kreiram aplikacioni fajl stanja (state file) "{file}". Budite sigurni da direktorijum koji sadrži fajl postoji i da je omogućeno pisanje od strane Web server procesa.', + 'Unable to lock file "{file}" for reading.' => 'Ne mogu da zakljuÄam fajl "{file}" za Äitanje.', + 'Unable to lock file "{file}" for writing.' => 'Ne mogu da zakljuÄam fajl "{file}" za upisivanje.', + 'Unable to read file "{file}".' => 'Ne mogu da proÄitam fajl "{file}".', + 'Unable to replay the action "{object}.{method}". The method does not exist.' => 'Ne mogu reproducirati (replay) "{object}.{method}". Metoda ne postoji.', + 'Unable to resolve the request "{route}".' => 'Ne mogu da rijeÅ¡im "{route}" zahtjev.', + 'Unable to write file "{file}".' => 'Ne mogu da upiÅ¡em fajl "{file}".', + 'Unknown authorization item "{name}".' => 'Nepoznata stavka ovlašćenja (authorization item) "{name}', + 'Unrecognized locale "{locale}".' => 'Lokalizacija nije prepoznata (unrecognized locale) "{locale}".', + 'View file "{file}" does not exist.' => 'View fajl "{file}" ne postoji.', + 'Yii application can only be created once.' => 'Yii aplikacija može biti kreirana samo jedanput.', + 'You are not authorized to perform this action.' => 'Niste autorizovani da izvrÅ¡ite ovu akciju.', + 'Your request is not valid.' => 'VaÅ¡ zahtjev nije ispravan.', + '{attribute} "{value}" has already been taken.' => '{attribute} "{value}" je već uzeta.', + '{attribute} "{value}" is invalid.' => '{attribute} "{value}" je pogreÅ¡an (neispravan).', + '{attribute} cannot accept more than {limit} files.' => '{attribute} ne prihvata viÅ¡e nego {limit} fajlova.', + '{attribute} cannot be blank.' => 'Morate popuniti polje {attribute}.', + '{attribute} is invalid.' => '{attribute} je pogreÅ¡an (neispravan).', + '{attribute} is not a valid URL.' => '{attribute} nije ispravan URL.', + '{attribute} is not a valid email address.' => '{attribute} nije ispravna email adresa.', + '{attribute} is not in the list.' => '{attribute} nije u listi.', + '{attribute} is of the wrong length (should be {length} characters).' => '{attribute} je pogreÅ¡ne dužine (treba biti {length} karaktera).', + '{attribute} is too big (maximum is {max}).' => '{attribute} je prevelik (maksimum je {max}).', + '{attribute} is too long (maximum is {max} characters).' => '{attribute} je predugaÄak (maksimum je {max} karaktera).', + '{attribute} is too short (minimum is {min} characters).' => '{attribute} je prekratak (minimum je {min} karaktera).', + '{attribute} is too small (minimum is {min}).' => '{attribute} je premali (minimum je {min}).', + '{attribute} must be a number.' => '{attribute} mora biti broj.', + '{attribute} must be an integer.' => '{attribute} mora biti cijeli broj (integer).', + '{attribute} must be either {true} or {false}.' => '{attribute} mora biti makar {true} ili {false}.', + '{attribute} must be greater than "{compareValue}".' => '{attribute} mora biti veći nego "{compareValue}".', + '{attribute} must be greater than or equal to "{compareValue}".' => '{attribute} mora biti veći nego "{compareValue}".', + '{attribute} must be less than "{compareValue}".' => '{attribute} mora biti manji nego "{compareValue}".', + '{attribute} must be less than or equal to "{compareValue}".' => '{attribute} mora biti manji ili isti nego "{compareValue}".', + '{attribute} must be repeated exactly.' => '{attribute} mora biti taÄno ponovljen.', + '{attribute} must be {type}.' => '{attribute} mora biti {type}.', + '{attribute} must be {value}.' => '{attribute} mora biti {value}.', + '{attribute} must not be equal to "{compareValue}".' => '{attribute} ne smije biti isti kao "{compareValue}".', + '{className} does not support add() functionality.' => '{className} ne podržava add() funcionalnost.', + '{className} does not support delete() functionality.' => '{className} ne podržava delete() funkcionalnost.', + '{className} does not support flush() functionality.' => '{className} ne podržava flush() funkcionalnost.', + '{className} does not support get() functionality.' => '{className} ne podržava get() funkcionalnost.', + '{className} does not support set() functionality.' => '{className} ne podržava set() funkcionalnost.', + '{class} does not have a method named "{name}".' => '{class} nema metode imenom "{name}".', + '{class} does not have relation "{name}".' => '{class} nema odnosa "{name}".', + '{class} does not support fetching all table names.' => '{class} ne podržava dobavljanje svih naziva tabela.', + '{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => '{class} ima pogreÅ¡no ovjereno pravilo (validation rule). Pravilo mora da specificira atribute koji ce biti ovjereni i ime ovjerenja.', + '{class} must specify "model" and "attribute" or "name" property values.' => '{class} mora da specificira "model" i "attribute" ili "name" svojstvo (property) vrijednosti.', + '{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => '{class}.allowAutoLogin mora biti podeÅ¡en na true da bi se koristila cookies autorizacija.', + '{class}::authenticate() must be implemented.' => '{class}::authenticate() metoda mora biti implementirana.', + '{controller} cannot find the requested view "{view}".' => '{controller} ne može da pronaÄ‘e zahtjevani view "{view}".', + '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => '{controller} sadrži nepropisno ugnježdene widget tagove u svom pogledu (view) "{view}". {widget} widget nema endWidget() poziv.', + '{controller} has an extra endWidget({id}) call in its view.' => '{controller} ima suviÅ¡an endWidget({id}) poziv u svom view-u.', + '{widget} cannot find the view "{view}".' => '{widget} ne može da pronaÄ‘e view "{view}".', +); \ No newline at end of file diff --git a/web/framework-1.1.17/messages/hu/yii.php b/web/framework/messages/hu/yii.php similarity index 100% rename from web/framework-1.1.17/messages/hu/yii.php rename to web/framework/messages/hu/yii.php diff --git a/web/framework-1.1.17/messages/hu/zii.php b/web/framework/messages/hu/zii.php similarity index 100% rename from web/framework-1.1.17/messages/hu/zii.php rename to web/framework/messages/hu/zii.php diff --git a/web/framework-1.1.17/messages/id/yii.php b/web/framework/messages/id/yii.php similarity index 100% rename from web/framework-1.1.17/messages/id/yii.php rename to web/framework/messages/id/yii.php diff --git a/web/framework-1.1.17/messages/id/zii.php b/web/framework/messages/id/zii.php similarity index 100% rename from web/framework-1.1.17/messages/id/zii.php rename to web/framework/messages/id/zii.php diff --git a/web/framework-1.1.17/messages/it/yii.php b/web/framework/messages/it/yii.php similarity index 100% rename from web/framework-1.1.17/messages/it/yii.php rename to web/framework/messages/it/yii.php diff --git a/web/framework-1.1.17/messages/it/zii.php b/web/framework/messages/it/zii.php similarity index 100% rename from web/framework-1.1.17/messages/it/zii.php rename to web/framework/messages/it/zii.php diff --git a/web/framework-1.1.17/messages/ja/yii.php b/web/framework/messages/ja/yii.php similarity index 100% rename from web/framework-1.1.17/messages/ja/yii.php rename to web/framework/messages/ja/yii.php diff --git a/web/framework-1.1.17/messages/ja/zii.php b/web/framework/messages/ja/zii.php similarity index 100% rename from web/framework-1.1.17/messages/ja/zii.php rename to web/framework/messages/ja/zii.php diff --git a/web/framework-1.1.17/messages/kk/yii.php b/web/framework/messages/kk/yii.php similarity index 100% rename from web/framework-1.1.17/messages/kk/yii.php rename to web/framework/messages/kk/yii.php diff --git a/web/framework-1.1.17/messages/kk/zii.php b/web/framework/messages/kk/zii.php similarity index 100% rename from web/framework-1.1.17/messages/kk/zii.php rename to web/framework/messages/kk/zii.php diff --git a/web/framework-1.1.17/messages/ko_kr/yii.php b/web/framework/messages/ko_kr/yii.php similarity index 100% rename from web/framework-1.1.17/messages/ko_kr/yii.php rename to web/framework/messages/ko_kr/yii.php diff --git a/web/framework-1.1.17/messages/ko_kr/zii.php b/web/framework/messages/ko_kr/zii.php similarity index 100% rename from web/framework-1.1.17/messages/ko_kr/zii.php rename to web/framework/messages/ko_kr/zii.php diff --git a/web/framework-1.1.17/messages/lt/yii.php b/web/framework/messages/lt/yii.php similarity index 100% rename from web/framework-1.1.17/messages/lt/yii.php rename to web/framework/messages/lt/yii.php diff --git a/web/framework-1.1.17/messages/lt/zii.php b/web/framework/messages/lt/zii.php similarity index 100% rename from web/framework-1.1.17/messages/lt/zii.php rename to web/framework/messages/lt/zii.php diff --git a/web/framework-1.1.17/messages/lv/yii.php b/web/framework/messages/lv/yii.php similarity index 100% rename from web/framework-1.1.17/messages/lv/yii.php rename to web/framework/messages/lv/yii.php diff --git a/web/framework-1.1.17/messages/lv/zii.php b/web/framework/messages/lv/zii.php similarity index 100% rename from web/framework-1.1.17/messages/lv/zii.php rename to web/framework/messages/lv/zii.php diff --git a/web/framework-1.1.17/messages/nl/yii.php b/web/framework/messages/nl/yii.php similarity index 100% rename from web/framework-1.1.17/messages/nl/yii.php rename to web/framework/messages/nl/yii.php diff --git a/web/framework-1.1.17/messages/nl/zii.php b/web/framework/messages/nl/zii.php similarity index 100% rename from web/framework-1.1.17/messages/nl/zii.php rename to web/framework/messages/nl/zii.php diff --git a/web/framework-1.1.17/messages/no/yii.php b/web/framework/messages/no/yii.php similarity index 100% rename from web/framework-1.1.17/messages/no/yii.php rename to web/framework/messages/no/yii.php diff --git a/web/framework-1.1.17/messages/no/zii.php b/web/framework/messages/no/zii.php similarity index 100% rename from web/framework-1.1.17/messages/no/zii.php rename to web/framework/messages/no/zii.php diff --git a/web/framework-1.1.17/messages/pl/yii.php b/web/framework/messages/pl/yii.php similarity index 100% rename from web/framework-1.1.17/messages/pl/yii.php rename to web/framework/messages/pl/yii.php diff --git a/web/framework-1.1.17/messages/pl/zii.php b/web/framework/messages/pl/zii.php similarity index 100% rename from web/framework-1.1.17/messages/pl/zii.php rename to web/framework/messages/pl/zii.php diff --git a/web/framework-1.1.17/messages/pt/yii.php b/web/framework/messages/pt/yii.php similarity index 100% rename from web/framework-1.1.17/messages/pt/yii.php rename to web/framework/messages/pt/yii.php diff --git a/web/framework-1.1.17/messages/pt/zii.php b/web/framework/messages/pt/zii.php similarity index 100% rename from web/framework-1.1.17/messages/pt/zii.php rename to web/framework/messages/pt/zii.php diff --git a/web/framework-1.1.17/messages/pt_br/yii.php b/web/framework/messages/pt_br/yii.php similarity index 100% rename from web/framework-1.1.17/messages/pt_br/yii.php rename to web/framework/messages/pt_br/yii.php diff --git a/web/framework-1.1.17/messages/pt_br/zii.php b/web/framework/messages/pt_br/zii.php similarity index 100% rename from web/framework-1.1.17/messages/pt_br/zii.php rename to web/framework/messages/pt_br/zii.php diff --git a/web/framework-1.1.17/messages/ro/yii.php b/web/framework/messages/ro/yii.php similarity index 100% rename from web/framework-1.1.17/messages/ro/yii.php rename to web/framework/messages/ro/yii.php diff --git a/web/framework-1.1.17/messages/ro/zii.php b/web/framework/messages/ro/zii.php similarity index 100% rename from web/framework-1.1.17/messages/ro/zii.php rename to web/framework/messages/ro/zii.php diff --git a/web/framework-1.1.17/messages/ru/yii.php b/web/framework/messages/ru/yii.php similarity index 100% rename from web/framework-1.1.17/messages/ru/yii.php rename to web/framework/messages/ru/yii.php diff --git a/web/framework-1.1.17/messages/ru/zii.php b/web/framework/messages/ru/zii.php similarity index 100% rename from web/framework-1.1.17/messages/ru/zii.php rename to web/framework/messages/ru/zii.php diff --git a/web/framework-1.1.17/messages/sk/yii.php b/web/framework/messages/sk/yii.php similarity index 100% rename from web/framework-1.1.17/messages/sk/yii.php rename to web/framework/messages/sk/yii.php diff --git a/web/framework-1.1.17/messages/sk/zii.php b/web/framework/messages/sk/zii.php similarity index 100% rename from web/framework-1.1.17/messages/sk/zii.php rename to web/framework/messages/sk/zii.php diff --git a/web/framework-1.1.17/messages/sr_sr/yii.php b/web/framework/messages/sr_sr/yii.php similarity index 100% rename from web/framework-1.1.17/messages/sr_sr/yii.php rename to web/framework/messages/sr_sr/yii.php diff --git a/web/framework-1.1.17/messages/sr_sr/zii.php b/web/framework/messages/sr_sr/zii.php similarity index 100% rename from web/framework-1.1.17/messages/sr_sr/zii.php rename to web/framework/messages/sr_sr/zii.php diff --git a/web/framework-1.1.17/messages/sr_yu/yii.php b/web/framework/messages/sr_yu/yii.php similarity index 100% rename from web/framework-1.1.17/messages/sr_yu/yii.php rename to web/framework/messages/sr_yu/yii.php diff --git a/web/framework-1.1.17/messages/sr_yu/zii.php b/web/framework/messages/sr_yu/zii.php similarity index 100% rename from web/framework-1.1.17/messages/sr_yu/zii.php rename to web/framework/messages/sr_yu/zii.php diff --git a/web/framework-1.1.17/messages/sv/yii.php b/web/framework/messages/sv/yii.php similarity index 100% rename from web/framework-1.1.17/messages/sv/yii.php rename to web/framework/messages/sv/yii.php diff --git a/web/framework-1.1.17/messages/sv/zii.php b/web/framework/messages/sv/zii.php similarity index 100% rename from web/framework-1.1.17/messages/sv/zii.php rename to web/framework/messages/sv/zii.php diff --git a/web/framework-1.1.17/messages/ta_in/yii.php b/web/framework/messages/ta_in/yii.php similarity index 100% rename from web/framework-1.1.17/messages/ta_in/yii.php rename to web/framework/messages/ta_in/yii.php diff --git a/web/framework-1.1.17/messages/ta_in/zii.php b/web/framework/messages/ta_in/zii.php similarity index 100% rename from web/framework-1.1.17/messages/ta_in/zii.php rename to web/framework/messages/ta_in/zii.php diff --git a/web/framework-1.1.17/messages/th/yii.php b/web/framework/messages/th/yii.php similarity index 100% rename from web/framework-1.1.17/messages/th/yii.php rename to web/framework/messages/th/yii.php diff --git a/web/framework-1.1.17/messages/tr/yii.php b/web/framework/messages/tr/yii.php similarity index 100% rename from web/framework-1.1.17/messages/tr/yii.php rename to web/framework/messages/tr/yii.php diff --git a/web/framework-1.1.17/messages/tr/zii.php b/web/framework/messages/tr/zii.php similarity index 100% rename from web/framework-1.1.17/messages/tr/zii.php rename to web/framework/messages/tr/zii.php diff --git a/web/framework-1.1.17/messages/uk/yii.php b/web/framework/messages/uk/yii.php similarity index 100% rename from web/framework-1.1.17/messages/uk/yii.php rename to web/framework/messages/uk/yii.php diff --git a/web/framework-1.1.17/messages/uk/zii.php b/web/framework/messages/uk/zii.php similarity index 100% rename from web/framework-1.1.17/messages/uk/zii.php rename to web/framework/messages/uk/zii.php diff --git a/web/framework-1.1.17/messages/vi/yii.php b/web/framework/messages/vi/yii.php similarity index 100% rename from web/framework-1.1.17/messages/vi/yii.php rename to web/framework/messages/vi/yii.php diff --git a/web/framework-1.1.17/messages/vi/zii.php b/web/framework/messages/vi/zii.php similarity index 100% rename from web/framework-1.1.17/messages/vi/zii.php rename to web/framework/messages/vi/zii.php diff --git a/web/framework-1.1.17/messages/zh_cn/yii.php b/web/framework/messages/zh_cn/yii.php similarity index 100% rename from web/framework-1.1.17/messages/zh_cn/yii.php rename to web/framework/messages/zh_cn/yii.php diff --git a/web/framework-1.1.17/messages/zh_cn/zii.php b/web/framework/messages/zh_cn/zii.php similarity index 100% rename from web/framework-1.1.17/messages/zh_cn/zii.php rename to web/framework/messages/zh_cn/zii.php diff --git a/web/framework-1.1.17/messages/zh_tw/yii.php b/web/framework/messages/zh_tw/yii.php similarity index 100% rename from web/framework-1.1.17/messages/zh_tw/yii.php rename to web/framework/messages/zh_tw/yii.php diff --git a/web/framework-1.1.17/messages/zh_tw/zii.php b/web/framework/messages/zh_tw/zii.php similarity index 100% rename from web/framework-1.1.17/messages/zh_tw/zii.php rename to web/framework/messages/zh_tw/zii.php diff --git a/web/framework-1.1.17/test/CDbFixtureManager.php b/web/framework/test/CDbFixtureManager.php similarity index 100% rename from web/framework-1.1.17/test/CDbFixtureManager.php rename to web/framework/test/CDbFixtureManager.php diff --git a/web/framework-1.1.17/test/CDbTestCase.php b/web/framework/test/CDbTestCase.php similarity index 100% rename from web/framework-1.1.17/test/CDbTestCase.php rename to web/framework/test/CDbTestCase.php diff --git a/web/framework-1.1.17/test/CTestCase.php b/web/framework/test/CTestCase.php similarity index 100% rename from web/framework-1.1.17/test/CTestCase.php rename to web/framework/test/CTestCase.php diff --git a/web/framework-1.1.17/test/CWebTestCase.php b/web/framework/test/CWebTestCase.php similarity index 100% rename from web/framework-1.1.17/test/CWebTestCase.php rename to web/framework/test/CWebTestCase.php diff --git a/web/framework-1.1.17/utils/CDateTimeParser.php b/web/framework/utils/CDateTimeParser.php similarity index 100% rename from web/framework-1.1.17/utils/CDateTimeParser.php rename to web/framework/utils/CDateTimeParser.php diff --git a/web/framework-1.1.17/utils/CFileHelper.php b/web/framework/utils/CFileHelper.php similarity index 99% rename from web/framework-1.1.17/utils/CFileHelper.php rename to web/framework/utils/CFileHelper.php index 3608e14ca..7a3c05903 100644 --- a/web/framework-1.1.17/utils/CFileHelper.php +++ b/web/framework/utils/CFileHelper.php @@ -153,6 +153,7 @@ public static function findFiles($dir,$options=array()) * @param array $options additional options. The following options are supported: * newDirMode - the permission to be set for newly copied directories (defaults to 0777); * newFileMode - the permission to be set for newly copied files (defaults to the current environment setting). + * @throws Exception */ protected static function copyDirectoryRecursive($src,$dst,$base,$fileTypes,$exclude,$level,$options) { @@ -199,6 +200,7 @@ protected static function copyDirectoryRecursive($src,$dst,$base,$fileTypes,$exc * level N means searching for those directories that are within N levels. * @param boolean $absolutePaths whether to return absolute paths or relative ones * @return array files found under the directory. + * @throws Exception */ protected static function findFilesRecursive($dir,$base,$fileTypes,$exclude,$level,$absolutePaths) { diff --git a/web/framework-1.1.17/utils/CFormatter.php b/web/framework/utils/CFormatter.php similarity index 100% rename from web/framework-1.1.17/utils/CFormatter.php rename to web/framework/utils/CFormatter.php diff --git a/web/framework-1.1.17/utils/CLocalizedFormatter.php b/web/framework/utils/CLocalizedFormatter.php similarity index 100% rename from web/framework-1.1.17/utils/CLocalizedFormatter.php rename to web/framework/utils/CLocalizedFormatter.php diff --git a/web/framework-1.1.17/utils/CMarkdownParser.php b/web/framework/utils/CMarkdownParser.php similarity index 100% rename from web/framework-1.1.17/utils/CMarkdownParser.php rename to web/framework/utils/CMarkdownParser.php diff --git a/web/framework-1.1.17/utils/CPasswordHelper.php b/web/framework/utils/CPasswordHelper.php similarity index 100% rename from web/framework-1.1.17/utils/CPasswordHelper.php rename to web/framework/utils/CPasswordHelper.php diff --git a/web/framework-1.1.17/utils/CPropertyValue.php b/web/framework/utils/CPropertyValue.php similarity index 97% rename from web/framework-1.1.17/utils/CPropertyValue.php rename to web/framework/utils/CPropertyValue.php index ddb91810f..addcbe862 100644 --- a/web/framework-1.1.17/utils/CPropertyValue.php +++ b/web/framework/utils/CPropertyValue.php @@ -113,8 +113,14 @@ public static function ensureArray($value) $len = strlen($value); if ($len >= 2 && $value[0] == '(' && $value[$len-1] == ')') { - eval('$array=array'.$value.';'); - return $array; + try + { + return eval('return array' . $value . ';'); + } + catch (ParseError $e) + { + return array(); + } } else return $len>0?array($value):array(); diff --git a/web/framework-1.1.17/utils/CTimestamp.php b/web/framework/utils/CTimestamp.php similarity index 100% rename from web/framework-1.1.17/utils/CTimestamp.php rename to web/framework/utils/CTimestamp.php diff --git a/web/framework-1.1.17/utils/CVarDumper.php b/web/framework/utils/CVarDumper.php similarity index 100% rename from web/framework-1.1.17/utils/CVarDumper.php rename to web/framework/utils/CVarDumper.php diff --git a/web/framework-1.1.17/utils/fileExtensions.php b/web/framework/utils/fileExtensions.php similarity index 100% rename from web/framework-1.1.17/utils/fileExtensions.php rename to web/framework/utils/fileExtensions.php diff --git a/web/framework-1.1.17/utils/mimeTypes.php b/web/framework/utils/mimeTypes.php similarity index 100% rename from web/framework-1.1.17/utils/mimeTypes.php rename to web/framework/utils/mimeTypes.php diff --git a/web/framework-1.1.17/validators/CBooleanValidator.php b/web/framework/validators/CBooleanValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CBooleanValidator.php rename to web/framework/validators/CBooleanValidator.php diff --git a/web/framework-1.1.17/validators/CCaptchaValidator.php b/web/framework/validators/CCaptchaValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CCaptchaValidator.php rename to web/framework/validators/CCaptchaValidator.php diff --git a/web/framework-1.1.17/validators/CCompareValidator.php b/web/framework/validators/CCompareValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CCompareValidator.php rename to web/framework/validators/CCompareValidator.php diff --git a/web/framework-1.1.17/validators/CDateValidator.php b/web/framework/validators/CDateValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CDateValidator.php rename to web/framework/validators/CDateValidator.php diff --git a/web/framework-1.1.17/validators/CDefaultValueValidator.php b/web/framework/validators/CDefaultValueValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CDefaultValueValidator.php rename to web/framework/validators/CDefaultValueValidator.php diff --git a/web/framework-1.1.17/validators/CEmailValidator.php b/web/framework/validators/CEmailValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CEmailValidator.php rename to web/framework/validators/CEmailValidator.php diff --git a/web/framework-1.1.17/validators/CExistValidator.php b/web/framework/validators/CExistValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CExistValidator.php rename to web/framework/validators/CExistValidator.php diff --git a/web/framework-1.1.17/validators/CFileValidator.php b/web/framework/validators/CFileValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CFileValidator.php rename to web/framework/validators/CFileValidator.php diff --git a/web/framework-1.1.17/validators/CFilterValidator.php b/web/framework/validators/CFilterValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CFilterValidator.php rename to web/framework/validators/CFilterValidator.php diff --git a/web/framework-1.1.17/validators/CInlineValidator.php b/web/framework/validators/CInlineValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CInlineValidator.php rename to web/framework/validators/CInlineValidator.php diff --git a/web/framework-1.1.17/validators/CNumberValidator.php b/web/framework/validators/CNumberValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CNumberValidator.php rename to web/framework/validators/CNumberValidator.php diff --git a/web/framework-1.1.17/validators/CRangeValidator.php b/web/framework/validators/CRangeValidator.php similarity index 97% rename from web/framework-1.1.17/validators/CRangeValidator.php rename to web/framework/validators/CRangeValidator.php index 27a703db9..a15b6ae28 100644 --- a/web/framework-1.1.17/validators/CRangeValidator.php +++ b/web/framework/validators/CRangeValidator.php @@ -20,7 +20,7 @@ * return array( * array('text, tag', 'required'), * array('text, 'type', 'type' => 'string'), - * array('tag, 'in', 'range' => array('php', 'mysql', 'jquery')), + * array('tag', 'in', 'range' => array('php', 'mysql', 'jquery')), * ); * } * } @@ -121,4 +121,4 @@ public function clientValidateAttribute($object,$attribute) } "; } -} \ No newline at end of file +} diff --git a/web/framework-1.1.17/validators/CRegularExpressionValidator.php b/web/framework/validators/CRegularExpressionValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CRegularExpressionValidator.php rename to web/framework/validators/CRegularExpressionValidator.php diff --git a/web/framework-1.1.17/validators/CRequiredValidator.php b/web/framework/validators/CRequiredValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CRequiredValidator.php rename to web/framework/validators/CRequiredValidator.php diff --git a/web/framework-1.1.17/validators/CSafeValidator.php b/web/framework/validators/CSafeValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CSafeValidator.php rename to web/framework/validators/CSafeValidator.php diff --git a/web/framework-1.1.17/validators/CStringValidator.php b/web/framework/validators/CStringValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CStringValidator.php rename to web/framework/validators/CStringValidator.php diff --git a/web/framework-1.1.17/validators/CTypeValidator.php b/web/framework/validators/CTypeValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CTypeValidator.php rename to web/framework/validators/CTypeValidator.php diff --git a/web/framework-1.1.17/validators/CUniqueValidator.php b/web/framework/validators/CUniqueValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CUniqueValidator.php rename to web/framework/validators/CUniqueValidator.php diff --git a/web/framework-1.1.17/validators/CUnsafeValidator.php b/web/framework/validators/CUnsafeValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CUnsafeValidator.php rename to web/framework/validators/CUnsafeValidator.php diff --git a/web/framework-1.1.17/validators/CUrlValidator.php b/web/framework/validators/CUrlValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CUrlValidator.php rename to web/framework/validators/CUrlValidator.php diff --git a/web/framework-1.1.17/validators/CValidator.php b/web/framework/validators/CValidator.php similarity index 100% rename from web/framework-1.1.17/validators/CValidator.php rename to web/framework/validators/CValidator.php diff --git a/web/framework-1.1.17/vendors/Net_IDNA2/LICENSE.txt b/web/framework/vendors/Net_IDNA2/LICENSE.txt similarity index 100% rename from web/framework-1.1.17/vendors/Net_IDNA2/LICENSE.txt rename to web/framework/vendors/Net_IDNA2/LICENSE.txt diff --git a/web/framework-1.1.17/vendors/Net_IDNA2/Net/IDNA2.php b/web/framework/vendors/Net_IDNA2/Net/IDNA2.php similarity index 100% rename from web/framework-1.1.17/vendors/Net_IDNA2/Net/IDNA2.php rename to web/framework/vendors/Net_IDNA2/Net/IDNA2.php diff --git a/web/framework-1.1.17/vendors/Net_IDNA2/Net/IDNA2/Exception.php b/web/framework/vendors/Net_IDNA2/Net/IDNA2/Exception.php similarity index 100% rename from web/framework-1.1.17/vendors/Net_IDNA2/Net/IDNA2/Exception.php rename to web/framework/vendors/Net_IDNA2/Net/IDNA2/Exception.php diff --git a/web/framework-1.1.17/vendors/Net_IDNA2/Net/IDNA2/Exception/Nameprep.php b/web/framework/vendors/Net_IDNA2/Net/IDNA2/Exception/Nameprep.php similarity index 100% rename from web/framework-1.1.17/vendors/Net_IDNA2/Net/IDNA2/Exception/Nameprep.php rename to web/framework/vendors/Net_IDNA2/Net/IDNA2/Exception/Nameprep.php diff --git a/web/framework-1.1.17/vendors/README.html b/web/framework/vendors/README.html similarity index 93% rename from web/framework-1.1.17/vendors/README.html rename to web/framework/vendors/README.html index a0e5fd5e4..0a2bc5fbd 100644 --- a/web/framework-1.1.17/vendors/README.html +++ b/web/framework/vendors/README.html @@ -74,7 +74,7 @@

    Third-Party Library List

    CTimestamp - Text_Highlighter - Generic Syntax Highlighter (v0.7.0 beta) + Text_Highlighter - Generic Syntax Highlighter (v0.7.3 beta) The PHP License CTextHighlighter (note: many PHP files are modified to make them workable in PHP 5 strict mode and their PEAR dependency are also removed.) @@ -84,7 +84,7 @@

    Third-Party Library List

    CGettextMoFile - HTML Purifier (v4.5.0) + HTML Purifier (v4.9.2) LGPL CHtmlPurifier @@ -113,6 +113,11 @@

    Third-Party Library List

    MIT CWebLogRoute + + Zend Escaper - April 1 2015 + BSD + CJavaScript + diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter.php b/web/framework/vendors/TextHighlighter/Text/Highlighter.php similarity index 98% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter.php index 4823feb50..bd0548b54 100644 --- a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter.php +++ b/web/framework/vendors/TextHighlighter/Text/Highlighter.php @@ -46,7 +46,9 @@ /** * for our purpose, it is infinity */ -define ('HL_INFINITY', 1000000000); +if (!defined('HL_INFINITY')) { + define('HL_INFINITY', 1000000000); +} // }}} @@ -81,7 +83,7 @@ * Usage example * *require_once 'Text/Highlighter.php'; - *$hlSQL =& Text_Highlighter::factory('SQL',array('numbers'=>true)); + *$hlSQL = Text_Highlighter::factory('SQL',array('numbers'=>true)); *echo $hlSQL->highlight('SELECT * FROM table a WHERE id = 12'); * * diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/ABAP.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/ABAP.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/ABAP.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/ABAP.php diff --git a/web/framework/vendors/TextHighlighter/Text/Highlighter/AVRC.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/AVRC.php new file mode 100644 index 000000000..319c7e9b6 --- /dev/null +++ b/web/framework/vendors/TextHighlighter/Text/Highlighter/AVRC.php @@ -0,0 +1,877 @@ + + + * + */ + + +/** + * Auto-generated class. AVRC syntax highlighting + * + * @author Andrey Demenev + * @category Text + * @package Text_Highlighter + * @copyright 2004-2006 Andrey Demenev + * @license http://www.php.net/license/3_0.txt PHP License + * @version Release: 0.7.0 + * @link http://pear.php.net/package/Text_Highlighter + */ +class Text_Highlighter_AVRC extends Text_Highlighter +{ + var $_language = 'avrc'; + + /** + * Constructor + * + * @param array $options + * @access public + */ + function __construct($options=array()) + { + + $this->_options = $options; + $this->_regs = array ( + -1 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/', + 0 => '/((?i)\\\\)/', + 1 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/', + 2 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/', + 3 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/', + 4 => '//', + 5 => '/((?i)")|((?i)<)/', + 6 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)\\/\\*)|((?i)\\/\\/.+)/', + 7 => '/((?i)\\$\\w+\\s*:.+\\$)/', + 8 => '/((?i)\\$\\w+\\s*:.+\\$)/', + ); + $this->_counts = array ( + -1 => + array ( + 0 => 0, + 1 => 0, + 2 => 0, + 3 => 0, + 4 => 0, + 5 => 0, + 6 => 0, + 7 => 0, + 8 => 2, + 9 => 0, + 10 => 0, + 11 => 0, + 12 => 0, + 13 => 0, + ), + 0 => + array ( + 0 => 0, + ), + 1 => + array ( + 0 => 0, + 1 => 0, + 2 => 0, + 3 => 0, + 4 => 0, + 5 => 0, + 6 => 0, + 7 => 0, + 8 => 2, + 9 => 0, + 10 => 0, + 11 => 0, + 12 => 0, + 13 => 0, + ), + 2 => + array ( + 0 => 0, + 1 => 0, + 2 => 0, + 3 => 0, + 4 => 0, + 5 => 0, + 6 => 0, + 7 => 0, + 8 => 2, + 9 => 0, + 10 => 0, + 11 => 0, + 12 => 0, + 13 => 0, + ), + 3 => + array ( + 0 => 0, + 1 => 0, + 2 => 0, + 3 => 0, + 4 => 0, + 5 => 0, + 6 => 0, + 7 => 0, + 8 => 2, + 9 => 0, + 10 => 0, + 11 => 0, + 12 => 0, + 13 => 0, + ), + 4 => + array ( + ), + 5 => + array ( + 0 => 0, + 1 => 0, + ), + 6 => + array ( + 0 => 0, + 1 => 0, + 2 => 0, + 3 => 0, + 4 => 0, + 5 => 0, + 6 => 0, + 7 => 2, + 8 => 0, + 9 => 0, + ), + 7 => + array ( + 0 => 0, + ), + 8 => + array ( + 0 => 0, + ), + ); + $this->_delim = array ( + -1 => + array ( + 0 => 'quotes', + 1 => 'brackets', + 2 => 'brackets', + 3 => 'brackets', + 4 => '', + 5 => '', + 6 => '', + 7 => '', + 8 => '', + 9 => 'prepro', + 10 => 'prepro', + 11 => '', + 12 => 'mlcomment', + 13 => 'comment', + ), + 0 => + array ( + 0 => '', + ), + 1 => + array ( + 0 => 'quotes', + 1 => 'brackets', + 2 => 'brackets', + 3 => 'brackets', + 4 => '', + 5 => '', + 6 => '', + 7 => '', + 8 => '', + 9 => 'prepro', + 10 => 'prepro', + 11 => '', + 12 => 'mlcomment', + 13 => 'comment', + ), + 2 => + array ( + 0 => 'quotes', + 1 => 'brackets', + 2 => 'brackets', + 3 => 'brackets', + 4 => '', + 5 => '', + 6 => '', + 7 => '', + 8 => '', + 9 => 'prepro', + 10 => 'prepro', + 11 => '', + 12 => 'mlcomment', + 13 => 'comment', + ), + 3 => + array ( + 0 => 'quotes', + 1 => 'brackets', + 2 => 'brackets', + 3 => 'brackets', + 4 => '', + 5 => '', + 6 => '', + 7 => '', + 8 => '', + 9 => 'prepro', + 10 => 'prepro', + 11 => '', + 12 => 'mlcomment', + 13 => 'comment', + ), + 4 => + array ( + ), + 5 => + array ( + 0 => 'quotes', + 1 => 'quotes', + ), + 6 => + array ( + 0 => 'quotes', + 1 => 'brackets', + 2 => 'brackets', + 3 => '', + 4 => '', + 5 => '', + 6 => '', + 7 => '', + 8 => 'mlcomment', + 9 => 'comment', + ), + 7 => + array ( + 0 => '', + ), + 8 => + array ( + 0 => '', + ), + ); + $this->_inner = array ( + -1 => + array ( + 0 => 'string', + 1 => 'code', + 2 => 'code', + 3 => 'code', + 4 => 'identifier', + 5 => 'number', + 6 => 'number', + 7 => 'number', + 8 => 'number', + 9 => 'prepro', + 10 => 'code', + 11 => 'number', + 12 => 'mlcomment', + 13 => 'comment', + ), + 0 => + array ( + 0 => 'special', + ), + 1 => + array ( + 0 => 'string', + 1 => 'code', + 2 => 'code', + 3 => 'code', + 4 => 'identifier', + 5 => 'number', + 6 => 'number', + 7 => 'number', + 8 => 'number', + 9 => 'prepro', + 10 => 'code', + 11 => 'number', + 12 => 'mlcomment', + 13 => 'comment', + ), + 2 => + array ( + 0 => 'string', + 1 => 'code', + 2 => 'code', + 3 => 'code', + 4 => 'identifier', + 5 => 'number', + 6 => 'number', + 7 => 'number', + 8 => 'number', + 9 => 'prepro', + 10 => 'code', + 11 => 'number', + 12 => 'mlcomment', + 13 => 'comment', + ), + 3 => + array ( + 0 => 'string', + 1 => 'code', + 2 => 'code', + 3 => 'code', + 4 => 'identifier', + 5 => 'number', + 6 => 'number', + 7 => 'number', + 8 => 'number', + 9 => 'prepro', + 10 => 'code', + 11 => 'number', + 12 => 'mlcomment', + 13 => 'comment', + ), + 4 => + array ( + ), + 5 => + array ( + 0 => 'string', + 1 => 'string', + ), + 6 => + array ( + 0 => 'string', + 1 => 'code', + 2 => 'code', + 3 => 'identifier', + 4 => 'number', + 5 => 'number', + 6 => 'number', + 7 => 'number', + 8 => 'mlcomment', + 9 => 'comment', + ), + 7 => + array ( + 0 => 'inlinedoc', + ), + 8 => + array ( + 0 => 'inlinedoc', + ), + ); + $this->_end = array ( + 0 => '/(?i)"/', + 1 => '/(?i)\\}/', + 2 => '/(?i)\\)/', + 3 => '/(?i)\\]/', + 4 => '/(?i)>/', + 5 => '/(?mi)(? '/(?mi)(? '/(?i)\\*\\//', + 8 => '/(?mi)$/', + ); + $this->_states = array ( + -1 => + array ( + 0 => 0, + 1 => 1, + 2 => 2, + 3 => 3, + 4 => -1, + 5 => -1, + 6 => -1, + 7 => -1, + 8 => -1, + 9 => 5, + 10 => 6, + 11 => -1, + 12 => 7, + 13 => 8, + ), + 0 => + array ( + 0 => -1, + ), + 1 => + array ( + 0 => 0, + 1 => 1, + 2 => 2, + 3 => 3, + 4 => -1, + 5 => -1, + 6 => -1, + 7 => -1, + 8 => -1, + 9 => 5, + 10 => 6, + 11 => -1, + 12 => 7, + 13 => 8, + ), + 2 => + array ( + 0 => 0, + 1 => 1, + 2 => 2, + 3 => 3, + 4 => -1, + 5 => -1, + 6 => -1, + 7 => -1, + 8 => -1, + 9 => 5, + 10 => 6, + 11 => -1, + 12 => 7, + 13 => 8, + ), + 3 => + array ( + 0 => 0, + 1 => 1, + 2 => 2, + 3 => 3, + 4 => -1, + 5 => -1, + 6 => -1, + 7 => -1, + 8 => -1, + 9 => 5, + 10 => 6, + 11 => -1, + 12 => 7, + 13 => 8, + ), + 4 => + array ( + ), + 5 => + array ( + 0 => 0, + 1 => 4, + ), + 6 => + array ( + 0 => 0, + 1 => 1, + 2 => 2, + 3 => -1, + 4 => -1, + 5 => -1, + 6 => -1, + 7 => -1, + 8 => 7, + 9 => 8, + ), + 7 => + array ( + 0 => -1, + ), + 8 => + array ( + 0 => -1, + ), + ); + $this->_keywords = array ( + -1 => + array ( + 0 => -1, + 1 => -1, + 2 => -1, + 3 => -1, + 4 => + array ( + 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/', + 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/', + 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/', + 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/', + ), + 5 => + array ( + ), + 6 => + array ( + ), + 7 => + array ( + ), + 8 => + array ( + ), + 9 => -1, + 10 => -1, + 11 => + array ( + ), + 12 => -1, + 13 => -1, + ), + 0 => + array ( + 0 => + array ( + ), + ), + 1 => + array ( + 0 => -1, + 1 => -1, + 2 => -1, + 3 => -1, + 4 => + array ( + 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/', + 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/', + 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/', + 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/', + ), + 5 => + array ( + ), + 6 => + array ( + ), + 7 => + array ( + ), + 8 => + array ( + ), + 9 => -1, + 10 => -1, + 11 => + array ( + ), + 12 => -1, + 13 => -1, + ), + 2 => + array ( + 0 => -1, + 1 => -1, + 2 => -1, + 3 => -1, + 4 => + array ( + 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/', + 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/', + 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/', + 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/', + ), + 5 => + array ( + ), + 6 => + array ( + ), + 7 => + array ( + ), + 8 => + array ( + ), + 9 => -1, + 10 => -1, + 11 => + array ( + ), + 12 => -1, + 13 => -1, + ), + 3 => + array ( + 0 => -1, + 1 => -1, + 2 => -1, + 3 => -1, + 4 => + array ( + 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/', + 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/', + 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/', + 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/', + ), + 5 => + array ( + ), + 6 => + array ( + ), + 7 => + array ( + ), + 8 => + array ( + ), + 9 => -1, + 10 => -1, + 11 => + array ( + ), + 12 => -1, + 13 => -1, + ), + 4 => + array ( + ), + 5 => + array ( + 0 => -1, + 1 => -1, + ), + 6 => + array ( + 0 => -1, + 1 => -1, + 2 => -1, + 3 => + array ( + 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/', + 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/', + 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/', + 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/', + ), + 4 => + array ( + ), + 5 => + array ( + ), + 6 => + array ( + ), + 7 => + array ( + ), + 8 => -1, + 9 => -1, + ), + 7 => + array ( + 0 => + array ( + ), + ), + 8 => + array ( + 0 => + array ( + ), + ), + ); + $this->_parts = array ( + 0 => + array ( + 0 => NULL, + ), + 1 => + array ( + 0 => NULL, + 1 => NULL, + 2 => NULL, + 3 => NULL, + 4 => NULL, + 5 => NULL, + 6 => NULL, + 7 => NULL, + 8 => NULL, + 9 => NULL, + 10 => NULL, + 11 => NULL, + 12 => NULL, + 13 => NULL, + ), + 2 => + array ( + 0 => NULL, + 1 => NULL, + 2 => NULL, + 3 => NULL, + 4 => NULL, + 5 => NULL, + 6 => NULL, + 7 => NULL, + 8 => NULL, + 9 => NULL, + 10 => NULL, + 11 => NULL, + 12 => NULL, + 13 => NULL, + ), + 3 => + array ( + 0 => NULL, + 1 => NULL, + 2 => NULL, + 3 => NULL, + 4 => NULL, + 5 => NULL, + 6 => NULL, + 7 => NULL, + 8 => NULL, + 9 => NULL, + 10 => NULL, + 11 => NULL, + 12 => NULL, + 13 => NULL, + ), + 4 => + array ( + ), + 5 => + array ( + 0 => NULL, + 1 => NULL, + ), + 6 => + array ( + 0 => NULL, + 1 => NULL, + 2 => NULL, + 3 => NULL, + 4 => NULL, + 5 => NULL, + 6 => NULL, + 7 => NULL, + 8 => NULL, + 9 => NULL, + ), + 7 => + array ( + 0 => NULL, + ), + 8 => + array ( + 0 => NULL, + ), + ); + $this->_subst = array ( + -1 => + array ( + 0 => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false, + 7 => false, + 8 => false, + 9 => false, + 10 => false, + 11 => false, + 12 => false, + 13 => false, + ), + 0 => + array ( + 0 => false, + ), + 1 => + array ( + 0 => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false, + 7 => false, + 8 => false, + 9 => false, + 10 => false, + 11 => false, + 12 => false, + 13 => false, + ), + 2 => + array ( + 0 => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false, + 7 => false, + 8 => false, + 9 => false, + 10 => false, + 11 => false, + 12 => false, + 13 => false, + ), + 3 => + array ( + 0 => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false, + 7 => false, + 8 => false, + 9 => false, + 10 => false, + 11 => false, + 12 => false, + 13 => false, + ), + 4 => + array ( + ), + 5 => + array ( + 0 => false, + 1 => false, + ), + 6 => + array ( + 0 => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false, + 7 => false, + 8 => false, + 9 => false, + ), + 7 => + array ( + 0 => false, + ), + 8 => + array ( + 0 => false, + ), + ); + $this->_conditions = array ( + ); + $this->_kwmap = array ( + 'reserved' => 'reserved', + 'registers' => 'reserved', + 'types' => 'types', + 'Common Macros' => 'prepro', + ); + $this->_defClass = 'code'; + $this->_checkDefines(); + } + +} \ No newline at end of file diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/CPP.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/CPP.php similarity index 94% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/CPP.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/CPP.php index eccaa084e..229a681ba 100644 --- a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/CPP.php +++ b/web/framework/vendors/TextHighlighter/Text/Highlighter/CPP.php @@ -53,7 +53,7 @@ function __construct($options=array()) $this->_options = $options; $this->_regs = array ( - -1 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/', + -1 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/', 0 => '/((?i)\\\\)/', 1 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/', 2 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/', @@ -75,8 +75,12 @@ function __construct($options=array()) 5 => 0, 6 => 0, 7 => 0, - 8 => 0, + 8 => 2, 9 => 0, + 10 => 0, + 11 => 0, + 12 => 0, + 13 => 0, ), 0 => array ( @@ -171,11 +175,15 @@ function __construct($options=array()) 2 => 'brackets', 3 => 'brackets', 4 => '', - 5 => 'prepro', - 6 => 'prepro', + 5 => '', + 6 => '', 7 => '', - 8 => 'mlcomment', - 9 => 'comment', + 8 => '', + 9 => 'prepro', + 10 => 'prepro', + 11 => '', + 12 => 'mlcomment', + 13 => 'comment', ), 0 => array ( @@ -270,11 +278,15 @@ function __construct($options=array()) 2 => 'code', 3 => 'code', 4 => 'identifier', - 5 => 'prepro', - 6 => 'code', + 5 => 'number', + 6 => 'number', 7 => 'number', - 8 => 'mlcomment', - 9 => 'comment', + 8 => 'number', + 9 => 'prepro', + 10 => 'code', + 11 => 'number', + 12 => 'mlcomment', + 13 => 'comment', ), 0 => array ( @@ -380,11 +392,15 @@ function __construct($options=array()) 2 => 2, 3 => 3, 4 => -1, - 5 => 5, - 6 => 6, + 5 => -1, + 6 => -1, 7 => -1, - 8 => 7, - 9 => 8, + 8 => -1, + 9 => 5, + 10 => 6, + 11 => -1, + 12 => 7, + 13 => 8, ), 0 => array ( @@ -484,13 +500,25 @@ function __construct($options=array()) 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/', 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/', ), - 5 => -1, - 6 => -1, + 5 => + array ( + ), + 6 => + array ( + ), 7 => array ( ), - 8 => -1, + 8 => + array ( + ), 9 => -1, + 10 => -1, + 11 => + array ( + ), + 12 => -1, + 13 => -1, ), 0 => array ( @@ -740,6 +768,10 @@ function __construct($options=array()) 7 => false, 8 => false, 9 => false, + 10 => false, + 11 => false, + 12 => false, + 13 => false, ), 0 => array ( diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/CSS.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/CSS.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/CSS.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/CSS.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/DIFF.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/DIFF.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/DIFF.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/DIFF.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/DTD.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/DTD.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/DTD.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/DTD.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Generator.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Generator.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Generator.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Generator.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/HTML.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/HTML.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/HTML.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/HTML.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/JAVA.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/JAVA.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/JAVA.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/JAVA.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/JAVASCRIPT.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/JAVASCRIPT.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/JAVASCRIPT.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/JAVASCRIPT.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/MYSQL.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/MYSQL.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/MYSQL.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/MYSQL.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/PERL.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/PERL.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/PERL.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/PERL.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/PHP.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/PHP.php similarity index 99% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/PHP.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/PHP.php index 94b3733ee..70da65317 100644 --- a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/PHP.php +++ b/web/framework/vendors/TextHighlighter/Text/Highlighter/PHP.php @@ -46,7 +46,7 @@ function __construct($options=array()) $this->_options = $options; $this->_regs = array ( - -1 => '/((?i)(\\<\\?(php|=)?)?)/', + -1 => '/((?i)\\<\\?(php|=)?)/', 0 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)`)|((?mi)\\<\\<\\<[\\x20\\x09]*(\\w+)$)|((?i)\')|((?i)(#|\\/\\/))|((?i)[a-z_]\\w*)|((?i)\\((array|int|integer|string|bool|boolean|object|float|double)\\))|((?i)0[xX][\\da-f]+)|((?i)\\$[a-z_]\\w*)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))/', 1 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)`)|((?mi)\\<\\<\\<[\\x20\\x09]*(\\w+)$)|((?i)\')|((?i)(#|\\/\\/))|((?i)[a-z_]\\w*)|((?i)\\((array|int|integer|string|bool|boolean|object|float|double)\\))|((?i)\\?\\>)|((?i)0[xX][\\da-f]+)|((?i)\\$[a-z_]\\w*)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))/', 2 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)`)|((?mi)\\<\\<\\<[\\x20\\x09]*(\\w+)$)|((?i)\')|((?i)(#|\\/\\/))|((?i)[a-z_]\\w*)|((?i)\\((array|int|integer|string|bool|boolean|object|float|double)\\))|((?i)0[xX][\\da-f]+)|((?i)\\$[a-z_]\\w*)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))/', @@ -62,7 +62,7 @@ function __construct($options=array()) $this->_counts = array ( -1 => array ( - 0 => 2, + 0 => 1, ), 0 => array ( diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/PYTHON.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/PYTHON.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/PYTHON.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/PYTHON.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/RUBY.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/RUBY.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/RUBY.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/RUBY.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Array.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Array.php similarity index 97% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Array.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Array.php index ef3ffec15..b7442d0af 100644 --- a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Array.php +++ b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Array.php @@ -99,6 +99,7 @@ function preprocess($str) { // normalize whitespace and tabs $str = str_replace("\r\n","\n", $str); + $str = str_replace("\r","\n", $str); // some browsers refuse to display empty lines $str = preg_replace('~^$~m'," ", $str); $str = str_replace("\t",str_repeat(' ', $this->_tabsize), $str); @@ -141,7 +142,9 @@ function reset() */ function acceptToken($class, $content) { - + if (!is_array($this->_output)) { + $this->_output = array(); + } $theClass = $this->_getFullClassName($class); if ($this->_htmlspecialchars) { diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/BB.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/BB.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/BB.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/BB.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Console.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Console.php similarity index 93% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Console.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Console.php index 2bba33b65..0260dff3c 100644 --- a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Console.php +++ b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Console.php @@ -176,14 +176,19 @@ function acceptToken($class, $content) function finalize() { if ($this->_numbers) { - $nlines = substr_count($this->_output, "\n") + 1; - $len = strlen($nlines); - $i = 1; - $this->_output = preg_replace('~^~em', '" " . str_pad($i++, $len, " ", STR_PAD_LEFT) . ": "', $this->_output); + $this->_output = preg_replace_callback('~^~m', array($this, 'replaceCallback'), $this->_output); } $this->_output .= HL_CONSOLE_DEFCOLOR . "\n"; } + function replaceCallback() + { + $nlines = substr_count($this->_output, "\n") + 1; + $len = strlen($nlines); + $i = 1; + return " " . str_pad($i++, $len, " ", STR_PAD_LEFT) . ": "; + } + /** * Get generated output * diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Html.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Html.php similarity index 94% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Html.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Html.php index dcf37ab3a..b9cb4c649 100644 --- a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Html.php +++ b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Html.php @@ -52,11 +52,15 @@ /** * Use numbered list */ -define ('HL_NUMBERS_OL', 1); +if (!defined('HL_NUMBERS_OL')) { + define('HL_NUMBERS_OL', 1); +} /** * Use non-numbered list */ -define ('HL_NUMBERS_UL', 3); +if (!defined('HL_NUMBERS_UL')) { + define('HL_NUMBERS_UL', 3); +} /**#@-*/ @@ -188,10 +192,12 @@ class Text_Highlighter_Renderer_Html extends Text_Highlighter_Renderer_Array 'inlinetags' => 'hl-inlinetags', 'mlcomment' => 'hl-mlcomment', 'number' => 'hl-number', + 'prepro' => 'hl-prepro', 'quotes' => 'hl-quotes', 'reserved' => 'hl-reserved', 'special' => 'hl-special', 'string' => 'hl-string', + 'types' => 'hl-types', 'url' => 'hl-url', 'var' => 'hl-var', ); @@ -289,8 +295,6 @@ function finalize() // get parent's output parent::finalize(); $output = parent::getOutput(); - if(empty($output)) - return; $html_output = ''; @@ -320,18 +324,28 @@ function finalize() $span = $this->_getStyling($the_class); $decorated_output = $this->_decorate($content, $key); - //print "
     token = ".var_export($token, true)." -- span = " . htmlentities($span). "-- deco = ".$decorated_output."
    \n"; - $html_output .= sprintf($span, $decorated_output); + + + if ($numbers_li == true) { + // end span tags before end of li, and re-open on next line + $lastSpanTag = str_replace("%s", "", $span); + $span = sprintf($span, $decorated_output); + $span = str_replace("\n", "\n
  • $lastSpanTag ", $span); + $html_output .= $span; + } else { + $html_output .= sprintf($span, $decorated_output); + } + + } // format lists if (!empty($this->_numbers) && $numbers_li == true) { - //$html_output = "
    ".$html_output."
    "; + // additional whitespace for browsers that do not display // empty list items correctly - $this->_output = '
  •  ' . str_replace("\n", "
  • \n
  •  ", $html_output) . '
  • '; - + $this->_output = '
  •  ' . $html_output . '
  • '; $start = ''; if ($this->_numbers == HL_NUMBERS_OL && intval($this->_numbers_start) > 0) { diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/HtmlTags.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/HtmlTags.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/HtmlTags.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/HtmlTags.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/JSON.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/JSON.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/JSON.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/JSON.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/XML.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/XML.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/XML.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/XML.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/SH.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/SH.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/SH.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/SH.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/SQL.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/SQL.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/SQL.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/SQL.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/VBSCRIPT.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/VBSCRIPT.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/VBSCRIPT.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/VBSCRIPT.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/XML.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/XML.php similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/XML.php rename to web/framework/vendors/TextHighlighter/Text/Highlighter/XML.php diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/README b/web/framework/vendors/TextHighlighter/Text/README similarity index 93% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/README rename to web/framework/vendors/TextHighlighter/Text/README index 09b898ce6..88f71aed2 100644 --- a/web/framework-1.1.17/vendors/TextHighlighter/Text/README +++ b/web/framework/vendors/TextHighlighter/Text/README @@ -1,455 +1,455 @@ -# $Id: README,v 1.2 2007/06/13 10:09:47 ssttoo Exp $ - -Introduction -============ - -Text_Highlighter is a class for syntax highlighting. The main idea is to -simplify creation of subclasses implementing syntax highlighting for -particular language. Subclasses do not implement any new functioanality, they -just provide syntax highlighting rules. The rules sources are in XML format. -To create a highlighter for a language, there is no need to code a new class -manually. Simply describe the rules in XML file and use Text_Highlighter_Generator -to create a new class. - - -This document does not contain a formal description of API - it is very -simple, and I believe providing some examples of code is sufficient. - - -Highlighter XML source -====================== - -Basics ------- - -Creating a new syntax highlighter begins with describing the highlighting -rules. There are two basic elements: block and region. A block is just a -portion of text matching a regular expression and highlighted with a single -color. Keyword is an example of a block. A region is defined by two regular -expressions: one for start of region, and another for the end. The main -difference from a block is that a region can contain blocks and regions -(including same-named regions). An example of a region is a group of -statements enclosed in curly brackets (this is used in many languages, for -example PHP and C). Also, characters matching start and end of a region may be -highlighted with their own color, and region contents with another. - -Blocks and regions may be declared as contained. Contained blocks and regions -can only appear inside regions. If a region or a block is not declared as -contained, it can appear both on top level and inside regions. Block or region -declared as not-contained can only appear on top level. - -For any region, a list of blocks and regions that can appear inside this -region can be specified. - -In this document, the term "color group" is used. Chunks of text assigned to -same color group will be highlighted with same color. Note that in versions -prior 0.5.0 color goups were refered as CSS classes, but since 0.5.0 not only -HTML output is supported, so "color group" is more appropriate term. - -Elements --------- - -The toplevel element is . Attribute lang is required and denotes -the name of the language. Its value is used as a part of generated class name, -and must only contain letters, digits and underscores. Optional attribute -case, when given value yes, makes the language case sensitive (default is case -insensitive). Allowed subelements are: - - * : Information about the authors of the file. - : Information about a single author of the file. (May be used - multiple times, one per author.) - - name="...": Author's name. Required. - - email="...": Author's email address. Optional. - - * : Default color group. - - innerGroup="...": color group name. Required. - - * : Region definition - - name="...": Region name. Required. - - innerGroup="...": Default color group of region contents. Required. - - delimGroup="...": color group of start and end of region. Optional, - defaults to value of innerGroup attribute. - - start="...", end="...": Regular expression matching start and end - of region. Required. Regular expression delimiters are optional, but - if you need to specify delimiter, use /. The only case when the - delimiters are needed, is specifying regular expression modifiers, - such as m or U. Examples: \/\* or /$/m. - - contained="yes": Marks region as contained. - - never-contained="yes": Marks region as not-contained. - - : Elements allowed inside this region. - - all="yes" Region can contain any other region or block - (except not-contained). May be used multiple times. - - Do not allow certain regions or blocks. - - region="..." Name of region not allowed within - current region. - - block="..." Name of block not allowed within - current region. - - region="..." Name of region allowed within current region. - - block="..." Name of block allowed within current region. - - Only allow this region within certain regions. May be - used multiple times. - - block="..." Name of parent region - - * : Block definition - - name="...": Block name. Required. - - innerGroup="...": color group of block contents. Optional. If not - specified, color group of parent region or default color group will be - used. One would only want to omit this attribute if there are - keyword groups (see below) inherited from this block, and no special - highlighting should apply when the block does not match the keyword. - - match="..." Regular expression matching the block. Required. - Regular expression delimiters are optional, but if you need to - specify delimiter, use /. The only case when the delimiters are - needed, is specifying regular expression modifiers, such as m or U. - Examples: #|\/\/ or /$/m. - - contained="yes": Marks block as contained. - - never-contained="yes": Marks block as not-contained. - - Only allow this block within certain regions. May be used - multiple times. - - block="..." Name of parent region - - multiline="yes": Marks block as multi-line. By default, whole - blocks are assumed to reside in a single line. This make the things - faster. If you need to declare a multi-line block, use this - attribute. - - : Assigns another color group to a part of the block that - matched a subpattern. - - index="n": Subpattern index. Required. - - innerGroup="...": color group name. Required. - - This is an example from CSS highlighter: the measure is matched as - a whole, but the measurement units are highlighted with different - color. - - - - - - - * : Keyword group definition. Keyword groups are useful when you - want to highlight some words that match a condition for a block with a - different color. Keywords are defined with literal match, not regular - expressions. For example, you have a block named identifier matching a - general identifier, and want to highlight reserved words (which match - this block as well) with different color. You inherit a keyword group - "reserved" from "identifier" block. - - name="...": Keyword group. Required. - - ifdef="...", ifndef="..." : Conditional declaration. See - "Conditions" below. - - inherits="...": Inherited block name. Required. - - innerGroup="...": color group of keyword group. Required. - - case="yes|no": Overrides case-sensitivity of the language. - Optional, defaults to global value. - - : Single keyword definition. - - match="..." The keyword. Note: this is not a regular - expression, but literal match (possibly case insensitive). - -Note that for BC reasons element partClass is alias for partGroup, and -attributes innerClass and delimClass are aliases of innerGroup and -delimGroup, respectively. - - -Conditions ----------- - -Conditional declarations allow enabling or disabling certain highlighting -rules at runtime. For example, Java highlighter has a very big list of -keywords matching Java standard classes. Finding a match in this list can take -much time. For that reason, corresponding keyword group is declared with -"ifdef" attribute : - - - - - - ... - ... - - - - - -This keyword group will be only enabled when "java.builtins" is passed as an -element of "defines" option: - - $options = array( - 'defines' => array( - 'java.builtins', - ), - 'numbers' => HL_NUMBERS_TABLE, - ); - $highlighter =& Text_Highlighter::factory('java', $options); - -"ifndef" attribute has reverse meaning. - -Currently, "ifdef" and "ifndef" attributes are only supported for -tag. - - - -Class generation -================ - -Creating XML description of highlighting rules is the most complicated part of -the process. To generate the class, you need just few lines of code: - - generate(); - $generator->saveCode('PHP.php'); - ?> - - - -Command-line class generation tool -================================== - -Example from previous section looks pretty simple, but it does not handle any -errors which may occur during parsing of XML source. The package provides a -command-line script to make generation of classes even more simple, and takes -care of possible errors. It is called generate (on Unix/Linux) or generate.bat -(on Windows). This script is able to process multiple files in one run, and -also to process XML from standard input and write generated code to standard -output. - - Usage: - generate options - - Options: - -x filename, --xml=filename - source XML file. Multiple input files can be specified, in which - case each -x option must be followed by -p unless -d is specified - Defaults to stdin - -p filename, --php=filename - destination PHP file. Defaults to stdout. If specied multiple times, - each -p must follow -x - -d dirname, --dir=dirname - Default destination directory. File names will be taken from XML input - ("lang" attribute of tag) - -h, --help - This help - -Examples - - Read from php.xml, write to PHP.php - - generate -x php.xml -p PHP.php - - Read from php.xml, write to standard output - - generate -x php.xml - - Read from php.xml, write to PHP.php, read from xml.xml, write to XML.php - - generate -x php.xml -p PHP.php -x xml.xml -p XML.php - - Read from php.xml, write to /some/dir/PHP.php, read from xml.xml, write to - /some/dir/XML.php (assuming that xml.xml contains , and - php.xml contains ) - - generate -x php.xml -x xml.xml -d /some/dir/ - - - -Renderers -========= - -Introduction ------------- - -Text_Highlighter supports renderes. Using renderers, you can get output in -different formats. Two renderers are included in the package: - - - HTML renderer. Generates HTML output. A style sheet should be linked to - the document to display colored text - - - Console renderer. Can be used to output highlighted text to - color-capable terminals, either directly or trough less -r - - -Renderers API -------------- - -Renderers are subclasses of Text_Highlighter_Renderer. Renderer should -override at least two methods - acceptToken and getOutput. Overriding other -methods is optional, depending on the nature of renderer's output and details -of implementation. - - string reset() - resets renderer state. This method is called every time before a new - source file is highlighted. - - string preprocess(string $code) - preprocesses code. Can be used, for example, to normalize whitespace - before highlighting. Returns preprocessed string. - - void acceptToken(string $group, string $content) - the core method of the renderer. Highlighter passes chunks of text to - this method in $content, and color group in $group - - void finalize() - signals the renderer that no more tokens are available. - - mixed getOutput() - returns generated output. - - -Setting renderer options --------------------------------- - -Renderers accept an optional argument to their constructor - options array. -Elements of this array are renderer-specific. - -HTML renderer -------------- - -HTML renderer produces HTML output with optional line numbering. The renderer -itself does not provide information about actual colors of highlighted text. -Instead, is used, where XXX is replaced with color group -name (hl-var, hl-string, etc.). It is up to you to create a CSS stylesheet. -If 'use_language' option with value evaluating to true was passed, class names -will be formatted as "LANG-hl-XXX", where LANG is language name as defined in -highlighter XML source ("lang" attribute of tag) in lower case. - -There are 3 special CSS classes: - - hl-main - this class applies to whole output or right table column, - depending on 'numbers' option - hl-gutter - applies to left column in table - hl-table - applies to whole table - -HTML renderer accepts following options (each being optional): - - * numbers - line numbering style. - 0 - no numbering (default) - HL_NUMBERS_LI - use
      for line numbering - HL_NUMBERS_TABLE - create a 2-column table, with line numbers in left - column and highlighted text in right column - - * tabsize - tabulation size. Defaults to 4 - - Example: - - require_once 'Text/Highlighter/Renderer/Html.php'; - $options = array( - 'numbers' => HL_NUMBERS_LI, - 'tabsize' => 8, - ); - $renderer =& new Text_Highlighter_Renderer_HTML($options); - -Console renderer ----------------- - -Console renderer produces output for displaying on a color-capable terminal, -either directly or through less -r, using ANSI escape sequences. By default, -this renderer only highlights most common color groups. Additional colors -can be specified using 'colors' option. This renderer also accepts 'numbers' -option - a boolean value, and 'tabsize' option. - - Example : - - require_once 'Text/Highlighter/Renderer/Console.php'; - $colors = array( - 'prepro' => "\033[35m", - 'types' => "\033[32m", - ); - $options = array( - 'numbers' => true, - 'tabsize' => 8, - 'colors' => $colors, - ); - $renderer =& new Text_Highlighter_Renderer_Console($options); - - -ANSI color escape sequences have the following format: - - ESC[#;#;....;#m - -where ESC is character with ASCII code 27 (033 octal, 0x1B hexadecimal). # is -one of the following: - - 0 for normal display - 1 for bold on - 4 underline (mono only) - 5 blink on - 7 reverse video on - 8 nondisplayed (invisible) - 30 black foreground - 31 red foreground - 32 green foreground - 33 yellow foreground - 34 blue foreground - 35 magenta foreground - 36 cyan foreground - 37 white foreground - 40 black background - 41 red background - 42 green background - 43 yellow background - 44 blue background - 45 magenta background - 46 cyan background - 47 white background - - -How to use Text_Highlighter class -================================= - -Creating a highlighter object ------------------------------ - -To create a highlighter for a certain language, use Text_Highlighter::factory() -static method: - - require_once 'Text/Highlighter.php'; - $hl =& Text_Highlighter::factory('php'); - - -Setting a renderer ------------------- - -Actual output is produced by a renderer. - - require_once 'Text/Highlighter.php'; - require_once 'Text/Highlighter/Renderer/Html.php'; - $options = array( - 'numbers' => HL_NUMBERS_LI, - 'tabsize' => 8, - ); - $renderer =& new Text_Highlighter_Renderer_HTML($options); - $hl =& Text_Highlighter::factory('php'); - $hl->setRenderer($renderer); - -Note that for BC reasons, it is possible to use highlighter without setting a -renderer. If no renderer is set, HTML renderer will be used by default. In -this case, you should pass options as second parameter to factory method. The -following example works exactly as previous one: - - require_once 'Text/Highlighter.php'; - $options = array( - 'numbers' => HL_NUMBERS_LI, - 'tabsize' => 8, - ); - $hl =& Text_Highlighter::factory('php', $options); - - -Getting output --------------- - -And finally, do the highlighting and get the output: - - require_once 'Text/Highlighter.php'; - require_once 'Text/Highlighter/Renderer/Html.php'; - $options = array( - 'numbers' => HL_NUMBERS_LI, - 'tabsize' => 8, - ); - $renderer =& new Text_Highlighter_Renderer_HTML($options); - $hl =& Text_Highlighter::factory('php'); - $hl->setRenderer($renderer); - $html = $hl->highlight(file_get_contents('example.php')); - -# vim: set autoindent tabstop=4 shiftwidth=4 softtabstop=4 tw=78: */ - +# $Id$ + +Introduction +============ + +Text_Highlighter is a class for syntax highlighting. The main idea is to +simplify creation of subclasses implementing syntax highlighting for +particular language. Subclasses do not implement any new functioanality, they +just provide syntax highlighting rules. The rules sources are in XML format. +To create a highlighter for a language, there is no need to code a new class +manually. Simply describe the rules in XML file and use Text_Highlighter_Generator +to create a new class. + + +This document does not contain a formal description of API - it is very +simple, and I believe providing some examples of code is sufficient. + + +Highlighter XML source +====================== + +Basics +------ + +Creating a new syntax highlighter begins with describing the highlighting +rules. There are two basic elements: block and region. A block is just a +portion of text matching a regular expression and highlighted with a single +color. Keyword is an example of a block. A region is defined by two regular +expressions: one for start of region, and another for the end. The main +difference from a block is that a region can contain blocks and regions +(including same-named regions). An example of a region is a group of +statements enclosed in curly brackets (this is used in many languages, for +example PHP and C). Also, characters matching start and end of a region may be +highlighted with their own color, and region contents with another. + +Blocks and regions may be declared as contained. Contained blocks and regions +can only appear inside regions. If a region or a block is not declared as +contained, it can appear both on top level and inside regions. Block or region +declared as not-contained can only appear on top level. + +For any region, a list of blocks and regions that can appear inside this +region can be specified. + +In this document, the term "color group" is used. Chunks of text assigned to +same color group will be highlighted with same color. Note that in versions +prior 0.5.0 color goups were refered as CSS classes, but since 0.5.0 not only +HTML output is supported, so "color group" is more appropriate term. + +Elements +-------- + +The toplevel element is . Attribute lang is required and denotes +the name of the language. Its value is used as a part of generated class name, +and must only contain letters, digits and underscores. Optional attribute +case, when given value yes, makes the language case sensitive (default is case +insensitive). Allowed subelements are: + + * : Information about the authors of the file. + : Information about a single author of the file. (May be used + multiple times, one per author.) + - name="...": Author's name. Required. + - email="...": Author's email address. Optional. + + * : Default color group. + - innerGroup="...": color group name. Required. + + * : Region definition + - name="...": Region name. Required. + - innerGroup="...": Default color group of region contents. Required. + - delimGroup="...": color group of start and end of region. Optional, + defaults to value of innerGroup attribute. + - start="...", end="...": Regular expression matching start and end + of region. Required. Regular expression delimiters are optional, but + if you need to specify delimiter, use /. The only case when the + delimiters are needed, is specifying regular expression modifiers, + such as m or U. Examples: \/\* or /$/m. + - contained="yes": Marks region as contained. + - never-contained="yes": Marks region as not-contained. + - : Elements allowed inside this region. + - all="yes" Region can contain any other region or block + (except not-contained). May be used multiple times. + - Do not allow certain regions or blocks. + - region="..." Name of region not allowed within + current region. + - block="..." Name of block not allowed within + current region. + - region="..." Name of region allowed within current region. + - block="..." Name of block allowed within current region. + - Only allow this region within certain regions. May be + used multiple times. + - block="..." Name of parent region + + * : Block definition + - name="...": Block name. Required. + - innerGroup="...": color group of block contents. Optional. If not + specified, color group of parent region or default color group will be + used. One would only want to omit this attribute if there are + keyword groups (see below) inherited from this block, and no special + highlighting should apply when the block does not match the keyword. + - match="..." Regular expression matching the block. Required. + Regular expression delimiters are optional, but if you need to + specify delimiter, use /. The only case when the delimiters are + needed, is specifying regular expression modifiers, such as m or U. + Examples: #|\/\/ or /$/m. + - contained="yes": Marks block as contained. + - never-contained="yes": Marks block as not-contained. + - Only allow this block within certain regions. May be used + multiple times. + - block="..." Name of parent region + - multiline="yes": Marks block as multi-line. By default, whole + blocks are assumed to reside in a single line. This make the things + faster. If you need to declare a multi-line block, use this + attribute. + - : Assigns another color group to a part of the block that + matched a subpattern. + - index="n": Subpattern index. Required. + - innerGroup="...": color group name. Required. + + This is an example from CSS highlighter: the measure is matched as + a whole, but the measurement units are highlighted with different + color. + + + + + + + * : Keyword group definition. Keyword groups are useful when you + want to highlight some words that match a condition for a block with a + different color. Keywords are defined with literal match, not regular + expressions. For example, you have a block named identifier matching a + general identifier, and want to highlight reserved words (which match + this block as well) with different color. You inherit a keyword group + "reserved" from "identifier" block. + - name="...": Keyword group. Required. + - ifdef="...", ifndef="..." : Conditional declaration. See + "Conditions" below. + - inherits="...": Inherited block name. Required. + - innerGroup="...": color group of keyword group. Required. + - case="yes|no": Overrides case-sensitivity of the language. + Optional, defaults to global value. + - : Single keyword definition. + - match="..." The keyword. Note: this is not a regular + expression, but literal match (possibly case insensitive). + +Note that for BC reasons element partClass is alias for partGroup, and +attributes innerClass and delimClass are aliases of innerGroup and +delimGroup, respectively. + + +Conditions +---------- + +Conditional declarations allow enabling or disabling certain highlighting +rules at runtime. For example, Java highlighter has a very big list of +keywords matching Java standard classes. Finding a match in this list can take +much time. For that reason, corresponding keyword group is declared with +"ifdef" attribute : + + + + + + ... + ... + + + + + +This keyword group will be only enabled when "java.builtins" is passed as an +element of "defines" option: + + $options = array( + 'defines' => array( + 'java.builtins', + ), + 'numbers' => HL_NUMBERS_TABLE, + ); + $highlighter = Text_Highlighter::factory('java', $options); + +"ifndef" attribute has reverse meaning. + +Currently, "ifdef" and "ifndef" attributes are only supported for +tag. + + + +Class generation +================ + +Creating XML description of highlighting rules is the most complicated part of +the process. To generate the class, you need just few lines of code: + + generate(); + $generator->saveCode('PHP.php'); + ?> + + + +Command-line class generation tool +================================== + +Example from previous section looks pretty simple, but it does not handle any +errors which may occur during parsing of XML source. The package provides a +command-line script to make generation of classes even more simple, and takes +care of possible errors. It is called generate (on Unix/Linux) or generate.bat +(on Windows). This script is able to process multiple files in one run, and +also to process XML from standard input and write generated code to standard +output. + + Usage: + generate options + + Options: + -x filename, --xml=filename + source XML file. Multiple input files can be specified, in which + case each -x option must be followed by -p unless -d is specified + Defaults to stdin + -p filename, --php=filename + destination PHP file. Defaults to stdout. If specied multiple times, + each -p must follow -x + -d dirname, --dir=dirname + Default destination directory. File names will be taken from XML input + ("lang" attribute of tag) + -h, --help + This help + +Examples + + Read from php.xml, write to PHP.php + + generate -x php.xml -p PHP.php + + Read from php.xml, write to standard output + + generate -x php.xml + + Read from php.xml, write to PHP.php, read from xml.xml, write to XML.php + + generate -x php.xml -p PHP.php -x xml.xml -p XML.php + + Read from php.xml, write to /some/dir/PHP.php, read from xml.xml, write to + /some/dir/XML.php (assuming that xml.xml contains , and + php.xml contains ) + + generate -x php.xml -x xml.xml -d /some/dir/ + + + +Renderers +========= + +Introduction +------------ + +Text_Highlighter supports renderes. Using renderers, you can get output in +different formats. Two renderers are included in the package: + + - HTML renderer. Generates HTML output. A style sheet should be linked to + the document to display colored text + + - Console renderer. Can be used to output highlighted text to + color-capable terminals, either directly or trough less -r + + +Renderers API +------------- + +Renderers are subclasses of Text_Highlighter_Renderer. Renderer should +override at least two methods - acceptToken and getOutput. Overriding other +methods is optional, depending on the nature of renderer's output and details +of implementation. + + string reset() + resets renderer state. This method is called every time before a new + source file is highlighted. + + string preprocess(string $code) + preprocesses code. Can be used, for example, to normalize whitespace + before highlighting. Returns preprocessed string. + + void acceptToken(string $group, string $content) + the core method of the renderer. Highlighter passes chunks of text to + this method in $content, and color group in $group + + void finalize() + signals the renderer that no more tokens are available. + + mixed getOutput() + returns generated output. + + +Setting renderer options +-------------------------------- + +Renderers accept an optional argument to their constructor - options array. +Elements of this array are renderer-specific. + +HTML renderer +------------- + +HTML renderer produces HTML output with optional line numbering. The renderer +itself does not provide information about actual colors of highlighted text. +Instead, is used, where XXX is replaced with color group +name (hl-var, hl-string, etc.). It is up to you to create a CSS stylesheet. +If 'use_language' option with value evaluating to true was passed, class names +will be formatted as "LANG-hl-XXX", where LANG is language name as defined in +highlighter XML source ("lang" attribute of tag) in lower case. + +There are 3 special CSS classes: + + hl-main - this class applies to whole output or right table column, + depending on 'numbers' option + hl-gutter - applies to left column in table + hl-table - applies to whole table + +HTML renderer accepts following options (each being optional): + + * numbers - line numbering style. + 0 - no numbering (default) + HL_NUMBERS_LI - use
        for line numbering + HL_NUMBERS_TABLE - create a 2-column table, with line numbers in left + column and highlighted text in right column + + * tabsize - tabulation size. Defaults to 4 + + Example: + + require_once 'Text/Highlighter/Renderer/Html.php'; + $options = array( + 'numbers' => HL_NUMBERS_LI, + 'tabsize' => 8, + ); + $renderer = new Text_Highlighter_Renderer_HTML($options); + +Console renderer +---------------- + +Console renderer produces output for displaying on a color-capable terminal, +either directly or through less -r, using ANSI escape sequences. By default, +this renderer only highlights most common color groups. Additional colors +can be specified using 'colors' option. This renderer also accepts 'numbers' +option - a boolean value, and 'tabsize' option. + + Example : + + require_once 'Text/Highlighter/Renderer/Console.php'; + $colors = array( + 'prepro' => "\033[35m", + 'types' => "\033[32m", + ); + $options = array( + 'numbers' => true, + 'tabsize' => 8, + 'colors' => $colors, + ); + $renderer = new Text_Highlighter_Renderer_Console($options); + + +ANSI color escape sequences have the following format: + + ESC[#;#;....;#m + +where ESC is character with ASCII code 27 (033 octal, 0x1B hexadecimal). # is +one of the following: + + 0 for normal display + 1 for bold on + 4 underline (mono only) + 5 blink on + 7 reverse video on + 8 nondisplayed (invisible) + 30 black foreground + 31 red foreground + 32 green foreground + 33 yellow foreground + 34 blue foreground + 35 magenta foreground + 36 cyan foreground + 37 white foreground + 40 black background + 41 red background + 42 green background + 43 yellow background + 44 blue background + 45 magenta background + 46 cyan background + 47 white background + + +How to use Text_Highlighter class +================================= + +Creating a highlighter object +----------------------------- + +To create a highlighter for a certain language, use Text_Highlighter::factory() +static method: + + require_once 'Text/Highlighter.php'; + $hl = Text_Highlighter::factory('php'); + + +Setting a renderer +------------------ + +Actual output is produced by a renderer. + + require_once 'Text/Highlighter.php'; + require_once 'Text/Highlighter/Renderer/Html.php'; + $options = array( + 'numbers' => HL_NUMBERS_LI, + 'tabsize' => 8, + ); + $renderer = new Text_Highlighter_Renderer_HTML($options); + $hl = Text_Highlighter::factory('php'); + $hl->setRenderer($renderer); + +Note that for BC reasons, it is possible to use highlighter without setting a +renderer. If no renderer is set, HTML renderer will be used by default. In +this case, you should pass options as second parameter to factory method. The +following example works exactly as previous one: + + require_once 'Text/Highlighter.php'; + $options = array( + 'numbers' => HL_NUMBERS_LI, + 'tabsize' => 8, + ); + $hl = Text_Highlighter::factory('php', $options); + + +Getting output +-------------- + +And finally, do the highlighting and get the output: + + require_once 'Text/Highlighter.php'; + require_once 'Text/Highlighter/Renderer/Html.php'; + $options = array( + 'numbers' => HL_NUMBERS_LI, + 'tabsize' => 8, + ); + $renderer = new Text_Highlighter_Renderer_HTML($options); + $hl = Text_Highlighter::factory('php'); + $hl->setRenderer($renderer); + $html = $hl->highlight(file_get_contents('example.php')); + +# vim: set autoindent tabstop=4 shiftwidth=4 softtabstop=4 tw=78: */ + diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/TODO b/web/framework/vendors/TextHighlighter/Text/TODO similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/TODO rename to web/framework/vendors/TextHighlighter/Text/TODO diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/abap.xml b/web/framework/vendors/TextHighlighter/Text/abap.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/abap.xml rename to web/framework/vendors/TextHighlighter/Text/abap.xml diff --git a/web/framework/vendors/TextHighlighter/Text/avrc.xml b/web/framework/vendors/TextHighlighter/Text/avrc.xml new file mode 100644 index 000000000..dec571e13 --- /dev/null +++ b/web/framework/vendors/TextHighlighter/Text/avrc.xml @@ -0,0 +1,316 @@ + + + + + + + + + + + C/C++ highlighter specific to Atmel AVR microcontrollers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/cpp.xml b/web/framework/vendors/TextHighlighter/Text/cpp.xml similarity index 93% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/cpp.xml rename to web/framework/vendors/TextHighlighter/Text/cpp.xml index 81f0328e4..2cbaa930f 100644 --- a/web/framework-1.1.17/vendors/TextHighlighter/Text/cpp.xml +++ b/web/framework/vendors/TextHighlighter/Text/cpp.xml @@ -1,201 +1,201 @@ - - - - - - - - - - - -Thanks to Aaron Kalin for initial -implementation of this highlighter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +Thanks to Aaron Kalin for initial +implementation of this highlighter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/css.xml b/web/framework/vendors/TextHighlighter/Text/css.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/css.xml rename to web/framework/vendors/TextHighlighter/Text/css.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/diff.xml b/web/framework/vendors/TextHighlighter/Text/diff.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/diff.xml rename to web/framework/vendors/TextHighlighter/Text/diff.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/dtd.xml b/web/framework/vendors/TextHighlighter/Text/dtd.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/dtd.xml rename to web/framework/vendors/TextHighlighter/Text/dtd.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/generate b/web/framework/vendors/TextHighlighter/Text/generate similarity index 93% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/generate rename to web/framework/vendors/TextHighlighter/Text/generate index 41048d91a..4e22e82fd 100644 --- a/web/framework-1.1.17/vendors/TextHighlighter/Text/generate +++ b/web/framework/vendors/TextHighlighter/Text/generate @@ -1,171 +1,171 @@ -#!@php_bin@ - - * @copyright 2004 Andrey Demenev - * @license http://www.php.net/license/3_0.txt PHP License - * @version CVS: $Id: generate,v 1.1 2007/06/03 02:35:28 ssttoo Exp $ - * @link http://pear.php.net/package/Text_Highlighter - */ - -require_once 'Text/Highlighter/Generator.php'; -require_once 'Console/Getopt.php'; - -$options = Console_Getopt::getopt($argv, 'x:p:d:h', array('xml=', 'php=','dir=', 'help')); - -if (PEAR::isError($options)) { - $message = str_replace('Console_Getopt: ','',$options->message); - usage($message); -} - -$source = array(); -$dest = array(); -$dir = ''; - -$expectp = false; -$expectx = false; -$unexpectedx = false; -$unexpectedp = false; -$si = $di = 0; - -foreach ($options[0] as $option) { - switch ($option[0]) { - case 'x': - case '--xml': - $source[$si] = $option[1]; - if ($si) { - $di++; - } - $si++; - if ($expectp) { - $unexpectedx = true; - } - $expectp = true; - $expectx = false; - break; - - case 'p': - case '--php': - if ($expectx) { - $unexpectedp = true; - } - $dest[$di] = $option[1]; - $expectp = false; - $expectx = true; - break; - - case 'd': - case '--dir': - $dir = $option[1]; - break; - - case 'h': - case '--help': - usage(); - break; - } -} - - -if ($unexpectedx && !$dir) { - usage('Unexpected -x or --xml', STDERR); -} - -if ($unexpectedp) { - usage('Unexpected -p or --php', STDERR); -} - -$nsource = count($source); -$ndest = count($dest); - -if (!$nsource && !$ndest) { - $source[]='php://stdin'; - if (!$dir) { - $dest[]='php://stdout'; - } else { - $dest[] = null; - } -} elseif ($expectp && !$dir && $nsource > 1) { - usage('-x or --xml without following -p or --php', STDERR); -} elseif ($nsource == 1 && !$ndest && !$dir) { - $dest[]='php://stdout'; -} - -if ($dir && substr($dir,-1)!='/' && substr($dir,-1)!=='\\' ) { - $dir .= DIRECTORY_SEPARATOR; -} - - -foreach ($source as $i => $xmlfile) -{ - $gen =& new Text_Highlighter_Generator; - $gen->setInputFile($xmlfile); - if ($gen->hasErrors()) { - break; - } - $gen->generate(); - if ($gen->hasErrors()) { - break; - } - if (isset($dest[$i])) { - $phpfile = $dest[$i]; - } else { - $phpfile = $dir . $gen->language . '.php'; - } - $gen->saveCode($phpfile); - if ($gen->hasErrors()) { - break; - } -} -if ($gen->hasErrors()) { - $errors = $gen->getErrors(); - foreach ($errors as $error) { - fwrite (STDERR, $error . "\n"); - } - exit(1); -} - -function usage($message='', $file=STDOUT) -{ - $code = 0; - if ($message) { - $message .= "\n\n"; - $code = 1; - } - $message .= << tag) - -h, --help - This help -MSG; - fwrite ($file, $message); - exit($code); -} -?> - +#!@php_bin@ + + * @copyright 2004 Andrey Demenev + * @license http://www.php.net/license/3_0.txt PHP License + * @version CVS: $Id$ + * @link http://pear.php.net/package/Text_Highlighter + */ + +require_once 'Text/Highlighter/Generator.php'; +require_once 'Console/Getopt.php'; + +$options = Console_Getopt::getopt($argv, 'x:p:d:h', array('xml=', 'php=','dir=', 'help')); + +if (PEAR::isError($options)) { + $message = str_replace('Console_Getopt: ','',$options->message); + usage($message); +} + +$source = array(); +$dest = array(); +$dir = ''; + +$expectp = false; +$expectx = false; +$unexpectedx = false; +$unexpectedp = false; +$si = $di = 0; + +foreach ($options[0] as $option) { + switch ($option[0]) { + case 'x': + case '--xml': + $source[$si] = $option[1]; + if ($si) { + $di++; + } + $si++; + if ($expectp) { + $unexpectedx = true; + } + $expectp = true; + $expectx = false; + break; + + case 'p': + case '--php': + if ($expectx) { + $unexpectedp = true; + } + $dest[$di] = $option[1]; + $expectp = false; + $expectx = true; + break; + + case 'd': + case '--dir': + $dir = $option[1]; + break; + + case 'h': + case '--help': + usage(); + break; + } +} + + +if ($unexpectedx && !$dir) { + usage('Unexpected -x or --xml', STDERR); +} + +if ($unexpectedp) { + usage('Unexpected -p or --php', STDERR); +} + +$nsource = count($source); +$ndest = count($dest); + +if (!$nsource && !$ndest) { + $source[]='php://stdin'; + if (!$dir) { + $dest[]='php://stdout'; + } else { + $dest[] = null; + } +} elseif ($expectp && !$dir && $nsource > 1) { + usage('-x or --xml without following -p or --php', STDERR); +} elseif ($nsource == 1 && !$ndest && !$dir) { + $dest[]='php://stdout'; +} + +if ($dir && substr($dir,-1)!='/' && substr($dir,-1)!=='\\' ) { + $dir .= DIRECTORY_SEPARATOR; +} + + +foreach ($source as $i => $xmlfile) +{ + $gen = new Text_Highlighter_Generator; + $gen->setInputFile($xmlfile); + if ($gen->hasErrors()) { + break; + } + $gen->generate(); + if ($gen->hasErrors()) { + break; + } + if (isset($dest[$i])) { + $phpfile = $dest[$i]; + } else { + $phpfile = $dir . $gen->language . '.php'; + } + $gen->saveCode($phpfile); + if ($gen->hasErrors()) { + break; + } +} +if ($gen->hasErrors()) { + $errors = $gen->getErrors(); + foreach ($errors as $error) { + fwrite (STDERR, $error . "\n"); + } + exit(1); +} + +function usage($message='', $file=STDOUT) +{ + $code = 0; + if ($message) { + $message .= "\n\n"; + $code = 1; + } + $message .= << tag) + -h, --help + This help +MSG; + fwrite ($file, $message); + exit($code); +} +?> + diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/generate.bat b/web/framework/vendors/TextHighlighter/Text/generate.bat similarity index 93% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/generate.bat rename to web/framework/vendors/TextHighlighter/Text/generate.bat index 3170190ed..3960486c1 100644 --- a/web/framework-1.1.17/vendors/TextHighlighter/Text/generate.bat +++ b/web/framework/vendors/TextHighlighter/Text/generate.bat @@ -1,188 +1,188 @@ -@echo off -rem vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: - -rem Console highlighter class generator - -rem PHP versions 4 and 5 - -rem LICENSE: This source file is subject to version 3.0 of the PHP license -rem that is available through the world-wide-web at the following URI: -rem http://www.php.net/license/3_0.txt. If you did not receive a copy of -rem the PHP License and are unable to obtain it through the web, please -rem send a note to license@php.net so we can mail you a copy immediately. - -rem @category Text -rem @package Text_Highlighter -rem @author Andrey Demenev -rem @copyright 2004 Andrey Demenev -rem @license http://www.php.net/license/3_0.txt PHP License -rem @version CVS: $Id: generate.bat,v 1.1 2007/06/03 02:35:28 ssttoo Exp $ -rem @link http://pear.php.net/package/Text_Highlighter - -set "MHL_PARAMS=" -:doshift -set "MHL_PARAMS=%MHL_PARAMS% %1" -shift -if -%1- == -- GOTO noshift -GOTO doshift -:noshift -@php_bin@ -q -d output_buffering=1 -d include_path="@php_dir@" @bin_dir@/Text/Highlighter/generate.bat %MHL_PARAMS% - -GOTO finish -message); - usage($message); -} - -$source = array(); -$dest = array(); -$dir = ''; - -$expectp = false; -$expectx = false; -$unexpectedx = false; -$unexpectedp = false; -$si = $di = 0; - -foreach ($options[0] as $option) { - switch ($option[0]) { - case 'x': - case '--xml': - $source[$si] = $option[1]; - if ($si) { - $di++; - } - $si++; - if ($expectp) { - $unexpectedx = true; - } - $expectp = true; - $expectx = false; - break; - - case 'p': - case '--php': - if ($expectx) { - $unexpectedp = true; - } - $dest[$di] = $option[1]; - $expectp = false; - $expectx = true; - break; - - case 'd': - case '--dir': - $dir = $option[1]; - break; - - case 'h': - case '--help': - usage(); - break; - } -} - - -if ($unexpectedx && !$dir) { - usage('Unexpected -x or --xml', STDERR); -} - -if ($unexpectedp) { - usage('Unexpected -p or --php', STDERR); -} - -$nsource = count($source); -$ndest = count($dest); - -if (!$nsource && !$ndest) { - $source[]='php://stdin'; - if (!$dir) { - $dest[]='php://stdout'; - } else { - $dest[] = null; - } -} elseif ($expectp && !$dir && $nsource > 1) { - usage('-x or --xml without following -p or --php', STDERR); -} elseif ($nsource == 1 && !$ndest && !$dir) { - $dest[]='php://stdout'; -} - -if ($dir && substr($dir,-1)!='/' && substr($dir,-1)!=='\\' ) { - $dir .= DIRECTORY_SEPARATOR; -} - - -foreach ($source as $i => $xmlfile) -{ - $gen =& new Text_Highlighter_Generator; - $gen->setInputFile($xmlfile); - if ($gen->hasErrors()) { - break; - } - $gen->generate(); - if ($gen->hasErrors()) { - break; - } - if (isset($dest[$i])) { - $phpfile = $dest[$i]; - } else { - $phpfile = $dir . $gen->language . '.php'; - } - $gen->saveCode($phpfile); - if ($gen->hasErrors()) { - break; - } -} -if ($gen->hasErrors()) { - $errors = $gen->getErrors(); - foreach ($errors as $error) { - fwrite (STDERR, $error . "\n"); - } - exit(1); -} - -exit(0); - -function usage($message='', $file=STDOUT) -{ - $code = 0; - if ($message) { - $message .= "\n\n"; - $code = 1; - } - $message .= << tag) - -h, --help - This help -MSG; - fwrite ($file, $message); - exit($code); -} -?> -:finish +@echo off +rem vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: + +rem Console highlighter class generator + +rem PHP versions 4 and 5 + +rem LICENSE: This source file is subject to version 3.0 of the PHP license +rem that is available through the world-wide-web at the following URI: +rem http://www.php.net/license/3_0.txt. If you did not receive a copy of +rem the PHP License and are unable to obtain it through the web, please +rem send a note to license@php.net so we can mail you a copy immediately. + +rem @category Text +rem @package Text_Highlighter +rem @author Andrey Demenev +rem @copyright 2004 Andrey Demenev +rem @license http://www.php.net/license/3_0.txt PHP License +rem @version CVS: $Id: generate.bat,v 1.1 2007-06-03 02:35:28 ssttoo Exp $ +rem @link http://pear.php.net/package/Text_Highlighter + +set "MHL_PARAMS=" +:doshift +set "MHL_PARAMS=%MHL_PARAMS% %1" +shift +if -%1- == -- GOTO noshift +GOTO doshift +:noshift +@php_bin@ -q -d output_buffering=1 -d include_path="@php_dir@" @bin_dir@/Text/Highlighter/generate.bat %MHL_PARAMS% + +GOTO finish +message); + usage($message); +} + +$source = array(); +$dest = array(); +$dir = ''; + +$expectp = false; +$expectx = false; +$unexpectedx = false; +$unexpectedp = false; +$si = $di = 0; + +foreach ($options[0] as $option) { + switch ($option[0]) { + case 'x': + case '--xml': + $source[$si] = $option[1]; + if ($si) { + $di++; + } + $si++; + if ($expectp) { + $unexpectedx = true; + } + $expectp = true; + $expectx = false; + break; + + case 'p': + case '--php': + if ($expectx) { + $unexpectedp = true; + } + $dest[$di] = $option[1]; + $expectp = false; + $expectx = true; + break; + + case 'd': + case '--dir': + $dir = $option[1]; + break; + + case 'h': + case '--help': + usage(); + break; + } +} + + +if ($unexpectedx && !$dir) { + usage('Unexpected -x or --xml', STDERR); +} + +if ($unexpectedp) { + usage('Unexpected -p or --php', STDERR); +} + +$nsource = count($source); +$ndest = count($dest); + +if (!$nsource && !$ndest) { + $source[]='php://stdin'; + if (!$dir) { + $dest[]='php://stdout'; + } else { + $dest[] = null; + } +} elseif ($expectp && !$dir && $nsource > 1) { + usage('-x or --xml without following -p or --php', STDERR); +} elseif ($nsource == 1 && !$ndest && !$dir) { + $dest[]='php://stdout'; +} + +if ($dir && substr($dir,-1)!='/' && substr($dir,-1)!=='\\' ) { + $dir .= DIRECTORY_SEPARATOR; +} + + +foreach ($source as $i => $xmlfile) +{ + $gen = new Text_Highlighter_Generator; + $gen->setInputFile($xmlfile); + if ($gen->hasErrors()) { + break; + } + $gen->generate(); + if ($gen->hasErrors()) { + break; + } + if (isset($dest[$i])) { + $phpfile = $dest[$i]; + } else { + $phpfile = $dir . $gen->language . '.php'; + } + $gen->saveCode($phpfile); + if ($gen->hasErrors()) { + break; + } +} +if ($gen->hasErrors()) { + $errors = $gen->getErrors(); + foreach ($errors as $error) { + fwrite (STDERR, $error . "\n"); + } + exit(1); +} + +exit(0); + +function usage($message='', $file=STDOUT) +{ + $code = 0; + if ($message) { + $message .= "\n\n"; + $code = 1; + } + $message .= << tag) + -h, --help + This help +MSG; + fwrite ($file, $message); + exit($code); +} +?> +:finish diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/html.xml b/web/framework/vendors/TextHighlighter/Text/html.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/html.xml rename to web/framework/vendors/TextHighlighter/Text/html.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/java.xml b/web/framework/vendors/TextHighlighter/Text/java.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/java.xml rename to web/framework/vendors/TextHighlighter/Text/java.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/javascript.xml b/web/framework/vendors/TextHighlighter/Text/javascript.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/javascript.xml rename to web/framework/vendors/TextHighlighter/Text/javascript.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/mysql.xml b/web/framework/vendors/TextHighlighter/Text/mysql.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/mysql.xml rename to web/framework/vendors/TextHighlighter/Text/mysql.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/package.xml b/web/framework/vendors/TextHighlighter/Text/package.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/package.xml rename to web/framework/vendors/TextHighlighter/Text/package.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/perl.xml b/web/framework/vendors/TextHighlighter/Text/perl.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/perl.xml rename to web/framework/vendors/TextHighlighter/Text/perl.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/php.xml b/web/framework/vendors/TextHighlighter/Text/php.xml similarity index 95% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/php.xml rename to web/framework/vendors/TextHighlighter/Text/php.xml index de00096ad..1b08ea203 100644 --- a/web/framework-1.1.17/vendors/TextHighlighter/Text/php.xml +++ b/web/framework/vendors/TextHighlighter/Text/php.xml @@ -1,194 +1,194 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/python.xml b/web/framework/vendors/TextHighlighter/Text/python.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/python.xml rename to web/framework/vendors/TextHighlighter/Text/python.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/ruby.xml b/web/framework/vendors/TextHighlighter/Text/ruby.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/ruby.xml rename to web/framework/vendors/TextHighlighter/Text/ruby.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/sample.css b/web/framework/vendors/TextHighlighter/Text/sample.css similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/sample.css rename to web/framework/vendors/TextHighlighter/Text/sample.css diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/sh.xml b/web/framework/vendors/TextHighlighter/Text/sh.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/sh.xml rename to web/framework/vendors/TextHighlighter/Text/sh.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/sql.xml b/web/framework/vendors/TextHighlighter/Text/sql.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/sql.xml rename to web/framework/vendors/TextHighlighter/Text/sql.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/vbscript.xml b/web/framework/vendors/TextHighlighter/Text/vbscript.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/vbscript.xml rename to web/framework/vendors/TextHighlighter/Text/vbscript.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/xml.xml b/web/framework/vendors/TextHighlighter/Text/xml.xml similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/Text/xml.xml rename to web/framework/vendors/TextHighlighter/Text/xml.xml diff --git a/web/framework-1.1.17/vendors/TextHighlighter/highlight.css b/web/framework/vendors/TextHighlighter/highlight.css similarity index 100% rename from web/framework-1.1.17/vendors/TextHighlighter/highlight.css rename to web/framework/vendors/TextHighlighter/highlight.css diff --git a/web/framework-1.1.17/vendors/adodb/LICENSE.txt b/web/framework/vendors/adodb/LICENSE.txt similarity index 100% rename from web/framework-1.1.17/vendors/adodb/LICENSE.txt rename to web/framework/vendors/adodb/LICENSE.txt diff --git a/web/framework-1.1.17/vendors/bbq/LICENSE.txt b/web/framework/vendors/bbq/LICENSE.txt similarity index 100% rename from web/framework-1.1.17/vendors/bbq/LICENSE.txt rename to web/framework/vendors/bbq/LICENSE.txt diff --git a/web/framework-1.1.17/vendors/cldr/LICENSE.txt b/web/framework/vendors/cldr/LICENSE.txt similarity index 100% rename from web/framework-1.1.17/vendors/cldr/LICENSE.txt rename to web/framework/vendors/cldr/LICENSE.txt diff --git a/web/framework-1.1.17/vendors/console-normalizer/README.md b/web/framework/vendors/console-normalizer/README.md similarity index 100% rename from web/framework-1.1.17/vendors/console-normalizer/README.md rename to web/framework/vendors/console-normalizer/README.md diff --git a/web/framework-1.1.17/vendors/console-normalizer/normalizeconsole.min.js b/web/framework/vendors/console-normalizer/normalizeconsole.min.js similarity index 100% rename from web/framework-1.1.17/vendors/console-normalizer/normalizeconsole.min.js rename to web/framework/vendors/console-normalizer/normalizeconsole.min.js diff --git a/web/framework-1.1.17/vendors/gettext/LICENSE.txt b/web/framework/vendors/gettext/LICENSE.txt similarity index 100% rename from web/framework-1.1.17/vendors/gettext/LICENSE.txt rename to web/framework/vendors/gettext/LICENSE.txt diff --git a/web/framework-1.1.17/vendors/history/license.txt b/web/framework/vendors/history/license.txt similarity index 100% rename from web/framework-1.1.17/vendors/history/license.txt rename to web/framework/vendors/history/license.txt diff --git a/web/framework-1.1.17/vendors/htmlpurifier/HTMLPurifier.standalone.php b/web/framework/vendors/htmlpurifier/HTMLPurifier.standalone.php similarity index 96% rename from web/framework-1.1.17/vendors/htmlpurifier/HTMLPurifier.standalone.php rename to web/framework/vendors/htmlpurifier/HTMLPurifier.standalone.php index 233fed9ce..7adc09c92 100644 --- a/web/framework-1.1.17/vendors/htmlpurifier/HTMLPurifier.standalone.php +++ b/web/framework/vendors/htmlpurifier/HTMLPurifier.standalone.php @@ -7,7 +7,7 @@ * primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS * FILE, changes will be overwritten the next time the script is run. * - * @version 4.6.0 + * @version 4.9.2 * * @warning * You must *not* include any other HTML Purifier files before this file, @@ -39,7 +39,7 @@ */ /* - HTML Purifier 4.6.0 - Standards Compliant HTML Filtering + HTML Purifier 4.9.2 - Standards Compliant HTML Filtering Copyright (C) 2006-2008 Edward Z. Yang This library is free software; you can redistribute it and/or @@ -78,12 +78,12 @@ class HTMLPurifier * Version of HTML Purifier. * @type string */ - public $version = '4.6.0'; + public $version = '4.9.2'; /** * Constant with version of HTML Purifier. */ - const VERSION = '4.6.0'; + const VERSION = '4.9.2'; /** * Global configuration object. @@ -124,7 +124,7 @@ class HTMLPurifier /** * Initializes the purifier. * - * @param HTMLPurifier_Config $config Optional HTMLPurifier_Config object + * @param HTMLPurifier_Config|mixed $config Optional HTMLPurifier_Config object * for all instances of the purifier, if omitted, a default * configuration is supplied (which can be overridden on a * per-use basis). @@ -332,8 +332,8 @@ public static function arborize($tokens, $config, $context) { if ($token instanceof HTMLPurifier_Token_End) { $token->start = null; // [MUT] $r = array_pop($stack); - assert($r->name === $token->name); - assert(empty($token->attr)); + //assert($r->name === $token->name); + //assert(empty($token->attr)); $r->endCol = $token->col; $r->endLine = $token->line; $r->endArmor = $token->armor; @@ -345,7 +345,7 @@ public static function arborize($tokens, $config, $context) { $stack[] = $node; } } - assert(count($stack) == 1); + //assert(count($stack) == 1); return $stack[0]; } @@ -406,6 +406,11 @@ class HTMLPurifier_AttrCollections * @param HTMLPurifier_HTMLModule[] $modules Hash array of HTMLPurifier_HTMLModule members */ public function __construct($attr_types, $modules) + { + $this->doConstruct($attr_types, $modules); + } + + public function doConstruct($attr_types, $modules) { // load extensions from the modules foreach ($modules as $module) { @@ -615,7 +620,13 @@ public function make($string) */ protected function mungeRgb($string) { - return preg_replace('/rgb\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)\)/', 'rgb(\1,\2,\3)', $string); + $p = '\s*(\d+(\.\d+)?([%]?))\s*'; + + if (preg_match('/(rgba|hsla)\(/', $string)) { + return preg_replace('/(rgba|hsla)\('.$p.','.$p.','.$p.','.$p.'\)/', '\1(\2,\5,\8,\11)', $string); + } + + return preg_replace('/(rgb|hsl)\('.$p.','.$p.','.$p.'\)/', '\1(\2,\5,\8)', $string); } /** @@ -1412,6 +1423,10 @@ protected function doSetup($config) ); $max = $config->get('CSS.MaxImgLength'); + $this->info['min-width'] = + $this->info['max-width'] = + $this->info['min-height'] = + $this->info['max-height'] = $this->info['width'] = $this->info['height'] = $max === null ? @@ -1537,8 +1552,7 @@ protected function doSetupProprietary($config) $this->info['scrollbar-highlight-color'] = new HTMLPurifier_AttrDef_CSS_Color(); $this->info['scrollbar-shadow-color'] = new HTMLPurifier_AttrDef_CSS_Color(); - // technically not proprietary, but CSS3, and no one supports it - $this->info['opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue(); + // vendor specific prefixes of opacity $this->info['-moz-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue(); $this->info['-khtml-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue(); @@ -1558,6 +1572,19 @@ protected function doSetupProprietary($config) ); $this->info['page-break-inside'] = new HTMLPurifier_AttrDef_Enum(array('auto', 'avoid')); + $border_radius = new HTMLPurifier_AttrDef_CSS_Composite( + array( + new HTMLPurifier_AttrDef_CSS_Percentage(true), // disallow negative + new HTMLPurifier_AttrDef_CSS_Length('0') // disallow negative + )); + + $this->info['border-top-left-radius'] = + $this->info['border-top-right-radius'] = + $this->info['border-bottom-right-radius'] = + $this->info['border-bottom-left-radius'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_radius, 2); + // TODO: support SLASH syntax + $this->info['border-radius'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_radius, 4); + } /** @@ -1591,6 +1618,7 @@ protected function doSetupTricky($config) array('visible', 'hidden', 'collapse') ); $this->info['overflow'] = new HTMLPurifier_AttrDef_Enum(array('visible', 'hidden', 'auto', 'scroll')); + $this->info['opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue(); } /** @@ -1736,7 +1764,7 @@ class HTMLPurifier_Config * HTML Purifier's version * @type string */ - public $version = '4.6.0'; + public $version = '4.9.2'; /** * Whether or not to automatically finalize @@ -2361,16 +2389,25 @@ public function maybeGetRawDefinition($name) return $this->getDefinition($name, true, true); } + /** + * @return HTMLPurifier_HTMLDefinition + */ public function maybeGetRawHTMLDefinition() { return $this->getDefinition('HTML', true, true); } - + + /** + * @return HTMLPurifier_CSSDefinition + */ public function maybeGetRawCSSDefinition() { return $this->getDefinition('CSS', true, true); } - + + /** + * @return HTMLPurifier_URIDefinition + */ public function maybeGetRawURIDefinition() { return $this->getDefinition('URI', true, true); @@ -3189,7 +3226,7 @@ abstract public function flush($config); /** * Clears all expired (older version or revision) objects from cache - * @note Be carefuly implementing this method as flush. Flush must + * @note Be careful implementing this method as flush. Flush must * not interfere with other Definition types, and cleanup() * should not be repeatedly called by userland code. * @param HTMLPurifier_Config $config @@ -3843,6 +3880,14 @@ public static function iconv($in, $out, $text, $max_chunk_size = 8000) * It will parse according to UTF-8 and return a valid UTF8 string, with * non-SGML codepoints excluded. * + * Specifically, it will permit: + * \x{9}\x{A}\x{D}\x{20}-\x{7E}\x{A0}-\x{D7FF}\x{E000}-\x{FFFD}\x{10000}-\x{10FFFF} + * Source: https://www.w3.org/TR/REC-xml/#NT-Char + * Arguably this function should be modernized to the HTML5 set + * of allowed characters: + * https://www.w3.org/TR/html5/syntax.html#preprocessing-the-input-stream + * which simultaneously expand and restrict the set of allowed characters. + * * @param string $str The string to clean * @param bool $force_php * @return string @@ -3864,15 +3909,12 @@ public static function iconv($in, $out, $text, $max_chunk_size = 8000) * function that needs to be able to understand UTF-8 characters. * As of right now, only smart lossless character encoding converters * would need that, and I'm probably not going to implement them. - * Once again, PHP 6 should solve all our problems. */ public static function cleanUTF8($str, $force_php = false) { // UTF-8 validity is checked since PHP 4.3.5 // This is an optimization: if the string is already valid UTF-8, no // need to do PHP stuff. 99% of the time, this will be the case. - // The regexp matches the XML char production, as well as well as excluding - // non-SGML codepoints U+007F to U+009F if (preg_match( '/^[\x{9}\x{A}\x{D}\x{20}-\x{7E}\x{A0}-\x{D7FF}\x{E000}-\x{FFFD}\x{10000}-\x{10FFFF}]*$/Du', $str @@ -3997,6 +4039,7 @@ public static function cleanUTF8($str, $force_php = false) // 7F-9F is not strictly prohibited by XML, // but it is non-SGML, and thus we don't allow it (0xA0 <= $mUcs4 && 0xD7FF >= $mUcs4) || + (0xE000 <= $mUcs4 && 0xFFFD >= $mUcs4) || (0x10000 <= $mUcs4 && 0x10FFFF >= $mUcs4) ) ) { @@ -4419,6 +4462,138 @@ class HTMLPurifier_EntityParser */ protected $_entity_lookup; + /** + * Callback regex string for entities in text. + * @type string + */ + protected $_textEntitiesRegex; + + /** + * Callback regex string for entities in attributes. + * @type string + */ + protected $_attrEntitiesRegex; + + /** + * Tests if the beginning of a string is a semi-optional regex + */ + protected $_semiOptionalPrefixRegex; + + public function __construct() { + // From + // http://stackoverflow.com/questions/15532252/why-is-reg-being-rendered-as-without-the-bounding-semicolon + $semi_optional = "quot|QUOT|lt|LT|gt|GT|amp|AMP|AElig|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|Iacute|Icirc|Igrave|Iuml|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml"; + + // NB: three empty captures to put the fourth match in the right + // place + $this->_semiOptionalPrefixRegex = "/&()()()($semi_optional)/"; + + $this->_textEntitiesRegex = + '/&(?:'. + // hex + '[#]x([a-fA-F0-9]+);?|'. + // dec + '[#]0*(\d+);?|'. + // string (mandatory semicolon) + // NB: order matters: match semicolon preferentially + '([A-Za-z_:][A-Za-z0-9.\-_:]*);|'. + // string (optional semicolon) + "($semi_optional)". + ')/'; + + $this->_attrEntitiesRegex = + '/&(?:'. + // hex + '[#]x([a-fA-F0-9]+);?|'. + // dec + '[#]0*(\d+);?|'. + // string (mandatory semicolon) + // NB: order matters: match semicolon preferentially + '([A-Za-z_:][A-Za-z0-9.\-_:]*);|'. + // string (optional semicolon) + // don't match if trailing is equals or alphanumeric (URL + // like) + "($semi_optional)(?![=;A-Za-z0-9])". + ')/'; + + } + + /** + * Substitute entities with the parsed equivalents. Use this on + * textual data in an HTML document (as opposed to attributes.) + * + * @param string $string String to have entities parsed. + * @return string Parsed string. + */ + public function substituteTextEntities($string) + { + return preg_replace_callback( + $this->_textEntitiesRegex, + array($this, 'entityCallback'), + $string + ); + } + + /** + * Substitute entities with the parsed equivalents. Use this on + * attribute contents in documents. + * + * @param string $string String to have entities parsed. + * @return string Parsed string. + */ + public function substituteAttrEntities($string) + { + return preg_replace_callback( + $this->_attrEntitiesRegex, + array($this, 'entityCallback'), + $string + ); + } + + /** + * Callback function for substituteNonSpecialEntities() that does the work. + * + * @param array $matches PCRE matches array, with 0 the entire match, and + * either index 1, 2 or 3 set with a hex value, dec value, + * or string (respectively). + * @return string Replacement string. + */ + + protected function entityCallback($matches) + { + $entity = $matches[0]; + $hex_part = @$matches[1]; + $dec_part = @$matches[2]; + $named_part = empty($matches[3]) ? @$matches[4] : $matches[3]; + if ($hex_part !== NULL && $hex_part !== "") { + return HTMLPurifier_Encoder::unichr(hexdec($hex_part)); + } elseif ($dec_part !== NULL && $dec_part !== "") { + return HTMLPurifier_Encoder::unichr((int) $dec_part); + } else { + if (!$this->_entity_lookup) { + $this->_entity_lookup = HTMLPurifier_EntityLookup::instance(); + } + if (isset($this->_entity_lookup->table[$named_part])) { + return $this->_entity_lookup->table[$named_part]; + } else { + // exact match didn't match anything, so test if + // any of the semicolon optional match the prefix. + // Test that this is an EXACT match is important to + // prevent infinite loop + if (!empty($matches[3])) { + return preg_replace_callback( + $this->_semiOptionalPrefixRegex, + array($this, 'entityCallback'), + $entity + ); + } + return $entity; + } + } + } + + // LEGACY CODE BELOW + /** * Callback regex string for parsing entities. * @type string @@ -4547,7 +4722,7 @@ protected function specialEntityCallback($matches) $entity; } else { return isset($this->_special_ent2dec[$matches[3]]) ? - $this->_special_ent2dec[$matches[3]] : + $this->_special_dec2str[$this->_special_ent2dec[$matches[3]]] : $entity; } } @@ -6284,6 +6459,14 @@ public function setup($config) if ($config->get('HTML.TargetBlank')) { $modules[] = 'TargetBlank'; } + // NB: HTML.TargetNoreferrer and HTML.TargetNoopener must be AFTER HTML.TargetBlank + // so that its post-attr-transform gets run afterwards. + if ($config->get('HTML.TargetNoreferrer')) { + $modules[] = 'TargetNoreferrer'; + } + if ($config->get('HTML.TargetNoopener')) { + $modules[] = 'TargetNoopener'; + } // merge in custom modules $modules = array_merge($modules, $this->userModules); @@ -7558,21 +7741,24 @@ public function __construct() ''' => "'" ); + public function parseText($string, $config) { + return $this->parseData($string, false, $config); + } + + public function parseAttr($string, $config) { + return $this->parseData($string, true, $config); + } + /** * Parses special entities into the proper characters. * * This string will translate escaped versions of the special characters * into the correct ones. * - * @warning - * You should be able to treat the output of this function as - * completely parsed, but that's only because all other entities should - * have been handled previously in substituteNonSpecialEntities() - * * @param string $string String character data to be parsed. * @return string Parsed character data. */ - public function parseData($string) + public function parseData($string, $is_attr, $config) { // following functions require at least one character if ($string === '') { @@ -7598,7 +7784,15 @@ public function parseData($string) } // hmm... now we have some uncommon entities. Use the callback. - $string = $this->_entity_parser->substituteSpecialEntities($string); + if ($config->get('Core.LegacyEntityDecoder')) { + $string = $this->_entity_parser->substituteSpecialEntities($string); + } else { + if ($is_attr) { + $string = $this->_entity_parser->substituteAttrEntities($string); + } else { + $string = $this->_entity_parser->substituteTextEntities($string); + } + } return $string; } @@ -7712,7 +7906,9 @@ public function normalize($html, $config, $context) } // expand entities that aren't the big five - $html = $this->_entity_parser->substituteNonSpecialEntities($html); + if ($config->get('Core.LegacyEntityDecoder')) { + $html = $this->_entity_parser->substituteNonSpecialEntities($html); + } // clean into wellformed UTF-8 string for an SGML context: this has // to be done after entity expansion because the entities sometimes @@ -7724,6 +7920,13 @@ public function normalize($html, $config, $context) $html = preg_replace('#<\?.+?\?>#s', '', $html); } + $hidden_elements = $config->get('Core.HiddenElements'); + if ($config->get('Core.AggressivelyRemoveScript') && + !($config->get('HTML.Trusted') || !$config->get('Core.RemoveScriptContents') + || empty($hidden_elements["script"]))) { + $html = preg_replace('#]*>.*?#i', '', $html); + } + return $html; } @@ -7734,12 +7937,17 @@ public function normalize($html, $config, $context) public function extractBody($html) { $matches = array(); - $result = preg_match('!]*>(.*)!is', $html, $matches); + $result = preg_match('|(.*?)]*>(.*)|is', $html, $matches); if ($result) { - return $matches[1]; - } else { - return $html; + // Make sure it's not in a comment + $comment_start = strrpos($matches[1], ''); + if ($comment_start === false || + ($comment_end !== false && $comment_end > $comment_start)) { + return $matches[2]; + } } + return $html; } } @@ -8408,7 +8616,7 @@ abstract class HTMLPurifier_Token public $armor = array(); /** - * Used during MakeWellFormed. + * Used during MakeWellFormed. See Note [Injector skips] * @type */ public $skip; @@ -8687,11 +8895,13 @@ public function getSchemeObj($config, $context) $def = $config->getDefinition('URI'); $scheme_obj = $def->getDefaultScheme($config, $context); if (!$scheme_obj) { - // something funky happened to the default scheme object - trigger_error( - 'Default scheme object "' . $def->defaultScheme . '" was not readable', - E_USER_WARNING - ); + if ($def->defaultScheme !== null) { + // something funky happened to the default scheme object + trigger_error( + 'Default scheme object "' . $def->defaultScheme . '" was not readable', + E_USER_WARNING + ); + } // suppress error if it's null return false; } } @@ -10064,15 +10274,42 @@ public function validate($css, $config, $context) $css = $this->parseCDATA($css); $definition = $config->getCSSDefinition(); + $allow_duplicates = $config->get("CSS.AllowDuplicates"); - // we're going to break the spec and explode by semicolons. - // This is because semicolon rarely appears in escaped form - // Doing this is generally flaky but fast - // IT MIGHT APPEAR IN URIs, see HTMLPurifier_AttrDef_CSSURI - // for details - $declarations = explode(';', $css); + // According to the CSS2.1 spec, the places where a + // non-delimiting semicolon can appear are in strings + // escape sequences. So here is some dumb hack to + // handle quotes. + $len = strlen($css); + $accum = ""; + $declarations = array(); + $quoted = false; + for ($i = 0; $i < $len; $i++) { + $c = strcspn($css, ";'\"", $i); + $accum .= substr($css, $i, $c); + $i += $c; + if ($i == $len) break; + $d = $css[$i]; + if ($quoted) { + $accum .= $d; + if ($d == $quoted) { + $quoted = false; + } + } else { + if ($d == ";") { + $declarations[] = $accum; + $accum = ""; + } else { + $accum .= $d; + $quoted = $d; + } + } + } + if ($accum != "") $declarations[] = $accum; + $propvalues = array(); + $new_declarations = ''; /** * Name of the current CSS property being validated. @@ -10122,7 +10359,11 @@ public function validate($css, $config, $context) if ($result === false) { continue; } - $propvalues[$property] = $result; + if ($allow_duplicates) { + $new_declarations .= "$property:$result;"; + } else { + $propvalues[$property] = $result; + } } $context->destroy('CurrentCSSProperty'); @@ -10131,7 +10372,6 @@ public function validate($css, $config, $context) // slightly inefficient, but it's the only way of getting rid of // duplicates. Perhaps config to optimize it, but not now. - $new_declarations = ''; foreach ($propvalues as $prop => $value) { $new_declarations .= "$prop:$value;"; } @@ -11085,6 +11325,16 @@ public function validate($string, $config, $context) class HTMLPurifier_AttrDef_CSS_Color extends HTMLPurifier_AttrDef { + /** + * @type HTMLPurifier_AttrDef_CSS_AlphaValue + */ + protected $alpha; + + public function __construct() + { + $this->alpha = new HTMLPurifier_AttrDef_CSS_AlphaValue(); + } + /** * @param string $color * @param HTMLPurifier_Config $config @@ -11108,59 +11358,104 @@ public function validate($color, $config, $context) return $colors[$lower]; } - if (strpos($color, 'rgb(') !== false) { - // rgb literal handling + if (preg_match('#(rgb|rgba|hsl|hsla)\(#', $color, $matches) === 1) { $length = strlen($color); if (strpos($color, ')') !== $length - 1) { return false; } - $triad = substr($color, 4, $length - 4 - 1); - $parts = explode(',', $triad); - if (count($parts) !== 3) { + + // get used function : rgb, rgba, hsl or hsla + $function = $matches[1]; + + $parameters_size = 3; + $alpha_channel = false; + if (substr($function, -1) === 'a') { + $parameters_size = 4; + $alpha_channel = true; + } + + /* + * Allowed types for values : + * parameter_position => [type => max_value] + */ + $allowed_types = array( + 1 => array('percentage' => 100, 'integer' => 255), + 2 => array('percentage' => 100, 'integer' => 255), + 3 => array('percentage' => 100, 'integer' => 255), + ); + $allow_different_types = false; + + if (strpos($function, 'hsl') !== false) { + $allowed_types = array( + 1 => array('integer' => 360), + 2 => array('percentage' => 100), + 3 => array('percentage' => 100), + ); + $allow_different_types = true; + } + + $values = trim(str_replace($function, '', $color), ' ()'); + + $parts = explode(',', $values); + if (count($parts) !== $parameters_size) { return false; } - $type = false; // to ensure that they're all the same type + + $type = false; $new_parts = array(); + $i = 0; + foreach ($parts as $part) { + $i++; $part = trim($part); + if ($part === '') { return false; } - $length = strlen($part); - if ($part[$length - 1] === '%') { - // handle percents - if (!$type) { - $type = 'percentage'; - } elseif ($type !== 'percentage') { + + // different check for alpha channel + if ($alpha_channel === true && $i === count($parts)) { + $result = $this->alpha->validate($part, $config, $context); + + if ($result === false) { return false; } - $num = (float)substr($part, 0, $length - 1); - if ($num < 0) { - $num = 0; - } - if ($num > 100) { - $num = 100; - } - $new_parts[] = "$num%"; + + $new_parts[] = (string)$result; + continue; + } + + if (substr($part, -1) === '%') { + $current_type = 'percentage'; } else { - // handle integers - if (!$type) { - $type = 'integer'; - } elseif ($type !== 'integer') { - return false; - } - $num = (int)$part; - if ($num < 0) { - $num = 0; - } - if ($num > 255) { - $num = 255; - } - $new_parts[] = (string)$num; + $current_type = 'integer'; + } + + if (!array_key_exists($current_type, $allowed_types[$i])) { + return false; + } + + if (!$type) { + $type = $current_type; + } + + if ($allow_different_types === false && $type != $current_type) { + return false; + } + + $max_value = $allowed_types[$i][$current_type]; + + if ($current_type == 'integer') { + // Return value between range 0 -> $max_value + $new_parts[] = (int)max(min($part, $max_value), 0); + } elseif ($current_type == 'percentage') { + $new_parts[] = (float)max(min(rtrim($part, '%'), $max_value), 0) . '%'; } } - $new_triad = implode(',', $new_parts); - $color = "rgb($new_triad)"; + + $new_values = implode(',', $new_parts); + + $color = $function . '(' . $new_values . ')'; } else { // hexadecimal handling if ($color[0] === '#') { @@ -11179,6 +11474,7 @@ public function validate($color, $config, $context) } return $color; } + } @@ -12079,7 +12375,7 @@ public function __construct($single, $max = 4) */ public function validate($string, $config, $context) { - $string = $this->parseCDATA($string); + $string = $this->mungeRgb($this->parseCDATA($string)); if ($string === '') { return false; } @@ -12242,6 +12538,9 @@ public function validate($uri_string, $config, $context) return false; } $uri_string = substr($uri_string, 4); + if (strlen($uri_string) == 0) { + return false; + } $new_length = strlen($uri_string) - 1; if ($uri_string[$new_length] != ')') { return false; @@ -12316,9 +12615,6 @@ public function __construct($name = false) */ public function validate($string, $config, $context) { - if (empty($string)) { - return false; - } return $this->name; } @@ -12619,18 +12915,26 @@ public function validate($id, $config, $context) // we purposely avoid using regex, hopefully this is faster - if (ctype_alpha($id)) { - $result = true; - } else { - if (!ctype_alpha(@$id[0])) { + if ($config->get('Attr.ID.HTML5') === true) { + if (preg_match('/[\t\n\x0b\x0c ]/', $id)) { return false; } - // primitive style of regexps, I suppose - $trim = trim( - $id, - 'A..Za..z0..9:-._' - ); - $result = ($trim === ''); + } else { + if (ctype_alpha($id)) { + // OK + } else { + if (!ctype_alpha(@$id[0])) { + return false; + } + // primitive style of regexps, I suppose + $trim = trim( + $id, + 'A..Za..z0..9:-._' + ); + if ($trim !== '') { + return false; + } + } } $regexp = $config->get('Attr.IDBlacklistRegexp'); @@ -12638,14 +12942,14 @@ public function validate($id, $config, $context) return false; } - if (!$this->selector && $result) { + if (!$this->selector) { $id_accumulator->add($id); } // if no change was made to the ID, return the result // else, return the new id if stripping whitespace made it // valid, or return false. - return $result ? $id : false; + return $id; } } @@ -13018,24 +13322,33 @@ public function validate($string, $config, $context) // fairly well supported. $underscore = $config->get('Core.AllowHostnameUnderscore') ? '_' : ''; + // Based off of RFC 1738, but amended so that + // as per RFC 3696, the top label need only not be all numeric. // The productions describing this are: $a = '[a-z]'; // alpha $an = '[a-z0-9]'; // alphanum $and = "[a-z0-9-$underscore]"; // alphanum | "-" // domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum - $domainlabel = "$an($and*$an)?"; - // toplabel = alpha | alpha *( alphanum | "-" ) alphanum - $toplabel = "$a($and*$an)?"; + $domainlabel = "$an(?:$and*$an)?"; + // AMENDED as per RFC 3696 + // toplabel = alphanum | alphanum *( alphanum | "-" ) alphanum + // side condition: not all numeric + $toplabel = "$an(?:$and*$an)?"; // hostname = *( domainlabel "." ) toplabel [ "." ] - if (preg_match("/^($domainlabel\.)*$toplabel\.?$/i", $string)) { - return $string; + if (preg_match("/^(?:$domainlabel\.)*($toplabel)\.?$/i", $string, $matches)) { + if (!ctype_digit($matches[1])) { + return $string; + } } + // PHP 5.3 and later support this functionality natively + if (function_exists('idn_to_ascii')) { + $string = idn_to_ascii($string); + // If we have Net_IDNA2 support, we can support IRIs by // punycoding them. (This is the most portable thing to do, // since otherwise we have to assume browsers support - - if ($config->get('Core.EnableIDNA')) { + } elseif ($config->get('Core.EnableIDNA')) { $idna = new Net_IDNA2(array('encoding' => 'utf8', 'overlong' => false, 'strict' => true)); // we need to encode each period separately $parts = explode('.', $string); @@ -13056,13 +13369,14 @@ public function validate($string, $config, $context) } } $string = implode('.', $new_parts); - if (preg_match("/^($domainlabel\.)*$toplabel\.?$/i", $string)) { - return $string; - } } catch (Exception $e) { // XXX error reporting } } + // Try again + if (preg_match("/^($domainlabel\.)*$toplabel\.?$/i", $string)) { + return $string; + } return false; } } @@ -13499,8 +13813,7 @@ public function transform($attr, $config, $context) if ($src) { $alt = $config->get('Attr.DefaultImageAlt'); if ($alt === null) { - // truncate if the alt is too long - $attr['alt'] = substr(basename($attr['src']), 0, 40); + $attr['alt'] = basename($attr['src']); } else { $attr['alt'] = $alt; } @@ -14047,6 +14360,82 @@ public function transform($attr, $config, $context) +// must be called POST validation + +/** + * Adds rel="noopener" to any links which target a different window + * than the current one. This is used to prevent malicious websites + * from silently replacing the original window, which could be used + * to do phishing. + * This transform is controlled by %HTML.TargetNoopener. + */ +class HTMLPurifier_AttrTransform_TargetNoopener extends HTMLPurifier_AttrTransform +{ + /** + * @param array $attr + * @param HTMLPurifier_Config $config + * @param HTMLPurifier_Context $context + * @return array + */ + public function transform($attr, $config, $context) + { + if (isset($attr['rel'])) { + $rels = explode(' ', $attr['rel']); + } else { + $rels = array(); + } + if (isset($attr['target']) && !in_array('noopener', $rels)) { + $rels[] = 'noopener'; + } + if (!empty($rels) || isset($attr['rel'])) { + $attr['rel'] = implode(' ', $rels); + } + + return $attr; + } +} + + + + +// must be called POST validation + +/** + * Adds rel="noreferrer" to any links which target a different window + * than the current one. This is used to prevent malicious websites + * from silently replacing the original window, which could be used + * to do phishing. + * This transform is controlled by %HTML.TargetNoreferrer. + */ +class HTMLPurifier_AttrTransform_TargetNoreferrer extends HTMLPurifier_AttrTransform +{ + /** + * @param array $attr + * @param HTMLPurifier_Config $config + * @param HTMLPurifier_Context $context + * @return array + */ + public function transform($attr, $config, $context) + { + if (isset($attr['rel'])) { + $rels = explode(' ', $attr['rel']); + } else { + $rels = array(); + } + if (isset($attr['target']) && !in_array('noreferrer', $rels)) { + $rels[] = 'noreferrer'; + } + if (!empty($rels) || isset($attr['rel'])) { + $attr['rel'] = implode(' ', $rels); + } + + return $attr; + } +} + + + + /** * Sets height/width defaults for