From 77f2eea86f1279d9e7900410b5072c0c0d2319dc Mon Sep 17 00:00:00 2001 From: Carsten Schmitz Date: Tue, 22 Oct 2013 11:01:51 +0200 Subject: [PATCH] Dev Updated to Yii Framework 1.1.14 --- framework/CHANGELOG | 414 +- framework/LICENSE | 2 +- framework/UPGRADE | 285 +- framework/YiiBase.php | 21 +- framework/base/CApplication.php | 16 +- framework/base/CApplicationComponent.php | 4 +- framework/base/CBehavior.php | 2 +- framework/base/CComponent.php | 8 +- framework/base/CErrorEvent.php | 2 +- framework/base/CErrorHandler.php | 2 +- framework/base/CException.php | 2 +- framework/base/CExceptionEvent.php | 2 +- framework/base/CHttpException.php | 2 +- framework/base/CModel.php | 3 +- framework/base/CModelBehavior.php | 2 +- framework/base/CModelEvent.php | 2 +- framework/base/CModule.php | 2 +- framework/base/CSecurityManager.php | 200 +- framework/base/CStatePersister.php | 2 +- framework/base/interfaces.php | 2 +- framework/caching/CApcCache.php | 4 +- framework/caching/CCache.php | 4 +- framework/caching/CDbCache.php | 4 +- framework/caching/CDummyCache.php | 2 +- framework/caching/CEAcceleratorCache.php | 4 +- framework/caching/CFileCache.php | 38 +- framework/caching/CMemCache.php | 4 +- framework/caching/CRedisCache.php | 257 ++ framework/caching/CWinCache.php | 4 +- framework/caching/CXCache.php | 4 +- framework/caching/CZendDataCache.php | 4 +- .../caching/dependencies/CCacheDependency.php | 23 +- .../dependencies/CChainedCacheDependency.php | 4 +- .../dependencies/CDbCacheDependency.php | 3 +- .../CDirectoryCacheDependency.php | 4 +- .../dependencies/CExpressionDependency.php | 9 +- .../dependencies/CFileCacheDependency.php | 3 +- .../CGlobalStateCacheDependency.php | 3 +- framework/cli/commands/MessageCommand.php | 10 +- framework/cli/commands/MigrateCommand.php | 4 +- framework/cli/commands/ShellCommand.php | 2 +- framework/cli/commands/WebAppCommand.php | 2 +- .../cli/commands/shell/ControllerCommand.php | 4 +- framework/cli/commands/shell/CrudCommand.php | 4 +- framework/cli/commands/shell/FormCommand.php | 4 +- framework/cli/commands/shell/HelpCommand.php | 4 +- framework/cli/commands/shell/ModelCommand.php | 23 +- .../cli/commands/shell/ModuleCommand.php | 4 +- framework/cli/views/shell/crud/admin.php | 2 +- framework/cli/views/shell/model/model.php | 25 +- .../cli/views/shell/module/messages/.yii | 0 framework/cli/views/shell/module/models/.yii | 0 .../cli/views/shell/module/views/layouts/.yii | 0 framework/cli/views/webapp/assets/.yii | 0 framework/cli/views/webapp/css/form.css | 2 +- framework/cli/views/webapp/hg-hgignore | 6 +- framework/cli/views/webapp/images/.yii | 0 .../webapp/protected/commands/shell/.yii | 0 .../protected/controllers/SiteController.php | 2 +- .../views/webapp/protected/extensions/.yii | 0 .../cli/views/webapp/protected/messages/.yii | 0 .../views/webapp/protected/migrations/.yii | 0 .../cli/views/webapp/protected/runtime/.yii | 0 .../webapp/protected/tests/fixtures/.yii | 0 .../views/webapp/protected/tests/report/.yii | 0 .../views/webapp/protected/tests/unit/.yii | 0 .../webapp/protected/vendor/git-gitkeep} | 0 .../protected/vendor/hg-hgkeep} | 0 .../webapp/themes/classic/views/layouts/.yii | 0 .../webapp/themes/classic/views/site/.yii | 0 .../webapp/themes/classic/views/system/.yii | 0 .../collections/CAttributeCollection.php | 12 +- framework/collections/CConfiguration.php | 2 +- framework/collections/CList.php | 2 +- framework/collections/CListIterator.php | 4 +- framework/collections/CMap.php | 8 +- framework/collections/CMapIterator.php | 4 +- framework/collections/CQueue.php | 4 +- framework/collections/CQueueIterator.php | 4 +- framework/collections/CStack.php | 2 +- framework/collections/CStackIterator.php | 4 +- framework/collections/CTypedList.php | 2 +- framework/collections/CTypedMap.php | 2 +- framework/console/CConsoleApplication.php | 24 +- framework/console/CConsoleCommand.php | 16 +- framework/console/CConsoleCommandBehavior.php | 6 +- framework/console/CConsoleCommandEvent.php | 2 +- framework/console/CConsoleCommandRunner.php | 29 +- framework/console/CHelpCommand.php | 2 +- framework/db/CDbCommand.php | 18 +- framework/db/CDbConnection.php | 24 +- framework/db/CDbDataReader.php | 4 +- framework/db/CDbException.php | 2 +- framework/db/CDbMigration.php | 21 +- framework/db/CDbTransaction.php | 2 +- framework/db/ar/CActiveFinder.php | 141 +- framework/db/ar/CActiveRecord.php | 144 +- framework/db/ar/CActiveRecordBehavior.php | 14 +- framework/db/schema/CDbColumnSchema.php | 2 +- framework/db/schema/CDbCommandBuilder.php | 125 +- framework/db/schema/CDbCriteria.php | 14 +- framework/db/schema/CDbExpression.php | 2 +- framework/db/schema/CDbSchema.php | 20 +- framework/db/schema/CDbTableSchema.php | 2 +- .../db/schema/mssql/CMssqlColumnSchema.php | 30 +- .../db/schema/mssql/CMssqlCommandBuilder.php | 3 +- .../db/schema/mssql/CMssqlPdoAdapter.php | 4 +- framework/db/schema/mssql/CMssqlSchema.php | 86 +- .../schema/mssql/CMssqlSqlsrvPdoAdapter.php | 4 +- .../db/schema/mssql/CMssqlTableSchema.php | 2 +- .../db/schema/mysql/CMysqlColumnSchema.php | 15 +- .../db/schema/mysql/CMysqlCommandBuilder.php | 10 +- framework/db/schema/mysql/CMysqlSchema.php | 49 +- .../db/schema/mysql/CMysqlTableSchema.php | 2 +- framework/db/schema/oci/COciColumnSchema.php | 2 +- .../db/schema/oci/COciCommandBuilder.php | 25 +- framework/db/schema/oci/COciSchema.php | 128 +- framework/db/schema/oci/COciTableSchema.php | 2 +- .../db/schema/pgsql/CPgsqlColumnSchema.php | 2 +- .../db/schema/pgsql/CPgsqlCommandBuilder.php | 30 + framework/db/schema/pgsql/CPgsqlSchema.php | 72 +- .../db/schema/pgsql/CPgsqlTableSchema.php | 2 +- .../db/schema/sqlite/CSqliteColumnSchema.php | 7 +- .../schema/sqlite/CSqliteCommandBuilder.php | 26 +- framework/db/schema/sqlite/CSqliteSchema.php | 48 +- framework/gii/CCodeFile.php | 2 +- framework/gii/CCodeForm.php | 2 +- framework/gii/CCodeGenerator.php | 2 +- framework/gii/CCodeModel.php | 7 +- framework/gii/GiiModule.php | 4 +- .../gii/assets/js/jquery.tooltip-1.2.6.min.js | 11 - framework/gii/assets/js/main.js | 2 +- .../gii/assets/js/tools.tooltip-1.2.5.min.js | 192 - framework/gii/assets/js/tooltip.js | 364 ++ framework/gii/components/UserIdentity.php | 2 +- .../gii/controllers/DefaultController.php | 4 +- .../generators/controller/ControllerCode.php | 2 +- .../gii/generators/controller/views/index.php | 1 + framework/gii/generators/crud/CrudCode.php | 2 +- .../crud/templates/default/_form.php | 4 + .../crud/templates/default/create.php | 2 +- .../crud/templates/default/update.php | 2 +- .../form/templates/default/form.php | 4 + framework/gii/generators/model/ModelCode.php | 36 +- .../model/templates/default/model.php | 58 +- .../gii/generators/model/views/index.php | 17 +- .../module/templates/default/components/.yii | 0 .../module/templates/default/messages/.yii | 0 .../module/templates/default/models/.yii | 0 .../templates/default/views/layouts/.yii | 0 framework/gii/views/default/index.php | 2 +- framework/gii/views/layouts/generator.php | 2 +- framework/gii/views/layouts/main.php | 6 +- framework/i18n/CChoiceFormat.php | 18 +- framework/i18n/CDateFormatter.php | 37 +- framework/i18n/CDbMessageSource.php | 3 +- framework/i18n/CGettextMessageSource.php | 4 +- framework/i18n/CLocale.php | 18 +- framework/i18n/CMessageSource.php | 2 +- framework/i18n/CNumberFormatter.php | 23 +- framework/i18n/CPhpMessageSource.php | 2 +- framework/i18n/data/aa.php | 2 +- framework/i18n/data/aa_dj.php | 2 +- framework/i18n/data/aa_er.php | 2 +- framework/i18n/data/aa_et.php | 2 +- framework/i18n/data/af.php | 2 +- framework/i18n/data/af_na.php | 2 +- framework/i18n/data/af_za.php | 2 +- framework/i18n/data/agq.php | 2 +- framework/i18n/data/agq_cm.php | 2 +- framework/i18n/data/ak.php | 2 +- framework/i18n/data/ak_gh.php | 2 +- framework/i18n/data/am.php | 2 +- framework/i18n/data/am_et.php | 2 +- framework/i18n/data/ar.php | 2 +- framework/i18n/data/ar_001.php | 2 +- framework/i18n/data/ar_ae.php | 2 +- framework/i18n/data/ar_bh.php | 2 +- framework/i18n/data/ar_dz.php | 2 +- framework/i18n/data/ar_eg.php | 2 +- framework/i18n/data/ar_iq.php | 2 +- framework/i18n/data/ar_jo.php | 2 +- framework/i18n/data/ar_kw.php | 2 +- framework/i18n/data/ar_lb.php | 2 +- framework/i18n/data/ar_ly.php | 2 +- framework/i18n/data/ar_ma.php | 2 +- framework/i18n/data/ar_om.php | 2 +- framework/i18n/data/ar_qa.php | 2 +- framework/i18n/data/ar_sa.php | 2 +- framework/i18n/data/ar_sd.php | 2 +- framework/i18n/data/ar_sy.php | 2 +- framework/i18n/data/ar_tn.php | 2 +- framework/i18n/data/ar_ye.php | 2 +- framework/i18n/data/as.php | 2 +- framework/i18n/data/as_in.php | 2 +- framework/i18n/data/asa.php | 2 +- framework/i18n/data/asa_tz.php | 2 +- framework/i18n/data/az.php | 2 +- framework/i18n/data/az_arab.php | 2 +- framework/i18n/data/az_arab_ir.php | 2 +- framework/i18n/data/az_az.php | 2 +- framework/i18n/data/az_cyrl.php | 2 +- framework/i18n/data/az_cyrl_az.php | 2 +- framework/i18n/data/az_ir.php | 2 +- framework/i18n/data/az_latn.php | 2 +- framework/i18n/data/az_latn_az.php | 2 +- framework/i18n/data/bas.php | 2 +- framework/i18n/data/bas_cm.php | 2 +- framework/i18n/data/be.php | 2 +- framework/i18n/data/be_by.php | 2 +- framework/i18n/data/bem.php | 2 +- framework/i18n/data/bem_zm.php | 2 +- framework/i18n/data/bez.php | 2 +- framework/i18n/data/bez_tz.php | 2 +- framework/i18n/data/bg.php | 2 +- framework/i18n/data/bg_bg.php | 2 +- framework/i18n/data/bm.php | 2 +- framework/i18n/data/bm_ml.php | 2 +- framework/i18n/data/bn.php | 2 +- framework/i18n/data/bn_bd.php | 2 +- framework/i18n/data/bn_in.php | 2 +- framework/i18n/data/bo.php | 2 +- framework/i18n/data/bo_cn.php | 2 +- framework/i18n/data/bo_in.php | 2 +- framework/i18n/data/br.php | 2 +- framework/i18n/data/br_fr.php | 2 +- framework/i18n/data/brx.php | 2 +- framework/i18n/data/brx_in.php | 2 +- framework/i18n/data/bs.php | 2 +- framework/i18n/data/bs_ba.php | 2 +- framework/i18n/data/byn.php | 2 +- framework/i18n/data/byn_er.php | 2 +- framework/i18n/data/ca.php | 2 +- framework/i18n/data/ca_es.php | 2 +- framework/i18n/data/cch.php | 2 +- framework/i18n/data/cch_ng.php | 2 +- framework/i18n/data/cgg.php | 2 +- framework/i18n/data/cgg_ug.php | 2 +- framework/i18n/data/chr.php | 2 +- framework/i18n/data/chr_us.php | 2 +- framework/i18n/data/cs.php | 2 +- framework/i18n/data/cs_cz.php | 2 +- framework/i18n/data/cy.php | 2 +- framework/i18n/data/cy_gb.php | 2 +- framework/i18n/data/da.php | 2 +- framework/i18n/data/da_dk.php | 2 +- framework/i18n/data/dav.php | 2 +- framework/i18n/data/dav_ke.php | 2 +- framework/i18n/data/de.php | 2 +- framework/i18n/data/de_at.php | 2 +- framework/i18n/data/de_be.php | 2 +- framework/i18n/data/de_ch.php | 2 +- framework/i18n/data/de_de.php | 2 +- framework/i18n/data/de_li.php | 2 +- framework/i18n/data/de_lu.php | 2 +- framework/i18n/data/dje.php | 2 +- framework/i18n/data/dje_ne.php | 2 +- framework/i18n/data/dua.php | 2 +- framework/i18n/data/dua_cm.php | 2 +- framework/i18n/data/dv.php | 2 +- framework/i18n/data/dv_mv.php | 2 +- framework/i18n/data/dyo.php | 2 +- framework/i18n/data/dyo_sn.php | 2 +- framework/i18n/data/dz.php | 2 +- framework/i18n/data/dz_bt.php | 2 +- framework/i18n/data/ebu.php | 2 +- framework/i18n/data/ebu_ke.php | 2 +- framework/i18n/data/ee.php | 2 +- framework/i18n/data/ee_gh.php | 2 +- framework/i18n/data/ee_tg.php | 2 +- framework/i18n/data/el.php | 2 +- framework/i18n/data/el_cy.php | 2 +- framework/i18n/data/el_gr.php | 2 +- framework/i18n/data/el_polyton.php | 2 +- framework/i18n/data/en.php | 2 +- framework/i18n/data/en_as.php | 2 +- framework/i18n/data/en_au.php | 2 +- framework/i18n/data/en_bb.php | 2 +- framework/i18n/data/en_be.php | 2 +- framework/i18n/data/en_bm.php | 2 +- framework/i18n/data/en_bw.php | 2 +- framework/i18n/data/en_bz.php | 2 +- framework/i18n/data/en_ca.php | 2 +- framework/i18n/data/en_dsrt.php | 2 +- framework/i18n/data/en_dsrt_us.php | 2 +- framework/i18n/data/en_gb.php | 2 +- framework/i18n/data/en_gu.php | 2 +- framework/i18n/data/en_gy.php | 2 +- framework/i18n/data/en_hk.php | 2 +- framework/i18n/data/en_ie.php | 2 +- framework/i18n/data/en_in.php | 2 +- framework/i18n/data/en_jm.php | 2 +- framework/i18n/data/en_mh.php | 2 +- framework/i18n/data/en_mp.php | 2 +- framework/i18n/data/en_mt.php | 2 +- framework/i18n/data/en_mu.php | 2 +- framework/i18n/data/en_na.php | 2 +- framework/i18n/data/en_nz.php | 2 +- framework/i18n/data/en_ph.php | 2 +- framework/i18n/data/en_pk.php | 2 +- framework/i18n/data/en_sg.php | 2 +- framework/i18n/data/en_shaw.php | 2 +- framework/i18n/data/en_tt.php | 2 +- framework/i18n/data/en_um.php | 2 +- framework/i18n/data/en_us.php | 2 +- framework/i18n/data/en_us_posix.php | 2 +- framework/i18n/data/en_vi.php | 2 +- framework/i18n/data/en_za.php | 2 +- framework/i18n/data/en_zw.php | 2 +- framework/i18n/data/en_zz.php | 2 +- framework/i18n/data/eo.php | 2 +- framework/i18n/data/es.php | 2 +- framework/i18n/data/es_419.php | 2 +- framework/i18n/data/es_ar.php | 2 +- framework/i18n/data/es_bo.php | 2 +- framework/i18n/data/es_cl.php | 2 +- framework/i18n/data/es_co.php | 2 +- framework/i18n/data/es_cr.php | 2 +- framework/i18n/data/es_do.php | 2 +- framework/i18n/data/es_ec.php | 2 +- framework/i18n/data/es_es.php | 2 +- framework/i18n/data/es_gq.php | 2 +- framework/i18n/data/es_gt.php | 2 +- framework/i18n/data/es_hn.php | 2 +- framework/i18n/data/es_mx.php | 2 +- framework/i18n/data/es_ni.php | 2 +- framework/i18n/data/es_pa.php | 2 +- framework/i18n/data/es_pe.php | 2 +- framework/i18n/data/es_pr.php | 2 +- framework/i18n/data/es_py.php | 2 +- framework/i18n/data/es_sv.php | 2 +- framework/i18n/data/es_us.php | 2 +- framework/i18n/data/es_uy.php | 2 +- framework/i18n/data/es_ve.php | 2 +- framework/i18n/data/et.php | 2 +- framework/i18n/data/et_ee.php | 2 +- framework/i18n/data/eu.php | 2 +- framework/i18n/data/eu_es.php | 2 +- framework/i18n/data/ewo.php | 2 +- framework/i18n/data/ewo_cm.php | 2 +- framework/i18n/data/fa.php | 2 +- framework/i18n/data/fa_af.php | 2 +- framework/i18n/data/fa_ir.php | 2 +- framework/i18n/data/ff.php | 2 +- framework/i18n/data/ff_sn.php | 2 +- framework/i18n/data/fi.php | 2 +- framework/i18n/data/fi_fi.php | 2 +- framework/i18n/data/fil.php | 2 +- framework/i18n/data/fil_ph.php | 2 +- framework/i18n/data/fo.php | 2 +- framework/i18n/data/fo_fo.php | 2 +- framework/i18n/data/fr.php | 2 +- framework/i18n/data/fr_be.php | 2 +- framework/i18n/data/fr_bf.php | 2 +- framework/i18n/data/fr_bi.php | 2 +- framework/i18n/data/fr_bj.php | 2 +- framework/i18n/data/fr_bl.php | 2 +- framework/i18n/data/fr_ca.php | 2 +- framework/i18n/data/fr_cd.php | 2 +- framework/i18n/data/fr_cf.php | 2 +- framework/i18n/data/fr_cg.php | 2 +- framework/i18n/data/fr_ch.php | 2 +- framework/i18n/data/fr_ci.php | 2 +- framework/i18n/data/fr_cm.php | 2 +- framework/i18n/data/fr_dj.php | 2 +- framework/i18n/data/fr_fr.php | 2 +- framework/i18n/data/fr_ga.php | 2 +- framework/i18n/data/fr_gf.php | 2 +- framework/i18n/data/fr_gn.php | 2 +- framework/i18n/data/fr_gp.php | 2 +- framework/i18n/data/fr_gq.php | 2 +- framework/i18n/data/fr_km.php | 2 +- framework/i18n/data/fr_lu.php | 2 +- framework/i18n/data/fr_mc.php | 2 +- framework/i18n/data/fr_mf.php | 2 +- framework/i18n/data/fr_mg.php | 2 +- framework/i18n/data/fr_ml.php | 2 +- framework/i18n/data/fr_mq.php | 2 +- framework/i18n/data/fr_ne.php | 2 +- framework/i18n/data/fr_re.php | 2 +- framework/i18n/data/fr_rw.php | 2 +- framework/i18n/data/fr_sn.php | 2 +- framework/i18n/data/fr_td.php | 2 +- framework/i18n/data/fr_tg.php | 2 +- framework/i18n/data/fr_yt.php | 2 +- framework/i18n/data/fur.php | 2 +- framework/i18n/data/fur_it.php | 2 +- framework/i18n/data/ga.php | 2 +- framework/i18n/data/ga_ie.php | 2 +- framework/i18n/data/gaa.php | 2 +- framework/i18n/data/gaa_gh.php | 2 +- framework/i18n/data/gd.php | 2 +- framework/i18n/data/gd_gb.php | 2 +- framework/i18n/data/gez.php | 2 +- framework/i18n/data/gez_er.php | 2 +- framework/i18n/data/gez_et.php | 2 +- framework/i18n/data/gl.php | 2 +- framework/i18n/data/gl_es.php | 2 +- framework/i18n/data/gsw.php | 2 +- framework/i18n/data/gsw_ch.php | 2 +- framework/i18n/data/gu.php | 2 +- framework/i18n/data/gu_in.php | 2 +- framework/i18n/data/guz.php | 2 +- framework/i18n/data/guz_ke.php | 2 +- framework/i18n/data/gv.php | 2 +- framework/i18n/data/gv_gb.php | 2 +- framework/i18n/data/ha.php | 2 +- framework/i18n/data/ha_arab.php | 2 +- framework/i18n/data/ha_arab_ng.php | 2 +- framework/i18n/data/ha_arab_sd.php | 2 +- framework/i18n/data/ha_gh.php | 2 +- framework/i18n/data/ha_latn.php | 2 +- framework/i18n/data/ha_latn_gh.php | 2 +- framework/i18n/data/ha_latn_ne.php | 2 +- framework/i18n/data/ha_latn_ng.php | 2 +- framework/i18n/data/ha_ne.php | 2 +- framework/i18n/data/ha_ng.php | 2 +- framework/i18n/data/ha_sd.php | 2 +- framework/i18n/data/haw.php | 2 +- framework/i18n/data/haw_us.php | 2 +- framework/i18n/data/he.php | 2 +- framework/i18n/data/he_il.php | 2 +- framework/i18n/data/hi.php | 2 +- framework/i18n/data/hi_in.php | 2 +- framework/i18n/data/hr.php | 2 +- framework/i18n/data/hr_hr.php | 2 +- framework/i18n/data/hu.php | 2 +- framework/i18n/data/hu_hu.php | 2 +- framework/i18n/data/hy.php | 2 +- framework/i18n/data/hy_am.php | 2 +- framework/i18n/data/ia.php | 2 +- framework/i18n/data/id.php | 2 +- framework/i18n/data/id_id.php | 2 +- framework/i18n/data/ig.php | 2 +- framework/i18n/data/ig_ng.php | 2 +- framework/i18n/data/ii.php | 2 +- framework/i18n/data/ii_cn.php | 2 +- framework/i18n/data/in.php | 2 +- framework/i18n/data/is.php | 2 +- framework/i18n/data/is_is.php | 2 +- framework/i18n/data/it.php | 2 +- framework/i18n/data/it_ch.php | 2 +- framework/i18n/data/it_it.php | 2 +- framework/i18n/data/iu.php | 2 +- framework/i18n/data/iw.php | 2 +- framework/i18n/data/ja.php | 2 +- framework/i18n/data/ja_jp.php | 2 +- framework/i18n/data/jmc.php | 2 +- framework/i18n/data/jmc_tz.php | 2 +- framework/i18n/data/ka.php | 2 +- framework/i18n/data/ka_ge.php | 2 +- framework/i18n/data/kab.php | 2 +- framework/i18n/data/kab_dz.php | 2 +- framework/i18n/data/kaj.php | 2 +- framework/i18n/data/kaj_ng.php | 2 +- framework/i18n/data/kam.php | 2 +- framework/i18n/data/kam_ke.php | 2 +- framework/i18n/data/kcg.php | 2 +- framework/i18n/data/kcg_ng.php | 2 +- framework/i18n/data/kde.php | 2 +- framework/i18n/data/kde_tz.php | 2 +- framework/i18n/data/kea.php | 2 +- framework/i18n/data/kea_cv.php | 2 +- framework/i18n/data/kfo.php | 2 +- framework/i18n/data/kfo_ci.php | 2 +- framework/i18n/data/khq.php | 2 +- framework/i18n/data/khq_ml.php | 2 +- framework/i18n/data/ki.php | 2 +- framework/i18n/data/ki_ke.php | 2 +- framework/i18n/data/kk.php | 2 +- framework/i18n/data/kk_cyrl.php | 2 +- framework/i18n/data/kk_cyrl_kz.php | 2 +- framework/i18n/data/kk_kz.php | 2 +- framework/i18n/data/kl.php | 2 +- framework/i18n/data/kl_gl.php | 2 +- framework/i18n/data/kln.php | 2 +- framework/i18n/data/kln_ke.php | 2 +- framework/i18n/data/km.php | 2 +- framework/i18n/data/km_kh.php | 2 +- framework/i18n/data/kn.php | 2 +- framework/i18n/data/kn_in.php | 2 +- framework/i18n/data/ko.php | 2 +- framework/i18n/data/ko_kr.php | 2 +- framework/i18n/data/kok.php | 2 +- framework/i18n/data/kok_in.php | 2 +- framework/i18n/data/kpe.php | 2 +- framework/i18n/data/kpe_gn.php | 2 +- framework/i18n/data/kpe_lr.php | 2 +- framework/i18n/data/ksb.php | 2 +- framework/i18n/data/ksb_tz.php | 2 +- framework/i18n/data/ksf.php | 2 +- framework/i18n/data/ksf_cm.php | 2 +- framework/i18n/data/ksh.php | 2 +- framework/i18n/data/ksh_de.php | 2 +- framework/i18n/data/ku.php | 2 +- framework/i18n/data/ku_arab.php | 2 +- framework/i18n/data/ku_arab_iq.php | 2 +- framework/i18n/data/ku_arab_ir.php | 2 +- framework/i18n/data/ku_iq.php | 2 +- framework/i18n/data/ku_ir.php | 2 +- framework/i18n/data/ku_latn.php | 2 +- framework/i18n/data/ku_latn_sy.php | 2 +- framework/i18n/data/ku_latn_tr.php | 2 +- framework/i18n/data/ku_sy.php | 2 +- framework/i18n/data/ku_tr.php | 2 +- framework/i18n/data/kw.php | 2 +- framework/i18n/data/kw_gb.php | 2 +- framework/i18n/data/ky.php | 2 +- framework/i18n/data/ky_kg.php | 2 +- framework/i18n/data/lag.php | 2 +- framework/i18n/data/lag_tz.php | 2 +- framework/i18n/data/lg.php | 2 +- framework/i18n/data/lg_ug.php | 2 +- framework/i18n/data/ln.php | 2 +- framework/i18n/data/ln_cd.php | 2 +- framework/i18n/data/ln_cg.php | 2 +- framework/i18n/data/lo.php | 2 +- framework/i18n/data/lo_la.php | 2 +- framework/i18n/data/lt.php | 2 +- framework/i18n/data/lt_lt.php | 2 +- framework/i18n/data/lu.php | 2 +- framework/i18n/data/lu_cd.php | 2 +- framework/i18n/data/luo.php | 2 +- framework/i18n/data/luo_ke.php | 2 +- framework/i18n/data/luy.php | 2 +- framework/i18n/data/luy_ke.php | 2 +- framework/i18n/data/lv.php | 2 +- framework/i18n/data/lv_lv.php | 2 +- framework/i18n/data/mas.php | 2 +- framework/i18n/data/mas_ke.php | 2 +- framework/i18n/data/mas_tz.php | 2 +- framework/i18n/data/mer.php | 2 +- framework/i18n/data/mer_ke.php | 2 +- framework/i18n/data/mfe.php | 2 +- framework/i18n/data/mfe_mu.php | 2 +- framework/i18n/data/mg.php | 2 +- framework/i18n/data/mg_mg.php | 2 +- framework/i18n/data/mgh.php | 2 +- framework/i18n/data/mgh_mz.php | 2 +- framework/i18n/data/mi.php | 2 +- framework/i18n/data/mi_nz.php | 2 +- framework/i18n/data/mk.php | 2 +- framework/i18n/data/mk_mk.php | 2 +- framework/i18n/data/ml.php | 2 +- framework/i18n/data/ml_in.php | 2 +- framework/i18n/data/mn.php | 2 +- framework/i18n/data/mn_cn.php | 2 +- framework/i18n/data/mn_cyrl.php | 2 +- framework/i18n/data/mn_cyrl_mn.php | 2 +- framework/i18n/data/mn_mn.php | 2 +- framework/i18n/data/mn_mong.php | 2 +- framework/i18n/data/mn_mong_cn.php | 2 +- framework/i18n/data/mo.php | 2 +- framework/i18n/data/mr.php | 2 +- framework/i18n/data/mr_in.php | 2 +- framework/i18n/data/ms.php | 2 +- framework/i18n/data/ms_bn.php | 2 +- framework/i18n/data/ms_my.php | 2 +- framework/i18n/data/mt.php | 2 +- framework/i18n/data/mt_mt.php | 2 +- framework/i18n/data/mua.php | 2 +- framework/i18n/data/mua_cm.php | 2 +- framework/i18n/data/my.php | 2 +- framework/i18n/data/my_mm.php | 2 +- framework/i18n/data/naq.php | 2 +- framework/i18n/data/naq_na.php | 2 +- framework/i18n/data/nb.php | 2 +- framework/i18n/data/nb_no.php | 2 +- framework/i18n/data/nd.php | 2 +- framework/i18n/data/nd_zw.php | 2 +- framework/i18n/data/nds.php | 2 +- framework/i18n/data/nds_de.php | 2 +- framework/i18n/data/ne.php | 2 +- framework/i18n/data/ne_in.php | 2 +- framework/i18n/data/ne_np.php | 2 +- framework/i18n/data/nl.php | 2 +- framework/i18n/data/nl_aw.php | 2 +- framework/i18n/data/nl_be.php | 2 +- framework/i18n/data/nl_cw.php | 2 +- framework/i18n/data/nl_nl.php | 2 +- framework/i18n/data/nl_sx.php | 2 +- framework/i18n/data/nmg.php | 2 +- framework/i18n/data/nmg_cm.php | 2 +- framework/i18n/data/nn.php | 2 +- framework/i18n/data/nn_no.php | 2 +- framework/i18n/data/no.php | 2 +- framework/i18n/data/nr.php | 2 +- framework/i18n/data/nr_za.php | 2 +- framework/i18n/data/nso.php | 2 +- framework/i18n/data/nso_za.php | 2 +- framework/i18n/data/nus.php | 2 +- framework/i18n/data/nus_sd.php | 2 +- framework/i18n/data/ny.php | 2 +- framework/i18n/data/ny_mw.php | 2 +- framework/i18n/data/nyn.php | 2 +- framework/i18n/data/nyn_ug.php | 2 +- framework/i18n/data/oc.php | 2 +- framework/i18n/data/oc_fr.php | 2 +- framework/i18n/data/om.php | 2 +- framework/i18n/data/om_et.php | 2 +- framework/i18n/data/om_ke.php | 2 +- framework/i18n/data/or.php | 2 +- framework/i18n/data/or_in.php | 2 +- framework/i18n/data/pa.php | 2 +- framework/i18n/data/pa_arab.php | 2 +- framework/i18n/data/pa_arab_pk.php | 2 +- framework/i18n/data/pa_guru.php | 2 +- framework/i18n/data/pa_guru_in.php | 2 +- framework/i18n/data/pa_in.php | 2 +- framework/i18n/data/pa_pk.php | 2 +- framework/i18n/data/pl.php | 2 +- framework/i18n/data/pl_pl.php | 2 +- framework/i18n/data/ps.php | 2 +- framework/i18n/data/ps_af.php | 2 +- framework/i18n/data/pt.php | 2 +- framework/i18n/data/pt_ao.php | 2 +- framework/i18n/data/pt_br.php | 2 +- framework/i18n/data/pt_gw.php | 2 +- framework/i18n/data/pt_mz.php | 2 +- framework/i18n/data/pt_pt.php | 2 +- framework/i18n/data/pt_st.php | 2 +- framework/i18n/data/rm.php | 2 +- framework/i18n/data/rm_ch.php | 2 +- framework/i18n/data/rn.php | 2 +- framework/i18n/data/rn_bi.php | 2 +- framework/i18n/data/ro.php | 2 +- framework/i18n/data/ro_md.php | 2 +- framework/i18n/data/ro_ro.php | 2 +- framework/i18n/data/rof.php | 2 +- framework/i18n/data/rof_tz.php | 2 +- framework/i18n/data/root.php | 2 +- framework/i18n/data/ru.php | 2 +- framework/i18n/data/ru_md.php | 2 +- framework/i18n/data/ru_ru.php | 2 +- framework/i18n/data/ru_ua.php | 2 +- framework/i18n/data/rw.php | 2 +- framework/i18n/data/rw_rw.php | 2 +- framework/i18n/data/rwk.php | 2 +- framework/i18n/data/rwk_tz.php | 2 +- framework/i18n/data/sa.php | 2 +- framework/i18n/data/sa_in.php | 2 +- framework/i18n/data/sah.php | 2 +- framework/i18n/data/sah_ru.php | 2 +- framework/i18n/data/saq.php | 2 +- framework/i18n/data/saq_ke.php | 2 +- framework/i18n/data/sbp.php | 2 +- framework/i18n/data/sbp_tz.php | 2 +- framework/i18n/data/se.php | 2 +- framework/i18n/data/se_fi.php | 2 +- framework/i18n/data/se_no.php | 2 +- framework/i18n/data/seh.php | 2 +- framework/i18n/data/seh_mz.php | 2 +- framework/i18n/data/ses.php | 2 +- framework/i18n/data/ses_ml.php | 2 +- framework/i18n/data/sg.php | 2 +- framework/i18n/data/sg_cf.php | 2 +- framework/i18n/data/sh.php | 2 +- framework/i18n/data/sh_ba.php | 2 +- framework/i18n/data/sh_cs.php | 2 +- framework/i18n/data/sh_yu.php | 2 +- framework/i18n/data/shi.php | 2 +- framework/i18n/data/shi_latn.php | 2 +- framework/i18n/data/shi_latn_ma.php | 2 +- framework/i18n/data/shi_ma.php | 2 +- framework/i18n/data/shi_tfng.php | 2 +- framework/i18n/data/shi_tfng_ma.php | 2 +- framework/i18n/data/si.php | 2 +- framework/i18n/data/si_lk.php | 2 +- framework/i18n/data/sid.php | 2 +- framework/i18n/data/sid_et.php | 2 +- framework/i18n/data/sk.php | 2 +- framework/i18n/data/sk_sk.php | 2 +- framework/i18n/data/sl.php | 2 +- framework/i18n/data/sl_si.php | 2 +- framework/i18n/data/sn.php | 2 +- framework/i18n/data/sn_zw.php | 2 +- framework/i18n/data/so.php | 2 +- framework/i18n/data/so_dj.php | 2 +- framework/i18n/data/so_et.php | 2 +- framework/i18n/data/so_ke.php | 2 +- framework/i18n/data/so_so.php | 2 +- framework/i18n/data/sq.php | 2 +- framework/i18n/data/sq_al.php | 2 +- framework/i18n/data/sr.php | 2 +- framework/i18n/data/sr_ba.php | 2 +- framework/i18n/data/sr_cs.php | 2 +- framework/i18n/data/sr_cyrl.php | 2 +- framework/i18n/data/sr_cyrl_ba.php | 2 +- framework/i18n/data/sr_cyrl_cs.php | 2 +- framework/i18n/data/sr_cyrl_me.php | 2 +- framework/i18n/data/sr_cyrl_rs.php | 2 +- framework/i18n/data/sr_cyrl_yu.php | 2 +- framework/i18n/data/sr_latn.php | 2 +- framework/i18n/data/sr_latn_ba.php | 2 +- framework/i18n/data/sr_latn_cs.php | 2 +- framework/i18n/data/sr_latn_me.php | 2 +- framework/i18n/data/sr_latn_rs.php | 2 +- framework/i18n/data/sr_latn_yu.php | 2 +- framework/i18n/data/sr_me.php | 2 +- framework/i18n/data/sr_rs.php | 2 +- framework/i18n/data/sr_yu.php | 2 +- framework/i18n/data/ss.php | 2 +- framework/i18n/data/ss_sz.php | 2 +- framework/i18n/data/ss_za.php | 2 +- framework/i18n/data/ssy.php | 2 +- framework/i18n/data/ssy_er.php | 2 +- framework/i18n/data/st.php | 2 +- framework/i18n/data/st_ls.php | 2 +- framework/i18n/data/st_za.php | 2 +- framework/i18n/data/sv.php | 2 +- framework/i18n/data/sv_fi.php | 2 +- framework/i18n/data/sv_se.php | 2 +- framework/i18n/data/sw.php | 2 +- framework/i18n/data/sw_ke.php | 2 +- framework/i18n/data/sw_tz.php | 2 +- framework/i18n/data/swc.php | 2 +- framework/i18n/data/swc_cd.php | 2 +- framework/i18n/data/syr.php | 2 +- framework/i18n/data/syr_sy.php | 2 +- framework/i18n/data/ta.php | 2 +- framework/i18n/data/ta_in.php | 2 +- framework/i18n/data/ta_lk.php | 2 +- framework/i18n/data/te.php | 2 +- framework/i18n/data/te_in.php | 2 +- framework/i18n/data/teo.php | 2 +- framework/i18n/data/teo_ke.php | 2 +- framework/i18n/data/teo_ug.php | 2 +- framework/i18n/data/tg.php | 2 +- framework/i18n/data/tg_cyrl.php | 2 +- framework/i18n/data/tg_cyrl_tj.php | 2 +- framework/i18n/data/tg_tj.php | 2 +- framework/i18n/data/th.php | 2 +- framework/i18n/data/th_th.php | 2 +- framework/i18n/data/ti.php | 2 +- framework/i18n/data/ti_er.php | 2 +- framework/i18n/data/ti_et.php | 2 +- framework/i18n/data/tig.php | 2 +- framework/i18n/data/tig_er.php | 2 +- framework/i18n/data/tl.php | 2 +- framework/i18n/data/tl_ph.php | 2 +- framework/i18n/data/tn.php | 2 +- framework/i18n/data/tn_za.php | 2 +- framework/i18n/data/to.php | 2 +- framework/i18n/data/to_to.php | 2 +- framework/i18n/data/tr.php | 2 +- framework/i18n/data/tr_tr.php | 2 +- framework/i18n/data/trv.php | 2 +- framework/i18n/data/trv_tw.php | 2 +- framework/i18n/data/ts.php | 2 +- framework/i18n/data/ts_za.php | 2 +- framework/i18n/data/tt.php | 2 +- framework/i18n/data/tt_ru.php | 2 +- framework/i18n/data/twq.php | 2 +- framework/i18n/data/twq_ne.php | 2 +- framework/i18n/data/tzm.php | 2 +- framework/i18n/data/tzm_latn.php | 2 +- framework/i18n/data/tzm_latn_ma.php | 2 +- framework/i18n/data/tzm_ma.php | 2 +- framework/i18n/data/ug.php | 2 +- framework/i18n/data/ug_arab.php | 2 +- framework/i18n/data/ug_arab_cn.php | 2 +- framework/i18n/data/ug_cn.php | 2 +- framework/i18n/data/uk.php | 2 +- framework/i18n/data/uk_ua.php | 2 +- framework/i18n/data/ur.php | 2 +- framework/i18n/data/ur_in.php | 2 +- framework/i18n/data/ur_pk.php | 2 +- framework/i18n/data/uz.php | 2 +- framework/i18n/data/uz_af.php | 2 +- framework/i18n/data/uz_arab.php | 2 +- framework/i18n/data/uz_arab_af.php | 2 +- framework/i18n/data/uz_cyrl.php | 2 +- framework/i18n/data/uz_cyrl_uz.php | 2 +- framework/i18n/data/uz_latn.php | 2 +- framework/i18n/data/uz_latn_uz.php | 2 +- framework/i18n/data/uz_uz.php | 2 +- framework/i18n/data/vai.php | 2 +- framework/i18n/data/vai_latn.php | 2 +- framework/i18n/data/vai_latn_lr.php | 2 +- framework/i18n/data/vai_vaii.php | 2 +- framework/i18n/data/vai_vaii_lr.php | 2 +- framework/i18n/data/ve.php | 2 +- framework/i18n/data/ve_za.php | 2 +- framework/i18n/data/vi.php | 2 +- framework/i18n/data/vi_vn.php | 2 +- framework/i18n/data/vun.php | 2 +- framework/i18n/data/vun_tz.php | 2 +- framework/i18n/data/wae.php | 2 +- framework/i18n/data/wae_ch.php | 2 +- framework/i18n/data/wal.php | 2 +- framework/i18n/data/wal_et.php | 2 +- framework/i18n/data/wo.php | 2 +- framework/i18n/data/wo_latn.php | 2 +- framework/i18n/data/wo_latn_sn.php | 2 +- framework/i18n/data/wo_sn.php | 2 +- framework/i18n/data/xh.php | 2 +- framework/i18n/data/xh_za.php | 2 +- framework/i18n/data/xog.php | 2 +- framework/i18n/data/xog_ug.php | 2 +- framework/i18n/data/yav.php | 2 +- framework/i18n/data/yav_cm.php | 2 +- framework/i18n/data/yo.php | 2 +- framework/i18n/data/yo_ng.php | 2 +- framework/i18n/data/zh.php | 2 +- framework/i18n/data/zh_cn.php | 2 +- framework/i18n/data/zh_hans.php | 2 +- framework/i18n/data/zh_hans_cn.php | 2 +- framework/i18n/data/zh_hans_hk.php | 2 +- framework/i18n/data/zh_hans_mo.php | 2 +- framework/i18n/data/zh_hans_sg.php | 2 +- framework/i18n/data/zh_hant.php | 2 +- framework/i18n/data/zh_hant_hk.php | 2 +- framework/i18n/data/zh_hant_mo.php | 2 +- framework/i18n/data/zh_hant_tw.php | 2 +- framework/i18n/data/zh_hk.php | 2 +- framework/i18n/data/zh_mo.php | 2 +- framework/i18n/data/zh_sg.php | 2 +- framework/i18n/data/zh_tw.php | 2 +- framework/i18n/data/zu.php | 2 +- framework/i18n/data/zu_za.php | 2 +- framework/i18n/gettext/CGettextFile.php | 2 +- framework/i18n/gettext/CGettextMoFile.php | 2 +- framework/i18n/gettext/CGettextPoFile.php | 50 +- framework/logging/CChainedLogFilter.php | 2 +- framework/logging/CDbLogRoute.php | 2 +- framework/logging/CEmailLogRoute.php | 4 +- framework/logging/CFileLogRoute.php | 50 +- framework/logging/CLogFilter.php | 45 +- framework/logging/CLogRoute.php | 2 +- framework/logging/CLogRouter.php | 2 +- framework/logging/CLogger.php | 7 +- framework/logging/CProfileLogRoute.php | 6 +- framework/logging/CWebLogRoute.php | 8 +- framework/messages/ca/yii.php | 270 ++ framework/messages/ca/zii.php | 41 + framework/messages/config.php | 2 +- framework/messages/de/yii.php | 44 +- framework/messages/de/zii.php | 11 +- framework/messages/el/yii.php | 49 +- framework/messages/el/zii.php | 4 +- framework/messages/es/yii.php | 286 +- framework/messages/es/zii.php | 24 +- framework/messages/fa_ir/yii.php | 148 +- framework/messages/fa_ir/zii.php | 1 + framework/messages/fi/yii.php | 29 +- framework/messages/fi/zii.php | 2 +- framework/messages/hu/yii.php | 2 +- framework/messages/hu/zii.php | 4 +- framework/messages/ja/yii.php | 17 +- framework/messages/ja/zii.php | 2 +- framework/messages/kk/yii.php | 23 +- framework/messages/ko_kr/yii.php | 2 +- framework/messages/nl/yii.php | 43 +- framework/messages/nl/zii.php | 5 +- framework/messages/no/yii.php | 2 +- framework/messages/pl/yii.php | 8 +- framework/messages/pt/yii.php | 2 +- framework/messages/ru/yii.php | 43 +- framework/messages/ru/zii.php | 2 +- framework/messages/sk/yii.php | 20 +- framework/messages/sk/zii.php | 4 +- framework/test/CDbFixtureManager.php | 6 +- framework/test/CDbTestCase.php | 5 +- framework/test/CTestCase.php | 4 +- framework/test/CWebTestCase.php | 3 +- framework/utils/CDateTimeParser.php | 19 +- framework/utils/CFileHelper.php | 32 +- framework/utils/CFormatter.php | 37 +- framework/utils/CLocalizedFormatter.php | 131 + framework/utils/CMarkdownParser.php | 2 +- framework/utils/CPasswordHelper.php | 193 + framework/utils/CPropertyValue.php | 2 +- framework/utils/CTimestamp.php | 2 +- framework/utils/CVarDumper.php | 2 +- framework/utils/mimeTypes.php | 2 +- framework/validators/CBooleanValidator.php | 2 +- framework/validators/CCaptchaValidator.php | 6 +- framework/validators/CCompareValidator.php | 6 +- framework/validators/CDateValidator.php | 23 +- .../validators/CDefaultValueValidator.php | 2 +- framework/validators/CEmailValidator.php | 25 +- framework/validators/CExistValidator.php | 26 +- framework/validators/CFileValidator.php | 6 +- framework/validators/CFilterValidator.php | 5 +- framework/validators/CInlineValidator.php | 10 +- framework/validators/CNumberValidator.php | 10 +- framework/validators/CRangeValidator.php | 20 +- .../CRegularExpressionValidator.php | 9 +- framework/validators/CRequiredValidator.php | 17 +- framework/validators/CSafeValidator.php | 2 +- framework/validators/CStringValidator.php | 9 +- framework/validators/CTypeValidator.php | 2 +- framework/validators/CUniqueValidator.php | 25 +- framework/validators/CUnsafeValidator.php | 5 +- framework/validators/CUrlValidator.php | 44 +- framework/validators/CValidator.php | 2 +- framework/vendors/Net_IDNA2/LICENSE.txt | 165 + framework/vendors/Net_IDNA2/Net/IDNA2.php | 3402 +++++++++++++++++ .../vendors/Net_IDNA2/Net/IDNA2/Exception.php | 4 + .../Net/IDNA2/Exception/Nameprep.php | 6 + framework/vendors/README.html | 19 +- .../vendors/console-normalizer/README.md | 86 + .../normalizeconsole.min.js | 1 + .../htmlpurifier/HTMLPurifier.standalone.php | 201 +- .../HTMLPurifier/ConfigSchema/schema.ser | Bin 14690 -> 14880 bytes .../schema/Core.DisableExcludes.txt | 14 + .../schema/HTML.SafeScripting.txt | 10 + .../Filter/ExtractStyleBlocks.php | 1 + .../HTMLPurifier/Lexer/PEARSax3.php | 139 - framework/vendors/idna_convert/LICENCE | 502 --- .../idna_convert/idna_convert.class.php | 1605 -------- framework/views/ca/error.php | 37 + framework/views/ca/error400.php | 33 + framework/views/ca/error403.php | 32 + framework/views/ca/error404.php | 33 + framework/views/ca/error500.php | 35 + framework/views/ca/error503.php | 31 + framework/views/ca/log-firebug.php | 23 + framework/views/ca/log.php | 40 + .../views/ca/profile-callstack-firebug.php | 19 + framework/views/ca/profile-callstack.php | 30 + .../views/ca/profile-summary-firebug.php | 22 + framework/views/ca/profile-summary.php | 41 + framework/views/es/error500.php | 8 +- framework/views/fi/error.php | 35 + framework/views/fi/error400.php | 33 + framework/views/fi/error403.php | 32 + framework/views/fi/error404.php | 33 + framework/views/fi/error500.php | 33 + framework/views/fi/error503.php | 31 + framework/views/fi/exception.php | 240 ++ framework/views/fi/log-firebug.php | 23 + framework/views/fi/log.php | 40 + .../views/fi/profile-callstack-firebug.php | 19 + framework/views/fi/profile-callstack.php | 30 + .../views/fi/profile-summary-firebug.php | 22 + framework/views/fi/profile-summary.php | 41 + framework/views/fr/error.php | 5 +- framework/views/fr/error400.php | 3 +- framework/views/fr/error403.php | 3 +- framework/views/fr/error404.php | 4 +- framework/views/fr/error500.php | 5 +- framework/views/fr/error503.php | 3 +- framework/views/ja/error.php | 18 +- framework/views/ja/error400.php | 22 +- framework/views/ja/error403.php | 20 +- framework/views/ja/error404.php | 22 +- framework/views/ja/error500.php | 20 +- framework/views/ja/error503.php | 18 +- framework/views/ja/exception.php | 249 ++ framework/views/ja/log.php | 2 +- framework/views/ja/profile-callstack.php | 2 +- framework/views/ja/profile-summary.php | 2 +- framework/web/CActiveDataProvider.php | 59 +- framework/web/CArrayDataProvider.php | 11 +- framework/web/CAssetManager.php | 6 +- framework/web/CBaseController.php | 2 +- framework/web/CCacheHttpSession.php | 2 +- framework/web/CClientScript.php | 131 +- framework/web/CController.php | 4 +- framework/web/CDataProviderIterator.php | 4 +- framework/web/CDbHttpSession.php | 42 +- framework/web/CExtController.php | 2 +- framework/web/CFormModel.php | 2 +- framework/web/CHttpCookie.php | 2 +- framework/web/CHttpRequest.php | 229 +- framework/web/CHttpSession.php | 13 +- framework/web/CHttpSessionIterator.php | 4 +- framework/web/COutputEvent.php | 2 +- framework/web/CPagination.php | 2 +- framework/web/CSort.php | 25 +- framework/web/CSqlDataProvider.php | 13 +- framework/web/CTheme.php | 2 +- framework/web/CThemeManager.php | 2 +- framework/web/CUploadedFile.php | 10 +- framework/web/CUrlManager.php | 7 +- framework/web/CWebApplication.php | 4 +- framework/web/CWebModule.php | 2 +- framework/web/CWidgetFactory.php | 2 +- framework/web/actions/CAction.php | 2 +- framework/web/actions/CInlineAction.php | 2 +- framework/web/actions/CViewAction.php | 4 +- framework/web/auth/CAccessControlFilter.php | 16 +- framework/web/auth/CAuthAssignment.php | 2 +- framework/web/auth/CAuthItem.php | 2 +- framework/web/auth/CAuthManager.php | 2 +- framework/web/auth/CBaseUserIdentity.php | 2 +- framework/web/auth/CDbAuthManager.php | 2 +- framework/web/auth/CPhpAuthManager.php | 4 +- framework/web/auth/CUserIdentity.php | 2 +- framework/web/auth/CWebUser.php | 47 +- framework/web/auth/schema-mssql.sql | 2 +- framework/web/auth/schema-mysql.sql | 2 +- framework/web/auth/schema-oci.sql | 2 +- framework/web/auth/schema-pgsql.sql | 2 +- framework/web/auth/schema-sqlite.sql | 2 +- framework/web/filters/CFilter.php | 2 +- framework/web/filters/CFilterChain.php | 2 +- framework/web/filters/CHttpCacheFilter.php | 37 +- framework/web/filters/CInlineFilter.php | 2 +- framework/web/form/CForm.php | 25 +- framework/web/form/CFormButtonElement.php | 2 +- framework/web/form/CFormElement.php | 2 +- framework/web/form/CFormElementCollection.php | 2 +- framework/web/form/CFormInputElement.php | 4 +- framework/web/form/CFormStringElement.php | 2 +- framework/web/helpers/CGoogleApi.php | 2 +- framework/web/helpers/CHtml.php | 358 +- framework/web/helpers/CJSON.php | 2 +- framework/web/helpers/CJavaScript.php | 4 +- framework/web/js/packages.php | 2 +- framework/web/js/source/jquery.ba-bbq.js | 1085 ++++-- framework/web/js/source/jquery.ba-bbq.min.js | 8 +- framework/web/js/source/jquery.maskedinput.js | 540 +-- .../web/js/source/jquery.maskedinput.min.js | 8 +- framework/web/js/source/jquery.rating.js | 122 +- framework/web/js/source/jquery.yii.js | 2 +- .../web/js/source/jquery.yiiactiveform.js | 100 +- framework/web/js/source/jquery.yiitab.js | 2 +- framework/web/js/source/jui/MIT-LICENSE.txt | 25 - .../js/source/jui/css/base/jquery.ui.all.css | 10 - .../js/source/jui/css/base/jquery.ui.base.css | 10 - framework/web/js/source/punycode.js | 14 +- framework/web/js/source/punycode.min.js | 4 +- .../web/renderers/CPradoViewRenderer.php | 2 +- framework/web/renderers/CViewRenderer.php | 2 +- framework/web/services/CWebService.php | 8 +- framework/web/services/CWebServiceAction.php | 2 +- framework/web/services/CWsdlGenerator.php | 384 +- framework/web/widgets/CActiveForm.php | 116 +- framework/web/widgets/CAutoComplete.php | 2 +- framework/web/widgets/CClipWidget.php | 2 +- framework/web/widgets/CContentDecorator.php | 2 +- framework/web/widgets/CFilterWidget.php | 2 +- framework/web/widgets/CFlexWidget.php | 2 +- framework/web/widgets/CHtmlPurifier.php | 69 +- framework/web/widgets/CInputWidget.php | 3 +- framework/web/widgets/CMarkdown.php | 2 +- framework/web/widgets/CMaskedTextField.php | 2 +- framework/web/widgets/CMultiFileUpload.php | 2 +- framework/web/widgets/COutputCache.php | 22 +- framework/web/widgets/COutputProcessor.php | 2 +- framework/web/widgets/CStarRating.php | 2 +- framework/web/widgets/CTabView.php | 9 +- framework/web/widgets/CTextHighlighter.php | 2 +- framework/web/widgets/CTreeView.php | 2 +- framework/web/widgets/CWidget.php | 11 +- framework/web/widgets/captcha/CCaptcha.php | 4 +- .../web/widgets/captcha/CCaptchaAction.php | 22 +- framework/web/widgets/captcha/Duality.ttf | Bin 50560 -> 0 bytes framework/web/widgets/captcha/SpicyRice.md | 11 + framework/web/widgets/captcha/SpicyRice.ttf | Bin 0 -> 67244 bytes framework/web/widgets/pagers/CBasePager.php | 2 +- framework/web/widgets/pagers/CLinkPager.php | 2 +- framework/web/widgets/pagers/CListPager.php | 2 +- framework/web/widgets/pagers/pager.css | 2 +- framework/web/widgets/views/flexWidget.php | 4 +- framework/yii.php | 2 +- framework/yiic | 2 +- framework/yiic.bat | 2 +- framework/yiic.php | 2 +- framework/yiilite.php | 659 +++- framework/yiit.php | 2 +- .../zii/behaviors/CTimestampBehavior.php | 77 +- framework/zii/widgets/CBaseListView.php | 13 +- framework/zii/widgets/CBreadcrumbs.php | 2 +- framework/zii/widgets/CDetailView.php | 9 +- framework/zii/widgets/CListView.php | 12 +- framework/zii/widgets/CMenu.php | 7 +- framework/zii/widgets/CPortlet.php | 7 +- .../assets/gridview/jquery.yiigridview.js | 58 +- .../assets/listview/jquery.yiilistview.js | 32 +- framework/zii/widgets/grid/CButtonColumn.php | 44 +- .../zii/widgets/grid/CCheckBoxColumn.php | 46 +- framework/zii/widgets/grid/CDataColumn.php | 18 +- framework/zii/widgets/grid/CGridColumn.php | 15 +- framework/zii/widgets/grid/CGridView.php | 43 +- framework/zii/widgets/grid/CLinkColumn.php | 30 +- framework/zii/widgets/jui/CJuiAccordion.php | 14 +- .../zii/widgets/jui/CJuiAutoComplete.php | 10 +- framework/zii/widgets/jui/CJuiButton.php | 26 +- framework/zii/widgets/jui/CJuiDatePicker.php | 10 +- framework/zii/widgets/jui/CJuiDialog.php | 10 +- framework/zii/widgets/jui/CJuiDraggable.php | 10 +- framework/zii/widgets/jui/CJuiDroppable.php | 10 +- framework/zii/widgets/jui/CJuiInputWidget.php | 28 +- framework/zii/widgets/jui/CJuiProgressBar.php | 10 +- framework/zii/widgets/jui/CJuiResizable.php | 10 +- framework/zii/widgets/jui/CJuiSelectable.php | 10 +- framework/zii/widgets/jui/CJuiSlider.php | 10 +- framework/zii/widgets/jui/CJuiSliderInput.php | 69 +- framework/zii/widgets/jui/CJuiSortable.php | 10 +- framework/zii/widgets/jui/CJuiTabs.php | 24 +- framework/zii/widgets/jui/CJuiWidget.php | 2 +- 1094 files changed, 13527 insertions(+), 5914 deletions(-) create mode 100644 framework/caching/CRedisCache.php delete mode 100644 framework/cli/views/shell/module/messages/.yii delete mode 100644 framework/cli/views/shell/module/models/.yii delete mode 100644 framework/cli/views/shell/module/views/layouts/.yii delete mode 100644 framework/cli/views/webapp/assets/.yii delete mode 100644 framework/cli/views/webapp/images/.yii delete mode 100644 framework/cli/views/webapp/protected/commands/shell/.yii delete mode 100644 framework/cli/views/webapp/protected/extensions/.yii delete mode 100644 framework/cli/views/webapp/protected/messages/.yii delete mode 100644 framework/cli/views/webapp/protected/migrations/.yii delete mode 100644 framework/cli/views/webapp/protected/runtime/.yii delete mode 100644 framework/cli/views/webapp/protected/tests/fixtures/.yii delete mode 100644 framework/cli/views/webapp/protected/tests/report/.yii delete mode 100644 framework/cli/views/webapp/protected/tests/unit/.yii rename framework/cli/{runtime/.yii => views/webapp/protected/vendor/git-gitkeep} (100%) rename framework/cli/views/{shell/module/components/.yii => webapp/protected/vendor/hg-hgkeep} (100%) delete mode 100644 framework/cli/views/webapp/themes/classic/views/layouts/.yii delete mode 100644 framework/cli/views/webapp/themes/classic/views/site/.yii delete mode 100644 framework/cli/views/webapp/themes/classic/views/system/.yii create mode 100644 framework/db/schema/pgsql/CPgsqlCommandBuilder.php delete mode 100644 framework/gii/assets/js/jquery.tooltip-1.2.6.min.js delete mode 100644 framework/gii/assets/js/tools.tooltip-1.2.5.min.js create mode 100644 framework/gii/assets/js/tooltip.js delete mode 100644 framework/gii/generators/module/templates/default/components/.yii delete mode 100644 framework/gii/generators/module/templates/default/messages/.yii delete mode 100644 framework/gii/generators/module/templates/default/models/.yii delete mode 100644 framework/gii/generators/module/templates/default/views/layouts/.yii create mode 100644 framework/messages/ca/yii.php create mode 100644 framework/messages/ca/zii.php create mode 100644 framework/utils/CLocalizedFormatter.php create mode 100644 framework/utils/CPasswordHelper.php create mode 100644 framework/vendors/Net_IDNA2/LICENSE.txt create mode 100644 framework/vendors/Net_IDNA2/Net/IDNA2.php create mode 100644 framework/vendors/Net_IDNA2/Net/IDNA2/Exception.php create mode 100644 framework/vendors/Net_IDNA2/Net/IDNA2/Exception/Nameprep.php create mode 100644 framework/vendors/console-normalizer/README.md create mode 100644 framework/vendors/console-normalizer/normalizeconsole.min.js create mode 100644 framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/Core.DisableExcludes.txt create mode 100644 framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt delete mode 100644 framework/vendors/htmlpurifier/standalone/HTMLPurifier/Lexer/PEARSax3.php delete mode 100644 framework/vendors/idna_convert/LICENCE delete mode 100644 framework/vendors/idna_convert/idna_convert.class.php create mode 100644 framework/views/ca/error.php create mode 100644 framework/views/ca/error400.php create mode 100644 framework/views/ca/error403.php create mode 100644 framework/views/ca/error404.php create mode 100644 framework/views/ca/error500.php create mode 100644 framework/views/ca/error503.php create mode 100644 framework/views/ca/log-firebug.php create mode 100644 framework/views/ca/log.php create mode 100644 framework/views/ca/profile-callstack-firebug.php create mode 100644 framework/views/ca/profile-callstack.php create mode 100644 framework/views/ca/profile-summary-firebug.php create mode 100644 framework/views/ca/profile-summary.php create mode 100644 framework/views/fi/error.php create mode 100644 framework/views/fi/error400.php create mode 100644 framework/views/fi/error403.php create mode 100644 framework/views/fi/error404.php create mode 100644 framework/views/fi/error500.php create mode 100644 framework/views/fi/error503.php create mode 100644 framework/views/fi/exception.php create mode 100644 framework/views/fi/log-firebug.php create mode 100644 framework/views/fi/log.php create mode 100644 framework/views/fi/profile-callstack-firebug.php create mode 100644 framework/views/fi/profile-callstack.php create mode 100644 framework/views/fi/profile-summary-firebug.php create mode 100644 framework/views/fi/profile-summary.php create mode 100644 framework/views/ja/exception.php delete mode 100644 framework/web/js/source/jui/MIT-LICENSE.txt delete mode 100644 framework/web/js/source/jui/css/base/jquery.ui.all.css delete mode 100644 framework/web/js/source/jui/css/base/jquery.ui.base.css delete mode 100644 framework/web/widgets/captcha/Duality.ttf create mode 100644 framework/web/widgets/captcha/SpicyRice.md create mode 100644 framework/web/widgets/captcha/SpicyRice.ttf diff --git a/framework/CHANGELOG b/framework/CHANGELOG index b6a7b8c1589..fd5e1d7f75c 100644 --- a/framework/CHANGELOG +++ b/framework/CHANGELOG @@ -1,7 +1,416 @@ - Yii Framework Change Log ======================== +Version 1.1.14 August 11, 2013 +------------------------------ +- Bug: There was unnecessary echo in CRUD views generated by Gii (samdark) +- Bug: CJavaScript::encode was formatting floats in a wrong way during encoding (samdark) +- Bug: Fixed minLength and maxLength range check in CCaptchaAction::generateVerifyCode so values are now always stay in bounds (samdark) +- Bug #101: CActiveFinder::buildJoinTree() no longer uses 'false' for 'select' value (klimov-paul) +- Bug #135: Fixed wrong CActiveRecord rows count with having (klimov-paul) +- Bug #139: Fixed Active Record lazy load through relation with condition (klimov-paul) +- Bug #150: Fixed CWidget was not switching between view paths when using themes (antoncpu) +- Bug #159: CUploadedFile::getInstancesByName() has been fixed allowing correct fetching files, which name is a part of other file name (klimov-paul) +- Bug #196: CActiveForm: models list whose errors should be displayed in error summary is now customizable when using AJAX validation (resurtm) +- Bug #662: Fixed incorrect Active Record lazy loading of relation through BELONGS_TO relation (klimov-paul) +- Bug #1464: Fixed transparent background for ImageMagick in CCaptchaAction (manuel-84, cebe) +- Bug #1669: CNumberValidator used to add wrong error messages in case non-numeric values being validated (resurtm) +- Bug #1692: CWebUser::renewCookie() and CWebUser::restoreFromCookie() now make use of the identityCookie options (f10i) +- Bug #1693: Fixed log file will rotate twice when high performance (monque) +- Bug #1724: Allow CClientScript registering scripts and script files with the HTML options (klimov-paul) +- Bug #1732: CWebLogRoute and CProfileLogRoute with enabled $showInFireBug: fixed bug related to JS `console` object in MSIE 8 and 9 (resurtm) +- Bug #1763: CSqlDataProvider was appending another ORDER BY string to an existing ORDER BY statement when using fieldname with dot (szako) +- Bug #1827: Gii wasn't properly handling table name with the schema part for PostgreSQL (resurtm) +- Bug #1895: Fixed erroneous language attributes in french views (located at `framework\views\fr`) (Ragazzo) +- Bug #1909: CGridView::$filterSelector now prevents default action after event has completed by returning false result in event handler function (matih) +- Bug #1911: MigrateCommand does not rely on cached value about migration table existance anymore as this info could be outdated in testing enviroment (cebe) +- Bug #1915: CDataProviderIterator: fixed init in case of disabled pagination (antoncpu) +- Bug #1916: CMssqlSchema::findColumns() issues an "invalid object name" error (resurtm) +- Bug #1924: CLogFilter::$dumper added: this property can be used to get around circular reference issue when using standard `var_export` dumper by changing it to `print_r` (resurtm) +- Bug #1933: fixed using "multiple" parameter with a value of false in CHtml::activeDropDownList, CHtml::ListBox and CHtml::DropDownList (adminnu) +- Bug #1941: yiiactiveform.js form reset now uses CHtml::errorCss instead of a hardcoded value (mdomba) +- Bug #1942: CActiveForm client/ajax validation will now remove error class from server side validation (mdomba) +- Bug #1945: Reference to undefined variable $column in CDbMigration::dropPrimaryKey (paystey) +- Bug #1955: Some validators used to cause warnings or errors in case non-scalar array typed values being checked (resurtm) +- Bug #1957: Add primary key support for MySQL schema (paystey) +- Bug #1984: CDbMigration: fix of undeclared variable usage in debug information in dropPrimaryKey (papulovskiy) +- Bug #1990: CDateFormatter::formatWeekInMonth(): incorrect result for a week which was last in a previous year and first in a next year simultaneously (resurtm) +- Bug #1996: Using yiic help for commands with parameters with array as default value resulted in PHP error with latest PHP versions (dInGd0nG, samdark) +- Bug #1997: Cache key in CGettextMessageSource::loadMessages wasn't specific enough (odevyatkov) +- Bug #2023: CHttpRequest::stripSlashes() now modifies array keys as well (etienneq) +- Bug #2030: Fixed problem with MySQL 4.x: Undefined Index: Comment in CMysqlSchema (cebe) +- Bug #2048: AR now uses alias from CActiveRecord::getTableAlias instead of always using default "t" (s-larionov) +- Bug #2049: CStatElement relation with join option throw exception when key-field present on joined table (Yiivgeny) +- Bug #2078: Fixed problem with "undefined" parameter in query string when using CListView or CGridView with enableHistory (Parpaing) +- Bug #2086: Fixed .hgignore rule for assets folder (GeXu3, Koduc) +- Bug #2087: CLocale: getLocaleDisplayName() was only returning the language display name, not the full locale display name (brandonkelly) +- Bug #2112: Fixed broken yiic shell CRUD command (mbischof) +- Bug #2121: CMssqlSchema::resetSequence() incorrectly resets sequence (resurtm, joewoodhouse) +- Bug #2122: CActiveRecord, lazy load: 'params' from relations used in 'through' option were not applied to the final SQL statement (resurtm) +- Bug #2123: Fixed error in plural rules handling if locale has no plural rules defined (cebe, stepanselyuk) +- Bug #2146: CEmailValidator fix when fsockopen() can output uncatched error 'Connection refused (61)' (armab) +- Bug #2159: Fixed SQL syntax for delete command with join in MySQL (serebrov) +- Bug #2184: CDbHttpSession now supports MS SQL Server BLOB data type (cheuschober, resurtm) +- Bug #2201: Cannot use "having" with bound params in CActiveRecord::count() (ivokund) +- Bug #2216: CDbCommandBuilder::createInCondition() has been updated, allowing to pass array of values with mixed keys for the single type column (klimov-paul) +- Bug #2223: CActiveForm::error does not respect CHtml::$errorMessageCss (ivokund) +- Bug #2239: Fixed CHtml::refresh() method to use proper syntax (mdomba) +- Bug #2241: COciSchema::resetSequence() now works the same way as the same methods for the other RDMBSes. PHPDocs of the CMssqlSchema::resetSequence(), CMysqlSchema::resetSequence(), CPgsqlSchema::resetSequence(), COciSchema::resetSequence() and CSqliteSchema::resetSequence() methods have been adjusted to fit their real functionality (resurtm) +- Bug #2244: MessageCommand has been updated, allowing to merge string with value '0' correctly (klimov-paul) +- Bug #2258: CJuiSliderInput didn't support string typed 'range' option (bookin) +- Bug #2283: Gii Model Generator's tooltips are not working and always invisible (resurtm) +- Bug #2289: CDbCacheDependency with reuseDependentData did not invalidate cache when getting cache across different requests (marcovtwout) +- Bug #2299: CMssqlSchema: findTableNames(), getTables() and getTableNames() methods used to prepend schema prefix to the table names twice (resurtm) +- Bug #2311: Fixed SQlite default value for timestamp CURRENT_TIMESTAMP (zeeke) +- Bug #2321: CGettextPoFile is now able to parse multiline msgid and msgstr declarations (resurtm) +- Bug #2325: Fixed UTF-8 troubles in CDateTimeParser (error in parsing chinese and thai dates) (s-larionov) +- Bug #2336: PostgreSQL: CDbCommandBuilder used `NULL` instead of `DEFAULT` as default value for the primary keys of serial type (resurtm) +- Bug #2368: Reset error CSS for ':input', which includes SELECT elements (blueyed) +- Bug #2398: Fixed 'Undefined variable: results' E_NOTICE at CProfileLogRoute (klimov-paul) +- Bug #2402: Fixed clientValidation incorrectly rendered as HTML attribute, when used in CActiveForm::error() (mdomba) +- Bug #2406: CUrlManager::$urlRuleClass now supports path alias value (as it was described in its PHPDoc before this fix) (resurtm) +- Bug #2423: Fixed CHtml::button() enforces "value" attribute for the image buttons (klimov-paul) +- Bug #2426: CDbCriteria::__wakeup() used to issue an error in case SQL containing fields were arrays and criteria parameters were specified (resurtm) +- Bug #2438: CViewAction now checks if requested view is a string to not fail when array was given (cebe) +- Bug #2449: CSqlDataProvider causes an error when CDbCommand with enabled PDO::FETCH_OBJ mode used as SQL source (resurtm) +- Bug #2454: Fix CMysqlColumnSchema::extractLimit for ENUM values containing comma (blueyed) +- Bug #2491: Prevent SQL exception being thrown when inserting a row into the session table whilst regenerating the session ID (mynameiszanders) +- Bug #2502: Fix match controller in access rule, match uniqueId instead id (slavcodev) +- Bug #2508: Fix CHtml::activeLabel() to resolve attribute input name for tabular input with custom 'for' (klimov-paul) +- Bug #2516: Fixed the bug that some $.fn.yiiGridView methods were not working always if a custom CGridView::template was used (buakos) +- Bug #2524: Fixed incorrect HTTPS detection (resurtm) +- Bug #2551: CWebUser::loginRequired() AJAX response now properly sends 403 (creocoder) +- Bug #2554: Fixed CRangeValidator when allowEmpty is false (samdark, creocoder) +- Bug #2565: CCaptchaAction in ImageMagick mode used to issue an exception in case $backColor or $foreColor have had leading zeros (resurtm) +- Bug #2581: Fixed the bug with empty ajaxVar in jquery.yiilistview.js and jquery.yiigridview.js (seregagl) +- Bug #2602: CUrlValidator and CEmailValidator now works correctly with display_errors = on and validateIDN = true (creocoder) +- Bug #2662: CLocale::getTerritory() used to return null value even for proper input values, bug fix #1622 made in 1.1.13 has been reverted (resurtm) +- Bug #2632: Fixed inability import non-build aliases by config on some case (Yiivgeny) +- Bug #2651: CHttpSession was using hardcoded GC probability/divisor values (marcovtwout, cebe, samdark) +- Enh: Better CFileLogRoute performance (Qiang, samdark) +- Enh: Refactored CHttpRequest::getDelete and CHttpRequest::getPut not to use _restParams directly (samdark) +- Enh #100: CLogFilter::$logVars can now be array of arrays intended for designating particular items of the $GLOBALS (resurtm, tomtomsen) +- Enh #129: Proper support of namespaced models in forms (LastDragon-ru, Ekstazi, pgaultier) +- Enh #169: Allow to set AJAX request type for CListView and CGridView (klimov-paul) +- Enh #289: Gii module could be submodule of an another module (resurtm) +- Enh #315: COciSchema::checkIntegrity() method added: allows to toggle integrity check (resurtm) +- Enh #755: Allow to get currently running command from CConsoleApplication (klimov-paul) +- Enh #1065: CJuiSliderInput now supports ranged slider when using it without model (resurtm) +- Enh #1142: CSecurityManager::computeHMAC() has been made public (resurtm) +- Enh #1353: Added onBeforeCount event to CActiveRecord (jakob-stoeck) +- Enh #1391: CDetailView: callables (including anonymous functions for PHP 5.3+) could be used as value generators of the attributes (resurtm) +- Enh #1447: CSqliteSchema: added enabling/disabling integrity check for sqlite (gleb-sternharz, resurtm) +- Enh #1589: Added HTTP range responses support to CHttpRequest::sendFile (Ragazzo, samdark) +- Enh #1604: Added method CDbCommandBuilder::createMultipleInsertCommand() to support multiple insertion (klimov-paul) +- Enh #1725: Added CFileHelper::removeDirectory() static method (resurtm) +- Enh #1743: Added CActiveForm::searchField() and CHtml::activeSearchField() to create HTML input field of type SEARCH (njasm) +- Enh #1794: Added ability to change widget ID via $htmlOptions['id'] array item in: CTabView, CBaseListView, CListView, CGridView, CDetailView, CMenu, and CPortlet (umrs) +- Enh #1796: Separate count criteria has been added to the CActiveDataProvider, it's useful for the counting queries simplification (resurtm) +- Enh #1818: Created a CLocalizedFormatter application component that allows formatting values according to current locale (cebe) +- Enh #1842: Added support for MySQL BIT(M) data type default values (migelsabre, cebe) +- Enh #1847: Added COutputCache::varyByLanguage to generate separate cache for different languages (Obramko) +- Enh #1863: Added CActiveFinder::getModel, added CActiveRecord::getActiveFinder, CExistValidator::getModel, CUniqueValidator::getModel, CActiveDataProvider::getModel, CSort::getModel (denisarius, samdark) +- Enh #1928: Gii is now able to use table columns' comments as the attribute labels of a new generated model (resurtm, tlikai) +- Enh #1948: Tidy up and improve html5 input support in CHtml and CActiveForm (phpnode) +- Enh #1977: CFormatter::normalizeDateValue() now is protected instead of private to enable child classes to override it (etienneq) +- Enh #2003: Gii now allows namespaced base classes to be defined in generators (etienneq) +- Enh #2038: CFormatter::formatNtext() method can replace newlines with `

` not just with `
` as it was before (resurtm) +- Enh #2053: CPasswordHelper has been refactored, CSecurityManager has been enhanced and is now able to generate cryptographically strong random bytes and strings (resurtm, tom--, ekerazha, samdark) +- Enh #2062: CWsdlGenerator now supports soap indicators (sequence, choice), injecting of custom WSDL string block and generation of human-friendly documentation for complex types. Added unit test. (lubosdz) +- Enh #2090: Allow passing array of columns to CDbSchema::addPrimaryKey() (paystey) +- Enh #2096: CAPTCHA: non-free Duality.ttf font replaced by open/free SpicyRice.ttf (licensed under SIL OFL v1.1) (resurtm) +- Enh #2131: Added Accept header parsing to CHttpRequest to give an array of accepted types in order of preference (Rupert-RR) +- Enh #2135: MessageCommand can now handles Yii::t() messages with files in subfolders (firsyura) +- Enh #2205: CActiveForm::error() now depends on CHtml::$errorContainerTag (malyshev) +- Enh #2213: Added comment with hint on ajax validaton which may lead to duplicate entries in the database to gii form template (elmig, cebe) +- Enh #2217: Support of the empty option for CHtml::radioButtonList() has been introduced (resurtm) +- Enh #2254: CForm::$showErrors property has been added, it controls whether error elements of the form attributes should be rendered (resurtm) +- Enh #2275: Added primary log rotation by copy and truncate to CFileLogRoute (bdstevens) +- Enh #2415: Cancel current ajax request before create a new one in CGridView and CListView (gusnips) +- Enh #2416: Avoid instantiating HTMLPurifier on each CHtmlPurifier::purify() call. Allow to pass array as argument of CHtmlPurifier::purify() (twisted1919) +- Enh #2435: CFileCache entry expiration time could now be embedded into the cache file instead of changing file's modification time to be in future (resurtm) +- Enh #2459: Absolute session timeout in CWebUser (ivokund) +- Enh #2494: Allow to configure CBaseListView emptyText container tag name (ifdattic) +- Enh #2529: Silenced all chmod calls to prevent "chmod() operation not allowed" error on NTFS (samdark) +- Enh #2602: CEmailValidator and CUrlValidator now uses native PHP `idn` extension in case it is available (`idn_to_ascii` and `idn_ to_ utf8` functions) and Net_IDNA2 otherwise (resurtm, creocoder) +- Enh #2642: Support third party autoloaders when importing classes via Yii::import() (phpnode) +- Chg: Upgraded HTMLPurifier to v4.5.0 (samdark) +- Chg #645: CDbConnection now throws CDbException when failed to open DB connection instead of failing with a warning (kidol, eirikhm, samdark, cebe) +- Chg #895: Add second argument $params to client validation function (slavcodev) +- Chg #1891: Changed order of methods in models generated by Gii and yiic, added better description of search method (hijarian, samdark) +- Chg #2069: Upgraded jQuery BBQ Plugin to 1.4pre to fix jQuery compatibility problems (samdark) +- Chg #2183: Vendors: phlymail's Net_IDNA was replaced by PEAR Net_IDNA2 (resurtm, DaSourcerer) +- Chg #2187: Vendors: punycode.js updated from 1.1.1 (June 27, 2012) to 1.2.0 (October 10, 2012) (resurtm) +- Chg #2461: Upgraded jquery star rating to 4.11 (samdark) +- Chg #2531: Upgraded jquery masked input to 1.3.1 (samdark) +- New: Added CRedisCache which uses redis key value store as cache backend (cebe, maxlun86) +- New #575: Yii registering at Packagist, added composer info file (schmunk42) +- New #1785: Added CPasswordHelper (tom--) +- New #2178: Added Catalan Translation (ArnauAregall) +- New #2370: New template placeholders for CHtml::radioButtonList() and CHtml::checkBoxList() (creocoder) +- New #2530: Added 'through' option to CActiveRecord::BELONGS_TO relation (creocoder) + +Version 1.1.13 December 30, 2012 +-------------------------------- +- Bug #93: Criteria modification in CActiveRecord::beforeFind() did not apply when record was loaded in relational context. See UPGRADE instructions for details on behavior change. (cebe) +- Bug #109: formatNumber() now uses number_format() instead of round(), because of round() error in IEEE754 accuracy limitations (SonkoDmitry) +- Bug #110: MSSQL: fixed empty $primaryKey value after saving CActiveRecord model (resurtm) +- Bug #112: MSSQL: database abstraction layer now uses native transaction support of the SQLSRV driver (resurtm) +- Bug #124: Added CMysqlCommandBuilder to handle JOIN directive on update commands correctly (cebe, DaSourcerer) +- Bug #126: Fixed CWebUser::getReturnUrl(), allowing to determine default URL correctly, if CUrlManager::showScriptName is set to false (klimov-paul) +- Bug #138: CMysqlSchema fixed to support MySQL ANSI mode (cebe) +- Bug #140: Fixed validation CJuiButton with type buttonset (adminnu) +- Bug #162: Eventhandler attached twice when behavior is set enabled after attaching it (cebe) +- Bug #218: Fixed problem when using 'union' and 'order/limit/offset' in CDbCommand::buildQuery (nsanden) +- Bug #276: Tweaked CGridView stylesheet to include a hover style for the selected row (acorncom) +- Bug #810: Gii now adds a number to the end of relation name if same named relation already exists instead of not generating relation (n30kill, samdark) +- Bug #835: CApplication::onEndRequest is now called at the script shutdown to make sure log is written on forceful script termination (samdark, cebe) +- Bug #837: Fixed method CDbCriteria::__wakeup(), allowing to keep custom names for params and update all string parts for automatic params (klimov-paul) +- Bug #959: Bug where non-lowercase keys cannot be found in CConsoleApplication::$commandMap fixed (resurtm) +- Bug #962: Fixed handling of negative timestamps in CDateFormatter::format() (johnmendonca) +- Bug #1094: CListView with enabled history used to clear page title in case sorting or paging performed (Opera and Firefox only) (mdomba, resurtm) +- Bug #1095: Added missing retry_interval parameter of addServer function call in CMemCache (Lisio) +- Bug #1181: Fixed can read but not save binary data e.g. BYTEA on PostgreSQL (karmakaze) +- Bug #1212: Added missing .gitignore files to the application generated by WebAppCommand (resurtm) +- Bug #1249: CHttpRequest::sendFile() outputs malformed file content in some specific circumstances (andyhu) +- Bug #1279: CHttpRequest::sendFile() now always sends valid content-header (Ragazzo) +- Bug #1330: SQLite column default value was incorrect for column of type string and DEFAULT NULL (cebe) +- Bug #1344: Fixed URL problem in CGridView and CListView when enableHistory was true and unicode chars where used (mdomba, Redjik) +- Bug #1347: CDbTestCase: table name in fixtures list enclosed into double curly brackets (e.g. 'tasks'=>':{{task}}') didn't worked properly (resurtm) +- Bug #1351: CClientScript::registerMetaTag() now allows to register multiple meta tags with the same set of attributes (klimov-paul) +- Bug #1364: Empty CHtml::$errorCss cause class attribute rendering errors (creocoder) +- Bug #1381: Ignore select given by criteria or scope on stat relation (cebe) +- Bug #1392: HostInfo was appended to CHttpRequest::redirect() location in case of using protocol relative URLs (dInGd0nG, samdark) +- Bug #1406: Fixed the issue that false value returned from CDbCommand could not be cached properly (mdomba) +- Bug #1407: CDbCommandBuilder::createCountCommand() used to bind parameters for unused ORDER clause and unused SELECT part (resurtm) +- Bug #1444: Fixed CGoogleApi::register call to registerScriptFile (mdomba) +- Bug #1478: Fixed CWsdlGenerator error when using namespaced classes (Diego-Rocha) +- Bug #1485: CSort does not quote table alias when using CDbCriteria (undsoft) +- Bug #1492: Fixed jQuery calls when noConflict feature was used and jQuery code was returned by ajax calls (l-nagash) +- Bug #1499: Fixed CVarDumper highlighting "\" (antoncpu) +- Bug #1549: Fixed CFormatter::sizeFormat() to use translations from 'yii' category and corrected english default translation, also improved number formatting (cebe) +- Bug #1552: Fixed potential vulnerability in CJavaScript::encode(): $safe parameter didn't used to be passed to the recursive method calls (resurtm) +- Bug #1575: MessageCommand::extractMessages fails to ignore invalid category definitions (softark) +- Bug #1584: Fixed CGridView and CListView urls when enableHistory was used with "path" urlFormat (mdomba) +- Bug #1621: Fixed CCompareValidator to support {compareAttribute} in $message also on client-side (cebe) +- Bug #1622: CLocale::getTerritory() used to return invalid territory name when locales (language tags) were specified without territory part (e.g. 'de', 'fr') (resurtm) +- Bug #1624: Requirements page now tries all other preferred languages when the most preferred one is missing (ArtVal) +- Bug #1625: CEmailLogRoute does not properly encode UTF8 characters contained in logs, CEmailLogRoute::$utf8 property added (mdomba, resurtm) +- Bug #1628: Active HTTP sessions overwrote the Cache-Control header set by CHttpCacheFilter (DaSourcerer) +- Bug #1646: CLocale::getTerritory() used to return invalid territory name when locales (language tags) were specified with script part (e.g. 'zh-Hans-CN', 'zh-Hant-HK') (resurtm) +- Bug #1652: Fixed incorrect syntax of CDbSchema::renameTable() for SQLite, added CSqliteSchema::renameTable() method (Sarke) +- Bug #1673: CHttpRequest::getPreferredLanguage now works according to RFC2616. Added CHttpRequest::getPreferredLanguages that returns all user accepted languages in order of preference (Rupert-RR, bwoester, cebe, samdark) +- Bug #1676: Fixed listData() grouping when no group was specified (mdomba) +- Bug #1716: Fixed CCodeModel::pluralize() and CConsoleCommand::pluralize() so it doesn't force lowercase the first letter in any words (nsanden) +- Bug #1726: Fixed the error Undefined variable: json in CJSON.php when json_decode function did not exist (heyhoo) +- Bug #1792: Fixed persistent access permissions when two identities were used in a single application run. (jhenriquemc, François Gannaz) +- Bug #1853: CAssetManager::publish() method will throw an exception if $forceCopy and $linkAssets are both true (resurtm, mdomba) +- Bug: Table schema is refreshed on Gii model generation when schemaCachingDuration is used (SonkoDmitry) +- Bug: CDbCommand::setFetchMode wasn't accepting additional arguments needed for PDO::FETCH_CLASS (samdark) +- Bug: CCaptchaAction::validate check wasn't working properly in some cases (samdark, Qiang) +- Enh #84: Log route categories are now accepted in form of array. Added CLogRoute::except and parameter to CLogRoute::getLogs that allows you to exclude specific categories (paystey) +- Enh #104: Added CWebLogRoute::$collapsedInFireBug property to control whether the log should be collapsed by default in Firebug (marcovtwout) +- Enh #117: Added CPhpMessageSource::$extensionPaths to allow extensions, that do not have a base class to use as category prefix, to register message source (rcoelho, cebe) +- Enh #144: baseID in CHtml::checkBoxList and CHtml::radioButtonList can now be customized via htmlOptions (cebe) +- Enh #217: Added CTypeValidator::validateValue() and CTypeValidator::$strict, better check for arrays (samdark) +- Enh #259: CHttpRequest::getRestParams is now public (samdark) +- Enh #291: CFormatter::formatDate and formatDateTime now also accept strings in strtotime() format (francis_tm, cebe) +- Enh #486: CHttpSession::$gCProbability and CDbHttpSession::$gCProbability are floats now. Minimal possible $gCProbability value has been changed to the ≈0.00000005% (1/2147483647), was integer 1% before, default value left unchanged (1%) (resurtm) +- Enh #545: Add CDataProviderIterator to allow iteration over large data sets (phpnode) +- Enh #556: CDbColumnSchema::$comment property has been added. It stores comment for the table column, comment retrieving is working for MySQL, PgSQL and Oracle (resurtm) +- Enh #724: Third argument of CHtml::listData() now receives anonymous function as calculator of the text field value, PHP 5.3+ only (resurtm) +- Enh #846: Added addPrimaryKey() / dropPrimaryKey() commands to CDbMigration (ridget) +- Enh #949: Added COciSchema::resetSequence (jazahn, samdark) +- Enh #990: Added CArrayDataProvider::$caseSensitiveSort property which allows to control whether sorting should be case sensitive (resurtm) +- Enh #999: Changed md5() to crypt() in docs/guide/topics.auth, docs/blog and demos/blog. Added Wiki 425 tutorial on use of crypt() (tom--) +- Enh #1084: CDateTimeParser: MMM pattern for parsing short month names is now locale aware (resurtm) +- Enh #1146: CFileHelper::copyDirectory recursive directory creation (senz) +- Enh #1183: CDbCommand: added andWhere()/orWhere() which appends condition to the WHERE part of the query, in contrary of CDbCommand::where() which replaces it (resurtm) +- Enh #1184: CEmailValidator now supports IDN (Internationalized Domain Names), added CEmailValidator::$validateIDN property (resurtm) +- Enh #1134: CAssetManager filepath creation now can be extended thru generatePath(). Path creation is now recursive in publish(). (senz) +- Enh #1201: CMenu now supports HTML attributes for the links' wrap element specified in $linkLabelWrapper (resurtm) +- Enh #1228: Added ability to MessageCommand to generate translation files for multiple functions (Arne-S, samdark) +- Enh #1238: CJuiDatePicker is now using the native altField option to handle the hidden input when type flat is used (mdomba, christiansalazar) +- Enh #1282: CDateTimeParser: added MMMM pattern for parsing standard month names such as 'January', 'Décembre' or 'März' (resurtm) +- Enh #1286: CUrlValidator now supports IDN (Internationalized Domain Names), added CUrlValidator::$validateIDN property (resurtm) +- Enh #1289: Added support for column comments for MSSQL (CDbColumnSchema::$comment property) (resurtm) +- Enh #1299: Added CSRF token validation for PUT and DELETE (miraage, samdark) +- Enh #1369: Added CCheckBoxColumn::disabled that accepts PHP expression or anonymous function determining if checkbox for the row should be disabled (sucotronic) +- Enh #1386: Second parameter of the CHtml::value() is now able to accept anonymous function which calculates value to be used (Qiang, resurtm) +- Enh #1396: Added 'text/csv' mime-type for the 'csv' file extension in utils/mimeTypes.php (effectively used by e.g. CHttpRequest::sendFile()) (rawtaz) +- Enh #1426: Behaviors are now affecting memory consumption significantly less (slavcodev, creocoder, Qiang, samdark) +- Enh #1443: Added CHttpRequest::getRawBody() that allows reading RAW HTTP request body multiple times (itamar82, resurtm, samdark) +- Enh #1464: CCaptchaAction now supports rendering through ImageMagick, CCaptcha::checkRequirements() changed (resurtm, SonkoDmitry) +- Enh #1500: CSqlDataProvider now supports CDbCommand in constructor (slavcodev) +- Enh #1507: Added support for minOccurs, maxOccurs, nillable to CWsdlGenerator. Changed most of the methods visibility to protected. Added unit tests (lubosdz) +- Enh #1518: Allow to configure CHtml::$closeSingleTags and CHtml::$renderSpecialAttributesValue. Useful for HTML5 code (creocoder) +- Enh #1527: Added $id argument to CClientScript::registerMetaTag that allows you to override existing tags (Alex-Code) +- Enh #1531: CArrayDataProvider is now able to sort cutted array, where sorting column is not available in every entry (Yiivgeny) +- Enh #1535: HTML5 special attributes added to CHtml::renderAttributes() (creocoder) +- Enh #1538: Added CListView::ajaxUpdateError for the possibility to use a custom ajax error handler (mdomba) +- Enh #1567: Added filterSelector property to CGridView (MonkeyMaster) +- Enh #1581: Added 'unselectValue' to CHtml::dropDownList() and CHtml::activeDropDownList() to define default post value if no option is selected in multiple mode (creocoder, mdomba) +- Enh #1596: Added CGridView::rowHtmlOptionsExpression to allow set HTML attributes for the row (Ryadnov) +- Enh #1657: CDbCommandBuilder::createUpdateCounterCommand now can be used with float values (samdark, hyzhakus) +- Enh #1658: CFormatter::formatHtml() is now more flexible and customizable through new CFormatter::$htmlPurifierOptions property (resurtm) +- Enh #2343: Added CRequiredValidator::$trim property which determines to trim attribute value or not (AnatolyRugalev) +- Enh: Fixed the check for ajaxUpdate false value in jquery.yiilistview.js as that never happens (mdomba) +- Enh: Requirements checker: added check for Oracle database (pdo_oci extension) and MSSQL (pdo_dblib, pdo_sqlsrv and pdo_mssql extensions) (resurtm) +- Enh: Added CChainedLogFilter class to allow adding multiple filters to a logroute (cebe) +- Enh: Allow CDataProvider to use custom pagination and sorter (creocoder) +- Enh: Value of the CHtml::activeTextArea() can now be set through $htmlOptions['value'] (resurtm) +- Enh: Allow to customize CHtml::error() container tag (creocoder) +- Enh: CModule::setComponents() now can reconfigure already loaded components (creocoder) +- Enh: CLocale::getWeekDayName() weekday-number argument is now more compatible with date() function, allowing 0 and 7 for sunday (Yiivgeny, cebe) +- Enh: Added minified jQuery BBQ (samdark) +- Chg #1193: Upgraded jQuery to 1.8.3 (samdark) +- Chg #1373: Upgraded jquery star rating to 3.14 (samdark) +- Chg #1548: Upgraded jQueryUI to 1.9.2 (samdark) +- Chg #1563: Updated CTestCase for PHPUnit 3.7.7+ (tanakahisateru, samdark) +- Chg #1746: CDbCriteria::mergeWith() is now more consistent with all other class methods (hyzhakus, samdark) +- Chg: MSSQL unit tests updated and actualized, added SQLSRV driver support (resurtm) +- Chg: Added Oracle unit tests (resurtm) +- Chg: Updated CHttpCacheFilter to use dates as specified by RFC 1123 (bramp) +- Chg: Added punycode.js v1.1.1 (http://mths.be/punycode) and IDNA Converter v0.8.0 (http://phlymail.com/en/downloads/idna-convert.html) to the vendors (third party libraries and utilities) (resurtm) +- New: Ported offline documentation viewer from yiidoc project. Mainly usable for translations but can be used for reading offline as well (samdark) + +Version 1.1.12 August 19, 2012 +------------------------------ +- Bug #190: WSDL return tag was not generated by CWsdlGenerator when Macintosh line endings were used inside service describing docblock (resurtm) +- Bug #1066: CMemCache: expiration time higher than 60*60*24*30 (31536000) seconds led the value to expire right away after saving (resurtm) +- Bug #1072: Fixed the problem with getTableAlias() in defaultScope() (creocoder) +- Bug #1076: CJavaScript::encode() was not compatible with PHP 5.1 (samdark) +- Bug #1077: Fixed the problem with alias in CSort (creocoder) +- Bug #1083: CFileValidator is now unsafe by default. This will prevent setting attribute when no file was uploaded (samdark) +- Bug #1087: Reverted changes to CCookieCollection::add() introduced in 1.1.11 as they were triggering E_STRICT on some old PHP-versions (suralc) +- Bug #1088: Fixed usage of proper CActiveForm id property when it's supplied with htmlOptions (mdomba) +- Bug #1094: CGridView with enabled history used to clear page title in case sorting or paging performed (Opera and Firefox only) (resurtm) +- Bug #1109: Fixed "js:" encoding BC-break in CHtml::ajax() and related methods introduced in 1.1.11 (samdark) +- Bug #1120: Fixed duplicate events processing in CGridView when ENTER was pressed for filtering (mdomba) +- Bug #1192: CHttpCacheFilter failed to comply with RFC 2616, section 10.3.5 (DaSourcerer) +- Bug #1207: Fixed an issue in CHtml::resolveValue() which occurs when handling tabular data input (Qiang) +- Bug #1225: Fixed the bug that $.fn.yiiGridView.getChecked was not working always if a custom CGridView::template was used (mdomba) +- Bug #1243: Fixed the bug that when using CUrlManager::addRules with $append=false rules were added in reverse order (samdark) +- Enh #243: CWebService is now able to deal with the customized WSDL generator classes, was hardcoded to the CWsdlGenerator before, added CWebService::$generatorConfig property (resurtm) +- Enh #636: CManyManyRelation now parses foreign key for the junction table data internally, and provide public interface to access it (klimov-paul) +- Enh #1163: CGridview does not create empty class attributes anymore (cebe) +- Chg #1099: Changed connectionId dropdown to sticky text field in Gii model generator (mdomba) +- Chg #1167: Reverted back the change to CComponent::evaluateExpression() about global function support (Qiang) + +Version 1.1.11 July 29, 2012 +---------------------------- +- Bug #098: No correct identity value being returned when using Active Record and mssql (c-schmitz) +- Bug #114: CUniqueValidator and CExistValidator now respect table alias while creating db query condition (klimov-paul) +- Bug #145: CGettextMoFile now can parse strings with no context (eagleoneraptor) +- Bug #148: Fixed the bug in the blog demo that was not deleting right comment when not on the first page (mdomba) +- Bug #161: CCookieCollection::remove() now accepts an array of cookie options as a second argument to facilitate correct cookie removal (maximcherny) +- Bug #164: CEmailValidator.checkPort now checks the port 25 of listed MX servers (DaSourcerer) +- Bug #178: webapp creation with relative paths like ../ was not working correctly (cebe) +- Bug #193: Changed datetime column type for postgresql from 'time' to 'timestamp' (cebe) +- Bug #238: Fixed the problem that empty row could be selected in CGridView when there was no data (mdomba) +- Bug #295: Sometimes CJSON::decode returns null because native json_encode has bugs and returns null. Workaround to continue decoding when result of json_decode is null (luislobo) +- Bug #381: Fixed the bug that Gii model name input could get misspelled when autocomplete is used (mdomba) +- Bug #417: CAttributeCollections::mergeWith() does not take into account the caseSensitive (dmtrs) +- Bug #433: Fixed the bug that Gii model name input autocomplete was not working sometimes (mdomba) +- Bug #449: CDbHttpSession and CDbLogRoute now use query builder instead of DAO for proper quoting (mdomba, redguy) +- Bug #454: Removed translation on CDbConnection exception as it was creating an endless loop if the application used CDbCache (mdomba) +- Bug #517: Rule parameter sub-patterns are not checked correctly (ranvis) +- Bug #539: Fixed CUrlRule::createUrl() to treat sub-patterns as Unicode as parseUrl() does (ranvis) +- Bug #553: Criteria of related AR finders was affected after performing find with relational scopes (marcovtwout) +- Bug #618: Fixed caching of CWebUser::checkAccess() when it is called first time with and second time without $params (cebe) +- Bug #660: Fixed error when calling CDbCache::getValues (zilles) +- Bug #697: Fixed WSDLGenerator now generating proper namespace for certain complexTypes (BBoom) +- Bug #749: CActiveRecord::refresh() did not work in afterSave() for new records, will now always refresh, when db entry exists (cebe) +- Bug #769: Fixed the bug that $.fn.yiiGridView.getSelection was not working always if a custom CGridView::template was used (mdomba) +- Bug #772: CHttpRequest::getIsSecureConnection() was failing on some conditions (bulletbee, samdark) +- Bug #773: CGridView filters now filter on enter key in Internet Explorer (BBoom) +- Bug #803: Arbitary non-sorting links in CDataColumn's header were not working proper way (resurtm) +- Bug #827: Fixed the problem that CJuiSliderInput was rendering a name attribute for div element (mdomba) +- Bug #842: Active Records insert fails in MSSQL if a column has a default value of (NULL) (c-schmitz) +- Bug #852: Fixed the problem that CActiveForm was not revalidating fields if ajax submit was used (mdomba) +- Bug #859: Fixed CSort::applyOrder() and CSort::getOrderBy() to use custom table aliases (troch, samdark) +- Bug #865: CLogRoute called processLogs() even if log array was empty and caused empty emails and log files (cebe) +- Bug #879: Fixed a possible PHP error caused by CWebUser::restoreFromCookie() in combination with CHttpRequest.enableCookieValidation (kidol) +- Bug #901: Fixed possible encoding problem on exception (mdomba, samdark, cebe) +- Bug #1000: Added params to profiling token in CDbCommand::execute() to be consitent with CDbCommand::queryInternal() (cebe) +- Bug #1045: Building a query with empty array as parameter will not result in a broken sql-string anymore(suralc) +- Bug: Fixed CMenu::isItemActive() to work properly when there is a hash in the item's url (SlKelevro) +- Bug: Added missing return statement to CAuthItem->revoke() (mdomba) +- Bug: CHtml::resolveValue() ignoring of array elements accessor at the beginning of the $attribute argument now works properly (resurtm) +- Enh #120: Added ability to set cookies in an object based style without specifying the cookie-name twice (suralc) +- Enh #136: Added ability to select database connection in Gii model generator (samdark) +- Enh #157: Added ability to use models with objects implementing ArrayAccess as properties in CHtml::resolveValue (samdark) +- Enh #165: Allow CCacheDependency to be reusable across multiple cache calls (phpnode) +- Enh #171: Added support for PUT and DELETE request tunneled through POST via parameter named _method in POST body (musterknabe) +- Enh #179: CLogger now supports filtering profile timings by multiple & wildcard categories (intel352) +- Enh #191: Added ability to customize HTML classes of CLinkPager via its public properties (mashingan) +- Enh #206: Added ability to pass CDbCriteria object as AR relation parameter (samdark) +- Enh #215: Added tokens to CGridView::updateSelectors to allow adding custom selectors instead replacing only (mdomba) +- Enh #220: The URL pointing to the Google API in CGoogleApi is now protocol relative (suralc) +- Enh #237: The tabs of CTabView now support the property 'visible' (DaSourcerer) +- Enh #255: Sort CArrayDataProvider when elements is CActiveDataProvider or other object (rusmaxim) +- Enh #266: Add support for HTML5 url, email, number, range and date fields to CHtml (gregmolnar) +- Enh #267: CDbHttpSession is now able to store binary payload such as the output of the igbinary serializer (DaSourcerer, samdark) +- Enh #282: Added CCheckBoxColumn::headerTemplate to allow custom headers (mdomba) +- Enh #286: Added wildcard token to CDateTimeParser (cebe) +- Enh #294: Added deniedCallback to CAccessControlFilter and CAccessRule to allow forwarding control to a method on denial (luislobo) +- Enh #342: Added ability to pass parameters for RBAC bizRules from CAccessControlFilter configuration (claudejanz, samdark) +- Enh #356: Improved extendability of CDetailView by adding method renderItem() (cebe) +- Enh #369: Added $hashKey to CCache (kidol) +- Enh #414: Added sort parameter to yiic message command that sorts messages by key when merging (ranvis) +- Enh #455: Added support for default value in CConsoleCommand::prompt (eagleoneraptor) +- Enh #551: Added $safe parameter to CJavaScript::encode. If set to true, 'js:' will not be allowed. If you need to pass JavaScript, wrap your code with CJavaScriptExpression instead (samdark) +- Enh #552: Added support for http-level caching via CHttpCacheFilter (DaSourcerer) +- Enh #568: CHtml::getIdByName() will now convert spaces to underscore to get proper ID for HTML elements (mdomba) +- Enh #578: Added extension checks to CMemCache (samdark) +- Enh #581: Added formatSize method in CFormatter to format file sizes into units of different order - KB, MB, etc (brilyuhns, samdark) +- Enh #584: Refactored WebAppCommand to be more customizable, added more PHPDoc (samdark) +- Enh #599: Added case sensitivity check when autoloading classes (qiangxue) +- Enh #601: added the method loginRequired() to the IWebUser interface (mdomba) +- Enh #616: CVarDumper is now correctly highligting integer array keys (vernes, samdark) +- Enh #641: Added support for customizing serialization methods for cache components (DaSourcerer, Qiang) +- Enh #648: Added filterHtmlOptions property to the CGridColumn component (juban) +- Enh #652: Added namespace to yiiGridView events, so they can be easily removed by .off() jQuery method (Bethrezen) +- Enh #673: Changed CClientScript::scripts to be public (mdomba) +- Enh #675: CDateFormat::format() now returns null if the parameter $time is null (mdomba) +- Enh #690: Added sender name and proper headers for UTF8 encoding when sending e-mail in SiteController->actionContact() (mdomba) +- Enh #766: Added 'userId' to $params in CDbAuthManager::checkAccess() and CPhpAuthManager::checkAccess() (cebe) +- Enh #666: Added property $except to CValidator, a list of scenarios that the validator should not be applied to (resurtm) +- Enh #839: CListView::renderItems now resolves view file only once (nizsheanez) +- Enh #938: CFileValidator::sizeToBytes() is now public and available for using in the whole application (resurtm) +- Enh #943: CDateTimeParser is now able to parse short textual representation of month, e.g. Jan, Jun, Aug (resurtm) +- Enh #967: Commands from YII_CONSOLE_COMMANDS environment variable are now always added to yiic console application (schmunk) +- Enh: CFileValidator could validate uploaded file by its MIME-type, added $mimeTypes and $wrongMimeType properties (resurtm) +- Enh: Fixed romanian translation to use the better-supported cedilla characters (tudorilisoi) +- Enh: Added default value to CConsoleCommand::confirm (musterknabe) +- Enh: Allowed returning integer values as application exit code in CConsoleCommand actions (cebe) +- Enh: Added third parameter to CHttpCookie to configure the cookie by array (suralc) +- Enh: Added getIsFlashRequest(), proper handling of Flash/Flex request when using CWebLogRoute with FireBug (resurtm) +- Enh: Added CBreadcrumbs::$activeLinkTemplate and CBreadcrumbs::$inactiveLinkTemplate properties which allows to change each item's template (resurtm) +- Enh: Added full-featured behaviors and events CConsoleCommand::onBeforeAction & CConsoleCommand::onAfterAction (Yiivgeny) +- Enh: Added HTML5 history support on ajax requests on CGridView and CListView using History.js v1.7.2-r2 (https://github.com/balupton/history.js) from Benjamin Arthur Lupton (lightglitch) +- Enh: Changed CldrCommand to use medium dateTimeFormat and updated 18n data using newest(6546) CLDR (tanakahisateru) +- Enh: Added CErrorHandler::getHttpHeader() to send correct HTTP error codes (pgaultier) +- Enh: CGridView, only rows in tbody should have hover effect (mdomba) +- Enh: CClientScript::$defaultScriptFilePosition and CClientScript::$defaultScriptPosition for controlling default $position argument for registerScriptFile and registerScript (resurtm) +- Enh: CHttpCookie now implements __toString (suralc) +- Enh: Ability to set namespace for module controllers using CWebModule::controllerNamespace, documentation about using namespaced controllers and modules (samdark) +- Enh: Added possibility to set the container for CHtml::radioButtonList and CHtml::checkBoxList() (pgaultier) +- Enh: Added zii romanian(ro) translation; edited core messages to include proper romanian characters with diacritic marks (tudorilisoi) +- Enh: Added ILogFilter interface as an alternative to using CLogFilter as base class for implementing log filters (cebe) +- Enh: CAssetManager, added $forceCopy property which globally forces publication of asset files and directories (resurtm) +- Enh: WebAppCommand has ability to generate fresh application with git or hg specific files (resurtm) +- Enh: Gii default templates: added additional metadata (PHPDoc) of the variables passed into views for better IDE autocompletion (resurtm) +- Enh: WebAppCommand generated application: added additional metadata (PHPDoc) of the variables passed into views for better IDE autocompletion (resurtm) +- Enh #1053: CComponent::evaluateExpression will allow using global functions as callbacks (Ekstazi) +- Chg #384: CWebUser::changeIdentity() will now delete old unused session data file (Qiang) +- Chg #440: Upgraded JQuery UI to 1.8.22 (samdark) +- Chg #497: Added log component and preloaded it in default console application config in order to properly log errors (samdark) +- Chg: Upgraded jQuery to 1.7.2 (samdark) +- Chg: More unit tests added for CHtml (resurtm) +- Chg: Upgraded bundled markdown parser to v1.2.5 (DaSourcerer) +- New: Added TranslationsCommand build command aimed to help translation teams (samdark) + Version 1.1.10 February 12, 2012 -------------------------------- - Bug Fixed the bug introduced in 1.1.9 CActiveForm required field was not validated if left empty (mdomba) @@ -181,6 +590,7 @@ Version 1.1.8 June 26, 2011 - Chg #2482: CWebService will not display source file name and error line number in production mode (Qiang) - Chg #2496: Setting CDbConnection::$emulatePrepare to be false will now explicitly set PDO::ATTR_EMULATE_PREPARES to be false (Qiang) - Chg: Changed CHtml::clientChange event binding to support custom event types and avoid conflicts when using AJAX (Sam Dark) +- Chg: Changed all js live() calls with on() as live() is deprecated (mdomba) Version 1.1.7 March 27, 2011 ---------------------------- @@ -1204,7 +1614,7 @@ Version 1.0.2 February 1, 2009 Version 1.0.1 January 4, 2009 ----------------------------- -- Bug #41: missing function CHttpRequest:: getCsrfTokenFromCookie() (Qiang) +- Bug #41: missing function CHttpRequest::getCsrfTokenFromCookie() (Qiang) - Bug #42: Wrong links in crud generated admin view (Qiang) - Bug #45: Many-to-many relation does not work when both foreign tables are the same (Qiang) - Bug #47: Wrong url parsing when CUrlManager is set in path format (Qiang) diff --git a/framework/LICENSE b/framework/LICENSE index 35affe46179..f6f49bd00f8 100644 --- a/framework/LICENSE +++ b/framework/LICENSE @@ -1,7 +1,7 @@ The Yii framework is free software. It is released under the terms of the following BSD License. -Copyright © 2008-2011 by Yii Software LLC (http://www.yiisoft.com) +Copyright (c) 2008-2013 by Yii Software LLC (http://www.yiisoft.com) All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/framework/UPGRADE b/framework/UPGRADE index 79d7dee7e84..dfe19603aa1 100644 --- a/framework/UPGRADE +++ b/framework/UPGRADE @@ -1,6 +1,5 @@ - - Upgrading Instructions for Yii Framework v1.1.10 - =============================================== + Upgrading Instructions for Yii Framework v1.1.14 + ================================================ !!!IMPORTANT!!! @@ -9,21 +8,161 @@ if you want to upgrade from version A to version C and there is version B between A and C, you need to following the instructions for both A and B. -General upgrade intructions ---------------------------- +General upgrade instructions +---------------------------- - Make a backup. - Clean up your 'assets' folder. -- Replace 'framework' dir with the new one or point SVN to a fresh +- Replace 'framework' dir with the new one or point GIT to a fresh release and update. - Check if everything is OK, if not — revert from backup and post issues to Yii issue tracker. +Upgrading from v1.1.13 +---------------------- + +- CActiveRecord::count() now respects group by and having. If your code relied + on ignoring it your application may break and should be updated. + +- Vendors: phlymail's Net_IDNA was replaced by PEAR Net_IDNA2. The latter library is better maintained than the former. + In case your code relies on bundled phlymail's Net_IDNA you should change it a bit. Old way of encoding IDNs: + + require_once(Yii::getPathOfAlias('system.vendors.idna_convert').DIRECTORY_SEPARATOR.'idna_convert.class.php'); + $idnaConvert=new idna_convert(); + $result=$idnaConvert->encode($value); + + New: + + require_once(Yii::getPathOfAlias('system.vendors.Net_IDNA2.Net').DIRECTORY_SEPARATOR.'IDNA2.php'); + $idna=new Net_IDNA2(); + $result=$idna->encode($value); + +- CAPTCHA appearance has been changed. Non-free Duality.ttf font (used by CCaptchaAction) replaced by open/free + SpicyRice.ttf. New font is distributed under SIL Open Font License version 1.1. Do not forget to adjust font path + in case your application relies on Duality.ttf font file. + +- CSecurityManager::computeHMAC() method is now public and third parameter has been added. You must change signature + of this method in the extended child class to fit new circumstances. Otherwise an E_STRICT error will be issued. + +- CClientScript::registerScriptFile() and CClientScript::registerScript() methods signature changed. + Update your subclasses that override registerScriptFile() or registerScript() if any. + +- CActiveRecord::refreshMetaData() now clears meta data for all objects of the particular Active Record class. + Also CActiveRecord::refreshMetaData() will not create new meta data at once - new CActiveRecordMetaData instance + will be created on the first demand. + +- Oracle related note: in case you're using COciSchema::resetSequence() or CDbSchema::resetSequence() methods with + the Oracle database, keep in mind that its behavior has changed to be consistent with the same methods for + the other database management systems. Please refer to its documentation for more details and don't forget + to adjust your code respectively. + +- Signature of the CJuiInputWidget::resolveNameID() method has changed. If you're overriding this method you must + change your code to fit it. This method now accepts two parameters, it means you have to adjust code of the + overlapped descendant method signature as follows: + + protected function resolveNameID($nameProperty='name',$attributeProperty='attribute') + + And ancestor method call to: + + parent::resolveNameID($nameProperty,$attributeProperty); + +- In case you've used your own relation types extended from `CHasOneRelation` or + `CHasManyRelation` make sure you update these to reflect moving `through` property + from both these to `CActiveRelation`. + +- CSecurityManager::generateRandomKey() has been deprecated in favor of CSecurityManager::generateRandomString(). + Try not to use it anymore and avoid CSecurityManager::generateRandomKey() method in your code. + +Upgrading from v1.1.12 +---------------------- +- Both jQuery and jQueryUI were updated. Check [jQuery UI upgrade guide](http://jqueryui.com/upgrade-guide/1.9/) + and [jQuery release notes](http://blog.jquery.com/2012/08/09/jquery-1-8-released/). + +- We completed the behavior of CFormatter::sizeFormat() which has been introduced in Yii 1.1.11. If you are using it with your own translation file + you have to move your translations to the `yii` category in `yii.php` file which is handled by the application component `coreMessages`. + We also fixed the default translation strings to be correct English and apply to choice format, so you have to adjust your translation file keys. + +- Be sure to clean all your existing cache during the upgrade. The cache values from CDbCommand has been + changed to an array to be able to store false values (returned when no records are found). + +- Make sure all your event handlers in behaviors are public methods, as we are not supporting protected methods as event handlers anymore. + +- We fixed the calls to CActiveRecord::beforeFind() for consistency so that beforeFind() now always gets called for every relation + on eager loading even if the main query does not return a result. This has been the case for all CActiveRecord::find*()-methods + already but now also applies for findBySql() and findAllBySql(). + +- Criteria modification in CActiveRecord::beforeFind() did not apply to the query when model was loaded in a relational context. + Since version 1.1.13 changes to query criteria made in beforeFind() now also apply to the query when model is loaded in a relational context. + The main problem here is that you can not use the `t`-alias for your table anymore, you have to change your code to + use the table alias currently in use as this is different in relational context. + You can get that alias by calling `$this->getTableAlias();` in your active record class + or `$this->owner->getTableAlias()` in behavior context. + + Example: + $criteria->condition = 't.myfield = 1'; + You need to change that to: + $alias = $this->owner->getTableAlias(); + $criteria->condition = $alias.'.myfield = 1'; + +- Make sure you are using `CCaptcha::checkRequirements()` method for checking whether CAPTCHA could be rendered successfully in your environment. + `extension_loaded('gd')` expression is not enough and wrong because CAPTCHA could be rendered via ImageMagick with fallback to GD since 1.1.13 + (thus checking code is not simple as it seems). + +- In case you're using MSSQL driver make sure authentication credentials you use have permissions to use + `sys.extended_properties` system view. This is critical for retrieving additional metadata on tables. + +Upgrading from v1.1.11 +---------------------- +- Changes in CCookieCollection::add() (introduced in 1.1.11) were reverted as they were triggering E_STRICT on some old PHP-versions + If your application relies on these newly added changes. You should change your code from + + $cookies->add(new CHttpCookie($name, $value)); + to + $cookies[$name] = new CHttpCookie($name, $value); + + +- CActiveRecord::resetScope() method signature changed. Please update your subclasses that override resetScope() if any. + +Upgrading from v1.1.10 +---------------------- +- API of public method CConsoleCommand::confirm() changed. If you are overriding this method make sure to update your code. + The method now has a 2nd parameter for the default value which will be used if no selection is made, so you have to + adjust the signature to fit + + public function confirm($message,$default=false) + + and the parent call to + + parent::confirm($message,$default); + +- API of protected method CConsoleCommand::afterAction() changed, if you are overriding this method make sure to update your code. + method now has a 3rd parameter for application exit code, so you have to adjust the signature to fit + + protected function afterAction($action,$params,$exitCode=0) + + and the parent call to + + parent::afterAction($action,$params,$exitCode); + +- CDateFormat::format() now will return null if the parameter $time is null. Previously it would return 1/1/1970. + +- If you are using CJavaScript::encode in your application with parameter coming + from user input, set second argument to true: + + CJavaScript::encode($userInput, true); + + It will disable prefixing parameters with "js:". If you need to pass JavaScript + expression it's now preferrable to wrap these with CJavaScriptExpression: + + CJavaScript::encode(new CJavaScriptExpression('alert("Yii!");'), true); + + Note that second "safe" parameter doesn't affect CJavaScriptExpression in any way. + Upgrading from v1.1.9 --------------------- - Previously xSendFile() was returning false if the file was not found. -This has been removed to allow relative file paths. If you are relying on this check, -you will need to do it manually before calling xSendFile(). + This has been removed to allow relative file paths. If you are relying on this check, + you will need to do it manually before calling xSendFile(). Upgrading from v1.1.8 --------------------- @@ -31,26 +170,26 @@ Upgrading from v1.1.8 Yii::createComponent, new CPagination directly and CHtml::activeId respectively. - In CErrorHandler::handleException() the checking for ajax call has been removed -as it was preventing to customize the display of the exception during an ajax call. + as it was preventing to customize the display of the exception during an ajax call. - Previously in case of validation error the CSS "error" class was not added to the row container at all when -checkBoxList or radioButtonList where used. This is fixed now and proper "error" CSS class is added to the row -container but in case of validation error, all labels from the list are shown in red because of the CSS rule. + checkBoxList or radioButtonList where used. This is fixed now and proper "error" CSS class is added to the row + container but in case of validation error, all labels from the list are shown in red because of the CSS rule. -To fix this and display only the attribute label in red: + To fix this and display only the attribute label in red: -in /css/form.css the line: + in /css/form.css the line: div.form div.error label -should be changed to + should be changed to div.form div.error label:first-child - If you've used "through" ActiveRecord option in your relation definitions it's good to update code as shown below. -Old style of defining this option still works but is now deprecated. + Old style of defining this option still works but is now deprecated. -Change + Change ~~~ class Group extends CActiveRecord @@ -65,7 +204,7 @@ class Group extends CActiveRecord } ~~~ -to + to ~~~ class Group extends CActiveRecord @@ -84,12 +223,12 @@ class Group extends CActiveRecord Upgrading from v1.1.7 --------------------- - CDbAuthManager will now quote columns and tables referenced in its SQL code. -If your auth tables were created in a case-insensitive fashion (e.g. on PostgreSQL) -while your DBMS is case-sensitive, this change may cause DB query errors. -To fix this issue, you will have to rename the table names and columns, or re-create -the auth tables by following the SQL code given in framework/web/auth/*.sql. + If your auth tables were created in a case-insensitive fashion (e.g. on PostgreSQL) + while your DBMS is case-sensitive, this change may cause DB query errors. + To fix this issue, you will have to rename the table names and columns, or re-create + the auth tables by following the SQL code given in framework/web/auth/*.sql. - jQuery was upgraded to 1.6.1. Check your client side code and if you have issues consider -downgrading to 1.5.1 or 1.4.4. + downgrading to 1.5.1 or 1.4.4. Upgrading from v1.1.6 @@ -137,14 +276,14 @@ Upgrading from v1.1.3 Upgrading from v1.1.2 --------------------- - When using the skin feature, you now need to explicitly configure -the 'enableSkin' property of 'widgetFactory' application component -to be true. Also, if you have configured the 'widgets' property, you -should rename it to be 'skinnableWidgets'. These changes are due to -the introduction of the global widget customization feature. -Please see the guide (the "Theming" section) for more details. + the 'enableSkin' property of 'widgetFactory' application component + to be true. Also, if you have configured the 'widgets' property, you + should rename it to be 'skinnableWidgets'. These changes are due to + the introduction of the global widget customization feature. + Please see the guide (the "Theming" section) for more details. - CAutoComplete is now deprecated and will be removed in Yii 1.2. Consider -using CJuiAutoComplete. + using CJuiAutoComplete. - Now it's not possible to reuse CActiveFinder. So if you have code like this: @@ -160,7 +299,7 @@ using CJuiAutoComplete. $posts2 = Post::model()->with('comments'); - The 'condition' declared in the scopes of the related AR classes will now -be put in the 'ON' clause of the JOIN statement when performing relational AR queries. + be put in the 'ON' clause of the JOIN statement when performing relational AR queries. Upgrading from v1.1.1 @@ -169,35 +308,35 @@ Upgrading from v1.1.1 Upgrading from v1.1.0 --------------------- - CHtml::beginForm() will automatically generate hidden fields to represent -the parameters in the query string when the form uses GET method. -To avoid submitting duplicated query parameters, you may use createUrl() -to explicitly specify the action of the form. You may also need to remove -the hidden fields that you previously render for the same purpose. + the parameters in the query string when the form uses GET method. + To avoid submitting duplicated query parameters, you may use createUrl() + to explicitly specify the action of the form. You may also need to remove + the hidden fields that you previously render for the same purpose. - The code generated by yiic tool is changed. If you are using yiic tool -to generate new CRUD code on a previously generated skeleton, you are recommended -to run "yiic webapp" again to re-generate the skeleton. Make sure you backup -your work before you do this. + to generate new CRUD code on a previously generated skeleton, you are recommended + to run "yiic webapp" again to re-generate the skeleton. Make sure you backup + your work before you do this. - CMenu now renders the 'active' CSS class for the 'li' tag instead of the -hyperlink tag. You should adjust your CSS code accordingly if you use CMenu -in your application. + hyperlink tag. You should adjust your CSS code accordingly if you use CMenu + in your application. - CUrlManager::parsePathInfo() is changed to be non-static. If you override -this method or your existing code calls this method directly (neither is common), -you need to change your code accordingly. + this method or your existing code calls this method directly (neither is common), + you need to change your code accordingly. - CController::forward() will exit the application by default now. If you want -to keep the old behavior, you may pass false as the second parameter. + to keep the old behavior, you may pass false as the second parameter. - The jQuery copy included in the framework has been upgraded to version 1.4.2. -This may cause some incompatibility problems to your existing jQuery code or plugins. -If you want to keep using version 1.3.2, you may do so by configuring -CClientScript::scriptMap property. + This may cause some incompatibility problems to your existing jQuery code or plugins. + If you want to keep using version 1.3.2, you may do so by configuring + CClientScript::scriptMap property. - The default theme for JQuery UI widgets was changed from 'smoothness' to 'base'. -If you are using 'smoothness', you will need to manually download this theme from -jqueryui.com and configure the 'theme' property of the JQuery UI widgets accordingly. + If you are using 'smoothness', you will need to manually download this theme from + jqueryui.com and configure the 'theme' property of the JQuery UI widgets accordingly. Upgrading from v1.1rc @@ -212,18 +351,18 @@ Upgrading from v1.1b Upgrading from v1.1a -------------------- - CSort::attributes is changed. Now the array keys refer to attribute names -and array values refer to virtual attribute definitions. Please read the -API documentation for this property to learn more details. This change will -affect your code only when you explicitly specify this property. + and array values refer to virtual attribute definitions. Please read the + API documentation for this property to learn more details. This change will + affect your code only when you explicitly specify this property. Upgrading from v1.0.x --------------------- - Application and module parameter names are changed to be case-sensitive. -In 1.0.x, they are case-insensitive. + In 1.0.x, they are case-insensitive. - For tabular input, using Field[$i] is not valid anymore. Attribute names -should look like [$i]Field in order to support array-typed fields -(e.g. [$i]Field[$index]). + should look like [$i]Field in order to support array-typed fields + (e.g. [$i]Field[$index]). - Please read the Guide for further details on how to upgrade from v1.0.x to v1.1. @@ -242,34 +381,34 @@ Upgrading from v1.0.9 Upgrading from v1.0.8 --------------------- - ActiveRecord lazy loading is changed for optimization purpose. Previously, -when lazy loading occurs, the related table will be joined with the primary -table. Now, the related table will be queried without joining the primary table. -As a result, if you are using lazy loading and the corresponding relation -declaration includes reference to the primary table, the query will fail. -To fix this problem, please specify the lazy loading query options with the -actual primary table column values. + when lazy loading occurs, the related table will be joined with the primary + table. Now, the related table will be queried without joining the primary table. + As a result, if you are using lazy loading and the corresponding relation + declaration includes reference to the primary table, the query will fail. + To fix this problem, please specify the lazy loading query options with the + actual primary table column values. Upgrading from v1.0.7 --------------------- - A directory imported using Yii::import() will have precedence over -any existing include paths. For example, if we import 'application.models.*', -then the corresponding directory will be searched before any other -existing include paths. This also means, a directory imported later will -have precedence over directories imported earlier. Previously, this order -was reversed. This change may affect you if you have several classes with -the same name and they are imported via different directories. You will need -to adjust the import order of these directories to make sure your existing -applications are not broken due to this change. + any existing include paths. For example, if we import 'application.models.*', + then the corresponding directory will be searched before any other + existing include paths. This also means, a directory imported later will + have precedence over directories imported earlier. Previously, this order + was reversed. This change may affect you if you have several classes with + the same name and they are imported via different directories. You will need + to adjust the import order of these directories to make sure your existing + applications are not broken due to this change. Upgrading from v1.0.6 --------------------- - Default named scope will no longer be applied to INSERT, UPDATE and -DELETE queries. It is only applied to SELECT queries. You should be aware -of this change if you override CActiveRecord::defaultScope() in your code. + DELETE queries. It is only applied to SELECT queries. You should be aware + of this change if you override CActiveRecord::defaultScope() in your code. - The signature of CWebUser::logout() is changed. If you override this method, -you will need to modify your method declaration accordingly. + you will need to modify your method declaration accordingly. Upgrading from v1.0.5 @@ -279,10 +418,10 @@ Upgrading from v1.0.5 Upgrading from v1.0.4 --------------------- - CWebUser::checkAccess() takes an additional parameter to allow caching -the access check results. If you override this method, you will need to -modify your method declaration accordingly. Because the new parameter will -enable caching the access check results by default, please double check -your code containing this method call to make sure the behavior is as expected. + the access check results. If you override this method, you will need to + modify your method declaration accordingly. Because the new parameter will + enable caching the access check results by default, please double check + your code containing this method call to make sure the behavior is as expected. - CDateParser has been renamed to CDateTimeParser diff --git a/framework/YiiBase.php b/framework/YiiBase.php index 29c3f8d07d0..e4486dc01d8 100644 --- a/framework/YiiBase.php +++ b/framework/YiiBase.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ * @package system * @since 1.0 @@ -80,7 +80,7 @@ class YiiBase */ public static function getVersion() { - return '1.1.13'; + return '1.1.14'; } /** @@ -287,8 +287,14 @@ public static function import($alias,$forceInclude=false) return $alias; } else - throw new CException(Yii::t('yii','Alias "{alias}" is invalid. Make sure it points to an existing directory.', - array('{alias}'=>$namespace))); + { + // try to autoload the class with an autoloader + if (class_exists($alias,true)) + return self::$_imports[$alias]=$alias; + else + throw new CException(Yii::t('yii','Alias "{alias}" is invalid. Make sure it points to an existing directory or file.', + array('{alias}'=>$namespace))); + } } if(($pos=strrpos($alias,'.'))===false) // a simple class name @@ -612,6 +618,9 @@ public static function t($category,$message,$params=array(),$source=null,$langua * any other existing autoloaders. * @param callback $callback a valid PHP callback (function name or array($className,$methodName)). * @param boolean $append whether to append the new autoloader after the default Yii autoloader. + * Be careful using this option as it will disable {@link enableIncludePath autoloading via include path} + * when set to true. After this the Yii autoloader can not rely on loading classes via simple include anymore + * and you have to {@link import} all classes explicitly. */ public static function registerAutoloader($callback, $append=false) { @@ -656,6 +665,7 @@ public static function registerAutoloader($callback, $append=false) 'CEAcceleratorCache' => '/caching/CEAcceleratorCache.php', 'CFileCache' => '/caching/CFileCache.php', 'CMemCache' => '/caching/CMemCache.php', + 'CRedisCache' => '/caching/CRedisCache.php', 'CWinCache' => '/caching/CWinCache.php', 'CXCache' => '/caching/CXCache.php', 'CZendDataCache' => '/caching/CZendDataCache.php', @@ -714,6 +724,7 @@ public static function registerAutoloader($callback, $append=false) 'COciSchema' => '/db/schema/oci/COciSchema.php', 'COciTableSchema' => '/db/schema/oci/COciTableSchema.php', 'CPgsqlColumnSchema' => '/db/schema/pgsql/CPgsqlColumnSchema.php', + 'CPgsqlCommandBuilder' => '/db/schema/pgsql/CPgsqlCommandBuilder.php', 'CPgsqlSchema' => '/db/schema/pgsql/CPgsqlSchema.php', 'CPgsqlTableSchema' => '/db/schema/pgsql/CPgsqlTableSchema.php', 'CSqliteColumnSchema' => '/db/schema/sqlite/CSqliteColumnSchema.php', @@ -743,7 +754,9 @@ public static function registerAutoloader($callback, $append=false) 'CDateTimeParser' => '/utils/CDateTimeParser.php', 'CFileHelper' => '/utils/CFileHelper.php', 'CFormatter' => '/utils/CFormatter.php', + 'CLocalizedFormatter' => '/utils/CLocalizedFormatter.php', 'CMarkdownParser' => '/utils/CMarkdownParser.php', + 'CPasswordHelper' => '/utils/CPasswordHelper.php', 'CPropertyValue' => '/utils/CPropertyValue.php', 'CTimestamp' => '/utils/CTimestamp.php', 'CVarDumper' => '/utils/CVarDumper.php', diff --git a/framework/base/CApplication.php b/framework/base/CApplication.php index 6cd472fc07e..02194787107 100644 --- a/framework/base/CApplication.php +++ b/framework/base/CApplication.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -140,7 +140,18 @@ public function __construct($config=null) $this->setBasePath('protected'); Yii::setPathOfAlias('application',$this->getBasePath()); Yii::setPathOfAlias('webroot',dirname($_SERVER['SCRIPT_FILENAME'])); - Yii::setPathOfAlias('ext',$this->getBasePath().DIRECTORY_SEPARATOR.'extensions'); + if(isset($config['extensionPath'])) + { + $this->setExtensionPath($config['extensionPath']); + unset($config['extensionPath']); + } + else + Yii::setPathOfAlias('ext',$this->getBasePath().DIRECTORY_SEPARATOR.'extensions'); + if(isset($config['aliases'])) + { + $this->setAliases($config['aliases']); + unset($config['aliases']); + } $this->preinit(); @@ -292,6 +303,7 @@ public function getExtensionPath() /** * Sets the root directory that holds all third-party extensions. * @param string $path the directory that contains all third-party extensions. + * @throws CException if the directory does not exist */ public function setExtensionPath($path) { diff --git a/framework/base/CApplicationComponent.php b/framework/base/CApplicationComponent.php index 0c311e04997..48a42eccd30 100644 --- a/framework/base/CApplicationComponent.php +++ b/framework/base/CApplicationComponent.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -47,7 +47,7 @@ public function init() } /** - * Checks if this application component bas been initialized. + * Checks if this application component has been initialized. * @return boolean whether this application component has been initialized (ie, {@link init()} is invoked). */ public function getIsInitialized() diff --git a/framework/base/CBehavior.php b/framework/base/CBehavior.php index 321b7d920e4..9d9751fbe37 100644 --- a/framework/base/CBehavior.php +++ b/framework/base/CBehavior.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/base/CComponent.php b/framework/base/CComponent.php index 758543c6abd..103be3538a5 100644 --- a/framework/base/CComponent.php +++ b/framework/base/CComponent.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -248,6 +248,7 @@ public function __unset($name) * to implement the behavior feature. * @param string $name the method name * @param array $parameters method parameters + * @throws CException if current class and its behaviors do not have a method or closure with the given name * @return mixed the method return value */ public function __call($name,$parameters) @@ -318,6 +319,8 @@ public function detachBehaviors() * @param string $name the behavior's name. It should uniquely identify this behavior. * @param mixed $behavior the behavior configuration. This is passed as the first * parameter to {@link YiiBase::createComponent} to create the behavior object. + * You can also pass an already created behavior instance (the new behavior will replace an already created + * behavior with the same name, if it exists). * @return IBehavior the behavior object */ public function attachBehavior($name,$behavior) @@ -593,6 +596,9 @@ public function raiseEvent($name,$event) * that can be directly accessed in the expression. See {@link http://us.php.net/manual/en/function.extract.php PHP extract} * for more details. In the expression, the component object can be accessed using $this. * + * A PHP expression can be any PHP code that has a value. To learn more about what an expression is, + * please refer to the {@link http://www.php.net/manual/en/language.expressions.php php manual}. + * * @param mixed $_expression_ a PHP expression or PHP callback to be evaluated. * @param array $_data_ additional parameters to be passed to the above expression/callback. * @return mixed the expression result diff --git a/framework/base/CErrorEvent.php b/framework/base/CErrorEvent.php index 1419467c2fd..6dd53c7ff5e 100644 --- a/framework/base/CErrorEvent.php +++ b/framework/base/CErrorEvent.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/base/CErrorHandler.php b/framework/base/CErrorHandler.php index 6c3333d8c04..3ece1b2c1b1 100644 --- a/framework/base/CErrorHandler.php +++ b/framework/base/CErrorHandler.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/base/CException.php b/framework/base/CException.php index a2b4ca228b6..037ae4a4584 100644 --- a/framework/base/CException.php +++ b/framework/base/CException.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/base/CExceptionEvent.php b/framework/base/CExceptionEvent.php index 8b8ee4c1a79..413702cf655 100644 --- a/framework/base/CExceptionEvent.php +++ b/framework/base/CExceptionEvent.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/base/CHttpException.php b/framework/base/CHttpException.php index a22ba969987..40f79cf8080 100644 --- a/framework/base/CHttpException.php +++ b/framework/base/CHttpException.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/base/CModel.php b/framework/base/CModel.php index 4fc8021dc8e..4eb25897350 100644 --- a/framework/base/CModel.php +++ b/framework/base/CModel.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -275,6 +275,7 @@ public function getValidators($attribute=null) /** * Creates validator objects based on the specification in {@link rules}. * This method is mainly used internally. + * @throws CException if current class has an invalid validation rule * @return CList validators built based on {@link rules()}. */ public function createValidators() diff --git a/framework/base/CModelBehavior.php b/framework/base/CModelBehavior.php index bf9a71bb081..c4a55fe815d 100644 --- a/framework/base/CModelBehavior.php +++ b/framework/base/CModelBehavior.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/base/CModelEvent.php b/framework/base/CModelEvent.php index 6debbd2c639..0aa16d29313 100644 --- a/framework/base/CModelEvent.php +++ b/framework/base/CModelEvent.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/base/CModule.php b/framework/base/CModule.php index ffa1a0327f7..30b3fbe2f09 100644 --- a/framework/base/CModule.php +++ b/framework/base/CModule.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/base/CSecurityManager.php b/framework/base/CSecurityManager.php index f341ca07142..e4c4640257e 100644 --- a/framework/base/CSecurityManager.php +++ b/framework/base/CSecurityManager.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -80,16 +80,18 @@ public function init() } /** - * @return string a randomly generated private key + * @return string a randomly generated private key. + * @deprecated in favor of {@link generateRandomString()} since 1.1.14. Never use this method. */ protected function generateRandomKey() { - return sprintf('%08x%08x%08x%08x',mt_rand(),mt_rand(),mt_rand(),mt_rand()); + return $this->generateRandomString(32); } /** * @return string the private key used to generate HMAC. * If the key is not explicitly set, a random one is generated and returned. + * @throws CException in case random string cannot be generated. */ public function getValidationKey() { @@ -101,7 +103,10 @@ public function getValidationKey() $this->setValidationKey($key); else { - $key=$this->generateRandomKey(); + if(($key=$this->generateRandomString(32,true))===false) + if(($key=$this->generateRandomString(32,false))===false) + throw new CException(Yii::t('yii', + 'CSecurityManager::generateRandomString() cannot generate random string in the current environment.')); $this->setValidationKey($key); Yii::app()->setGlobalState(self::STATE_VALIDATION_KEY,$key); } @@ -124,6 +129,7 @@ public function setValidationKey($value) /** * @return string the private key used to encrypt/decrypt data. * If the key is not explicitly set, a random one is generated and returned. + * @throws CException in case random string cannot be generated. */ public function getEncryptionKey() { @@ -135,7 +141,10 @@ public function getEncryptionKey() $this->setEncryptionKey($key); else { - $key=$this->generateRandomKey(); + if(($key=$this->generateRandomString(32,true))===false) + if(($key=$this->generateRandomString(32,false))===false) + throw new CException(Yii::t('yii', + 'CSecurityManager::generateRandomString() cannot generate random string in the current environment.')); $this->setEncryptionKey($key); Yii::app()->setGlobalState(self::STATE_ENCRYPTION_KEY,$key); } @@ -158,7 +167,8 @@ public function setEncryptionKey($value) /** * This method has been deprecated since version 1.1.3. * Please use {@link hashAlgorithm} instead. - * @return string + * @return string - + * @deprecated */ public function getValidation() { @@ -169,6 +179,7 @@ public function getValidation() * This method has been deprecated since version 1.1.3. * Please use {@link hashAlgorithm} instead. * @param string $value - + * @deprecated */ public function setValidation($value) { @@ -217,6 +228,7 @@ public function decrypt($data,$key=null) /** * Opens the mcrypt module with the configuration specified in {@link cryptAlgorithm}. + * @throws CException if failed to initialize the mcrypt module or PHP mcrypt extension * @return resource the mycrypt module handle. * @since 1.1.3 */ @@ -271,37 +283,189 @@ public function validateData($data,$key=null) } /** - * Computes the HMAC for the data with {@link getValidationKey ValidationKey}. - * @param string $data data to be generated HMAC - * @param string $key the private key to be used for generating HMAC. Defaults to null, meaning using {@link validationKey}. - * @return string the HMAC for the data + * Computes the HMAC for the data with {@link getValidationKey validationKey}. This method has been made public + * since 1.1.14. + * @param string $data data to be generated HMAC. + * @param string|null $key the private key to be used for generating HMAC. Defaults to null, meaning using + * {@link validationKey} value. + * @param string|null $hashAlgorithm the name of the hashing algorithm to be used. + * See {@link http://php.net/manual/en/function.hash-algos.php hash-algos} for the list of possible + * hash algorithms. Note that if you are using PHP 5.1.1 or below, you can only use 'sha1' or 'md5'. + * Defaults to null, meaning using {@link hashAlgorithm} value. + * @return string the HMAC for the data. + * @throws CException on unsupported hash algorithm given. */ - protected function computeHMAC($data,$key=null) + public function computeHMAC($data,$key=null,$hashAlgorithm=null) { if($key===null) $key=$this->getValidationKey(); + if($hashAlgorithm===null) + $hashAlgorithm=$this->hashAlgorithm; if(function_exists('hash_hmac')) - return hash_hmac($this->hashAlgorithm, $data, $key); + return hash_hmac($hashAlgorithm,$data,$key); - if(!strcasecmp($this->hashAlgorithm,'sha1')) + if(0===strcasecmp($hashAlgorithm,'sha1')) { $pack='H40'; $func='sha1'; } - else + elseif(0===strcasecmp($hashAlgorithm,'md5')) { $pack='H32'; $func='md5'; } - if($this->strlen($key) > 64) - $key=pack($pack, $func($key)); - if($this->strlen($key) < 64) - $key=str_pad($key, 64, chr(0)); + else + { + throw new CException(Yii::t('yii','Only SHA1 and MD5 hashing algorithms are supported when using PHP 5.1.1 or below.')); + } + if($this->strlen($key)>64) + $key=pack($pack,$func($key)); + if($this->strlen($key)<64) + $key=str_pad($key,64,chr(0)); $key=$this->substr($key,0,64); return $func((str_repeat(chr(0x5C), 64) ^ $key) . pack($pack, $func((str_repeat(chr(0x36), 64) ^ $key) . $data))); } + /** + * Generate a random ASCII string. Generates only [0-9a-zA-z_~] characters which are all + * transparent in raw URL encoding. + * @param integer $length length of the generated string in characters. + * @param boolean $cryptographicallyStrong set this to require cryptographically strong randomness. + * @return string|boolean random string or false in case it cannot be generated. + * @since 1.1.14 + */ + public function generateRandomString($length,$cryptographicallyStrong=true) + { + if(($randomBytes=$this->generateRandomBytes($length+2,$cryptographicallyStrong))!==false) + return strtr($this->substr(base64_encode($randomBytes),0,$length),array('+'=>'_','/'=>'~')); + return false; + } + + /** + * Generates a string of random bytes. + * @param integer $length number of random bytes to be generated. + * @param boolean $cryptographicallyStrong whether to fail if a cryptographically strong + * result cannot be generated. The method attempts to read from a cryptographically strong + * pseudorandom number generator (CS-PRNG), see + * {@link https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator#Requirements Wikipedia}. + * However, in some runtime environments, PHP has no access to a CS-PRNG, in which case + * the method returns false if $cryptographicallyStrong is true. When $cryptographicallyStrong is false, + * the method always returns a pseudorandom result but may fall back to using {@link generatePseudoRandomBlock}. + * This method does not guarantee that entropy, from sources external to the CS-PRNG, was mixed into + * the CS-PRNG state between each successive call. The caller can therefore expect non-blocking + * behavior, unlike, for example, reading from /dev/random on Linux, see + * {@link http://eprint.iacr.org/2006/086.pdf Gutterman et al 2006}. + * @return boolean|string generated random binary string or false on failure. + * @since 1.1.14 + */ + public function generateRandomBytes($length,$cryptographicallyStrong=true) + { + $bytes=''; + if(function_exists('openssl_random_pseudo_bytes')) + { + $bytes=openssl_random_pseudo_bytes($length,$strong); + if($this->strlen($bytes)>=$length && ($strong || !$cryptographicallyStrong)) + return $this->substr($bytes,0,$length); + } + + if(function_exists('mcrypt_create_iv') && + ($bytes=mcrypt_create_iv($length, MCRYPT_DEV_URANDOM))!==false && + $this->strlen($bytes)>=$length) + { + return $this->substr($bytes,0,$length); + } + + if(($file=@fopen('/dev/urandom','rb'))!==false && + ($bytes=@fread($file,$length))!==false && + (fclose($file) || true) && + $this->strlen($bytes)>=$length) + { + return $this->substr($bytes,0,$length); + } + + $i=0; + while($this->strlen($bytes)<$length && + ($byte=$this->generateSessionRandomBlock())!==false && + ++$i<3) + { + $bytes.=$byte; + } + if($this->strlen($bytes)>=$length) + return $this->substr($bytes,0,$length); + + if ($cryptographicallyStrong) + return false; + + while($this->strlen($bytes)<$length) + $bytes.=$this->generatePseudoRandomBlock(); + return $this->substr($bytes,0,$length); + } + + /** + * Generate a pseudo random block of data using several sources. On some systems this may be a bit + * better than PHP's {@link mt_rand} built-in function, which is not really random. + * @return string of 64 pseudo random bytes. + * @since 1.1.14 + */ + public function generatePseudoRandomBlock() + { + $bytes=''; + + if (function_exists('openssl_random_pseudo_bytes') + && ($bytes=openssl_random_pseudo_bytes(512))!==false + && $this->strlen($bytes)>=512) + { + return $this->substr($bytes,0,512); + } + + for($i=0;$i<32;++$i) + $bytes.=pack('S',mt_rand(0,0xffff)); + + // On UNIX and UNIX-like operating systems the numerical values in `ps`, `uptime` and `iostat` + // ought to be fairly unpredictable. Gather the non-zero digits from those. + foreach(array('ps','uptime','iostat') as $command) { + @exec($command,$commandResult,$retVal); + if(is_array($commandResult) && !empty($commandResult) && $retVal==0) + $bytes.=preg_replace('/[^1-9]/','',implode('',$commandResult)); + } + + // Gather the current time's microsecond part. Note: this is only a source of entropy on + // the first call! If multiple calls are made, the entropy is only as much as the + // randomness in the time between calls. + $bytes.=$this->substr(microtime(),2,6); + + // Concatenate everything gathered, mix it with sha512. hash() is part of PHP core and + // enabled by default but it can be disabled at compile time but we ignore that possibility here. + return hash('sha512',$bytes,true); + } + + /** + * Get random bytes from the system entropy source via PHP session manager. + * @return boolean|string 20-byte random binary string or false on error. + * @since 1.1.14 + */ + public function generateSessionRandomBlock() + { + ini_set('session.entropy_length',20); + if(ini_get('session.entropy_length')!=20) + return false; + + // These calls are (supposed to be, according to PHP manual) safe even if + // there is already an active session for the calling script. + @session_start(); + @session_regenerate_id(); + + $bytes=session_id(); + if(!$bytes) + return false; + + // $bytes has 20 bytes of entropy but the session manager converts the binary + // random bytes into something readable. We have to convert that back. + // SHA-1 should do it without losing entropy. + return sha1($bytes,true); + } + /** * Returns the length of the given string. * If available uses the multibyte string function mb_strlen. diff --git a/framework/base/CStatePersister.php b/framework/base/CStatePersister.php index 6fcc26b6454..b2987229277 100644 --- a/framework/base/CStatePersister.php +++ b/framework/base/CStatePersister.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/base/interfaces.php b/framework/base/interfaces.php index 358ea5ab18c..d879d07ff5e 100644 --- a/framework/base/interfaces.php +++ b/framework/base/interfaces.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/caching/CApcCache.php b/framework/caching/CApcCache.php index bee46e2c709..ffc3235ebf0 100644 --- a/framework/caching/CApcCache.php +++ b/framework/caching/CApcCache.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -39,7 +39,7 @@ public function init() * Retrieves a value from cache with a specified key. * This is the implementation of the method declared in the parent class. * @param string $key a unique key identifying the cached value - * @return string the value stored in cache, false if the value is not in the cache or expired. + * @return string|boolean the value stored in cache, false if the value is not in the cache or expired. */ protected function getValue($key) { diff --git a/framework/caching/CCache.php b/framework/caching/CCache.php index f92986f3cfd..88e4886c422 100644 --- a/framework/caching/CCache.php +++ b/framework/caching/CCache.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -238,7 +238,7 @@ public function flush() * in {@link get()} already. So only the implementation of data retrieval * is needed. * @param string $key a unique key identifying the cached value - * @return string the value stored in cache, false if the value is not in the cache or expired. + * @return string|boolean the value stored in cache, false if the value is not in the cache or expired. * @throws CException if this method is not overridden by child classes */ protected function getValue($key) diff --git a/framework/caching/CDbCache.php b/framework/caching/CDbCache.php index bea6fb6cc06..0d6b28cda8b 100644 --- a/framework/caching/CDbCache.php +++ b/framework/caching/CDbCache.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -176,7 +176,7 @@ public function setDbConnection($value) * Retrieves a value from cache with a specified key. * This is the implementation of the method declared in the parent class. * @param string $key a unique key identifying the cached value - * @return string the value stored in cache, false if the value is not in the cache or expired. + * @return string|boolean the value stored in cache, false if the value is not in the cache or expired. */ protected function getValue($key) { diff --git a/framework/caching/CDummyCache.php b/framework/caching/CDummyCache.php index d8fb922f900..27417d49e07 100644 --- a/framework/caching/CDummyCache.php +++ b/framework/caching/CDummyCache.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/caching/CEAcceleratorCache.php b/framework/caching/CEAcceleratorCache.php index ca79223c950..e04756b1c31 100644 --- a/framework/caching/CEAcceleratorCache.php +++ b/framework/caching/CEAcceleratorCache.php @@ -4,7 +4,7 @@ * * @author Steffen Dietz * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -40,7 +40,7 @@ public function init() * Retrieves a value from cache with a specified key. * This is the implementation of the method declared in the parent class. * @param string $key a unique key identifying the cached value - * @return string the value stored in cache, false if the value is not in the cache or expired. + * @return string|boolean the value stored in cache, false if the value is not in the cache or expired. */ protected function getValue($key) { diff --git a/framework/caching/CFileCache.php b/framework/caching/CFileCache.php index f7deffdf387..f8ed7896632 100644 --- a/framework/caching/CFileCache.php +++ b/framework/caching/CFileCache.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -41,6 +41,15 @@ class CFileCache extends CCache * The value of this property should not exceed 16 (less than 3 is recommended). */ public $directoryLevel=0; + /** + * @var boolean whether cache entry expiration time should be embedded into a physical file. + * Defaults to false meaning that the file modification time will be used to store expire value. + * True value means that first ten bytes of the file would be reserved and used to store expiration time. + * On some systems PHP is not allowed to change file modification time to be in future even with 777 + * permissions, so this property could be useful in this case. + * @since 1.1.14 + */ + public $embedExpiry=false; private $_gcProbability=100; private $_gced=false; @@ -98,13 +107,13 @@ protected function flushValues() * Retrieves a value from cache with a specified key. * This is the implementation of the method declared in the parent class. * @param string $key a unique key identifying the cached value - * @return string the value stored in cache, false if the value is not in the cache or expired. + * @return string|boolean the value stored in cache, false if the value is not in the cache or expired. */ protected function getValue($key) { $cacheFile=$this->getCacheFile($key); - if(($time=@filemtime($cacheFile))>time()) - return @file_get_contents($cacheFile); + if(($time=$this->filemtime($cacheFile))>time()) + return @file_get_contents($cacheFile,false,null,$this->embedExpiry ? 10 : -1); elseif($time>0) @unlink($cacheFile); return false; @@ -134,10 +143,10 @@ protected function setValue($key,$value,$expire) $cacheFile=$this->getCacheFile($key); if($this->directoryLevel>0) @mkdir(dirname($cacheFile),0777,true); - if(@file_put_contents($cacheFile,$value,LOCK_EX)!==false) + if(@file_put_contents($cacheFile,$this->embedExpiry ? $expire.$value : $value,LOCK_EX)!==false) { @chmod($cacheFile,0777); - return @touch($cacheFile,$expire); + return $this->embedExpiry ? true : @touch($cacheFile,$expire); } else return false; @@ -155,7 +164,7 @@ protected function setValue($key,$value,$expire) protected function addValue($key,$value,$expire) { $cacheFile=$this->getCacheFile($key); - if(@filemtime($cacheFile)>time()) + if($this->filemtime($cacheFile)>time()) return false; return $this->setValue($key,$value,$expire); } @@ -212,9 +221,22 @@ public function gc($expiredOnly=true,$path=null) $fullPath=$path.DIRECTORY_SEPARATOR.$file; if(is_dir($fullPath)) $this->gc($expiredOnly,$fullPath); - elseif($expiredOnly && @filemtime($fullPath)filemtime($fullPath)embedExpiry) + return (int)@file_get_contents($path,false,null,0,10); + else + return @filemtime($path); + } } diff --git a/framework/caching/CMemCache.php b/framework/caching/CMemCache.php index b8f0ccad224..34e05de4039 100644 --- a/framework/caching/CMemCache.php +++ b/framework/caching/CMemCache.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -142,7 +142,7 @@ public function setServers($config) * Retrieves a value from cache with a specified key. * This is the implementation of the method declared in the parent class. * @param string $key a unique key identifying the cached value - * @return string the value stored in cache, false if the value is not in the cache or expired. + * @return string|boolean the value stored in cache, false if the value is not in the cache or expired. */ protected function getValue($key) { diff --git a/framework/caching/CRedisCache.php b/framework/caching/CRedisCache.php new file mode 100644 index 00000000000..844d850bdfe --- /dev/null +++ b/framework/caching/CRedisCache.php @@ -0,0 +1,257 @@ + + * @link http://www.yiiframework.com/ + * @copyright 2008-2013 Yii Software LLC + * @license http://www.yiiframework.com/license/ + */ + +/** + * CRedisCache implements a cache application component based on {@link http://redis.io/ redis}. + * + * CRedisCache needs to be configured with {@link hostname}, {@link port} and {@link database} of the server + * to connect to. By default CRedisCache assumes there is a redis server running on localhost at + * port 6379 and uses the database number 0. + * + * CRedisCache also supports {@link http://redis.io/commands/auth the AUTH command} of redis. + * When the server needs authentication, you can set the {@link password} property to + * authenticate with the server after connect. + * + * See {@link CCache} manual for common cache operations that are supported by CRedisCache. + * + * To use CRedisCache as the cache application component, configure the application as follows, + *
+ * array(
+ *     'components'=>array(
+ *         'cache'=>array(
+ *             'class'=>'CRedisCache',
+ *             'hostname'=>'localhost',
+ *             'port'=>6379,
+ *             'database'=>0,
+ *         ),
+ *     ),
+ * )
+ * 
+ * + * The minimum required redis version is 2.0.0. + * + * @author Carsten Brandt + * @package system.caching + * @since 1.1.14 + */ +class CRedisCache extends CCache +{ + /** + * @var string hostname to use for connecting to the redis server. Defaults to 'localhost'. + */ + public $hostname='localhost'; + /** + * @var int the port to use for connecting to the redis server. Default port is 6379. + */ + public $port=6379; + /** + * @var string the password to use to authenticate with the redis server. If not set, no AUTH command will be sent. + */ + public $password; + /** + * @var int the redis database to use. This is an integer value starting from 0. Defaults to 0. + */ + public $database=0; + /** + * @var float timeout to use for connection to redis. If not set the timeout set in php.ini will be used: ini_get("default_socket_timeout") + */ + public $timeout=null; + /** + * @var resource redis socket connection + */ + private $_socket; + + /** + * Establishes a connection to the redis server. + * It does nothing if the connection has already been established. + * @throws CException if connecting fails + */ + protected function connect() + { + $this->_socket=@stream_socket_client( + $this->hostname.':'.$this->port, + $errorNumber, + $errorDescription, + $this->timeout ? $this->timeout : ini_get("default_socket_timeout") + ); + if ($this->_socket) + { + if($this->password!==null) + $this->executeCommand('AUTH',array($this->password)); + $this->executeCommand('SELECT',array($this->database)); + } + else + throw new CException('Failed to connect to redis: '.$errorDescription,(int)$errorNumber); + } + + /** + * Executes a redis command. + * For a list of available commands and their parameters see {@link http://redis.io/commands}. + * + * @param string $name the name of the command + * @param array $params list of parameters for the command + * @return array|bool|null|string Dependend on the executed command this method + * will return different data types: + *
    + *
  • true for commands that return "status reply".
  • + *
  • string for commands that return "integer reply" + * as the value is in the range of a signed 64 bit integer.
  • + *
  • string or null for commands that return "bulk reply".
  • + *
  • array for commands that return "Multi-bulk replies".
  • + *
+ * See {@link http://redis.io/topics/protocol redis protocol description} + * for details on the mentioned reply types. + * @trows CException for commands that return {@link http://redis.io/topics/protocol#error-reply error reply}. + */ + public function executeCommand($name,$params=array()) + { + if($this->_socket===null) + $this->connect(); + + array_unshift($params,$name); + $command='*'.count($params)."\r\n"; + foreach($params as $arg) + $command.='$'.strlen($arg)."\r\n".$arg."\r\n"; + + fwrite($this->_socket,$command); + + return $this->parseResponse(implode(' ',$params)); + } + + /** + * Reads the result from socket and parses it + * @return array|bool|null|string + * @throws CException socket or data problems + */ + private function parseResponse() + { + if(($line=fgets($this->_socket))===false) + throw new CException('Failed reading data from redis connection socket.'); + $type=$line[0]; + $line=substr($line,1,-2); + switch($type) + { + case '+': // Status reply + return true; + case '-': // Error reply + throw new CException('Redis error: '.$line); + case ':': // Integer reply + // no cast to int as it is in the range of a signed 64 bit integer + return $line; + case '$': // Bulk replies + if($line=='-1') + return null; + $length=$line+2; + $data=''; + while($length>0) + { + if(($block=fread($this->_socket,$length))===false) + throw new CException('Failed reading data from redis connection socket.'); + $data.=$block; + $length-=(function_exists('mb_strlen') ? mb_strlen($block,'8bit') : strlen($block)); + } + return substr($data,0,-2); + case '*': // Multi-bulk replies + $count=(int)$line; + $data=array(); + for($i=0;$i<$count;$i++) + $data[]=$this->parseResponse(); + return $data; + default: + throw new CException('Unable to parse data received from redis.'); + } + } + + /** + * Retrieves a value from cache with a specified key. + * This is the implementation of the method declared in the parent class. + * @param string $key a unique key identifying the cached value + * @return string|boolean the value stored in cache, false if the value is not in the cache or expired. + */ + protected function getValue($key) + { + return $this->executeCommand('GET',array($key)); + } + + /** + * Retrieves multiple values from cache with the specified keys. + * @param array $keys a list of keys identifying the cached values + * @return array a list of cached values indexed by the keys + */ + protected function getValues($keys) + { + $response=$this->executeCommand('MGET',$keys); + $result=array(); + $i=0; + foreach($keys as $key) + $result[$key]=$response[$i++]; + return $result; + } + + /** + * Stores a value identified by a key in cache. + * This is the implementation of the method declared in the parent class. + * + * @param string $key the key identifying the value to be cached + * @param string $value the value to be cached + * @param integer $expire the number of seconds in which the cached value will expire. 0 means never expire. + * @return boolean true if the value is successfully stored into cache, false otherwise + */ + protected function setValue($key,$value,$expire) + { + if ($expire==0) + return (bool)$this->executeCommand('SET',array($key,$value)); + return (bool)$this->executeCommand('SETEX',array($key,$expire,$value)); + } + + /** + * Stores a value identified by a key into cache if the cache does not contain this key. + * This is the implementation of the method declared in the parent class. + * + * @param string $key the key identifying the value to be cached + * @param string $value the value to be cached + * @param integer $expire the number of seconds in which the cached value will expire. 0 means never expire. + * @return boolean true if the value is successfully stored into cache, false otherwise + */ + protected function addValue($key,$value,$expire) + { + if ($expire == 0) + return (bool)$this->executeCommand('SETNX',array($key,$value)); + + if($this->executeCommand('SETNX',array($key,$value))) + { + $this->executeCommand('EXPIRE',array($key,$expire)); + return true; + } + else + return false; + } + + /** + * Deletes a value with the specified key from cache + * This is the implementation of the method declared in the parent class. + * @param string $key the key of the value to be deleted + * @return boolean if no error happens during deletion + */ + protected function deleteValue($key) + { + return (bool)$this->executeCommand('DEL',array($key)); + } + + /** + * Deletes all values from cache. + * This is the implementation of the method declared in the parent class. + * @return boolean whether the flush operation was successful. + */ + protected function flushValues() + { + return $this->executeCommand('FLUSHDB'); + } +} diff --git a/framework/caching/CWinCache.php b/framework/caching/CWinCache.php index e6bb72dd128..b94735708de 100644 --- a/framework/caching/CWinCache.php +++ b/framework/caching/CWinCache.php @@ -4,7 +4,7 @@ * * @author Alexander Makarov * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -39,7 +39,7 @@ public function init() * Retrieves a value from cache with a specified key. * This is the implementation of the method declared in the parent class. * @param string $key a unique key identifying the cached value - * @return string the value stored in cache, false if the value is not in the cache or expired. + * @return string|boolean the value stored in cache, false if the value is not in the cache or expired. */ protected function getValue($key) { diff --git a/framework/caching/CXCache.php b/framework/caching/CXCache.php index fd367fc316a..cf67c9220d2 100644 --- a/framework/caching/CXCache.php +++ b/framework/caching/CXCache.php @@ -4,7 +4,7 @@ * * @author Wei Zhuo * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -38,7 +38,7 @@ public function init() * Retrieves a value from cache with a specified key. * This is the implementation of the method declared in the parent class. * @param string $key a unique key identifying the cached value - * @return string the value stored in cache, false if the value is not in the cache or expired. + * @return string|boolean the value stored in cache, false if the value is not in the cache or expired. */ protected function getValue($key) { diff --git a/framework/caching/CZendDataCache.php b/framework/caching/CZendDataCache.php index 8b7211ab81a..075a546f93e 100644 --- a/framework/caching/CZendDataCache.php +++ b/framework/caching/CZendDataCache.php @@ -4,7 +4,7 @@ * * @author Steffen Dietz * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -38,7 +38,7 @@ public function init() * Retrieves a value from cache with a specified key. * This is the implementation of the method declared in the parent class. * @param string $key a unique key identifying the cached value - * @return string the value stored in cache, false if the value is not in the cache or expired. + * @return string|boolean the value stored in cache, false if the value is not in the cache or expired. */ protected function getValue($key) { diff --git a/framework/caching/dependencies/CCacheDependency.php b/framework/caching/dependencies/CCacheDependency.php index 06b49f0b2fd..108e0215825 100644 --- a/framework/caching/dependencies/CCacheDependency.php +++ b/framework/caching/dependencies/CCacheDependency.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -53,7 +53,7 @@ public function evaluateDependency() if ($this->reuseDependentData) { $hash=$this->getHash(); - if (!isset(self::$_reusableData[$hash]['dependentData'])) + if(!isset(self::$_reusableData[$hash]['dependentData'])) self::$_reusableData[$hash]['dependentData']=$this->generateDependentData(); $this->_data=self::$_reusableData[$hash]['dependentData']; } @@ -69,13 +69,9 @@ public function getHasChanged() if ($this->reuseDependentData) { $hash=$this->getHash(); - if (!isset(self::$_reusableData[$hash]['hasChanged'])) - { - if (!isset(self::$_reusableData[$hash]['dependentData'])) - self::$_reusableData[$hash]['dependentData']=$this->generateDependentData(); - self::$_reusableData[$hash]['hasChanged']=self::$_reusableData[$hash]['dependentData']!=$this->_data; - } - return self::$_reusableData[$hash]['hasChanged']; + if(!isset(self::$_reusableData[$hash]['dependentData'])) + self::$_reusableData[$hash]['dependentData']=$this->generateDependentData(); + return self::$_reusableData[$hash]['dependentData']!=$this->_data; } else return $this->generateDependentData()!=$this->_data; @@ -90,6 +86,15 @@ public function getDependentData() return $this->_data; } + /** + * Resets cached data for reusable dependencies. + * @since 1.1.14 + */ + public static function resetReusableData() + { + self::$_reusableData=array(); + } + /** * Generates the data needed to determine if dependency has been changed. * Derived classes should override this method to generate actual dependent data. diff --git a/framework/caching/dependencies/CChainedCacheDependency.php b/framework/caching/dependencies/CChainedCacheDependency.php index a85b22bf57a..2b92ce9b6ae 100644 --- a/framework/caching/dependencies/CChainedCacheDependency.php +++ b/framework/caching/dependencies/CChainedCacheDependency.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -52,7 +52,7 @@ public function getDependencies() /** * @param array $values list of dependency objects or configurations to be added to this chain. - * If a depedency is specified as a configuration, it must be an array that can be recognized + * If a dependency is specified as a configuration, it must be an array that can be recognized * by {@link YiiBase::createComponent}. */ public function setDependencies($values) diff --git a/framework/caching/dependencies/CDbCacheDependency.php b/framework/caching/dependencies/CDbCacheDependency.php index fd94ccf0c4d..3021e311201 100644 --- a/framework/caching/dependencies/CDbCacheDependency.php +++ b/framework/caching/dependencies/CDbCacheDependency.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -62,6 +62,7 @@ public function __sleep() /** * Generates the data needed to determine if dependency has been changed. * This method returns the value of the global state. + * @throws CException if {@link sql} is empty * @return mixed the data needed to determine if dependency has been changed. */ protected function generateDependentData() diff --git a/framework/caching/dependencies/CDirectoryCacheDependency.php b/framework/caching/dependencies/CDirectoryCacheDependency.php index 40035234d08..da054a6ade8 100644 --- a/framework/caching/dependencies/CDirectoryCacheDependency.php +++ b/framework/caching/dependencies/CDirectoryCacheDependency.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -60,6 +60,7 @@ public function __construct($directory=null) /** * Generates the data needed to determine if dependency has been changed. * This method returns the modification timestamps for files under the directory. + * @throws CException if {@link directory} is empty * @return mixed the data needed to determine if dependency has been changed. */ protected function generateDependentData() @@ -75,6 +76,7 @@ protected function generateDependentData() * This method may go recursively into subdirectories if {@link recursiveLevel} is not 0. * @param string $directory the directory name * @param integer $level level of the recursion + * @throws CException if given directory is not valid * @return array list of file modification time indexed by the file path */ protected function generateTimestamps($directory,$level=0) diff --git a/framework/caching/dependencies/CExpressionDependency.php b/framework/caching/dependencies/CExpressionDependency.php index 8a464f6ecd4..bbe3b591f35 100644 --- a/framework/caching/dependencies/CExpressionDependency.php +++ b/framework/caching/dependencies/CExpressionDependency.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -25,7 +25,12 @@ class CExpressionDependency extends CCacheDependency /** * @var string the PHP expression whose result is used to determine the dependency. * The expression can also be a valid serializable PHP callback. - * The callback will be passed with a parameter which is the dependency object itself. + * It will be passed with a parameter which is the dependency object itself. + * + * The PHP expression will be evaluated using {@link evaluateExpression}. + * + * A PHP expression can be any PHP code that has a value. To learn more about what an expression is, + * please refer to the {@link http://www.php.net/manual/en/language.expressions.php php manual}. */ public $expression; diff --git a/framework/caching/dependencies/CFileCacheDependency.php b/framework/caching/dependencies/CFileCacheDependency.php index e55b69facbf..96a9194021c 100644 --- a/framework/caching/dependencies/CFileCacheDependency.php +++ b/framework/caching/dependencies/CFileCacheDependency.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -40,6 +40,7 @@ public function __construct($fileName=null) /** * Generates the data needed to determine if dependency has been changed. * This method returns the file's last modification time. + * @throws CException if {@link fileName} is empty * @return mixed the data needed to determine if dependency has been changed. */ protected function generateDependentData() diff --git a/framework/caching/dependencies/CGlobalStateCacheDependency.php b/framework/caching/dependencies/CGlobalStateCacheDependency.php index e5b5448bcda..bea5d0d3178 100644 --- a/framework/caching/dependencies/CGlobalStateCacheDependency.php +++ b/framework/caching/dependencies/CGlobalStateCacheDependency.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -41,6 +41,7 @@ public function __construct($name=null) /** * Generates the data needed to determine if dependency has been changed. * This method returns the value of the global state. + * @throws CException if {@link stateName} is empty * @return mixed the data needed to determine if dependency has been changed. */ protected function generateDependentData() diff --git a/framework/cli/commands/MessageCommand.php b/framework/cli/commands/MessageCommand.php index afee9a9c854..d4d7be61db2 100644 --- a/framework/cli/commands/MessageCommand.php +++ b/framework/cli/commands/MessageCommand.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -67,7 +67,7 @@ public function getHelp() /** * Execute the action. - * @param array command line parameters specific for this command + * @param array $args command line parameters specific for this command */ public function run($args) { @@ -76,7 +76,7 @@ public function run($args) if(!is_file($args[0])) $this->usageError("the configuration file {$args[0]} does not exist."); - $config=require_once($args[0]); + $config=require($args[0]); $translator='Yii::t'; extract($config); @@ -132,7 +132,7 @@ protected function extractMessages($fileName,$translator) foreach ($translator as $currentTranslator) { - $n=preg_match_all('/\b'.$currentTranslator.'\s*\(\s*(\'[\w.]*?(?0) $merged[$message]=$translated[$message]; else $untranslated[]=$message; diff --git a/framework/cli/commands/MigrateCommand.php b/framework/cli/commands/MigrateCommand.php index 4d661cf2760..4da990b95a1 100644 --- a/framework/cli/commands/MigrateCommand.php +++ b/framework/cli/commands/MigrateCommand.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -449,7 +449,7 @@ protected function getDbConnection() protected function getMigrationHistory($limit) { $db=$this->getDbConnection(); - if($db->schema->getTable($this->migrationTable)===null) + if($db->schema->getTable($this->migrationTable,true)===null) { $this->createMigrationHistoryTable(); } diff --git a/framework/cli/commands/ShellCommand.php b/framework/cli/commands/ShellCommand.php index db103a605f8..3aed3f10575 100644 --- a/framework/cli/commands/ShellCommand.php +++ b/framework/cli/commands/ShellCommand.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/cli/commands/WebAppCommand.php b/framework/cli/commands/WebAppCommand.php index f661dfb6c97..4ac475d5cbc 100644 --- a/framework/cli/commands/WebAppCommand.php +++ b/framework/cli/commands/WebAppCommand.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/cli/commands/shell/ControllerCommand.php b/framework/cli/commands/shell/ControllerCommand.php index 4cc263af703..70ceac29124 100644 --- a/framework/cli/commands/shell/ControllerCommand.php +++ b/framework/cli/commands/shell/ControllerCommand.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -74,7 +74,7 @@ public function getHelp() /** * Execute the action. - * @param array command line parameters specific for this command + * @param array $args command line parameters specific for this command * @return integer|null non zero application exit code for help or null on success */ public function run($args) diff --git a/framework/cli/commands/shell/CrudCommand.php b/framework/cli/commands/shell/CrudCommand.php index 8ef7574b332..421cc496110 100644 --- a/framework/cli/commands/shell/CrudCommand.php +++ b/framework/cli/commands/shell/CrudCommand.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -81,7 +81,7 @@ public function getHelp() /** * Execute the action. - * @param array command line parameters specific for this command + * @param array $args command line parameters specific for this command * @return integer|null non zero application exit code for help or null on success */ public function run($args) diff --git a/framework/cli/commands/shell/FormCommand.php b/framework/cli/commands/shell/FormCommand.php index 9b16df88267..1a3792b6783 100644 --- a/framework/cli/commands/shell/FormCommand.php +++ b/framework/cli/commands/shell/FormCommand.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -58,7 +58,7 @@ class file (e.g. 'application.models.ContactForm'). The former can /** * Execute the action. - * @param array command line parameters specific for this command + * @param array $args command line parameters specific for this command * @return integer|null non zero application exit code for help or null on success */ public function run($args) diff --git a/framework/cli/commands/shell/HelpCommand.php b/framework/cli/commands/shell/HelpCommand.php index e98a07ed2c8..dd34adc6500 100644 --- a/framework/cli/commands/shell/HelpCommand.php +++ b/framework/cli/commands/shell/HelpCommand.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -21,7 +21,7 @@ class HelpCommand extends CConsoleCommand { /** * Execute the action. - * @param array command line parameters specific for this command + * @param array $args command line parameters specific for this command * @return integer non zero application exit code for help */ public function run($args) diff --git a/framework/cli/commands/shell/ModelCommand.php b/framework/cli/commands/shell/ModelCommand.php index c12576da0ef..3097e4c6a0b 100644 --- a/framework/cli/commands/shell/ModelCommand.php +++ b/framework/cli/commands/shell/ModelCommand.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -107,15 +107,15 @@ class name. /** * Checks if the given table is a "many to many" helper table. * Their PK has 2 fields, and both of those fields are also FK to other separate tables. - * @param CDbTableSchema table to inspect - * @return boolean true if table matches description of helpter table. + * @param CDbTableSchema $table table to inspect + * @return boolean true if table matches description of helper table. */ protected function isRelationTable($table) { $pk=$table->primaryKey; return (count($pk) === 2 // we want 2 columns && isset($table->foreignKeys[$pk[0]]) // pk column 1 is also a foreign key - && isset($table->foreignKeys[$pk[1]]) // pk column 2 is also a foriegn key + && isset($table->foreignKeys[$pk[1]]) // pk column 2 is also a foreign key && $table->foreignKeys[$pk[0]][0] !== $table->foreignKeys[$pk[1]][0]); // and the foreign keys point different tables } @@ -180,7 +180,7 @@ protected function getClassName($tableName) /** * Generates model class name based on a table name - * @param string the table name + * @param string $tableName the table name * @return string the generated model class name */ protected function generateClassName($tableName) @@ -195,8 +195,8 @@ protected function generateClassName($tableName) /** * Generates the mapping table between table names and class names. - * @param CDbSchema the database schema - * @param string a regular expression that may be used to filter table names + * @param CDbSchema $schema the database schema + * @param string $pattern a regular expression that may be used to filter table names */ protected function generateClassNames($schema,$pattern=null) { @@ -218,9 +218,10 @@ protected function generateClassNames($schema,$pattern=null) /** * Generate a name for use as a relation name (inside relations() function in a model). - * @param string the name of the table to hold the relation - * @param string the foreign key name - * @param boolean whether the relation would contain multiple objects + * @param string $tableName the name of the table to hold the relation + * @param string $fkName the foreign key name + * @param boolean $multiple whether the relation would contain multiple objects + * @return string the generated relation name */ protected function generateRelationName($tableName, $fkName, $multiple) { @@ -243,7 +244,7 @@ protected function generateRelationName($tableName, $fkName, $multiple) /** * Execute the action. - * @param array command line parameters specific for this command + * @param array $args command line parameters specific for this command * @return integer|null non zero application exit code for help or null on success */ public function run($args) diff --git a/framework/cli/commands/shell/ModuleCommand.php b/framework/cli/commands/shell/ModuleCommand.php index 41c8113f584..9b98d84e34e 100644 --- a/framework/cli/commands/shell/ModuleCommand.php +++ b/framework/cli/commands/shell/ModuleCommand.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ * @version $Id: ModuleCommand.php 433 2008-12-30 22:59:17Z qiang.xue $ */ @@ -43,7 +43,7 @@ public function getHelp() /** * Execute the action. - * @param array command line parameters specific for this command + * @param array $args command line parameters specific for this command * @return integer|null non zero application exit code for help or null on success */ public function run($args) diff --git a/framework/cli/views/shell/crud/admin.php b/framework/cli/views/shell/crud/admin.php index a7724f5845b..8b515bb0fb5 100644 --- a/framework/cli/views/shell/crud/admin.php +++ b/framework/cli/views/shell/crud/admin.php @@ -27,7 +27,7 @@ return false; }); $('.search-form form').submit(function(){ - $('#class2id($this->modelClass); ?>-grid').yiiGridView('update', { + $('#class2id($modelClass); ?>-grid').yiiGridView('update', { data: $(this).serialize() }); return false; diff --git a/framework/cli/views/shell/model/model.php b/framework/cli/views/shell/model/model.php index b1137db2f6a..635137bb38a 100644 --- a/framework/cli/views/shell/model/model.php +++ b/framework/cli/views/shell/model/model.php @@ -22,15 +22,6 @@ */ class extends CActiveRecord { - /** - * Returns the static model of the specified AR class. - * @return the static model class - */ - public static function model($className=__CLASS__) - { - return parent::model($className); - } - /** * @return string the associated database table name */ @@ -84,6 +75,13 @@ public function attributeLabels() /** * Retrieves a list of models based on the current search/filter conditions. + * + * Typical usecase: + * - Initialize the model fields with values from filter form. + * - Execute this method to get CActiveDataProvider instance which will filter + * models according to data in model fields. + * - Pass data provider to CGridView, CListView or any similar widget. + * * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions. */ public function search() @@ -110,4 +108,13 @@ public function search() 'criteria'=>$criteria, )); } + + /** + * Returns the static model of the specified AR class. + * @return the static model class + */ + public static function model($className=__CLASS__) + { + return parent::model($className); + } } \ No newline at end of file diff --git a/framework/cli/views/shell/module/messages/.yii b/framework/cli/views/shell/module/messages/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/views/shell/module/models/.yii b/framework/cli/views/shell/module/models/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/views/shell/module/views/layouts/.yii b/framework/cli/views/shell/module/views/layouts/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/views/webapp/assets/.yii b/framework/cli/views/webapp/assets/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/views/webapp/css/form.css b/framework/cli/views/webapp/css/form.css index aec436c651b..7c4d096f9f6 100644 --- a/framework/cli/views/webapp/css/form.css +++ b/framework/cli/views/webapp/css/form.css @@ -30,7 +30,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2010 Yii Software LLC + * @copyright 2008-2010 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/cli/views/webapp/hg-hgignore b/framework/cli/views/webapp/hg-hgignore index 8c57272e629..88003d6a9b6 100644 --- a/framework/cli/views/webapp/hg-hgignore +++ b/framework/cli/views/webapp/hg-hgignore @@ -2,6 +2,6 @@ syntax: glob syntax: regexp # ignore all except .hgkeep -assets/(?!.*\.hgkeep$).+ -protected/runtime/(?!.*\.hgkeep$).+ -protected/tests/report/(?!.*\.hgkeep$).+ +^assets/(?!.*\.hgkeep$).+ +^protected/runtime/(?!.*\.hgkeep$).+ +^protected/tests/report/(?!.*\.hgkeep$).+ diff --git a/framework/cli/views/webapp/images/.yii b/framework/cli/views/webapp/images/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/views/webapp/protected/commands/shell/.yii b/framework/cli/views/webapp/protected/commands/shell/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/views/webapp/protected/controllers/SiteController.php b/framework/cli/views/webapp/protected/controllers/SiteController.php index 1f285804220..a6a790e22c0 100644 --- a/framework/cli/views/webapp/protected/controllers/SiteController.php +++ b/framework/cli/views/webapp/protected/controllers/SiteController.php @@ -62,7 +62,7 @@ public function actionContact() $headers="From: $name <{$model->email}>\r\n". "Reply-To: {$model->email}\r\n". "MIME-Version: 1.0\r\n". - "Content-type: text/plain; charset=UTF-8"; + "Content-Type: text/plain; charset=UTF-8"; mail(Yii::app()->params['adminEmail'],$subject,$model->body,$headers); Yii::app()->user->setFlash('contact','Thank you for contacting us. We will respond to you as soon as possible.'); diff --git a/framework/cli/views/webapp/protected/extensions/.yii b/framework/cli/views/webapp/protected/extensions/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/views/webapp/protected/messages/.yii b/framework/cli/views/webapp/protected/messages/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/views/webapp/protected/migrations/.yii b/framework/cli/views/webapp/protected/migrations/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/views/webapp/protected/runtime/.yii b/framework/cli/views/webapp/protected/runtime/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/views/webapp/protected/tests/fixtures/.yii b/framework/cli/views/webapp/protected/tests/fixtures/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/views/webapp/protected/tests/report/.yii b/framework/cli/views/webapp/protected/tests/report/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/views/webapp/protected/tests/unit/.yii b/framework/cli/views/webapp/protected/tests/unit/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/runtime/.yii b/framework/cli/views/webapp/protected/vendor/git-gitkeep similarity index 100% rename from framework/cli/runtime/.yii rename to framework/cli/views/webapp/protected/vendor/git-gitkeep diff --git a/framework/cli/views/shell/module/components/.yii b/framework/cli/views/webapp/protected/vendor/hg-hgkeep similarity index 100% rename from framework/cli/views/shell/module/components/.yii rename to framework/cli/views/webapp/protected/vendor/hg-hgkeep diff --git a/framework/cli/views/webapp/themes/classic/views/layouts/.yii b/framework/cli/views/webapp/themes/classic/views/layouts/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/views/webapp/themes/classic/views/site/.yii b/framework/cli/views/webapp/themes/classic/views/site/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/cli/views/webapp/themes/classic/views/system/.yii b/framework/cli/views/webapp/themes/classic/views/system/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/collections/CAttributeCollection.php b/framework/collections/CAttributeCollection.php index d8873a1f127..893ef8cb581 100644 --- a/framework/collections/CAttributeCollection.php +++ b/framework/collections/CAttributeCollection.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -203,11 +203,11 @@ public function mergeWith($data,$recursive=true) { if(!$this->caseSensitive && (is_array($data) || $data instanceof Traversable)) { - $d=array(); - foreach($data as $key=>$value) - $d[strtolower($key)]=$value; - return parent::mergeWith($d,$recursive); + $d=array(); + foreach($data as $key=>$value) + $d[strtolower($key)]=$value; + return parent::mergeWith($d,$recursive); } - parent::mergeWith($data,$recursive); + parent::mergeWith($data,$recursive); } } diff --git a/framework/collections/CConfiguration.php b/framework/collections/CConfiguration.php index a57a44d3604..9d80cdf2693 100644 --- a/framework/collections/CConfiguration.php +++ b/framework/collections/CConfiguration.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/collections/CList.php b/framework/collections/CList.php index 5bb4b948d65..e621d4f0227 100644 --- a/framework/collections/CList.php +++ b/framework/collections/CList.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/collections/CListIterator.php b/framework/collections/CListIterator.php index 8826ae30d8e..8f2f91b0699 100644 --- a/framework/collections/CListIterator.php +++ b/framework/collections/CListIterator.php @@ -4,12 +4,12 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ /** - * CListIterator implements an interator for {@link CList}. + * CListIterator implements an iterator for {@link CList}. * * It allows CList to return a new iterator for traversing the items in the list. * diff --git a/framework/collections/CMap.php b/framework/collections/CMap.php index 5dac9c55f8a..6b3ac7e3522 100644 --- a/framework/collections/CMap.php +++ b/framework/collections/CMap.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -46,7 +46,7 @@ class CMap extends CComponent implements IteratorAggregate,ArrayAccess,Countable /** * Constructor. * Initializes the list with an array or an iterable object. - * @param array $data the intial data. Default is null, meaning no initialization. + * @param array $data the initial data. Default is null, meaning no initialization. * @param boolean $readOnly whether the list is read-only * @throws CException If data is not null and neither an array nor an iterator. */ @@ -225,7 +225,7 @@ public function copyFrom($data) * If the merge is recursive, the following algorithm is performed: *
    *
  • the map data is saved as $a, and the source data is saved as $b;
  • - *
  • if $a and $b both have an array indxed at the same string key, the arrays will be merged using this algorithm;
  • + *
  • if $a and $b both have an array indexed at the same string key, the arrays will be merged using this algorithm;
  • *
  • any integer-indexed elements in $b will be appended to $a and reindexed accordingly;
  • *
  • any string-indexed elements in $b will overwrite elements in $a with the same index;
  • *
@@ -272,7 +272,7 @@ public function mergeWith($data,$recursive=true) * For integer-keyed elements, the elements from the latter array will * be appended to the former array. * @param array $a array to be merged to - * @param array $b array to be merged from. You can specifiy additional + * @param array $b array to be merged from. You can specify additional * arrays via third argument, fourth argument etc. * @return array the merged array (the original arrays are not changed.) * @see mergeWith diff --git a/framework/collections/CMapIterator.php b/framework/collections/CMapIterator.php index bdd0ad3a99e..af723e7cd25 100644 --- a/framework/collections/CMapIterator.php +++ b/framework/collections/CMapIterator.php @@ -4,12 +4,12 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ /** - * CMapIterator implements an interator for {@link CMap}. + * CMapIterator implements an iterator for {@link CMap}. * * It allows CMap to return a new iterator for traversing the items in the map. * diff --git a/framework/collections/CQueue.php b/framework/collections/CQueue.php index 40a970d1110..20ed74dc6d4 100644 --- a/framework/collections/CQueue.php +++ b/framework/collections/CQueue.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -45,7 +45,7 @@ class CQueue extends CComponent implements IteratorAggregate,Countable /** * Constructor. * Initializes the queue with an array or an iterable object. - * @param array $data the intial data. Default is null, meaning no initialization. + * @param array $data the initial data. Default is null, meaning no initialization. * @throws CException If data is not null and neither an array nor an iterator. */ public function __construct($data=null) diff --git a/framework/collections/CQueueIterator.php b/framework/collections/CQueueIterator.php index b8cd16b2691..34ceb408c86 100644 --- a/framework/collections/CQueueIterator.php +++ b/framework/collections/CQueueIterator.php @@ -4,12 +4,12 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ /** - * CQueueIterator implements an interator for {@link CQueue}. + * CQueueIterator implements an iterator for {@link CQueue}. * * It allows CQueue to return a new iterator for traversing the items in the queue. * diff --git a/framework/collections/CStack.php b/framework/collections/CStack.php index 09bea5ad5a1..1a3e332b6b1 100644 --- a/framework/collections/CStack.php +++ b/framework/collections/CStack.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/collections/CStackIterator.php b/framework/collections/CStackIterator.php index 5d92dbb8af2..1a50ce1b050 100644 --- a/framework/collections/CStackIterator.php +++ b/framework/collections/CStackIterator.php @@ -4,12 +4,12 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ /** - * CStackIterator implements an interator for {@link CStack}. + * CStackIterator implements an iterator for {@link CStack}. * * It allows CStack to return a new iterator for traversing the items in the stack. * diff --git a/framework/collections/CTypedList.php b/framework/collections/CTypedList.php index dedd2350099..cd4be831403 100644 --- a/framework/collections/CTypedList.php +++ b/framework/collections/CTypedList.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/collections/CTypedMap.php b/framework/collections/CTypedMap.php index 72cf5d4a13f..55bdbbd7243 100644 --- a/framework/collections/CTypedMap.php +++ b/framework/collections/CTypedMap.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/console/CConsoleApplication.php b/framework/console/CConsoleApplication.php index 380157aa798..078696a6020 100644 --- a/framework/console/CConsoleApplication.php +++ b/framework/console/CConsoleApplication.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -38,6 +38,7 @@ * * @property string $commandPath The directory that contains the command classes. Defaults to 'protected/commands'. * @property CConsoleCommandRunner $commandRunner The command runner. + * @property CConsoleCommand $command The currently active command. * * @author Qiang Xue * @package system.console @@ -175,4 +176,25 @@ public function getCommandRunner() { return $this->_runner; } + + /** + * Returns the currently running command. + * This is shortcut method for {@link CConsoleCommandRunner::getCommand()}. + * @return CConsoleCommand|null the currently active command. + * @since 1.1.14 + */ + public function getCommand() + { + return $this->getCommandRunner()->getCommand(); + } + + /** + * This is shortcut method for {@link CConsoleCommandRunner::setCommand()}. + * @param CConsoleCommand $value the currently active command. + * @since 1.1.14 + */ + public function setCommand($value) + { + $this->getCommandRunner()->setCommand($value); + } } diff --git a/framework/console/CConsoleCommand.php b/framework/console/CConsoleCommand.php index a7418442de1..34e29452e6d 100644 --- a/framework/console/CConsoleCommand.php +++ b/framework/console/CConsoleCommand.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -27,7 +27,7 @@ * Options are bound to action parameters via parameter names. For example, the following * action method will allow us to run a command with yiic sitemap --type=News: *
- * class SitemapCommand {
+ * class SitemapCommand extends CConsoleCommand {
  *     public function actionIndex($type) {
  *         ....
  *     }
@@ -274,9 +274,9 @@ public function getHelp()
 		$help='Usage: '.$this->getCommandRunner()->getScriptName().' '.$this->getName();
 		$options=$this->getOptionHelp();
 		if(empty($options))
-			return $help;
+			return $help."\n";
 		if(count($options)===1)
-			return $help.' '.$options[0];
+			return $help.' '.$options[0]."\n";
 		$help.=" \nActions:\n";
 		foreach($options as $option)
 			$help.='    '.$option."\n";
@@ -308,7 +308,14 @@ public function getOptionHelp()
 				{
 					$optional=$param->isDefaultValueAvailable();
 					$defaultValue=$optional ? $param->getDefaultValue() : null;
+					if(is_array($defaultValue)) {
+						$defaultValue = str_replace(array("\r\n", "\n", "\r"), "", print_r($defaultValue, true));
+					}
 					$name=$param->getName();
+
+					if($name==='args')
+						continue;
+
 					if($optional)
 						$help.=" [--$name=$defaultValue]";
 					else
@@ -494,6 +501,7 @@ public function pluralize($name)
 			'/(c)hild$/i' => '\1hildren',
 			'/(h)uman$/i' => '\1umans',
 			'/(m)an$/i' => '\1en',
+			'/(s)taff$/i' => '\1taff',
 			'/(t)ooth$/i' => '\1eeth',
 			'/(p)erson$/i' => '\1eople',
 			'/([m|l])ouse$/i' => '\1ice',
diff --git a/framework/console/CConsoleCommandBehavior.php b/framework/console/CConsoleCommandBehavior.php
index 53c56545282..0b18b2abf80 100644
--- a/framework/console/CConsoleCommandBehavior.php
+++ b/framework/console/CConsoleCommandBehavior.php
@@ -4,7 +4,7 @@
  *
  * @author Evgeny Blinov 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -35,7 +35,7 @@ public function events()
 	}
 	/**
 	 * Responds to {@link CConsoleCommand::onBeforeAction} event.
-	 * Overrides this method if you want to handle the corresponding event of the {@link CBehavior::owner owner}.
+	 * Override this method and make it public if you want to handle the corresponding event of the {@link CBehavior::owner owner}.
 	 * @param CConsoleCommandEvent $event event parameter
 	 */
 	protected function beforeAction($event)
@@ -44,7 +44,7 @@ protected function beforeAction($event)
 
 	/**
 	 * Responds to {@link CConsoleCommand::onAfterAction} event.
-	 * Overrides this method if you want to handle the corresponding event of the {@link CBehavior::owner owner}.
+	 * Override this method and make it public if you want to handle the corresponding event of the {@link CBehavior::owner owner}.
 	 * @param CConsoleCommandEvent $event event parameter
 	 */
 	protected function afterAction($event)
diff --git a/framework/console/CConsoleCommandEvent.php b/framework/console/CConsoleCommandEvent.php
index 58129f646cb..b9e7b9dcee2 100644
--- a/framework/console/CConsoleCommandEvent.php
+++ b/framework/console/CConsoleCommandEvent.php
@@ -4,7 +4,7 @@
  *
  * @author Evgeny Blinov 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/console/CConsoleCommandRunner.php b/framework/console/CConsoleCommandRunner.php
index 827d57bb30a..492aa7c42a7 100644
--- a/framework/console/CConsoleCommandRunner.php
+++ b/framework/console/CConsoleCommandRunner.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -12,6 +12,7 @@
  * CConsoleCommandRunner manages commands and executes the requested command.
  *
  * @property string $scriptName The entry script name.
+ * @property CConsoleCommand $command The currently active command.
  *
  * @author Qiang Xue 
  * @package system.console
@@ -41,6 +42,7 @@ class CConsoleCommandRunner extends CComponent
 	public $commands=array();
 
 	private $_scriptName;
+	private $_command;
 
 	/**
 	 * Executes the requested command.
@@ -61,10 +63,14 @@ public function run($args)
 		else
 			$name='help';
 
+		$oldCommand=$this->_command;
 		if(($command=$this->createCommand($name))===null)
 			$command=$this->createCommand('help');
+		$this->_command=$command;
 		$command->init();
-		return $command->run($args);
+		$exitCode=$command->run($args);
+		$this->_command=$oldCommand;
+		return $exitCode;
 	}
 
 	/**
@@ -75,6 +81,25 @@ public function getScriptName()
 		return $this->_scriptName;
 	}
 
+	/**
+	 * Returns the currently running command.
+	 * @return CConsoleCommand|null the currently active command.
+	 * @since 1.1.14
+	 */
+	public function getCommand()
+	{
+		return $this->_command;
+	}
+
+	/**
+	 * @param CConsoleCommand $value the currently active command.
+	 * @since 1.1.14
+	 */
+	public function setCommand($value)
+	{
+		$this->_command=$value;
+	}
+
 	/**
 	 * Searches for commands under the specified directory.
 	 * @param string $path the directory containing the command class files.
diff --git a/framework/console/CHelpCommand.php b/framework/console/CHelpCommand.php
index 21dfa4db58c..2bceff0e801 100644
--- a/framework/console/CHelpCommand.php
+++ b/framework/console/CHelpCommand.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/db/CDbCommand.php b/framework/db/CDbCommand.php
index 433c491e154..04d2c19cd50 100644
--- a/framework/db/CDbCommand.php
+++ b/framework/db/CDbCommand.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -22,7 +22,7 @@
  * If an SQL statement returns results (such as a SELECT SQL), the results
  * can be accessed via the returned {@link CDbDataReader}.
  *
- * CDbCommand supports SQL statment preparation and parameter binding.
+ * CDbCommand supports SQL statement preparation and parameter binding.
  * Call {@link bindParam} to bind a PHP variable to a parameter in SQL.
  * Call {@link bindValue} to bind a value to an SQL parameter.
  * When binding a parameter, the SQL statement is automatically prepared.
@@ -47,7 +47,7 @@
  * @property string $from The FROM part (without 'FROM' ) in the query.
  * @property string $where The WHERE part (without 'WHERE' ) in the query.
  * @property mixed $join The join part in the query. This can be an array representing
- * multiple join fragments, or a string representing a single jojin fragment.
+ * multiple join fragments, or a string representing a single join fragment.
  * Each join fragment will contain the proper join operator (e.g. LEFT JOIN).
  * @property string $group The GROUP BY part (without 'GROUP BY' ) in the query.
  * @property string $having The HAVING part (without 'HAVING' ) in the query.
@@ -200,6 +200,7 @@ public function getPdoStatement()
 	 * this may improve performance.
 	 * For SQL statement with binding parameters, this method is invoked
 	 * automatically.
+	 * @throws CDbException if CDbCommand failed to prepare the SQL statement
 	 */
 	public function prepare()
 	{
@@ -310,7 +311,7 @@ public function bindValues($values)
 	 * Please also note that all values are treated as strings in this case, if you need them to be handled as
 	 * their real data types, you have to use {@link bindParam} or {@link bindValue} instead.
 	 * @return integer number of rows affected by the execution.
-	 * @throws CException execution failed
+	 * @throws CDbException execution failed
 	 */
 	public function execute($params=array())
 	{
@@ -463,6 +464,7 @@ public function queryColumn($params=array())
 	 * you cannot bind parameters or values using {@link bindParam} or {@link bindValue}, and vice versa.
 	 * Please also note that all values are treated as strings in this case, if you need them to be handled as
 	 * their real data types, you have to use {@link bindParam} or {@link bindValue} instead.
+	 * @throws CDbException if CDbCommand failed to execute the SQL statement
 	 * @return mixed the method execution result
 	 */
 	private function queryInternal($method,$mode,$params=array())
@@ -549,6 +551,7 @@ private function queryInternal($method,$mode,$params=array())
 	 * query options are supported: {@link select}, {@link distinct}, {@link from},
 	 * {@link where}, {@link join}, {@link group}, {@link having}, {@link order},
 	 * {@link limit}, {@link offset} and {@link union}.
+	 * @throws CDbException if "from" key is not present in given query parameter
 	 * @return string the SQL statement
 	 * @since 1.1.6
 	 */
@@ -1313,7 +1316,7 @@ public function delete($table, $conditions='', $params=array())
 	 * @param string $table the name of the table to be created. The name will be properly quoted by the method.
 	 * @param array $columns the columns (name=>definition) in the new table.
 	 * @param string $options additional SQL fragment that will be appended to the generated SQL.
-	 * @return integer number of rows affected by the execution.
+	 * @return integer 0 is always returned. See {@link http://php.net/manual/en/pdostatement.rowcount.php} for more information.
 	 * @since 1.1.6
 	 */
 	public function createTable($table, $columns, $options=null)
@@ -1325,7 +1328,7 @@ public function createTable($table, $columns, $options=null)
 	 * Builds and executes a SQL statement for renaming a DB table.
 	 * @param string $table the table to be renamed. The name will be properly quoted by the method.
 	 * @param string $newName the new table name. The name will be properly quoted by the method.
-	 * @return integer number of rows affected by the execution.
+	 * @return integer 0 is always returned. See {@link http://php.net/manual/en/pdostatement.rowcount.php} for more information.
 	 * @since 1.1.6
 	 */
 	public function renameTable($table, $newName)
@@ -1336,7 +1339,7 @@ public function renameTable($table, $newName)
 	/**
 	 * Builds and executes a SQL statement for dropping a DB table.
 	 * @param string $table the table to be dropped. The name will be properly quoted by the method.
-	 * @return integer number of rows affected by the execution.
+	 * @return integer 0 is always returned. See {@link http://php.net/manual/en/pdostatement.rowcount.php} for more information.
 	 * @since 1.1.6
 	 */
 	public function dropTable($table)
@@ -1474,6 +1477,7 @@ public function dropIndex($name, $table)
 	/**
 	 * Generates the condition string that will be put in the WHERE part
 	 * @param mixed $conditions the conditions that will be put in the WHERE part.
+	 * @throws CDbException if unknown operator is used
 	 * @return string the condition string to put in the WHERE part
 	 */
 	private function processConditions($conditions)
diff --git a/framework/db/CDbConnection.php b/framework/db/CDbConnection.php
index cfd5477975d..4390ca75aa2 100644
--- a/framework/db/CDbConnection.php
+++ b/framework/db/CDbConnection.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -157,7 +157,7 @@ class CDbConnection extends CApplicationComponent
 	 */
 	public $queryCachingDuration=0;
 	/**
-	 * @var CCacheDependency the dependency that will be used when saving query results into cache.
+	 * @var CCacheDependency|ICacheDependency the dependency that will be used when saving query results into cache.
 	 * @see queryCachingDuration
 	 * @since 1.1.7
 	 */
@@ -343,7 +343,8 @@ public function setActive($value)
 	 * without actually executing the SQL statement.
 	 * @param integer $duration the number of seconds that query results may remain valid in cache.
 	 * If this is 0, the caching will be disabled.
-	 * @param CCacheDependency $dependency the dependency that will be used when saving the query results into cache.
+	 * @param CCacheDependency|ICacheDependency $dependency the dependency that will be used when saving
+	 * the query results into cache.
 	 * @param integer $queryCount number of SQL queries that need to be cached after calling this method. Defaults to 1,
 	 * meaning that the next SQL query will be cached.
 	 * @return CDbConnection the connection instance itself.
@@ -405,7 +406,8 @@ protected function close()
 	/**
 	 * Creates the PDO instance.
 	 * When some functionalities are missing in the pdo driver, we may use
-	 * an adapter class to provides them.
+	 * an adapter class to provide them.
+	 * @throws CDbException when failed to open DB connection
 	 * @return PDO the pdo instance
 	 */
 	protected function createPdoInstance()
@@ -419,8 +421,17 @@ protected function createPdoInstance()
 			elseif($driver==='sqlsrv')
 				$pdoClass='CMssqlSqlsrvPdoAdapter';
 		}
-		return new $pdoClass($this->connectionString,$this->username,
-									$this->password,$this->_attributes);
+
+		if(!class_exists($pdoClass))
+			throw new CDbException(Yii::t('yii','CDbConnection is unable to find PDO class "{className}". Make sure PDO is installed correctly.',
+				array('{className}'=>$pdoClass)));
+
+		@$instance=new $pdoClass($this->connectionString,$this->username,$this->password,$this->_attributes);
+
+		if(!$instance)
+			throw new CDbException(Yii::t('yii','CDbConnection failed to open the DB connection.'));
+
+		return $instance;
 	}
 
 	/**
@@ -498,6 +509,7 @@ public function beginTransaction()
 
 	/**
 	 * Returns the database schema for the current connection
+	 * @throws CDbException if CDbConnection does not support reading schema for specified database driver
 	 * @return CDbSchema the database schema for the current connection
 	 */
 	public function getSchema()
diff --git a/framework/db/CDbDataReader.php b/framework/db/CDbDataReader.php
index 694a2975e96..efa4bcf47c0 100644
--- a/framework/db/CDbDataReader.php
+++ b/framework/db/CDbDataReader.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -137,7 +137,7 @@ public function nextResult()
 	/**
 	 * Closes the reader.
 	 * This frees up the resources allocated for executing this SQL statement.
-	 * Read attemps after this method call are unpredictable.
+	 * Read attempts after this method call are unpredictable.
 	 */
 	public function close()
 	{
diff --git a/framework/db/CDbException.php b/framework/db/CDbException.php
index 9a47c2eb8b3..2c662dd4910 100644
--- a/framework/db/CDbException.php
+++ b/framework/db/CDbException.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/db/CDbMigration.php b/framework/db/CDbMigration.php
index ded76725d67..9849060b8be 100644
--- a/framework/db/CDbMigration.php
+++ b/framework/db/CDbMigration.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -20,6 +20,9 @@
  * the database used in an application; while the {@link down} method contains "downgrading"
  * logic. The "yiic migrate" command manages all available migrations in an application.
  *
+ * By overriding {@link safeUp} or {@link safeDown} methods instead of {@link up} and {@link down}
+ * the migration logic will be wrapped with a DB transaction.
+ *
  * CDbMigration provides a set of convenient methods for manipulating database data and schema.
  * For example, the {@link insert} method can be used to easily insert a row of data into
  * a database table; the {@link createTable} method can be used to create a database table.
@@ -40,7 +43,7 @@ abstract class CDbMigration extends CComponent
 	/**
 	 * This method contains the logic to be executed when applying this migration.
 	 * Child classes may implement this method to provide actual migration logic.
-	 * @return boolean
+	 * @return boolean Returning false means, the migration will not be applied.
 	 */
 	public function up()
 	{
@@ -65,9 +68,8 @@ public function up()
 
 	/**
 	 * This method contains the logic to be executed when removing this migration.
-	 * The default implementation throws an exception indicating the migration cannot be removed.
 	 * Child classes may override this method if the corresponding migrations can be removed.
-	 * @return boolean
+	 * @return boolean Returning false means, the migration will not be applied.
 	 */
 	public function down()
 	{
@@ -96,7 +98,8 @@ public function down()
 	 * be enclosed within a DB transaction.
 	 * Child classes may implement this method instead of {@link up} if the DB logic
 	 * needs to be within a transaction.
-	 * @return boolean
+	 * @return boolean Returning false means, the migration will not be applied and
+	 * the transaction will be rolled back.
 	 * @since 1.1.7
 	 */
 	public function safeUp()
@@ -109,7 +112,8 @@ public function safeUp()
 	 * be enclosed within a DB transaction.
 	 * Child classes may implement this method instead of {@link up} if the DB logic
 	 * needs to be within a transaction.
-	 * @return boolean
+	 * @return boolean Returning false means, the migration will not be applied and
+	 * the transaction will be rolled back.
 	 * @since 1.1.7
 	 */
 	public function safeDown()
@@ -122,6 +126,7 @@ public function safeDown()
 	 * You can call {@link setDbConnection} to switch to a different database connection.
 	 * Methods such as {@link insert}, {@link createTable} will use this database connection
 	 * to perform DB queries.
+	 * @throws CException if "db" application component is not configured
 	 * @return CDbConnection the currently active database connection
 	 */
 	public function getDbConnection()
@@ -422,9 +427,9 @@ public function addPrimaryKey($name,$table,$columns)
 	 */
 	public function dropPrimaryKey($name,$table)
 	{
-		echo "    > alter table $table drop constraint $name primary key $column ...";
+		echo "    > alter table $table drop primary key $name ...";
 		$time=microtime(true);
 		$this->getDbConnection()->createCommand()->dropPrimaryKey($name,$table);
 		echo " done (time: ".sprintf('%.3f', microtime(true)-$time)."s)\n";
 	}
-}
\ No newline at end of file
+}
diff --git a/framework/db/CDbTransaction.php b/framework/db/CDbTransaction.php
index 2644d146f9b..15234e45190 100644
--- a/framework/db/CDbTransaction.php
+++ b/framework/db/CDbTransaction.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/db/ar/CActiveFinder.php b/framework/db/ar/CActiveFinder.php
index b4415258851..a93fd3b2694 100644
--- a/framework/db/ar/CActiveFinder.php
+++ b/framework/db/ar/CActiveFinder.php
@@ -1,10 +1,10 @@
 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -169,6 +169,19 @@ public function lazyFind($baseRecord)
 		$this->destroyJoinTree();
 	}
 
+	/**
+	 * Given active record class name returns new model instance.
+	 *
+	 * @param string $className active record class name
+	 * @return CActiveRecord active record model instance
+	 *
+	 * @since 1.1.14
+	 */
+	public function getModel($className)
+	{
+		return CActiveRecord::model($className);
+	}
+
 	private function destroyJoinTree()
 	{
 		if($this->_joinTree!==null)
@@ -181,6 +194,8 @@ 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
+	 * @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
 	 */
 	private function buildJoinTree($parent,$with,$options=null)
 	{
@@ -212,7 +227,7 @@ private function buildJoinTree($parent,$with,$options=null)
 					array('{class}'=>get_class($parent->model), '{name}'=>$with)));
 
 			$relation=clone $relation;
-			$model=CActiveRecord::model($relation->className);
+			$model=$this->getModel($relation->className);
 
 			if($relation instanceof CActiveRelation)
 			{
@@ -263,7 +278,7 @@ private function buildJoinTree($parent,$with,$options=null)
 					$element=new CJoinElement($this,$relation,$parent,++$this->_joinCount);
 				if(!empty($relation->through))
 				{
-					$slave=$this->buildJoinTree($parent,$relation->through,array('select'=>false));
+					$slave=$this->buildJoinTree($parent,$relation->through,array('select'=>''));
 					$slave->master=$element;
 					$element->slave=$slave;
 				}
@@ -361,7 +376,7 @@ public function __construct($finder,$relation,$parent=null,$id=0)
 		{
 			$this->relation=$relation;
 			$this->_parent=$parent;
-			$this->model=CActiveRecord::model($relation->className);
+			$this->model=$this->_finder->getModel($relation->className);
 			$this->_builder=$this->model->getCommandBuilder();
 			$this->tableAlias=$relation->alias===null?$relation->name:$relation->alias;
 			$this->rawTableAlias=$this->_builder->getSchema()->quoteTableName($this->tableAlias);
@@ -458,7 +473,11 @@ public function lazyFind($baseRecord)
 
 		if(!$this->children)
 			return;
-		$child=end($this->children); // bridge(s) inside, we're taking only last necessary child
+
+		$params=array();
+		foreach($this->children as $child)
+			if(is_array($child->relation->params))
+				$params=array_merge($params,$child->relation->params);
 
 		$query=new CJoinQuery($child);
 		$query->selects=array($child->getColumnSelect($child->relation->select));
@@ -470,8 +489,7 @@ public function lazyFind($baseRecord)
 		$query->joins[]=$child->relation->join;
 		$query->havings[]=$child->relation->having;
 		$query->orders[]=$child->relation->order;
-		if(is_array($child->relation->params))
-			$query->params=$child->relation->params;
+		$query->params=$params;
 		$query->elements[$child->id]=true;
 		if($child->relation instanceof CHasManyRelation)
 		{
@@ -511,6 +529,7 @@ public function lazyFind($baseRecord)
 	 * Apply Lazy Condition
 	 * @param CJoinQuery $query represents a JOIN SQL statements
 	 * @param CActiveRecord $record the active record whose related object is to be fetched.
+	 * @throws CDbException if relation in active record class is not specified correctly
 	 */
 	private function applyLazyCondition($query,$record)
 	{
@@ -598,10 +617,19 @@ private function applyLazyCondition($query,$record)
 		else
 		{
 			$element=$this;
-			while($element->slave!==null)
+			while(true)
 			{
-				$query->joins[]=$element->slave->joinOneMany($element->slave,$element->relation->foreignKey,$element,$parent);
-				$element=$element->slave;
+				$condition=$element->relation->condition;
+				if(!empty($condition))
+					$query->conditions[]=$condition;
+				$query->params=array_merge($query->params,$element->relation->params);
+				if($element->slave!==null)
+				{
+					$query->joins[]=$element->slave->joinOneMany($element->slave,$element->relation->foreignKey,$element,$parent);
+					$element=$element->slave;
+				}
+				else
+					break;
 			}
 			$fks=is_array($element->relation->foreignKey) ? $element->relation->foreignKey : preg_split('/\s*,\s*/',$element->relation->foreignKey,-1,PREG_SPLIT_NO_EMPTY);
 			$prefix=$element->getColumnPrefix();
@@ -614,16 +642,16 @@ private function applyLazyCondition($query,$record)
 					$fk=$i;
 				}
 
-				if($this->relation instanceof CBelongsToRelation)
+				if($element->relation instanceof CBelongsToRelation)
 				{
 					if(is_int($i))
 					{
 						if(isset($parent->_table->foreignKeys[$fk]))  // FK defined
 							$pk=$parent->_table->foreignKeys[$fk][1];
-						elseif(is_array($this->_table->primaryKey)) // composite PK
-							$pk=$this->_table->primaryKey[$i];
+						elseif(is_array($element->_table->primaryKey)) // composite PK
+							$pk=$element->_table->primaryKey[$i];
 						else
-							$pk=$this->_table->primaryKey;
+							$pk=$element->_table->primaryKey;
 					}
 					$params[$pk]=$record->$fk;
 				}
@@ -631,8 +659,8 @@ private function applyLazyCondition($query,$record)
 				{
 					if(is_int($i))
 					{
-						if(isset($this->_table->foreignKeys[$fk]))  // FK defined
-							$pk=$this->_table->foreignKeys[$fk][1];
+						if(isset($element->_table->foreignKeys[$fk]))  // FK defined
+							$pk=$element->_table->foreignKeys[$fk][1];
 						elseif(is_array($parent->_table->primaryKey)) // composite PK
 							$pk=$parent->_table->primaryKey[$i];
 						else
@@ -699,23 +727,37 @@ public function count($criteria=null)
 		$this->_finder->joinAll=true;
 		$this->buildQuery($query);
 
-		$select=is_array($criteria->select) ? implode(',',$criteria->select) : $criteria->select;
-		if($select!=='*' && !strncasecmp($select,'count',5))
-			$query->selects=array($select);
-		elseif(is_string($this->_table->primaryKey))
+		$query->limit=$query->offset=-1;
+
+		if(!empty($criteria->group) || !empty($criteria->having))
 		{
-			$prefix=$this->getColumnPrefix();
-			$schema=$this->_builder->getSchema();
-			$column=$prefix.$schema->quoteColumnName($this->_table->primaryKey);
-			$query->selects=array("COUNT(DISTINCT $column)");
+			$query->orders = array();
+			$command=$query->createCommand($this->_builder);
+			$sql=$command->getText();
+			$sql="SELECT COUNT(*) FROM ({$sql}) sq";
+			$command->setText($sql);
+			$command->params=$query->params;
+			return $command->queryScalar();
 		}
 		else
-			$query->selects=array("COUNT(*)");
+		{
+			$select=is_array($criteria->select) ? implode(',',$criteria->select) : $criteria->select;
+			if($select!=='*' && !strncasecmp($select,'count',5))
+				$query->selects=array($select);
+			elseif(is_string($this->_table->primaryKey))
+			{
+				$prefix=$this->getColumnPrefix();
+				$schema=$this->_builder->getSchema();
+				$column=$prefix.$schema->quoteColumnName($this->_table->primaryKey);
+				$query->selects=array("COUNT(DISTINCT $column)");
+			}
+			else
+				$query->selects=array("COUNT(*)");
 
-		$query->orders=$query->groups=$query->havings=array();
-		$query->limit=$query->offset=-1;
-		$command=$query->createCommand($this->_builder);
-		return $command->queryScalar();
+			$query->orders=$query->groups=$query->havings=array();
+			$command=$query->createCommand($this->_builder);
+			return $command->queryScalar();
+		}
 	}
 
 	/**
@@ -857,6 +899,7 @@ public function getTableNameWithAlias()
 	 * Generates the list of columns to be selected.
 	 * Columns will be properly aliased and primary keys will be added to selection if they are not specified.
 	 * @param mixed $select columns to be selected. Defaults to '*', indicating all columns.
+	 * @throws CDbException if active record class is trying to select an invalid column
 	 * @return string the column selection
 	 */
 	public function getColumnSelect($select='*')
@@ -977,6 +1020,7 @@ public function getColumnPrefix()
 	}
 
 	/**
+	 * @throws CDbException if relation in active record class is not specified correctly
 	 * @return string the join statement (this node joins with its parent)
 	 */
 	public function getJoinCondition()
@@ -996,21 +1040,30 @@ public function getJoinCondition()
 		else
 		{
 			$fks=is_array($this->relation->foreignKey) ? $this->relation->foreignKey : preg_split('/\s*,\s*/',$this->relation->foreignKey,-1,PREG_SPLIT_NO_EMPTY);
-			if($this->relation instanceof CBelongsToRelation)
+			if($this->slave!==null)
+			{
+				if($this->relation instanceof CBelongsToRelation)
+				{
+					$fks=array_flip($fks);
+					$pke=$this->slave;
+					$fke=$this;
+				}
+				else
+				{
+					$pke=$this;
+					$fke=$this->slave;
+				}
+			}
+			elseif($this->relation instanceof CBelongsToRelation)
 			{
 				$pke=$this;
 				$fke=$parent;
 			}
-			elseif($this->slave===null)
+			else
 			{
 				$pke=$parent;
 				$fke=$this;
 			}
-			else
-			{
-				$pke=$this;
-				$fke=$this->slave;
-			}
 			return $this->joinOneMany($fke,$fks,$pke,$parent);
 		}
 	}
@@ -1020,7 +1073,7 @@ public function getJoinCondition()
 	 * This works for HAS_ONE, HAS_MANY and BELONGS_TO.
 	 * @param CJoinElement $fke the join element containing foreign keys
 	 * @param array $fks the foreign keys
-	 * @param CJoinElement $pke the join element containg primary keys
+	 * @param CJoinElement $pke the join element contains primary keys
 	 * @param CJoinElement $parent the parent join element
 	 * @return string the join statement
 	 * @throws CDbException if a foreign key is invalid
@@ -1344,7 +1397,7 @@ public function query()
 	private function queryOneMany()
 	{
 		$relation=$this->relation;
-		$model=CActiveRecord::model($relation->className);
+		$model=$this->_finder->getModel($relation->className);
 		$builder=$model->getCommandBuilder();
 		$schema=$builder->getSchema();
 		$table=$model->getTableSchema();
@@ -1398,7 +1451,7 @@ private function queryOneMany()
 		// generate and perform query
 		if(count($fks)===1)  // single column FK
 		{
-			$col=$table->columns[$fks[0]]->rawName;
+			$col=$tableAlias.'.'.$table->columns[$fks[0]]->rawName;
 			$sql="SELECT $col AS $c, {$relation->select} AS $s FROM {$table->rawName} ".$tableAlias.$join
 				.$where.'('.$builder->createInCondition($table,$fks[0],array_keys($records),$tableAlias.'.').')'
 				." GROUP BY $col".$group
@@ -1423,7 +1476,7 @@ private function queryOneMany()
 			$cols=array();
 			foreach($pkTable->primaryKey as $n=>$pk)
 			{
-				$name=$table->columns[$map[$pk]]->rawName;
+				$name=$tableAlias.'.'.$table->columns[$map[$pk]]->rawName;
 				$cols[$name]=$name.' AS '.$schema->quoteColumnName('c'.$n);
 			}
 			$sql='SELECT '.implode(', ',$cols).", {$relation->select} AS $s FROM {$table->rawName} ".$tableAlias.$join
@@ -1455,7 +1508,7 @@ private function queryOneMany()
 	private function queryManyMany($joinTableName,$keys)
 	{
 		$relation=$this->relation;
-		$model=CActiveRecord::model($relation->className);
+		$model=$this->_finder->getModel($relation->className);
 		$table=$model->getTableSchema();
 		$builder=$model->getCommandBuilder();
 		$schema=$builder->getSchema();
@@ -1464,7 +1517,7 @@ private function queryManyMany($joinTableName,$keys)
 		$tableAlias=$model->getTableAlias(true);
 
 		if(($joinTable=$builder->getSchema()->getTable($joinTableName))===null)
-			throw new CDbException(Yii::t('yii','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.',
+			throw new CDbException(Yii::t('yii','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.',
 				array('{class}'=>get_class($this->_parent->model), '{relation}'=>$relation->name, '{joinTable}'=>$joinTableName)));
 
 		$fks=preg_split('/\s*,\s*/',$keys,-1,PREG_SPLIT_NO_EMPTY);
@@ -1582,4 +1635,4 @@ private function queryManyMany($joinTableName,$keys)
 		foreach($records as $pk=>$record)
 			$record->addRelatedRecord($relation->name,isset($stats[$pk])?$stats[$pk]:$this->relation->defaultValue,false);
 	}
-}
\ No newline at end of file
+}
diff --git a/framework/db/ar/CActiveRecord.php b/framework/db/ar/CActiveRecord.php
index cb419d1ec54..c40c5b80d75 100644
--- a/framework/db/ar/CActiveRecord.php
+++ b/framework/db/ar/CActiveRecord.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -53,8 +53,8 @@ abstract class CActiveRecord extends CModel
 	public static $db;
 
 	private static $_models=array();			// class name => model
+	private static $_md=array();				// class name => meta data
 
-	private $_md;								// meta data
 	private $_new=false;						// whether this instance is new or not
 	private $_attributes=array();				// attribute name => attribute value
 	private $_related=array();					// attribute name => related objects
@@ -66,6 +66,8 @@ abstract class CActiveRecord extends CModel
 	/**
 	 * Constructor.
 	 * @param string $scenario scenario name. See {@link CModel::scenario} for more details about this parameter.
+	 * Note: in order to setup initial model parameters use {@link init()} or {@link afterConstruct()}.
+	 * Do NOT override the constructor unless it is absolutely necessary!
 	 */
 	public function __construct($scenario='insert')
 	{
@@ -99,7 +101,8 @@ public function init()
 	 * It changes the query caching parameter of the {@link dbConnection} instance.
 	 * @param integer $duration the number of seconds that query results may remain valid in cache.
 	 * If this is 0, the caching will be disabled.
-	 * @param CCacheDependency $dependency the dependency that will be used when saving the query results into cache.
+	 * @param CCacheDependency|ICacheDependency $dependency the dependency that will be used when saving
+	 * the query results into cache.
 	 * @param integer $queryCount number of SQL queries that need to be cached after calling this method. Defaults to 1,
 	 * meaning that the next SQL query will be cached.
 	 * @return CActiveRecord the active record instance itself.
@@ -118,7 +121,6 @@ public function cache($duration, $dependency=null, $queryCount=1)
 	 */
 	public function __sleep()
 	{
-		$this->_md=null;
 		return array_keys((array)$this);
 	}
 
@@ -234,7 +236,14 @@ public function __call($name,$parameters)
 	 * or an empty array.
 	 * @param string $name the relation name (see {@link relations})
 	 * @param boolean $refresh whether to reload the related objects from database. Defaults to false.
+	 * If the current record is not a new record and it does not have the related objects loaded they
+	 * will be retrieved from the database even if this is set to false.
+	 * If the current record is a new record and this value is false, the related objects will not be
+	 * retrieved from the database.
 	 * @param mixed $params array or CDbCriteria object with additional parameters that customize the query conditions as specified in the relation declaration.
+	 * If this is supplied the related record(s) will be retrieved from the database regardless of the value or {@link $refresh}.
+	 * The related record(s) retrieved when this is supplied will only be returned by this method and will not be loaded into the current record's relation.
+	 * The value of the relation prior to running this method will still be available for the current record if this is supplied.
 	 * @return mixed the related object(s).
 	 * @throws CDbException if the relation is not specified in {@link relations}.
 	 */
@@ -268,7 +277,7 @@ public function getRelated($name,$refresh=false,$params=array())
 			$r=$name;
 		unset($this->_related[$name]);
 
-		$finder=new CActiveFinder($this,$r);
+		$finder=$this->getActiveFinder($r);
 		$finder->lazyFind($this);
 
 		if(!isset($this->_related[$name]))
@@ -384,7 +393,6 @@ public static function model($className=__CLASS__)
 		else
 		{
 			$model=self::$_models[$className]=new $className(null);
-			$model->_md=new CActiveRecordMetaData($model);
 			$model->attachBehaviors($model->behaviors());
 			return $model;
 		}
@@ -396,10 +404,13 @@ public static function model($className=__CLASS__)
 	 */
 	public function getMetaData()
 	{
-		if($this->_md!==null)
-			return $this->_md;
-		else
-			return $this->_md=self::model(get_class($this))->_md;
+		$className=get_class($this);
+		if(!array_key_exists($className,self::$_md))
+		{
+			self::$_md[$className]=null; // preventing recursive invokes of {@link getMetaData()} via {@link __get()}
+			self::$_md[$className]=new CActiveRecordMetaData($this);
+		}
+		return self::$_md[$className];
 	}
 
 	/**
@@ -411,10 +422,9 @@ public function getMetaData()
 	 */
 	public function refreshMetaData()
 	{
-		$finder=self::model(get_class($this));
-		$finder->_md=new CActiveRecordMetaData($finder);
-		if($this!==$finder)
-			$this->_md=$finder->_md;
+		$className=get_class($this);
+		if(array_key_exists($className,self::$_md))
+			unset(self::$_md[$className]);
 	}
 
 	/**
@@ -612,6 +622,7 @@ public function getAttributeLabel($attribute)
 	 * Returns the database connection used by active record.
 	 * By default, the "db" application component is used as the database connection.
 	 * You may override this method if you want to use a different database connection.
+	 * @throws CDbException if "db" application component is not defined
 	 * @return CDbConnection the database connection used by active record.
 	 */
 	public function getDbConnection()
@@ -885,6 +896,35 @@ public function onAfterFind($event)
 		$this->raiseEvent('onAfterFind',$event);
 	}
 
+	/**
+	 * Given 'with' options returns a new active finder instance.
+	 *
+	 * @param mixed $with the relation names to be actively looked for
+	 * @return CActiveFinder active finder for the operation
+	 *
+	 * @since 1.1.14
+	 */
+	public function getActiveFinder($with)
+	{
+		return new CActiveFinder($this,$with);
+	}
+
+	/**
+	 * This event is raised before an AR finder performs a count call.
+	 * If you want to access or modify the query criteria used for the
+	 * count call, you can use {@link getDbCriteria()} to customize it based on your needs.
+	 * When modifying criteria in beforeCount you have to make sure you are using the right
+	 * table alias which is different on normal count and relational call.
+	 * You can use {@link getTableAlias()} to get the alias used for the upcoming count call.
+	 * @param CModelEvent $event the event parameter
+	 * @see beforeCount
+	 * @since 1.1.14
+	 */
+	public function onBeforeCount($event)
+	{
+		$this->raiseEvent('onBeforeCount',$event);
+	}
+
 	/**
 	 * This method is invoked before saving a record (after validation, if any).
 	 * The default implementation raises the {@link onBeforeSave} event.
@@ -968,6 +1008,20 @@ protected function beforeFind()
 		}
 	}
 
+	/**
+	 * This method is invoked before an AR finder executes a count call.
+	 * The count calls include {@link count} and {@link countByAttributes}
+	 * The default implementation raises the {@link onBeforeCount} event.
+	 * If you override this method, make sure you call the parent implementation
+	 * so that the event is raised properly.
+	 * @since 1.1.14
+	 */
+	protected function beforeCount()
+	{
+		if($this->hasEventHandler('onBeforeCount'))
+			$this->onBeforeCount(new CEvent($this));
+	}
+
 	/**
 	 * This method is invoked after each record is instantiated by a find method.
 	 * The default implementation raises the {@link onAfterFind} event.
@@ -1091,8 +1145,8 @@ public function update($attributes=null)
 	 * @param array $attributes attributes to be updated. Each element represents an attribute name
 	 * or an attribute value indexed by its name. If the latter, the record's
 	 * attribute will be changed accordingly before saving.
+	 * @throws CDbException if the record is new
 	 * @return boolean whether the update is successful
-	 * @throws CException if the record is new or any database error
 	 */
 	public function saveAttributes($attributes)
 	{
@@ -1155,8 +1209,8 @@ public function saveCounters($counters)
 
 	/**
 	 * Deletes the row corresponding to this active record.
+	 * @throws CDbException if the record is new
 	 * @return boolean whether the deletion is successful.
-	 * @throws CException if the record is new
 	 */
 	public function delete()
 	{
@@ -1293,12 +1347,12 @@ protected function query($criteria,$all=false)
 		{
 			if(!$all)
 				$criteria->limit=1;
-			$command=$this->getCommandBuilder()->createFindCommand($this->getTableSchema(),$criteria);
+			$command=$this->getCommandBuilder()->createFindCommand($this->getTableSchema(),$criteria,$this->getTableAlias());
 			return $all ? $this->populateRecords($command->queryAll(), true, $criteria->index) : $this->populateRecord($command->queryRow());
 		}
 		else
 		{
-			$finder=new CActiveFinder($this,$criteria->with);
+			$finder=$this->getActiveFinder($criteria->with);
 			return $finder->query($criteria,$all);
 		}
 	}
@@ -1407,7 +1461,7 @@ public function find($condition='',$params=array())
 	 * See {@link find()} for detailed explanation about $condition and $params.
 	 * @param mixed $condition query condition or criteria.
 	 * @param array $params parameters to be bound to an SQL statement.
-	 * @return array list of active records satisfying the specified condition. An empty array is returned if none is found.
+	 * @return CActiveRecord[] list of active records satisfying the specified condition. An empty array is returned if none is found.
 	 */
 	public function findAll($condition='',$params=array())
 	{
@@ -1438,7 +1492,7 @@ public function findByPk($pk,$condition='',$params=array())
 	 * @param mixed $pk primary key value(s). Use array for multiple primary keys. For composite key, each key value must be an array (column name=>column value).
 	 * @param mixed $condition query condition or criteria.
 	 * @param array $params parameters to be bound to an SQL statement.
-	 * @return array the records found. An empty array is returned if none is found.
+	 * @return CActiveRecord[] the records found. An empty array is returned if none is found.
 	 */
 	public function findAllByPk($pk,$condition='',$params=array())
 	{
@@ -1472,7 +1526,7 @@ public function findByAttributes($attributes,$condition='',$params=array())
 	 * An attribute value can be an array which will be used to generate an IN condition.
 	 * @param mixed $condition query condition or criteria.
 	 * @param array $params parameters to be bound to an SQL statement.
-	 * @return array the records found. An empty array is returned if none is found.
+	 * @return CActiveRecord[] the records found. An empty array is returned if none is found.
 	 */
 	public function findAllByAttributes($attributes,$condition='',$params=array())
 	{
@@ -1495,7 +1549,7 @@ public function findBySql($sql,$params=array())
 		if(($criteria=$this->getDbCriteria(false))!==null && !empty($criteria->with))
 		{
 			$this->resetScope(false);
-			$finder=new CActiveFinder($this,$criteria->with);
+			$finder=$this->getActiveFinder($criteria->with);
 			return $finder->findBySql($sql,$params);
 		}
 		else
@@ -1509,7 +1563,7 @@ public function findBySql($sql,$params=array())
 	 * Finds all active records using the specified SQL statement.
 	 * @param string $sql the SQL statement
 	 * @param array $params parameters to be bound to the SQL statement
-	 * @return array the records found. An empty array is returned if none is found.
+	 * @return CActiveRecord[] the records found. An empty array is returned if none is found.
 	 */
 	public function findAllBySql($sql,$params=array())
 	{
@@ -1518,7 +1572,7 @@ public function findAllBySql($sql,$params=array())
 		if(($criteria=$this->getDbCriteria(false))!==null && !empty($criteria->with))
 		{
 			$this->resetScope(false);
-			$finder=new CActiveFinder($this,$criteria->with);
+			$finder=$this->getActiveFinder($criteria->with);
 			return $finder->findAllBySql($sql,$params);
 		}
 		else
@@ -1539,6 +1593,7 @@ public function count($condition='',$params=array())
 	{
 		Yii::trace(get_class($this).'.count()','system.db.ar.CActiveRecord');
 		$builder=$this->getCommandBuilder();
+		$this->beforeCount();
 		$criteria=$builder->createCriteria($condition,$params);
 		$this->applyScopes($criteria);
 
@@ -1546,7 +1601,7 @@ public function count($condition='',$params=array())
 			return $builder->createCountCommand($this->getTableSchema(),$criteria)->queryScalar();
 		else
 		{
-			$finder=new CActiveFinder($this,$criteria->with);
+			$finder=$this->getActiveFinder($criteria->with);
 			return $finder->count($criteria);
 		}
 	}
@@ -1566,6 +1621,7 @@ public function countByAttributes($attributes,$condition='',$params=array())
 		Yii::trace(get_class($this).'.countByAttributes()','system.db.ar.CActiveRecord');
 		$prefix=$this->getTableAlias(true).'.';
 		$builder=$this->getCommandBuilder();
+		$this->beforeCount();
 		$criteria=$builder->createColumnCriteria($this->getTableSchema(),$attributes,$condition,$params,$prefix);
 		$this->applyScopes($criteria);
 
@@ -1573,7 +1629,7 @@ public function countByAttributes($attributes,$condition='',$params=array())
 			return $builder->createCountCommand($this->getTableSchema(),$criteria)->queryScalar();
 		else
 		{
-			$finder=new CActiveFinder($this,$criteria->with);
+			$finder=$this->getActiveFinder($criteria->with);
 			return $finder->count($criteria);
 		}
 	}
@@ -1589,6 +1645,7 @@ public function countByAttributes($attributes,$condition='',$params=array())
 	public function countBySql($sql,$params=array())
 	{
 		Yii::trace(get_class($this).'.countBySql()','system.db.ar.CActiveRecord');
+		$this->beforeCount();
 		return $this->getCommandBuilder()->createSqlCommand($sql,$params)->queryScalar();
 	}
 
@@ -1610,11 +1667,11 @@ public function exists($condition='',$params=array())
 		$this->applyScopes($criteria);
 
 		if(empty($criteria->with))
-			return $builder->createFindCommand($table,$criteria)->queryRow()!==false;
+			return $builder->createFindCommand($table,$criteria,$this->getTableAlias(false, false))->queryRow()!==false;
 		else
 		{
 			$criteria->select='*';
-			$finder=new CActiveFinder($this,$criteria->with);
+			$finder=$this->getActiveFinder($criteria->with);
 			return $finder->count($criteria)>0;
 		}
 	}
@@ -1820,7 +1877,7 @@ public function populateRecord($attributes,$callAfterFind=true)
 	 * @param boolean $callAfterFind whether to call {@link afterFind} after each record is populated.
 	 * @param string $index the name of the attribute whose value will be used as indexes of the query result array.
 	 * If null, it means the array will be indexed by zero-based integers.
-	 * @return array list of active records.
+	 * @return CActiveRecord[] list of active records.
 	 */
 	public function populateRecords($data,$callAfterFind=true,$index=null)
 	{
@@ -2089,6 +2146,12 @@ class CActiveRelation extends CBaseActiveRelation
 	 * @since 1.1.9
 	 */
 	 public $scopes;
+	/**
+	 * @var string the name of the relation that should be used as the bridge to this relation.
+	 * Defaults to null, meaning don't use any bridge.
+	 * @since 1.1.7
+	 */
+	public $through;
 
 	/**
 	 * Merges this relation with a criteria specified dynamically.
@@ -2155,12 +2218,6 @@ class CBelongsToRelation extends CActiveRelation
  */
 class CHasOneRelation extends CActiveRelation
 {
-	/**
-	 * @var string the name of the relation that should be used as the bridge to this relation.
-	 * Defaults to null, meaning don't use any bridge.
-	 * @since 1.1.7
-	 */
-	public $through;
 }
 
 
@@ -2185,12 +2242,6 @@ class CHasManyRelation extends CActiveRelation
 	 * Defaults to null, meaning using zero-based integer IDs.
 	 */
 	public $index;
-	/**
-	 * @var string the name of the relation that should be used as the bridge to this relation.
-	 * Defaults to null, meaning don't use any bridge.
-	 * @since 1.1.7
-	 */
-	public $through;
 
 	/**
 	 * Merges this relation with a criteria specified dynamically.
@@ -2295,20 +2346,21 @@ class CActiveRecordMetaData
 	 */
 	public $attributeDefaults=array();
 
-	private $_model;
+	private $_modelClassName;
 
 	/**
 	 * Constructor.
 	 * @param CActiveRecord $model the model instance
+	 * @throws CDbException if specified table for active record class cannot be found in the database
 	 */
 	public function __construct($model)
 	{
-		$this->_model=$model;
+		$this->_modelClassName=get_class($model);
 
 		$tableName=$model->tableName();
 		if(($table=$model->getDbConnection()->getSchema()->getTable($tableName))===null)
 			throw new CDbException(Yii::t('yii','The table "{table}" for active record class "{class}" cannot be found in the database.',
-				array('{class}'=>get_class($model),'{table}'=>$tableName)));
+				array('{class}'=>$this->_modelClassName,'{table}'=>$tableName)));
 		if($table->primaryKey===null)
 		{
 			$table->primaryKey=$model->primaryKey();
@@ -2347,7 +2399,7 @@ public function __construct($model)
 	 * @throws CDbException
 	 * @param string $name $name Name of the relation.
 	 * @param array $config $config Relation parameters.
-     * @return void
+	 * @return void
 	 * @since 1.1.2
 	 */
 	public function addRelation($name,$config)
@@ -2355,7 +2407,7 @@ public function addRelation($name,$config)
 		if(isset($config[0],$config[1],$config[2]))  // relation class, AR class, FK
 			$this->relations[$name]=new $config[0]($name,$config[1],$config[2],array_slice($config,3));
 		else
-			throw new CDbException(Yii::t('yii','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.', array('{class}'=>get_class($this->_model),'{relation}'=>$name)));
+			throw new CDbException(Yii::t('yii','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.', array('{class}'=>$this->_modelClassName,'{relation}'=>$name)));
 	}
 
 	/**
diff --git a/framework/db/ar/CActiveRecordBehavior.php b/framework/db/ar/CActiveRecordBehavior.php
index 260823e1847..373d6190323 100644
--- a/framework/db/ar/CActiveRecordBehavior.php
+++ b/framework/db/ar/CActiveRecordBehavior.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -35,6 +35,7 @@ public function events()
 			'onAfterDelete'=>'afterDelete',
 			'onBeforeFind'=>'beforeFind',
 			'onAfterFind'=>'afterFind',
+			'onBeforeCount'=>'beforeCount',
 		));
 	}
 
@@ -99,4 +100,15 @@ protected function beforeFind($event)
 	protected function afterFind($event)
 	{
 	}
+
+	/**
+	 * Responds to {@link CActiveRecord::onBeforeCount} event.
+	 * Override this method and make it public if you want to handle the corresponding event
+	 * of the {@link CBehavior::owner owner}.
+	 * @param CEvent $event event parameter
+	 * @since 1.1.14
+	 */
+	protected function beforeCount($event)
+	{
+	}
 }
diff --git a/framework/db/schema/CDbColumnSchema.php b/framework/db/schema/CDbColumnSchema.php
index 7dc600226d6..027af324bd3 100644
--- a/framework/db/schema/CDbColumnSchema.php
+++ b/framework/db/schema/CDbColumnSchema.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/db/schema/CDbCommandBuilder.php b/framework/db/schema/CDbCommandBuilder.php
index 5098c6fdf31..603b9129967 100644
--- a/framework/db/schema/CDbCommandBuilder.php
+++ b/framework/db/schema/CDbCommandBuilder.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -237,7 +237,7 @@ public function createInsertCommand($table,$data)
 			foreach($pks as $pk)
 			{
 				$fields[]=$table->getColumn($pk)->rawName;
-				$placeholders[]='NULL';
+				$placeholders[]=$this->getIntegerPrimaryKeyDefaultValue();
 			}
 		}
 		$sql="INSERT INTO {$table->rawName} (".implode(', ',$fields).') VALUES ('.implode(', ',$placeholders).')';
@@ -249,11 +249,113 @@ public function createInsertCommand($table,$data)
 		return $command;
 	}
 
+	/**
+	 * Creates a multiple INSERT command.
+	 * This method could be used to achieve better performance during insertion of the large
+	 * amount of data into the database tables.
+	 * @param mixed $table the table schema ({@link CDbTableSchema}) or the table name (string).
+	 * @param array[] $data list data to be inserted, each value should be an array in format (column name=>column value).
+	 * If a key is not a valid column name, the corresponding value will be ignored.
+	 * @return CDbCommand multiple insert command
+	 * @since 1.1.14
+	 */
+	public function createMultipleInsertCommand($table,array $data)
+	{
+		return $this->composeMultipleInsertCommand($table,$data);
+	}
+
+	/**
+	 * Creates a multiple INSERT command.
+	 * This method compose the SQL expression via given part templates, providing ability to adjust
+	 * command for different SQL syntax.
+	 * @param mixed $table the table schema ({@link CDbTableSchema}) or the table name (string).
+	 * @param array[] $data list data to be inserted, each value should be an array in format (column name=>column value).
+	 * If a key is not a valid column name, the corresponding value will be ignored.
+	 * @param array $templates templates for the SQL parts.
+	 * @return CDbCommand multiple insert command
+	 */
+	protected function composeMultipleInsertCommand($table,array $data,array $templates=array())
+	{
+		$templates=array_merge(
+			array(
+				'main'=>'INSERT INTO {{tableName}} ({{columnInsertNames}}) VALUES {{rowInsertValues}}',
+				'columnInsertValue'=>'{{value}}',
+				'columnInsertValueGlue'=>', ',
+				'rowInsertValue'=>'({{columnInsertValues}})',
+				'rowInsertValueGlue'=>', ',
+				'columnInsertNameGlue'=>', ',
+			),
+			$templates
+		);
+		$this->ensureTable($table);
+		$tableName=$this->getDbConnection()->quoteTableName($table->name);
+		$params=array();
+		$columnInsertNames=array();
+		$rowInsertValues=array();
+
+		$columns=array();
+		foreach($data as $rowData)
+		{
+			foreach($rowData as $columnName=>$columnValue)
+			{
+				if(!in_array($columnName,$columns,true))
+					if($table->getColumn($columnName)!==null)
+						$columns[]=$columnName;
+			}
+		}
+		foreach($columns as $name)
+			$columnInsertNames[$name]=$this->getDbConnection()->quoteColumnName($name);
+		$columnInsertNamesSqlPart=implode($templates['columnInsertNameGlue'],$columnInsertNames);
+
+		foreach($data as $rowKey=>$rowData)
+		{
+			$columnInsertValues=array();
+			foreach($columns as $columnName)
+			{
+				$column=$table->getColumn($columnName);
+				$columnValue=array_key_exists($columnName,$rowData) ? $rowData[$columnName] : new CDbExpression('NULL');
+				if($columnValue instanceof CDbExpression)
+				{
+					$columnInsertValue=$columnValue->expression;
+					foreach($columnValue->params as $columnValueParamName=>$columnValueParam)
+						$params[$columnValueParamName]=$columnValueParam;
+				}
+				else
+				{
+					$columnInsertValue=':'.$columnName.'_'.$rowKey;
+					$params[':'.$columnName.'_'.$rowKey]=$column->typecast($columnValue);
+				}
+				$columnInsertValues[]=strtr($templates['columnInsertValue'],array(
+					'{{column}}'=>$columnInsertNames[$columnName],
+					'{{value}}'=>$columnInsertValue,
+				));
+			}
+			$rowInsertValues[]=strtr($templates['rowInsertValue'],array(
+				'{{tableName}}'=>$tableName,
+				'{{columnInsertNames}}'=>$columnInsertNamesSqlPart,
+				'{{columnInsertValues}}'=>implode($templates['columnInsertValueGlue'],$columnInsertValues)
+			));
+		}
+
+		$sql=strtr($templates['main'],array(
+			'{{tableName}}'=>$tableName,
+			'{{columnInsertNames}}'=>$columnInsertNamesSqlPart,
+			'{{rowInsertValues}}'=>implode($templates['rowInsertValueGlue'], $rowInsertValues),
+		));
+		$command=$this->getDbConnection()->createCommand($sql);
+
+		foreach($params as $name=>$value)
+			$command->bindValue($name,$value);
+
+		return $command;
+	}
+
 	/**
 	 * Creates an UPDATE command.
 	 * @param mixed $table the table schema ({@link CDbTableSchema}) or the table name (string).
 	 * @param array $data list of columns to be updated (name=>value)
 	 * @param CDbCriteria $criteria the query criteria
+	 * @throws CDbException if no columns are being updated for the given table
 	 * @return CDbCommand update command.
 	 */
 	public function createUpdateCommand($table,$data,$criteria)
@@ -306,8 +408,8 @@ public function createUpdateCommand($table,$data,$criteria)
 	 * @param mixed $table the table schema ({@link CDbTableSchema}) or the table name (string).
 	 * @param array $counters counters to be updated (counter increments/decrements indexed by column names.)
 	 * @param CDbCriteria $criteria the query criteria
+	 * @throws CDbException if no columns are being updated for the given table
 	 * @return CDbCommand the created command
-	 * @throws CException if no counter is specified
 	 */
 	public function createUpdateCounterCommand($table,$counters,$criteria)
 	{
@@ -550,6 +652,7 @@ public function createPkCondition($table,$values,$prefix=null)
 	 * This is only used when the third parameter is a string (query condition).
 	 * In other cases, please use {@link CDbCriteria::params} to set parameters.
 	 * @param string $prefix column prefix (ended with dot). If null, it will be the table name
+	 * @throws CDbException if specified column is not found in given table
 	 * @return CDbCriteria the created query criteria
 	 */
 	public function createColumnCriteria($table,$columns,$condition='',$params=array(),$prefix=null)
@@ -611,6 +714,7 @@ public function createColumnCriteria($table,$columns,$condition='',$params=array
 	 * @param mixed $keywords search keywords. This can be either a string with space-separated keywords or an array of keywords.
 	 * @param string $prefix optional column prefix (with dot at the end). If null, the table name will be used as the prefix.
 	 * @param boolean $caseSensitive whether the search is case-sensitive. Defaults to true.
+	 * @throws CDbException if specified column is not found in given table
 	 * @return string SQL search condition matching on a set of columns. An empty string is returned
 	 * if either the column array or the keywords are empty.
 	 */
@@ -650,6 +754,7 @@ public function createSearchCondition($table,$columns,$keywords,$prefix=null,$ca
 	 * or an array of column names. If the latter, it stands for a composite key.
 	 * @param array $values list of key values to be selected within
 	 * @param string $prefix column prefix (ended with dot). If null, it will be the table name
+	 * @throws CDbException if specified column is not found in given table
 	 * @return string the expression for selection
 	 */
 	public function createInCondition($table,$columnName,$values,$prefix=null)
@@ -674,6 +779,7 @@ public function createInCondition($table,$columnName,$values,$prefix=null)
 				array('{table}'=>$table->name, '{column}'=>$columnName)));
 			$column=$table->columns[$columnName];
 
+			$values=array_values($values);
 			foreach($values as &$value)
 			{
 				$value=$column->typecast($value);
@@ -753,4 +859,15 @@ protected function ensureTable(&$table)
 			throw new CDbException(Yii::t('yii','Table "{table}" does not exist.',
 				array('{table}'=>$tableName)));
 	}
-}
\ No newline at end of file
+
+	/**
+	 * Returns default value of the integer/serial primary key. Default value means that the next
+	 * autoincrement/sequence value would be used.
+	 * @return string default value of the integer/serial primary key.
+	 * @since 1.1.14
+	 */
+	protected function getIntegerPrimaryKeyDefaultValue()
+	{
+		return 'NULL';
+	}
+}
diff --git a/framework/db/schema/CDbCriteria.php b/framework/db/schema/CDbCriteria.php
index 0cfc4272e36..95061c483d4 100644
--- a/framework/db/schema/CDbCriteria.php
+++ b/framework/db/schema/CDbCriteria.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -183,7 +183,7 @@ public function __wakeup()
 		}
 		if (!empty($map))
 		{
-			$sqlContentFieldNames = array(
+			$sqlContentFieldNames=array(
 				'select',
 				'condition',
 				'order',
@@ -191,8 +191,14 @@ public function __wakeup()
 				'join',
 				'having',
 			);
-			foreach($sqlContentFieldNames as $fieldName)
-				$this->$fieldName=strtr($this->$fieldName,$map);
+			foreach($sqlContentFieldNames as $field)
+			{
+				if(is_array($this->$field))
+					foreach($this->$field as $k=>$v)
+						$this->{$field}[$k]=strtr($v,$map);
+				else
+					$this->$field=strtr($this->$field,$map);
+			}
 		}
 		$this->params=$params;
 	}
diff --git a/framework/db/schema/CDbExpression.php b/framework/db/schema/CDbExpression.php
index f477130302f..1bc6343d774 100644
--- a/framework/db/schema/CDbExpression.php
+++ b/framework/db/schema/CDbExpression.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/db/schema/CDbSchema.php b/framework/db/schema/CDbSchema.php
index ed564542b90..8ea61ca960e 100644
--- a/framework/db/schema/CDbSchema.php
+++ b/framework/db/schema/CDbSchema.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -264,10 +264,11 @@ public function compareTableNames($name1,$name2)
 	/**
 	 * Resets the sequence value of a table's primary key.
 	 * The sequence will be reset such that the primary key of the next new row inserted
-	 * will have the specified value or 1.
+	 * will have the specified value or max value of a primary key plus one (i.e. sequence trimming).
 	 * @param CDbTableSchema $table the table schema whose primary key sequence will be reset
-	 * @param mixed $value the value for the primary key of the next new row inserted. If this is not set,
-	 * the next new row's primary key will have a value 1.
+	 * @param integer|null $value the value for the primary key of the next new row inserted.
+	 * If this is not set, the next new row's primary key will have the max value of a primary
+	 * key plus one (i.e. sequence trimming).
 	 * @since 1.1
 	 */
 	public function resetSequence($table,$value=null)
@@ -300,6 +301,7 @@ protected function createCommandBuilder()
 	 * because the default implementation simply throws an exception.
 	 * @param string $schema the schema of the tables. Defaults to empty string, meaning the current or default schema.
 	 * If not empty, the returned table names will be prefixed with the schema name.
+	 * @throws CDbException if current schema does not support fetching all table names
 	 * @return array all table names in the database.
 	 */
 	protected function findTableNames($schema='')
@@ -564,13 +566,15 @@ public function dropIndex($name, $table)
 	 * Builds a SQL statement for adding a primary key constraint to an existing table.
 	 * @param string $name the name of the primary key constraint.
 	 * @param string $table the table that the primary key constraint will be added to.
-	 * @param string $columns the name of the column to that the constraint will be added on.
+	 * @param string|array $columns comma separated string or array of columns that the primary key will consist of.
+	 * Array value can be passed since 1.1.14.
 	 * @return string the SQL statement for adding a primary key constraint to an existing table.
 	 * @since 1.1.13
 	 */
 	public function addPrimaryKey($name,$table,$columns)
 	{
-		$columns=preg_split('/\s*,\s*/',$columns,-1,PREG_SPLIT_NO_EMPTY);
+		if(is_string($columns))
+			$columns=preg_split('/\s*,\s*/',$columns,-1,PREG_SPLIT_NO_EMPTY);
 		foreach($columns as $i=>$col)
 			$columns[$i]=$this->quoteColumnName($col);
 		return 'ALTER TABLE ' . $this->quoteTableName($table) . ' ADD CONSTRAINT '
@@ -578,7 +582,6 @@ public function addPrimaryKey($name,$table,$columns)
 			. implode(', ', $columns). ' )';
 	}
 
-
 	/**
 	 * Builds a SQL statement for removing a primary key constraint to an existing table.
 	 * @param string $name the name of the primary key constraint to be removed.
@@ -591,7 +594,4 @@ public function dropPrimaryKey($name,$table)
 		return 'ALTER TABLE ' . $this->quoteTableName($table) . ' DROP CONSTRAINT '
 			. $this->quoteColumnName($name);
 	}
-
-
-
 }
diff --git a/framework/db/schema/CDbTableSchema.php b/framework/db/schema/CDbTableSchema.php
index 251ea45e1d7..52d986d577b 100644
--- a/framework/db/schema/CDbTableSchema.php
+++ b/framework/db/schema/CDbTableSchema.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/db/schema/mssql/CMssqlColumnSchema.php b/framework/db/schema/mssql/CMssqlColumnSchema.php
index a59674f3eb8..fc4065d06c7 100644
--- a/framework/db/schema/mssql/CMssqlColumnSchema.php
+++ b/framework/db/schema/mssql/CMssqlColumnSchema.php
@@ -5,7 +5,7 @@
  * @author Qiang Xue 
  * @author Christophe Boulain 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -19,20 +19,20 @@
 class CMssqlColumnSchema extends CDbColumnSchema
 {
 
-     /**
-     * Initializes the column with its DB type and default value.
-     * This sets up the column's PHP type, size, precision, scale as well as default value.
-     * @param string $dbType the column's DB type
-     * @param mixed $defaultValue the default value
-     */
-     public function init($dbType, $defaultValue)
-     {
-        if ($defaultValue=='(NULL)')
-        {
-            $defaultValue=null;
-        }
-        parent::init($dbType, $defaultValue);
-     }
+	/**
+	 * Initializes the column with its DB type and default value.
+	 * This sets up the column's PHP type, size, precision, scale as well as default value.
+	 * @param string $dbType the column's DB type
+	 * @param mixed $defaultValue the default value
+	 */
+	public function init($dbType, $defaultValue)
+	{
+		if ($defaultValue=='(NULL)')
+		{
+			$defaultValue=null;
+		}
+		parent::init($dbType, $defaultValue);
+	}
 
 
 	/**
diff --git a/framework/db/schema/mssql/CMssqlCommandBuilder.php b/framework/db/schema/mssql/CMssqlCommandBuilder.php
index 140a907b4f0..56aedfd59d1 100644
--- a/framework/db/schema/mssql/CMssqlCommandBuilder.php
+++ b/framework/db/schema/mssql/CMssqlCommandBuilder.php
@@ -6,7 +6,7 @@
  * @author Christophe Boulain 
  * @author Wei Zhuo 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -55,6 +55,7 @@ public function createFindCommand($table,$criteria,$alias='t')
 	 * @param CDbTableSchema $table the table metadata
 	 * @param array $data list of columns to be updated (name=>value)
 	 * @param CDbCriteria $criteria the query criteria
+	 * @throws CDbException if no columns are being updated
 	 * @return CDbCommand update command.
 	 */
 	public function createUpdateCommand($table,$data,$criteria)
diff --git a/framework/db/schema/mssql/CMssqlPdoAdapter.php b/framework/db/schema/mssql/CMssqlPdoAdapter.php
index 454b72071fa..cc7af7a01e5 100644
--- a/framework/db/schema/mssql/CMssqlPdoAdapter.php
+++ b/framework/db/schema/mssql/CMssqlPdoAdapter.php
@@ -4,7 +4,7 @@
  *
  * @author Christophe Boulain 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -25,7 +25,7 @@ class CMssqlPdoAdapter extends PDO
 	 */
 	public function lastInsertId ($sequence=NULL)
 	{
-        return $this->query('SELECT CAST(COALESCE(SCOPE_IDENTITY(), @@IDENTITY) AS bigint)')->fetchColumn();
+		return $this->query('SELECT CAST(COALESCE(SCOPE_IDENTITY(), @@IDENTITY) AS bigint)')->fetchColumn();
 	}
 
 	/**
diff --git a/framework/db/schema/mssql/CMssqlSchema.php b/framework/db/schema/mssql/CMssqlSchema.php
index 20be4191a08..32f87e912d3 100644
--- a/framework/db/schema/mssql/CMssqlSchema.php
+++ b/framework/db/schema/mssql/CMssqlSchema.php
@@ -5,7 +5,7 @@
  * @author Qiang Xue 
  * @author Christophe Boulain 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -24,20 +24,20 @@ class CMssqlSchema extends CDbSchema
 	 * @var array the abstract column types mapped to physical column types.
 	 * @since 1.1.6
 	 */
-    public $columnTypes=array(
-        'pk' => 'int IDENTITY PRIMARY KEY',
-        'string' => 'varchar(255)',
-        'text' => 'text',
-        'integer' => 'int',
-        'float' => 'float',
-        'decimal' => 'decimal',
-        'datetime' => 'datetime',
-        'timestamp' => 'timestamp',
-        'time' => 'time',
-        'date' => 'date',
-        'binary' => 'binary',
-        'boolean' => 'bit',
-    );
+	public $columnTypes=array(
+		'pk' => 'int IDENTITY PRIMARY KEY',
+		'string' => 'varchar(255)',
+		'text' => 'text',
+		'integer' => 'int',
+		'float' => 'float',
+		'decimal' => 'decimal',
+		'datetime' => 'datetime',
+		'timestamp' => 'timestamp',
+		'time' => 'time',
+		'date' => 'date',
+		'binary' => 'binary',
+		'boolean' => 'bit',
+	);
 
 	/**
 	 * Quotes a table name for use in a query.
@@ -81,23 +81,27 @@ public function compareTableNames($name1,$name2)
 	/**
 	 * Resets the sequence value of a table's primary key.
 	 * The sequence will be reset such that the primary key of the next new row inserted
-	 * will have the specified value or 1.
+	 * will have the specified value or max value of a primary key plus one (i.e. sequence trimming).
 	 * @param CDbTableSchema $table the table schema whose primary key sequence will be reset
-	 * @param mixed $value the value for the primary key of the next new row inserted. If this is not set,
-	 * the next new row's primary key will have a value 1.
+	 * @param integer|null $value the value for the primary key of the next new row inserted.
+	 * If this is not set, the next new row's primary key will have the max value of a primary
+	 * key plus one (i.e. sequence trimming).
 	 * @since 1.1.6
 	 */
 	public function resetSequence($table,$value=null)
 	{
-		if($table->sequenceName!==null)
-		{
-			$db=$this->getDbConnection();
-			if($value===null)
-				$value=$db->createCommand("SELECT MAX(`{$table->primaryKey}`) FROM {$table->rawName}")->queryScalar();
-			$value=(int)$value;
-			$name=strtr($table->rawName,array('['=>'',']'=>''));
-			$db->createCommand("DBCC CHECKIDENT ('$name', RESEED, $value)")->execute();
-		}
+		if($table->sequenceName===null)
+			return;
+		if($value!==null)
+			$value=(int)($value)-1;
+		else
+			$value=(int)$this->getDbConnection()
+				->createCommand("SELECT MAX([{$table->primaryKey}]) FROM {$table->rawName}")
+				->queryScalar();
+		$name=strtr($table->rawName,array('['=>'',']'=>''));
+		$this->getDbConnection()
+			->createCommand("DBCC CHECKIDENT ('$name',RESEED,$value)")
+			->execute();
 	}
 
 	private $_normalTables=array();  // non-view tables
@@ -190,13 +194,13 @@ protected function findPrimaryKey($table)
 
 		$sql = <<quoteTableName($kcu)} k
-		    LEFT JOIN {$this->quoteTableName($tc)} c
-		      ON k.table_name = c.table_name
-		     AND k.constraint_name = c.constraint_name
-		   WHERE c.constraint_type ='PRIMARY KEY'
-		   	    AND k.table_name = :table
-				AND k.table_schema = :schema
+		FROM {$this->quoteTableName($kcu)} k
+		LEFT JOIN {$this->quoteTableName($tc)} c
+		ON k.table_name = c.table_name
+			AND k.constraint_name = c.constraint_name
+		WHERE c.constraint_type ='PRIMARY KEY'
+			AND k.table_name = :table
+			AND k.table_schema = :schema
 EOD;
 		$command = $this->getDbConnection()->createCommand($sql);
 		$command->bindValue(':table', $table->name);
@@ -290,8 +294,16 @@ protected function findColumns($table)
 			 "LEFT OUTER JOIN sys.extended_properties AS t2 ON t1.ORDINAL_POSITION = t2.minor_id AND ".
 			 "object_name(t2.major_id) = t1.TABLE_NAME AND t2.class=1 AND t2.class_desc='OBJECT_OR_COLUMN' AND t2.name='MS_Description' ".
 			 "WHERE ".join(' AND ',$where);
-		if (($columns=$this->getDbConnection()->createCommand($sql)->queryAll())===array())
+		try
+		{
+			$columns=$this->getDbConnection()->createCommand($sql)->queryAll();
+			if(empty($columns))
+				return false;
+		}
+		catch(Exception $e)
+		{
 			return false;
+		}
 
 		foreach($columns as $column)
 		{
@@ -353,7 +365,7 @@ protected function findTableNames($schema='',$includeViews=true)
 		else
 			$condition="TABLE_TYPE='BASE TABLE'";
 		$sql=<<getDbConnection()->createCommand($sql);
@@ -365,7 +377,7 @@ protected function findTableNames($schema='',$includeViews=true)
 			if ($schema == self::DEFAULT_SCHEMA)
 				$names[]=$row['TABLE_NAME'];
 			else
-				$names[]=$schema.'.'.$row['TABLE_SCHEMA'].'.'.$row['TABLE_NAME'];
+				$names[]=$schema.'.'.$row['TABLE_NAME'];
 		}
 
 		return $names;
diff --git a/framework/db/schema/mssql/CMssqlSqlsrvPdoAdapter.php b/framework/db/schema/mssql/CMssqlSqlsrvPdoAdapter.php
index 91ae3d459ea..d0676c1e968 100644
--- a/framework/db/schema/mssql/CMssqlSqlsrvPdoAdapter.php
+++ b/framework/db/schema/mssql/CMssqlSqlsrvPdoAdapter.php
@@ -4,7 +4,7 @@
  *
  * @author Timur Ruziev 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2012 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -24,7 +24,7 @@ class CMssqlSqlsrvPdoAdapter extends PDO
 	 * string it returns empty string. But when parameter is not specified at all it's working as expected
 	 * and returns actual last inserted ID (like other PDO drivers).
 	 *
-	 * @param string|null the sequence name. Defaults to null.
+	 * @param string|null $sequence the sequence name. Defaults to null.
 	 * @return integer last inserted ID value.
 	 */
 	public function lastInsertId($sequence=null)
diff --git a/framework/db/schema/mssql/CMssqlTableSchema.php b/framework/db/schema/mssql/CMssqlTableSchema.php
index 7386dae8b35..cbcb07ffc06 100644
--- a/framework/db/schema/mssql/CMssqlTableSchema.php
+++ b/framework/db/schema/mssql/CMssqlTableSchema.php
@@ -5,7 +5,7 @@
  * @author Qiang Xue 
  * @author Christophe Boulain 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/db/schema/mysql/CMysqlColumnSchema.php b/framework/db/schema/mysql/CMysqlColumnSchema.php
index 61c7e058ea1..d0728a2bdc6 100644
--- a/framework/db/schema/mysql/CMysqlColumnSchema.php
+++ b/framework/db/schema/mysql/CMysqlColumnSchema.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -42,7 +42,9 @@ protected function extractType($dbType)
 	 */
 	protected function extractDefault($defaultValue)
 	{
-		if($this->dbType==='timestamp' && $defaultValue==='CURRENT_TIMESTAMP')
+		if(strncmp($this->dbType,'bit',3)===0)
+			$this->defaultValue=bindec(trim($defaultValue,'b\''));
+		elseif($this->dbType==='timestamp' && $defaultValue==='CURRENT_TIMESTAMP')
 			$this->defaultValue=null;
 		else
 			parent::extractDefault($defaultValue);
@@ -54,18 +56,19 @@ protected function extractDefault($defaultValue)
 	 */
 	protected function extractLimit($dbType)
 	{
-		if (strncmp($dbType, 'enum', 4)===0 && preg_match('/\((.*)\)/',$dbType,$matches))
+		if (strncmp($dbType, 'enum', 4)===0 && preg_match('/\(([\'"])(.*)\\1\)/',$dbType,$matches))
 		{
-			$values = explode(',', $matches[1]);
+			// explode by (single or double) quote and comma (ENUM values may contain commas)
+			$values = explode($matches[1].','.$matches[1], $matches[2]);
 			$size = 0;
 			foreach($values as $value)
 			{
 				if(($n=strlen($value)) > $size)
 					$size=$n;
 			}
-			$this->size = $this->precision = $size-2;
+			$this->size = $this->precision = $size;
 		}
 		else
 			parent::extractLimit($dbType);
 	}
-}
\ No newline at end of file
+}
diff --git a/framework/db/schema/mysql/CMysqlCommandBuilder.php b/framework/db/schema/mysql/CMysqlCommandBuilder.php
index cb95070887f..539a6486b04 100644
--- a/framework/db/schema/mysql/CMysqlCommandBuilder.php
+++ b/framework/db/schema/mysql/CMysqlCommandBuilder.php
@@ -4,7 +4,7 @@
  *
  * @author Carsten Brandt 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -20,6 +20,7 @@ class CMysqlCommandBuilder extends CDbCommandBuilder
 	/**
 	 * Alters the SQL to apply JOIN clause.
 	 * This method handles the mysql specific syntax where JOIN has to come before SET in UPDATE statement
+	 * and for DELETE where JOIN has to be after FROM part.
 	 * @param string $sql the SQL statement to be altered
 	 * @param string $join the JOIN clause (starting with join type, such as INNER JOIN)
 	 * @return string the altered SQL statement
@@ -31,7 +32,12 @@ public function applyJoin($sql,$join)
 
 		if(strpos($sql,'UPDATE')===0 && ($pos=strpos($sql,'SET'))!==false)
 			return substr($sql,0,$pos).$join.' '.substr($sql,$pos);
+		elseif(strpos($sql,'DELETE FROM ')===0)
+		{
+			$tableName=substr($sql,12);
+			return "DELETE {$tableName} FROM {$tableName} ".$join;
+		}
 		else
 			return $sql.' '.$join;
 	}
-}
\ No newline at end of file
+}
diff --git a/framework/db/schema/mysql/CMysqlSchema.php b/framework/db/schema/mysql/CMysqlSchema.php
index 0e5fe8406b4..eb1049d56d0 100644
--- a/framework/db/schema/mysql/CMysqlSchema.php
+++ b/framework/db/schema/mysql/CMysqlSchema.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -77,22 +77,29 @@ public function compareTableNames($name1,$name2)
 	/**
 	 * Resets the sequence value of a table's primary key.
 	 * The sequence will be reset such that the primary key of the next new row inserted
-	 * will have the specified value or 1.
+	 * will have the specified value or max value of a primary key plus one (i.e. sequence trimming).
 	 * @param CDbTableSchema $table the table schema whose primary key sequence will be reset
-	 * @param mixed $value the value for the primary key of the next new row inserted. If this is not set,
-	 * the next new row's primary key will have a value 1.
+	 * @param integer|null $value the value for the primary key of the next new row inserted.
+	 * If this is not set, the next new row's primary key will have the max value of a primary
+	 * key plus one (i.e. sequence trimming).
 	 * @since 1.1
 	 */
 	public function resetSequence($table,$value=null)
 	{
-		if($table->sequenceName!==null)
+		if($table->sequenceName===null)
+			return;
+		if($value!==null)
+			$value=(int)$value;
+		else
 		{
-			if($value===null)
-				$value=$this->getDbConnection()->createCommand("SELECT MAX(`{$table->primaryKey}`) FROM {$table->rawName}")->queryScalar()+1;
-			else
-				$value=(int)$value;
-			$this->getDbConnection()->createCommand("ALTER TABLE {$table->rawName} AUTO_INCREMENT=$value")->execute();
+			$value=(int)$this->getDbConnection()
+				->createCommand("SELECT MAX(`{$table->primaryKey}`) FROM {$table->rawName}")
+				->queryScalar();
+			$value++;
 		}
+		$this->getDbConnection()
+			->createCommand("ALTER TABLE {$table->rawName} AUTO_INCREMENT=$value")
+			->execute();
 	}
 
 	/**
@@ -196,7 +203,8 @@ protected function createColumn($column)
 		$c->isForeignKey=false;
 		$c->init($column['Type'],$column['Default']);
 		$c->autoIncrement=strpos(strtolower($column['Extra']),'auto_increment')!==false;
-		$c->comment=$column['Comment'];
+		if(isset($column['Comment']))
+			$c->comment=$column['Comment'];
 
 		return $c;
 	}
@@ -271,6 +279,7 @@ protected function createCommandBuilder()
 	 * @param string $table the table whose column is to be renamed. The name will be properly quoted by the method.
 	 * @param string $name the old name of the column. The name will be properly quoted by the method.
 	 * @param string $newName the new name of the column. The name will be properly quoted by the method.
+	 * @throws CDbException if specified column is not found in given table
 	 * @return string the SQL statement for renaming a DB column.
 	 * @since 1.1.6
 	 */
@@ -331,4 +340,22 @@ public function dropPrimaryKey($name,$table)
 		return 'ALTER TABLE ' . $this->quoteTableName($table) . ' DROP PRIMARY KEY';
 
 	}
+	
+	/**
+	 * Builds a SQL statement for adding a primary key constraint to a table.
+	 * @param string $name not used in the MySQL syntax, the primary key is always called PRIMARY and is reserved.
+	 * @param string $table the table that the primary key constraint will be added to.
+	 * @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.14
+	 */
+	public function addPrimaryKey($name,$table,$columns)
+	{
+		if(is_string($columns))
+			$columns=preg_split('/\s*,\s*/',$columns,-1,PREG_SPLIT_NO_EMPTY);
+		foreach($columns as $i=>$col)
+			$columns[$i]=$this->quoteColumnName($col);
+		return 'ALTER TABLE ' . $this->quoteTableName($table) . ' ADD PRIMARY KEY ('
+			. implode(', ', $columns). ' )';
+	}
 }
diff --git a/framework/db/schema/mysql/CMysqlTableSchema.php b/framework/db/schema/mysql/CMysqlTableSchema.php
index 5a9bab09490..7ee44e6a799 100644
--- a/framework/db/schema/mysql/CMysqlTableSchema.php
+++ b/framework/db/schema/mysql/CMysqlTableSchema.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/db/schema/oci/COciColumnSchema.php b/framework/db/schema/oci/COciColumnSchema.php
index f920d4b31df..4db6189050d 100644
--- a/framework/db/schema/oci/COciColumnSchema.php
+++ b/framework/db/schema/oci/COciColumnSchema.php
@@ -4,7 +4,7 @@
  *
  * @author Ricardo Grana 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/db/schema/oci/COciCommandBuilder.php b/framework/db/schema/oci/COciCommandBuilder.php
index 5a2d2443b30..89013a7be08 100644
--- a/framework/db/schema/oci/COciCommandBuilder.php
+++ b/framework/db/schema/oci/COciCommandBuilder.php
@@ -4,7 +4,7 @@
  *
  * @author Ricardo Grana 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -121,4 +121,27 @@ public function createInsertCommand($table,$data)
 
 		return $command;
 	}
+
+	/**
+	 * Creates a multiple INSERT command.
+	 * This method could be used to achieve better performance during insertion of the large
+	 * amount of data into the database tables.
+	 * @param mixed $table the table schema ({@link CDbTableSchema}) or the table name (string).
+	 * @param array[] $data list data to be inserted, each value should be an array in format (column name=>column value).
+	 * If a key is not a valid column name, the corresponding value will be ignored.
+	 * @return CDbCommand multiple insert command
+	 * @since 1.1.14
+	 */
+	public function createMultipleInsertCommand($table,array $data)
+	{
+		$templates=array(
+			'main'=>'INSERT ALL {{rowInsertValues}} SELECT * FROM dual',
+			'columnInsertValue'=>'{{value}}',
+			'columnInsertValueGlue'=>', ',
+			'rowInsertValue'=>'INTO {{tableName}} ({{columnInsertNames}}) VALUES ({{columnInsertValues}})',
+			'rowInsertValueGlue'=>' ',
+			'columnInsertNameGlue'=>', ',
+		);
+		return $this->composeMultipleInsertCommand($table,$data,$templates);
+	}
 }
\ No newline at end of file
diff --git a/framework/db/schema/oci/COciSchema.php b/framework/db/schema/oci/COciSchema.php
index 06b7f231925..353bbcc9bb1 100644
--- a/framework/db/schema/oci/COciSchema.php
+++ b/framework/db/schema/oci/COciSchema.php
@@ -4,7 +4,7 @@
  *
  * @author Ricardo Grana 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -24,21 +24,21 @@ class COciSchema extends CDbSchema
 	 * @var array the abstract column types mapped to physical column types.
 	 * @since 1.1.6
 	 */
-    public $columnTypes=array(
-        'pk' => 'NUMBER(10) NOT NULL PRIMARY KEY',
-        'string' => 'VARCHAR2(255)',
-        'text' => 'CLOB',
-        'integer' => 'NUMBER(10)',
-        'float' => 'NUMBER',
-        'decimal' => 'NUMBER',
-        'datetime' => 'TIMESTAMP',
-        'timestamp' => 'TIMESTAMP',
-        'time' => 'TIMESTAMP',
-        'date' => 'DATE',
-        'binary' => 'BLOB',
-        'boolean' => 'NUMBER(1)',
+	public $columnTypes=array(
+		'pk' => 'NUMBER(10) NOT NULL PRIMARY KEY',
+		'string' => 'VARCHAR2(255)',
+		'text' => 'CLOB',
+		'integer' => 'NUMBER(10)',
+		'float' => 'NUMBER',
+		'decimal' => 'NUMBER',
+		'datetime' => 'TIMESTAMP',
+		'timestamp' => 'TIMESTAMP',
+		'time' => 'TIMESTAMP',
+		'date' => 'DATE',
+		'binary' => 'BLOB',
+		'boolean' => 'NUMBER(1)',
 		'money' => 'NUMBER(19,4)',
-    );
+	);
 
 	/**
 	 * Quotes a table name for use in a query.
@@ -75,18 +75,18 @@ protected function createCommandBuilder()
 	}
 
 	/**
-     * @param string $schema default schema.
-     */
-    public function setDefaultSchema($schema)
-    {
+	 * @param string $schema default schema.
+	 */
+	public function setDefaultSchema($schema)
+	{
 		$this->_defaultSchema=$schema;
-    }
+	}
 
-    /**
-     * @return string default schema.
-     */
-    public function getDefaultSchema()
-    {
+	/**
+	 * @return string default schema.
+	 */
+	public function getDefaultSchema()
+	{
 		if (!strlen($this->_defaultSchema))
 		{
 			$this->setDefaultSchema(strtoupper($this->getDbConnection()->username));
@@ -95,18 +95,18 @@ public function getDefaultSchema()
 		return $this->_defaultSchema;
     }
 
-    /**
-     * @param string $table table name with optional schema name prefix, uses default schema name prefix is not provided.
-     * @return array tuple as ($schemaName,$tableName)
-     */
-    protected function getSchemaTableName($table)
-    {
+	/**
+	 * @param string $table table name with optional schema name prefix, uses default schema name prefix is not provided.
+	 * @return array tuple as ($schemaName,$tableName)
+	 */
+	protected function getSchemaTableName($table)
+	{
 		$table = strtoupper($table);
 		if(count($parts= explode('.', str_replace('"','',$table))) > 1)
 			return array($parts[0], $parts[1]);
 		else
 			return array($this->getDefaultSchema(),$parts[0]);
-    }
+	}
 
 	/**
 	 * Loads the metadata for the specified table.
@@ -353,27 +353,59 @@ public function dropIndex($name, $table)
 	/**
 	 * Resets the sequence value of a table's primary key.
 	 * The sequence will be reset such that the primary key of the next new row inserted
-	 * will have the specified value or 1.
+	 * will have the specified value or max value of a primary key plus one (i.e. sequence trimming).
+	 *
+	 * Note, behavior of this method has changed since 1.1.14 release. Please refer to the following
+	 * issue for more details: {@link https://github.com/yiisoft/yii/issues/2241}
+	 *
 	 * @param CDbTableSchema $table the table schema whose primary key sequence will be reset
-	 * @param mixed $value the value for the primary key of the next new row inserted. If this is not set,
-	 * the next new row's primary key will have a value 1.
+	 * @param integer|null $value the value for the primary key of the next new row inserted.
+	 * If this is not set, the next new row's primary key will have the max value of a primary
+	 * key plus one (i.e. sequence trimming).
 	 * @since 1.1.13
 	 */
-	public function resetSequence($table,$value=1)
+	public function resetSequence($table,$value=null)
 	{
-		$seq = $table->name."_SEQ";
-		if($table->sequenceName!==null)
+		if($table->sequenceName===null)
+			return;
+
+		if($value!==null)
+			$value=(int)$value;
+		else
+		{
+			$value=(int)$this->getDbConnection()
+				->createCommand("SELECT MAX(\"{$table->primaryKey}\") FROM {$table->rawName}")
+				->queryScalar();
+			$value++;
+		}
+		$this->getDbConnection()
+			->createCommand("DROP SEQUENCE \"{$table->name}_SEQ\"")
+			->execute();
+		$this->getDbConnection()
+			->createCommand("CREATE SEQUENCE \"{$table->name}_SEQ\" START WITH {$value} INCREMENT BY 1 NOMAXVALUE NOCACHE")
+			->execute();
+	}
+
+	/**
+	 * Enables or disables integrity check.
+	 * @param boolean $check whether to turn on or off the integrity check.
+	 * @param string $schema the schema of the tables. Defaults to empty string, meaning the current or default schema.
+	 * @since 1.1.14
+	 */
+	public function checkIntegrity($check=true,$schema='')
+	{
+		if($schema==='')
+			$schema=$this->getDefaultSchema();
+		$mode=$check ? 'ENABLE' : 'DISABLE';
+		foreach($this->getTableNames($schema) as $table)
 		{
-			$this->getDbConnection()->createCommand("DROP SEQUENCE ".$seq)->execute();
-
-			$createSequenceSql = <<< SQL
-create sequence $seq
-start with $value
-increment by 1
-nomaxvalue
-nocache
-SQL;
-			$this->getDbConnection()->createCommand($createSequenceSql)->execute();
+			$constraints=$this->getDbConnection()
+				->createCommand("SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME=:t AND OWNER=:o")
+				->queryColumn(array(':t'=>$table,':o'=>$schema));
+			foreach($constraints as $constraint)
+				$this->getDbConnection()
+					->createCommand("ALTER TABLE \"{$schema}\".\"{$table}\" {$mode} CONSTRAINT \"{$constraint}\"")
+					->execute();
 		}
 	}
 }
diff --git a/framework/db/schema/oci/COciTableSchema.php b/framework/db/schema/oci/COciTableSchema.php
index 8d59e1146a8..a4f5e4bf76b 100644
--- a/framework/db/schema/oci/COciTableSchema.php
+++ b/framework/db/schema/oci/COciTableSchema.php
@@ -4,7 +4,7 @@
  *
  * @author Ricardo Grana 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/db/schema/pgsql/CPgsqlColumnSchema.php b/framework/db/schema/pgsql/CPgsqlColumnSchema.php
index 73ab33ed80c..50bd72817b3 100644
--- a/framework/db/schema/pgsql/CPgsqlColumnSchema.php
+++ b/framework/db/schema/pgsql/CPgsqlColumnSchema.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/db/schema/pgsql/CPgsqlCommandBuilder.php b/framework/db/schema/pgsql/CPgsqlCommandBuilder.php
new file mode 100644
index 00000000000..f247eea5102
--- /dev/null
+++ b/framework/db/schema/pgsql/CPgsqlCommandBuilder.php
@@ -0,0 +1,30 @@
+
+ * @link http://www.yiiframework.com/
+ * @copyright 2008-2013 Yii Software LLC
+ * @license http://www.yiiframework.com/license/
+ */
+
+/**
+ * CPgsqlCommandBuilder provides basic methods to create query commands for tables.
+ *
+ * @author Timur Ruziev 
+ * @package system.db.schema.pgsql
+ * @since 1.1.14
+ */
+class CPgsqlCommandBuilder extends CDbCommandBuilder
+{
+	/**
+	 * Returns default value of the integer/serial primary key. Default value means that the next
+	 * autoincrement/sequence value would be used.
+	 * @return string default value of the integer/serial primary key.
+	 * @since 1.1.14
+	 */
+	protected function getIntegerPrimaryKeyDefaultValue()
+	{
+		return 'DEFAULT';
+	}
+}
diff --git a/framework/db/schema/pgsql/CPgsqlSchema.php b/framework/db/schema/pgsql/CPgsqlSchema.php
index 894c634b30b..f77373dfa12 100644
--- a/framework/db/schema/pgsql/CPgsqlSchema.php
+++ b/framework/db/schema/pgsql/CPgsqlSchema.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -23,21 +23,21 @@ class CPgsqlSchema extends CDbSchema
 	 * @var array the abstract column types mapped to physical column types.
 	 * @since 1.1.6
 	 */
-    public $columnTypes=array(
-        'pk' => 'serial NOT NULL PRIMARY KEY',
-        'string' => 'character varying (255)',
-        'text' => 'text',
-        'integer' => 'integer',
-        'float' => 'double precision',
-        'decimal' => 'numeric',
-        'datetime' => 'timestamp',
-        'timestamp' => 'timestamp',
-        'time' => 'time',
-        'date' => 'date',
-        'binary' => 'bytea',
-        'boolean' => 'boolean',
+	public $columnTypes=array(
+		'pk' => 'serial NOT NULL PRIMARY KEY',
+		'string' => 'character varying (255)',
+		'text' => 'text',
+		'integer' => 'integer',
+		'float' => 'double precision',
+		'decimal' => 'numeric',
+		'datetime' => 'timestamp',
+		'timestamp' => 'timestamp',
+		'time' => 'time',
+		'date' => 'date',
+		'binary' => 'bytea',
+		'boolean' => 'boolean',
 		'money' => 'decimal(19,4)',
-    );
+	);
 
 	private $_sequences=array();
 
@@ -56,25 +56,27 @@ public function quoteSimpleTableName($name)
 	/**
 	 * Resets the sequence value of a table's primary key.
 	 * The sequence will be reset such that the primary key of the next new row inserted
-	 * will have the specified value or 1.
+	 * will have the specified value or max value of a primary key plus one (i.e. sequence trimming).
 	 * @param CDbTableSchema $table the table schema whose primary key sequence will be reset
-	 * @param mixed $value the value for the primary key of the next new row inserted. If this is not set,
-	 * the next new row's primary key will have a value 1.
+	 * @param integer|null $value the value for the primary key of the next new row inserted.
+	 * If this is not set, the next new row's primary key will have the max value of a primary
+	 * key plus one (i.e. sequence trimming).
 	 * @since 1.1
 	 */
 	public function resetSequence($table,$value=null)
 	{
-		if($table->sequenceName!==null)
-		{
-			$seq='"'.$table->sequenceName.'"';
-			if(strpos($seq,'.')!==false)
-				$seq=str_replace('.','"."',$seq);
-			if($value===null)
-				$value="(SELECT COALESCE(MAX(\"{$table->primaryKey}\"),0) FROM {$table->rawName}) + 1";
-			else
-				$value=(int)$value;
-			$this->getDbConnection()->createCommand("SELECT SETVAL('$seq', $value, false)")->execute();
-		}
+		if($table->sequenceName===null)
+			return;
+		$sequence='"'.$table->sequenceName.'"';
+		if(strpos($sequence,'.')!==false)
+			$sequence=str_replace('.','"."',$sequence);
+		if($value!==null)
+			$value=(int)$value;
+		else
+			$value="(SELECT COALESCE(MAX(\"{$table->primaryKey}\"),0) FROM {$table->rawName})+1";
+		$this->getDbConnection()
+			->createCommand("SELECT SETVAL('$sequence',$value,false)")
+			->execute();
 	}
 
 	/**
@@ -289,7 +291,7 @@ protected function findPrimaryKey($table,$indices)
 			SELECT oid FROM pg_catalog.pg_namespace WHERE nspname=:schema
 		)
 	)
-    AND attnum IN ({$indices})
+	AND attnum IN ({$indices})
 EOD;
 		$command=$this->getDbConnection()->createCommand($sql);
 		$command->bindValue(':table',$table->name);
@@ -422,4 +424,14 @@ public function dropIndex($name, $table)
 	{
 		return 'DROP INDEX '.$this->quoteTableName($name);
 	}
+
+	/**
+	 * Creates a command builder for the database.
+	 * This method may be overridden by child classes to create a DBMS-specific command builder.
+	 * @return CPgsqlCommandBuilder command builder instance.
+	 */
+	protected function createCommandBuilder()
+	{
+		return new CPgsqlCommandBuilder($this);
+	}
 }
diff --git a/framework/db/schema/pgsql/CPgsqlTableSchema.php b/framework/db/schema/pgsql/CPgsqlTableSchema.php
index ff09f490fe5..99617a692a3 100644
--- a/framework/db/schema/pgsql/CPgsqlTableSchema.php
+++ b/framework/db/schema/pgsql/CPgsqlTableSchema.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/db/schema/sqlite/CSqliteColumnSchema.php b/framework/db/schema/sqlite/CSqliteColumnSchema.php
index 7ba3ba64d92..c68a16e66e5 100644
--- a/framework/db/schema/sqlite/CSqliteColumnSchema.php
+++ b/framework/db/schema/sqlite/CSqliteColumnSchema.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -24,7 +24,10 @@ class CSqliteColumnSchema extends CDbColumnSchema
 	 */
 	protected function extractDefault($defaultValue)
 	{
-		$this->defaultValue=$this->typecast(strcasecmp($defaultValue,'null') ? $defaultValue : null);
+		if($this->dbType==='timestamp' && $defaultValue==='CURRENT_TIMESTAMP')
+			$this->defaultValue=null;
+		else
+			$this->defaultValue=$this->typecast(strcasecmp($defaultValue,'null') ? $defaultValue : null);
 
 		if($this->type==='string' && $this->defaultValue!==null) // PHP 5.2.6 adds single quotes while 5.2.0 doesn't
 			$this->defaultValue=trim($this->defaultValue,"'\"");
diff --git a/framework/db/schema/sqlite/CSqliteCommandBuilder.php b/framework/db/schema/sqlite/CSqliteCommandBuilder.php
index a5b4d407abd..b18eaadd3d1 100644
--- a/framework/db/schema/sqlite/CSqliteCommandBuilder.php
+++ b/framework/db/schema/sqlite/CSqliteCommandBuilder.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -36,4 +36,28 @@ protected function createCompositeInCondition($table,$values,$prefix)
 			$vs[]=implode("||','||",$value);
 		return implode("||','||",$keyNames).' IN ('.implode(', ',$vs).')';
 	}
+
+	/**
+	 * Creates a multiple INSERT command.
+	 * This method could be used to achieve better performance during insertion of the large
+	 * amount of data into the database tables.
+	 * Note that SQLite does not keep original order of the inserted rows.
+	 * @param mixed $table the table schema ({@link CDbTableSchema}) or the table name (string).
+	 * @param array[] $data list data to be inserted, each value should be an array in format (column name=>column value).
+	 * If a key is not a valid column name, the corresponding value will be ignored.
+	 * @return CDbCommand multiple insert command
+	 * @since 1.1.14
+	 */
+	public function createMultipleInsertCommand($table,array $data)
+	{
+		$templates=array(
+			'main'=>'INSERT INTO {{tableName}} ({{columnInsertNames}}) {{rowInsertValues}}',
+			'columnInsertValue'=>'{{value}} AS {{column}}',
+			'columnInsertValueGlue'=>', ',
+			'rowInsertValue'=>'SELECT {{columnInsertValues}}',
+			'rowInsertValueGlue'=>' UNION ',
+			'columnInsertNameGlue'=>', ',
+		);
+		return $this->composeMultipleInsertCommand($table,$data,$templates);
+	}
 }
diff --git a/framework/db/schema/sqlite/CSqliteSchema.php b/framework/db/schema/sqlite/CSqliteSchema.php
index 7650960f2f1..a2d263a7147 100644
--- a/framework/db/schema/sqlite/CSqliteSchema.php
+++ b/framework/db/schema/sqlite/CSqliteSchema.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -40,41 +40,45 @@ class CSqliteSchema extends CDbSchema
 	/**
 	 * Resets the sequence value of a table's primary key.
 	 * The sequence will be reset such that the primary key of the next new row inserted
-	 * will have the specified value or 1.
+	 * will have the specified value or max value of a primary key plus one (i.e. sequence trimming).
 	 * @param CDbTableSchema $table the table schema whose primary key sequence will be reset
-	 * @param mixed $value the value for the primary key of the next new row inserted. If this is not set,
-	 * the next new row's primary key will have a value 1.
+	 * @param integer|null $value the value for the primary key of the next new row inserted.
+	 * If this is not set, the next new row's primary key will have the max value of a primary
+	 * key plus one (i.e. sequence trimming).
 	 * @since 1.1
 	 */
 	public function resetSequence($table,$value=null)
 	{
-		if($table->sequenceName!==null)
+		if($table->sequenceName===null)
+			return;
+		if($value!==null)
+			$value=(int)($value)-1;
+		else
+			$value=(int)$this->getDbConnection()
+				->createCommand("SELECT MAX(`{$table->primaryKey}`) FROM {$table->rawName}")
+				->queryScalar();
+		try
+		{
+			// it's possible that 'sqlite_sequence' does not exist
+			$this->getDbConnection()
+				->createCommand("UPDATE sqlite_sequence SET seq='$value' WHERE name='{$table->name}'")
+				->execute();
+		}
+		catch(Exception $e)
 		{
-			if($value===null)
-				$value=$this->getDbConnection()->createCommand("SELECT MAX(`{$table->primaryKey}`) FROM {$table->rawName}")->queryScalar();
-			else
-				$value=(int)$value-1;
-			try
-			{
-				// it's possible sqlite_sequence does not exist
-				$this->getDbConnection()->createCommand("UPDATE sqlite_sequence SET seq='$value' WHERE name='{$table->name}'")->execute();
-			}
-			catch(Exception $e)
-			{
-			}
 		}
 	}
 
 	/**
-	 * Enables or disables integrity check.
+	 * Enables or disables integrity check. Note that this method used to do nothing before 1.1.14. Since 1.1.14
+	 * it changes integrity check state as expected.
 	 * @param boolean $check whether to turn on or off the integrity check.
 	 * @param string $schema the schema of the tables. Defaults to empty string, meaning the current or default schema.
 	 * @since 1.1
 	 */
 	public function checkIntegrity($check=true,$schema='')
 	{
-		// SQLite doesn't enforce integrity
-		return;
+		$this->getDbConnection()->createCommand('PRAGMA foreign_keys='.(int)$check)->execute();
 	}
 
 	/**
@@ -300,10 +304,10 @@ public function dropIndex($name, $table)
 
 	/**
 	 * Builds a SQL statement for adding a primary key constraint to an existing table.
-	 * Because SQLite does not support adding a primary key on an existing table this method will throw an exception
+	 * Because SQLite does not support adding a primary key on an existing table this method will throw an exception.
 	 * @param string $name the name of the primary key constraint.
 	 * @param string $table the table that the primary key constraint will be added to.
-	 * @param string $columns the name of the column to that the constraint will be added on.
+	 * @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
 	 */
diff --git a/framework/gii/CCodeFile.php b/framework/gii/CCodeFile.php
index fbcd8aa5df1..d6bf1fbacbc 100644
--- a/framework/gii/CCodeFile.php
+++ b/framework/gii/CCodeFile.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/gii/CCodeForm.php b/framework/gii/CCodeForm.php
index bbc83c12edd..b4eaeb2f526 100644
--- a/framework/gii/CCodeForm.php
+++ b/framework/gii/CCodeForm.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/gii/CCodeGenerator.php b/framework/gii/CCodeGenerator.php
index 28846b8faf4..182ce37bd3d 100644
--- a/framework/gii/CCodeGenerator.php
+++ b/framework/gii/CCodeGenerator.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
diff --git a/framework/gii/CCodeModel.php b/framework/gii/CCodeModel.php
index 684009c70e2..2c23b903e6f 100644
--- a/framework/gii/CCodeModel.php
+++ b/framework/gii/CCodeModel.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -275,7 +275,7 @@ public function getTemplates()
 
 	/**
 	 * @return string the directory that contains the template files.
-	 * @throw CException if {@link templates} is empty or template selection is invalid
+	 * @throws CHttpException if {@link templates} is empty or template selection is invalid
 	 */
 	public function getTemplatePath()
 	{
@@ -291,6 +291,7 @@ public function getTemplatePath()
 
 	/**
 	 * @param CCodeFile $file whether the code file should be saved
+	 * @return bool whether the confirmation is found in {@link answers} with appropriate {@link operation}
 	 */
 	public function confirmed($file)
 	{
@@ -303,6 +304,7 @@ public function confirmed($file)
 	 * This method is manly used in {@link generate} to generate code.
 	 * @param string $templateFile the code template file path
 	 * @param array $_params_ a set of parameters to be extracted and made available in the code template
+	 * @throws CException is template file does not exist
 	 * @return string the generated code
 	 */
 	public function render($templateFile,$_params_=null)
@@ -409,6 +411,7 @@ public function pluralize($name)
 			'/(c)hild$/i' => '\1hildren',
 			'/(h)uman$/i' => '\1umans',
 			'/(m)an$/i' => '\1en',
+			'/(s)taff$/i' => '\1taff',
 			'/(t)ooth$/i' => '\1eeth',
 			'/(p)erson$/i' => '\1eople',
 			'/([m|l])ouse$/i' => '\1ice',
diff --git a/framework/gii/GiiModule.php b/framework/gii/GiiModule.php
index fefe6617c22..79e161cb7bd 100644
--- a/framework/gii/GiiModule.php
+++ b/framework/gii/GiiModule.php
@@ -4,7 +4,7 @@
  *
  * @author Qiang Xue 
  * @link http://www.yiiframework.com/
- * @copyright Copyright © 2008-2011 Yii Software LLC
+ * @copyright 2008-2013 Yii Software LLC
  * @license http://www.yiiframework.com/license/
  */
 
@@ -114,6 +114,7 @@ class GiiModule extends CWebModule
 	public function init()
 	{
 		parent::init();
+		Yii::setPathOfAlias('gii',dirname(__FILE__));
 		Yii::app()->setComponents(array(
 			'errorHandler'=>array(
 				'class'=>'CErrorHandler',
@@ -157,6 +158,7 @@ public function setAssetsUrl($value)
 	 * to access actions other than "default/login" and "default/error".
 	 * @param CController $controller the controller to be accessed.
 	 * @param CAction $action the action to be accessed.
+	 * @throws CHttpException if access denied
 	 * @return boolean whether the action should be executed.
 	 */
 	public function beforeControllerAction($controller, $action)
diff --git a/framework/gii/assets/js/jquery.tooltip-1.2.6.min.js b/framework/gii/assets/js/jquery.tooltip-1.2.6.min.js
deleted file mode 100644
index 9f28befbdb4..00000000000
--- a/framework/gii/assets/js/jquery.tooltip-1.2.6.min.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
- * jQuery Tools v1.2.6 - The missing UI library for the Web
- * 
- * tooltip/tooltip.js
- * 
- * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
- * 
- * http://flowplayer.org/tools/
- * 
- */
-(function(a){a.tools=a.tools||{version:"v1.2.6"},a.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,fadeIE:!1,position:["top","center"],offset:[0,0],relative:!1,cancelDefault:!0,events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",tooltip:"mouseenter,mouseleave"},layout:"
",tipClass:"tooltip"},addEffect:function(a,c,d){b[a]=[c,d]}};var b={toggle:[function(a){var b=this.getConf(),c=this.getTip(),d=b.opacity;d<1&&c.css({opacity:d}),c.show(),a.call()},function(a){this.getTip().hide(),a.call()}],fade:[function(b){var c=this.getConf();!a.browser.msie||c.fadeIE?this.getTip().fadeTo(c.fadeInSpeed,c.opacity,b):(this.getTip().show(),b())},function(b){var c=this.getConf();!a.browser.msie||c.fadeIE?this.getTip().fadeOut(c.fadeOutSpeed,b):(this.getTip().hide(),b())}]};function c(b,c,d){var e=d.relative?b.position().top:b.offset().top,f=d.relative?b.position().left:b.offset().left,g=d.position[0];e-=c.outerHeight()-d.offset[0],f+=b.outerWidth()+d.offset[1],/iPad/i.test(navigator.userAgent)&&(e-=a(window).scrollTop());var h=c.outerHeight()+b.outerHeight();g=="center"&&(e+=h/2),g=="bottom"&&(e+=h),g=d.position[1];var i=c.outerWidth()+b.outerWidth();g=="center"&&(f-=i/2),g=="left"&&(f-=i);return{top:e,left:f}}function d(d,e){var f=this,g=d.add(f),h,i=0,j=0,k=d.attr("title"),l=d.attr("data-tooltip"),m=b[e.effect],n,o=d.is(":input"),p=o&&d.is(":checkbox, :radio, select, :button, :submit"),q=d.attr("type"),r=e.events[q]||e.events[o?p?"widget":"input":"def"];if(!m)throw"Nonexistent effect \""+e.effect+"\"";r=r.split(/,\s*/);if(r.length!=2)throw"Tooltip: bad events configuration for "+q;d.bind(r[0],function(a){clearTimeout(i),e.predelay?j=setTimeout(function(){f.show(a)},e.predelay):f.show(a)}).bind(r[1],function(a){clearTimeout(j),e.delay?i=setTimeout(function(){f.hide(a)},e.delay):f.hide(a)}),k&&e.cancelDefault&&(d.removeAttr("title"),d.data("title",k)),a.extend(f,{show:function(b){if(!h){l?h=a(l):e.tip?h=a(e.tip).eq(0):k?h=a(e.layout).addClass(e.tipClass).appendTo(document.body).hide().append(k):(h=d.next(),h.length||(h=d.parent().next()));if(!h.length)throw"Cannot find tooltip for "+d}if(f.isShown())return f;h.stop(!0,!0);var o=c(d,h,e);e.tip&&h.html(d.data("title")),b=a.Event(),b.type="onBeforeShow",g.trigger(b,[o]);if(b.isDefaultPrevented())return f;o=c(d,h,e),h.css({position:"absolute",top:o.top,left:o.left}),n=!0,m[0].call(f,function(){b.type="onShow",n="full",g.trigger(b)});var p=e.events.tooltip.split(/,\s*/);h.data("__set")||(h.unbind(p[0]).bind(p[0],function(){clearTimeout(i),clearTimeout(j)}),p[1]&&!d.is("input:not(:checkbox, :radio), textarea")&&h.unbind(p[1]).bind(p[1],function(a){a.relatedTarget!=d[0]&&d.trigger(r[1].split(" ")[0])}),e.tip||h.data("__set",!0));return f},hide:function(c){if(!h||!f.isShown())return f;c=a.Event(),c.type="onBeforeHide",g.trigger(c);if(!c.isDefaultPrevented()){n=!1,b[e.effect][1].call(f,function(){c.type="onHide",g.trigger(c)});return f}},isShown:function(a){return a?n=="full":n},getConf:function(){return e},getTip:function(){return h},getTrigger:function(){return d}}),a.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(b,c){a.isFunction(e[c])&&a(f).bind(c,e[c]),f[c]=function(b){b&&a(f).bind(c,b);return f}})}a.fn.tooltip=function(b){var c=this.data("tooltip");if(c)return c;b=a.extend(!0,{},a.tools.tooltip.conf,b),typeof b.position=="string"&&(b.position=b.position.split(/,?\s/)),this.each(function(){c=new d(a(this),b),a(this).data("tooltip",c)});return b.api?c:this}})(jQuery); diff --git a/framework/gii/assets/js/main.js b/framework/gii/assets/js/main.js index ea0c23edd16..6cac4c0a6cd 100644 --- a/framework/gii/assets/js/main.js +++ b/framework/gii/assets/js/main.js @@ -31,7 +31,7 @@ $(document).ready(function() { }); - $('.form.gii .row input, .form.gii .row textarea, .form.gii .row select, .with-tooltip').not('.no-tooltip, .no-tooltip *').tooltip({ + $('.form.gii .row input, .form.gii .row textarea, .form.gii .row select, .with-tooltip').not('.no-tooltip, .no-tooltip *').tooltip2({ position: "center right", offset: [-2, 10] }); diff --git a/framework/gii/assets/js/tools.tooltip-1.2.5.min.js b/framework/gii/assets/js/tools.tooltip-1.2.5.min.js deleted file mode 100644 index 97ea5ad51b7..00000000000 --- a/framework/gii/assets/js/tools.tooltip-1.2.5.min.js +++ /dev/null @@ -1,192 +0,0 @@ -/* - * jQuery Tools 1.2.5 - The missing UI library for the Web - * - * [jquery, tabs, tooltip, overlay, scrollable] - * - * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE. - * - * http://flowplayer.org/tools/ - * - * jQuery JavaScript Library v1.4.2 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://docs.jquery.com/License - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * ----- - * - - - * File generated: Wed Sep 22 06:12:53 GMT 2010 - */ -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); -(function(c){function p(d,b,a){var e=this,l=d.add(this),h=d.find(a.tabs),i=b.jquery?b:d.children(b),j;h.length||(h=d.children());i.length||(i=d.parent().find(b));i.length||(i=c(b));c.extend(this,{click:function(f,g){var k=h.eq(f);if(typeof f=="string"&&f.replace("#","")){k=h.filter("[href*="+f.replace("#","")+"]");f=Math.max(h.index(k),0)}if(a.rotate){var n=h.length-1;if(f<0)return e.click(n,g);if(f>n)return e.click(0,g)}if(!k.length){if(j>=0)return e;f=a.initialIndex;k=h.eq(f)}if(f===j)return e; -g=g||c.Event();g.type="onBeforeClick";l.trigger(g,[f]);if(!g.isDefaultPrevented()){o[a.effect].call(e,f,function(){g.type="onClick";l.trigger(g,[f])});j=f;h.removeClass(a.current);k.addClass(a.current);return e}},getConf:function(){return a},getTabs:function(){return h},getPanes:function(){return i},getCurrentPane:function(){return i.eq(j)},getCurrentTab:function(){return h.eq(j)},getIndex:function(){return j},next:function(){return e.click(j+1)},prev:function(){return e.click(j-1)},destroy:function(){h.unbind(a.event).removeClass(a.current); -i.find("a[href^=#]").unbind("click.T");return e}});c.each("onBeforeClick,onClick".split(","),function(f,g){c.isFunction(a[g])&&c(e).bind(g,a[g]);e[g]=function(k){k&&c(e).bind(g,k);return e}});if(a.history&&c.fn.history){c.tools.history.init(h);a.event="history"}h.each(function(f){c(this).bind(a.event,function(g){e.click(f,g);return g.preventDefault()})});i.find("a[href^=#]").bind("click.T",function(f){e.click(c(this).attr("href"),f)});if(location.hash&&a.tabs=="a"&&d.find("[href="+location.hash+"]").length)e.click(location.hash); -else if(a.initialIndex===0||a.initialIndex>0)e.click(a.initialIndex)}c.tools=c.tools||{version:"1.2.5"};c.tools.tabs={conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",rotate:false,history:false},addEffect:function(d,b){o[d]=b}};var o={"default":function(d,b){this.getPanes().hide().eq(d).show();b.call()},fade:function(d,b){var a=this.getConf(),e=a.fadeOutSpeed,l=this.getPanes();e?l.fadeOut(e):l.hide();l.eq(d).fadeIn(a.fadeInSpeed,b)},slide:function(d, -b){this.getPanes().slideUp(200);this.getPanes().eq(d).slideDown(400,b)},ajax:function(d,b){this.getPanes().eq(0).load(this.getTabs().eq(d).attr("href"),b)}},m;c.tools.tabs.addEffect("horizontal",function(d,b){m||(m=this.getPanes().eq(0).width());this.getCurrentPane().animate({width:0},function(){c(this).hide()});this.getPanes().eq(d).animate({width:m},function(){c(this).show();b.call()})});c.fn.tabs=function(d,b){var a=this.data("tabs");if(a){a.destroy();this.removeData("tabs")}if(c.isFunction(b))b= -{onBeforeClick:b};b=c.extend({},c.tools.tabs.conf,b);this.each(function(){a=new p(c(this),d,b);c(this).data("tabs",a)});return b.api?a:this}})(jQuery); -(function(f){function p(a,b,c){var h=c.relative?a.position().top:a.offset().top,d=c.relative?a.position().left:a.offset().left,i=c.position[0];h-=b.outerHeight()-c.offset[0];d+=a.outerWidth()+c.offset[1];if(/iPad/i.test(navigator.userAgent))h-=f(window).scrollTop();var j=b.outerHeight()+a.outerHeight();if(i=="center")h+=j/2;if(i=="bottom")h+=j;i=c.position[1];a=b.outerWidth()+a.outerWidth();if(i=="center")d-=a/2;if(i=="left")d-=a;return{top:h,left:d}}function u(a,b){var c=this,h=a.add(c),d,i=0,j= -0,m=a.attr("title"),q=a.attr("data-tooltip"),r=o[b.effect],l,s=a.is(":input"),v=s&&a.is(":checkbox, :radio, select, :button, :submit"),t=a.attr("type"),k=b.events[t]||b.events[s?v?"widget":"input":"def"];if(!r)throw'Nonexistent effect "'+b.effect+'"';k=k.split(/,\s*/);if(k.length!=2)throw"Tooltip: bad events configuration for "+t;a.bind(k[0],function(e){clearTimeout(i);if(b.predelay)j=setTimeout(function(){c.show(e)},b.predelay);else c.show(e)}).bind(k[1],function(e){clearTimeout(j);if(b.delay)i= -setTimeout(function(){c.hide(e)},b.delay);else c.hide(e)});if(m&&b.cancelDefault){a.removeAttr("title");a.data("title",m)}f.extend(c,{show:function(e){if(!d){if(q)d=f(q);else if(b.tip)d=f(b.tip).eq(0);else if(m)d=f(b.layout).addClass(b.tipClass).appendTo(document.body).hide().append(m);else{d=a.next();d.length||(d=a.parent().next())}if(!d.length)throw"Cannot find tooltip for "+a;}if(c.isShown())return c;d.stop(true,true);var g=p(a,d,b);b.tip&&d.html(a.data("title"));e=e||f.Event();e.type="onBeforeShow"; -h.trigger(e,[g]);if(e.isDefaultPrevented())return c;g=p(a,d,b);d.css({position:"absolute",top:g.top,left:g.left});l=true;r[0].call(c,function(){e.type="onShow";l="full";h.trigger(e)});g=b.events.tooltip.split(/,\s*/);if(!d.data("__set")){d.bind(g[0],function(){clearTimeout(i);clearTimeout(j)});g[1]&&!a.is("input:not(:checkbox, :radio), textarea")&&d.bind(g[1],function(n){n.relatedTarget!=a[0]&&a.trigger(k[1].split(" ")[0])});d.data("__set",true)}return c},hide:function(e){if(!d||!c.isShown())return c; -e=e||f.Event();e.type="onBeforeHide";h.trigger(e);if(!e.isDefaultPrevented()){l=false;o[b.effect][1].call(c,function(){e.type="onHide";h.trigger(e)});return c}},isShown:function(e){return e?l=="full":l},getConf:function(){return b},getTip:function(){return d},getTrigger:function(){return a}});f.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(e,g){f.isFunction(b[g])&&f(c).bind(g,b[g]);c[g]=function(n){n&&f(c).bind(g,n);return c}})}f.tools=f.tools||{version:"1.2.5"};f.tools.tooltip= -{conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,position:["top","center"],offset:[0,0],relative:false,cancelDefault:true,events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",tooltip:"mouseenter,mouseleave"},layout:"
",tipClass:"tooltip"},addEffect:function(a,b,c){o[a]=[b,c]}};var o={toggle:[function(a){var b=this.getConf(),c=this.getTip();b=b.opacity;b<1&&c.css({opacity:b});c.show();a.call()},function(a){this.getTip().hide(); -a.call()}],fade:[function(a){var b=this.getConf();this.getTip().fadeTo(b.fadeInSpeed,b.opacity,a)},function(a){this.getTip().fadeOut(this.getConf().fadeOutSpeed,a)}]};f.fn.tooltip=function(a){var b=this.data("tooltip");if(b)return b;a=f.extend(true,{},f.tools.tooltip.conf,a);if(typeof a.position=="string")a.position=a.position.split(/,?\s/);this.each(function(){b=new u(f(this),a);f(this).data("tooltip",b)});return a.api?b:this}})(jQuery); -(function(a){function t(d,b){var c=this,j=d.add(c),o=a(window),k,f,m,g=a.tools.expose&&(b.mask||b.expose),n=Math.random().toString().slice(10);if(g){if(typeof g=="string")g={color:g};g.closeOnClick=g.closeOnEsc=false}var p=b.target||d.attr("rel");f=p?a(p):d;if(!f.length)throw"Could not find Overlay: "+p;d&&d.index(f)==-1&&d.click(function(e){c.load(e);return e.preventDefault()});a.extend(c,{load:function(e){if(c.isOpened())return c;var h=q[b.effect];if(!h)throw'Overlay: cannot find effect : "'+b.effect+ -'"';b.oneInstance&&a.each(s,function(){this.close(e)});e=e||a.Event();e.type="onBeforeLoad";j.trigger(e);if(e.isDefaultPrevented())return c;m=true;g&&a(f).expose(g);var i=b.top,r=b.left,u=f.outerWidth({margin:true}),v=f.outerHeight({margin:true});if(typeof i=="string")i=i=="center"?Math.max((o.height()-v)/2,0):parseInt(i,10)/100*o.height();if(r=="center")r=Math.max((o.width()-u)/2,0);h[0].call(c,{top:i,left:r},function(){if(m){e.type="onLoad";j.trigger(e)}});g&&b.closeOnClick&&a.mask.getMask().one("click", -c.close);b.closeOnClick&&a(document).bind("click."+n,function(l){a(l.target).parents(f).length||c.close(l)});b.closeOnEsc&&a(document).bind("keydown."+n,function(l){l.keyCode==27&&c.close(l)});return c},close:function(e){if(!c.isOpened())return c;e=e||a.Event();e.type="onBeforeClose";j.trigger(e);if(!e.isDefaultPrevented()){m=false;q[b.effect][1].call(c,function(){e.type="onClose";j.trigger(e)});a(document).unbind("click."+n).unbind("keydown."+n);g&&a.mask.close();return c}},getOverlay:function(){return f}, -getTrigger:function(){return d},getClosers:function(){return k},isOpened:function(){return m},getConf:function(){return b}});a.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(e,h){a.isFunction(b[h])&&a(c).bind(h,b[h]);c[h]=function(i){i&&a(c).bind(h,i);return c}});k=f.find(b.close||".close");if(!k.length&&!b.close){k=a('');f.prepend(k)}k.click(function(e){c.close(e)});b.load&&c.load()}a.tools=a.tools||{version:"1.2.5"};a.tools.overlay={addEffect:function(d, -b,c){q[d]=[b,c]},conf:{close:null,closeOnClick:true,closeOnEsc:true,closeSpeed:"fast",effect:"default",fixed:!a.browser.msie||a.browser.version>6,left:"center",load:false,mask:null,oneInstance:true,speed:"normal",target:null,top:"10%"}};var s=[],q={};a.tools.overlay.addEffect("default",function(d,b){var c=this.getConf(),j=a(window);if(!c.fixed){d.top+=j.scrollTop();d.left+=j.scrollLeft()}d.position=c.fixed?"fixed":"absolute";this.getOverlay().css(d).fadeIn(c.speed,b)},function(d){this.getOverlay().fadeOut(this.getConf().closeSpeed, -d)});a.fn.overlay=function(d){var b=this.data("overlay");if(b)return b;if(a.isFunction(d))d={onBeforeLoad:d};d=a.extend(true,{},a.tools.overlay.conf,d);this.each(function(){b=new t(a(this),d);s.push(b);a(this).data("overlay",b)});return d.api?b:this}})(jQuery); -(function(e){function p(f,c){var b=e(c);return b.length<2?b:f.parent().find(c)}function u(f,c){var b=this,n=f.add(b),g=f.children(),l=0,j=c.vertical;k||(k=b);if(g.length>1)g=e(c.items,f);e.extend(b,{getConf:function(){return c},getIndex:function(){return l},getSize:function(){return b.getItems().size()},getNaviButtons:function(){return o.add(q)},getRoot:function(){return f},getItemWrap:function(){return g},getItems:function(){return g.children(c.item).not("."+c.clonedClass)},move:function(a,d){return b.seekTo(l+ -a,d)},next:function(a){return b.move(1,a)},prev:function(a){return b.move(-1,a)},begin:function(a){return b.seekTo(0,a)},end:function(a){return b.seekTo(b.getSize()-1,a)},focus:function(){return k=b},addItem:function(a){a=e(a);if(c.circular){g.children("."+c.clonedClass+":last").before(a);g.children("."+c.clonedClass+":first").replaceWith(a.clone().addClass(c.clonedClass))}else g.append(a);n.trigger("onAddItem",[a]);return b},seekTo:function(a,d,h){a.jquery||(a*=1);if(c.circular&&a===0&&l==-1&&d!== -0)return b;if(!c.circular&&a<0||a>b.getSize()||a<-1)return b;var i=a;if(a.jquery)a=b.getItems().index(a);else i=b.getItems().eq(a);var r=e.Event("onBeforeSeek");if(!h){n.trigger(r,[a,d]);if(r.isDefaultPrevented()||!i.length)return b}i=j?{top:-i.position().top}:{left:-i.position().left};l=a;k=b;if(d===undefined)d=c.speed;g.animate(i,d,c.easing,h||function(){n.trigger("onSeek",[a])});return b}});e.each(["onBeforeSeek","onSeek","onAddItem"],function(a,d){e.isFunction(c[d])&&e(b).bind(d,c[d]);b[d]=function(h){h&& -e(b).bind(d,h);return b}});if(c.circular){var s=b.getItems().slice(-1).clone().prependTo(g),t=b.getItems().eq(1).clone().appendTo(g);s.add(t).addClass(c.clonedClass);b.onBeforeSeek(function(a,d,h){if(!a.isDefaultPrevented())if(d==-1){b.seekTo(s,h,function(){b.end(0)});return a.preventDefault()}else d==b.getSize()&&b.seekTo(t,h,function(){b.begin(0)})});b.seekTo(0,0,function(){})}var o=p(f,c.prev).click(function(){b.prev()}),q=p(f,c.next).click(function(){b.next()});if(!c.circular&&b.getSize()>1){b.onBeforeSeek(function(a, -d){setTimeout(function(){if(!a.isDefaultPrevented()){o.toggleClass(c.disabledClass,d<=0);q.toggleClass(c.disabledClass,d>=b.getSize()-1)}},1)});c.initialIndex||o.addClass(c.disabledClass)}c.mousewheel&&e.fn.mousewheel&&f.mousewheel(function(a,d){if(c.mousewheel){b.move(d<0?1:-1,c.wheelSpeed||50);return false}});if(c.touch){var m={};g[0].ontouchstart=function(a){a=a.touches[0];m.x=a.clientX;m.y=a.clientY};g[0].ontouchmove=function(a){if(a.touches.length==1&&!g.is(":animated")){var d=a.touches[0],h= -m.x-d.clientX;d=m.y-d.clientY;b[j&&d>0||!j&&h>0?"next":"prev"]();a.preventDefault()}}}c.keyboard&&e(document).bind("keydown.scrollable",function(a){if(!(!c.keyboard||a.altKey||a.ctrlKey||e(a.target).is(":input")))if(!(c.keyboard!="static"&&k!=b)){var d=a.keyCode;if(j&&(d==38||d==40)){b.move(d==38?-1:1);return a.preventDefault()}if(!j&&(d==37||d==39)){b.move(d==37?-1:1);return a.preventDefault()}}});c.initialIndex&&b.seekTo(c.initialIndex,0,function(){})}e.tools=e.tools||{version:"1.2.5"};e.tools.scrollable= -{conf:{activeClass:"active",circular:false,clonedClass:"cloned",disabledClass:"disabled",easing:"swing",initialIndex:0,item:null,items:".items",keyboard:true,mousewheel:false,next:".next",prev:".prev",speed:400,vertical:false,touch:true,wheelSpeed:0}};var k;e.fn.scrollable=function(f){var c=this.data("scrollable");if(c)return c;f=e.extend({},e.tools.scrollable.conf,f);this.each(function(){c=new u(e(this),f);e(this).data("scrollable",c)});return f.api?c:this}})(jQuery); diff --git a/framework/gii/assets/js/tooltip.js b/framework/gii/assets/js/tooltip.js new file mode 100644 index 00000000000..13c7ba13deb --- /dev/null +++ b/framework/gii/assets/js/tooltip.js @@ -0,0 +1,364 @@ +/** + * CHANGES MADE BY YII DEVELOPERS, READ CAREFULLY BEFORE UPGRADING THIS FILE: + * 1. This commit has been used: + * https://github.com/jquerytools/jquerytools/commit/4f3f3f14e83b0ff276a795e9f45400930904adff#src/tooltip/tooltip.js + * 2. Original `$.fn.tooltip` has been changed to `$.fn.tooltip2` to prevent conflict between jQuery UI Tooltip and + * jQuery Tools Tooltip. + * + * @license + * jQuery Tools @VERSION Tooltip - UI essentials + * + * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE. + * + * http://flowplayer.org/tools/tooltip/ + * + * Since: November 2008 + * Date: @DATE + */ +(function($) { + // static constructs + $.tools = $.tools || {version: '@VERSION'}; + + $.tools.tooltip = { + + conf: { + + // default effect variables + effect: 'toggle', + fadeOutSpeed: "fast", + predelay: 0, + delay: 30, + opacity: 1, + tip: 0, + fadeIE: false, // enables fade effect in IE + + // 'top', 'bottom', 'right', 'left', 'center' + position: ['top', 'center'], + offset: [0, 0], + relative: false, + cancelDefault: true, + + // type to event mapping + events: { + def: "mouseenter,mouseleave", + input: "focus,blur", + widget: "focus mouseenter,blur mouseleave", + tooltip: "mouseenter,mouseleave" + }, + + // 1.2 + layout: '
', + tipClass: 'tooltip' + }, + + addEffect: function(name, loadFn, hideFn) { + effects[name] = [loadFn, hideFn]; + } + }; + + + var effects = { + toggle: [ + function(done) { + var conf = this.getConf(), tip = this.getTip(), o = conf.opacity; + if (o < 1) { tip.css({opacity: o}); } + tip.show(); + done.call(); + }, + + function(done) { + this.getTip().hide(); + done.call(); + } + ], + + fade: [ + function(done) { + var conf = this.getConf(); + if (!$.browser.msie || conf.fadeIE) { + this.getTip().fadeTo(conf.fadeInSpeed, conf.opacity, done); + } + else { + this.getTip().show(); + done(); + } + }, + function(done) { + var conf = this.getConf(); + if (!$.browser.msie || conf.fadeIE) { + this.getTip().fadeOut(conf.fadeOutSpeed, done); + } + else { + this.getTip().hide(); + done(); + } + } + ] + }; + + + /* calculate tip position relative to the trigger */ + function getPosition(trigger, tip, conf) { + + + // get origin top/left position + var top = conf.relative ? trigger.position().top : trigger.offset().top, + left = conf.relative ? trigger.position().left : trigger.offset().left, + pos = conf.position[0]; + + top -= tip.outerHeight() - conf.offset[0]; + left += trigger.outerWidth() + conf.offset[1]; + + // iPad position fix + if (/iPad/i.test(navigator.userAgent)) { + top -= $(window).scrollTop(); + } + + // adjust Y + var height = tip.outerHeight() + trigger.outerHeight(); + if (pos == 'center') { top += height / 2; } + if (pos == 'bottom') { top += height; } + + + // adjust X + pos = conf.position[1]; + var width = tip.outerWidth() + trigger.outerWidth(); + if (pos == 'center') { left -= width / 2; } + if (pos == 'left') { left -= width; } + + return {top: top, left: left}; + } + + + + function Tooltip(trigger, conf) { + + var self = this, + fire = trigger.add(self), + tip, + timer = 0, + pretimer = 0, + title = trigger.attr("title"), + tipAttr = trigger.attr("data-tooltip"), + effect = effects[conf.effect], + shown, + + // get show/hide configuration + isInput = trigger.is(":input"), + isWidget = isInput && trigger.is(":checkbox, :radio, select, :button, :submit"), + type = trigger.attr("type"), + evt = conf.events[type] || conf.events[isInput ? (isWidget ? 'widget' : 'input') : 'def']; + + + // check that configuration is sane + if (!effect) { throw "Nonexistent effect \"" + conf.effect + "\""; } + + evt = evt.split(/,\s*/); + if (evt.length != 2) { throw "Tooltip: bad events configuration for " + type; } + + + // trigger --> show + trigger.on(evt[0], function(e) { + + clearTimeout(timer); + if (conf.predelay) { + pretimer = setTimeout(function() { self.show(e); }, conf.predelay); + + } else { + self.show(e); + } + + // trigger --> hide + }).on(evt[1], function(e) { + clearTimeout(pretimer); + if (conf.delay) { + timer = setTimeout(function() { self.hide(e); }, conf.delay); + + } else { + self.hide(e); + } + + }); + + + // remove default title + if (title && conf.cancelDefault) { + trigger.removeAttr("title"); + trigger.data("title", title); + } + + $.extend(self, { + + show: function(e) { + + // tip not initialized yet + if (!tip) { + + // data-tooltip + if (tipAttr) { + tip = $(tipAttr); + + // single tip element for all + } else if (conf.tip) { + tip = $(conf.tip).eq(0); + + // autogenerated tooltip + } else if (title) { + tip = $(conf.layout).addClass(conf.tipClass).appendTo(document.body) + .hide().append(title); + + // manual tooltip + } else { + tip = trigger.next(); + if (!tip.length) { tip = trigger.parent().next(); } + } + + if (!tip.length) { throw "Cannot find tooltip for " + trigger; } + } + + if (self.isShown()) { return self; } + + // stop previous animation + tip.stop(true, true); + + // get position + var pos = getPosition(trigger, tip, conf); + + // restore title for single tooltip element + if (conf.tip) { + tip.html(trigger.data("title")); + } + + // onBeforeShow + e = $.Event(); + e.type = "onBeforeShow"; + fire.trigger(e, [pos]); + if (e.isDefaultPrevented()) { return self; } + + + // onBeforeShow may have altered the configuration + pos = getPosition(trigger, tip, conf); + + // set position + tip.css({position:'absolute', top: pos.top, left: pos.left}); + + shown = true; + + // invoke effect + effect[0].call(self, function() { + e.type = "onShow"; + shown = 'full'; + fire.trigger(e); + }); + + + // tooltip events + var event = conf.events.tooltip.split(/,\s*/); + + if (!tip.data("__set")) { + + tip.off(event[0]).on(event[0], function() { + clearTimeout(timer); + clearTimeout(pretimer); + }); + + if (event[1] && !trigger.is("input:not(:checkbox, :radio), textarea")) { + tip.off(event[1]).on(event[1], function(e) { + + // being moved to the trigger element + if (e.relatedTarget != trigger[0]) { + trigger.trigger(evt[1].split(" ")[0]); + } + }); + } + + // bind agein for if same tip element + if (!conf.tip) tip.data("__set", true); + } + + return self; + }, + + hide: function(e) { + + if (!tip || !self.isShown()) { return self; } + + // onBeforeHide + e = $.Event(); + e.type = "onBeforeHide"; + fire.trigger(e); + if (e.isDefaultPrevented()) { return; } + + shown = false; + + effects[conf.effect][1].call(self, function() { + e.type = "onHide"; + fire.trigger(e); + }); + + return self; + }, + + isShown: function(fully) { + return fully ? shown == 'full' : shown; + }, + + getConf: function() { + return conf; + }, + + getTip: function() { + return tip; + }, + + getTrigger: function() { + return trigger; + } + + }); + + // callbacks + $.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","), function(i, name) { + + // configuration + if ($.isFunction(conf[name])) { + $(self).on(name, conf[name]); + } + + // API + self[name] = function(fn) { + if (fn) { $(self).on(name, fn); } + return self; + }; + }); + + } + + + // jQuery plugin implementation + $.fn.tooltip2 = function(conf) { + + // return existing instance + var api = this.data("tooltip"); + if (api) { return api; } + + conf = $.extend(true, {}, $.tools.tooltip.conf, conf); + + // position can also be given as string + if (typeof conf.position == 'string') { + conf.position = conf.position.split(/,?\s/); + } + + // install tooltip for each entry in jQuery object + this.each(function() { + api = new Tooltip($(this), conf); + $(this).data("tooltip", api); + }); + + return conf.api ? api: this; + }; + +}) (jQuery); + + + diff --git a/framework/gii/components/UserIdentity.php b/framework/gii/components/UserIdentity.php index 30148beb77a..81d6aa1294a 100644 --- a/framework/gii/components/UserIdentity.php +++ b/framework/gii/components/UserIdentity.php @@ -8,7 +8,7 @@ class UserIdentity extends CUserIdentity */ public function authenticate() { - $password=Yii::app()->getModule('gii')->password; + $password=Yii::app()->getController()->getModule()->password; if($password===null) throw new CException('Please configure the "password" property of the "gii" module.'); elseif($password===false || $password===$this->password) diff --git a/framework/gii/controllers/DefaultController.php b/framework/gii/controllers/DefaultController.php index 44815b5fb56..128c42db5fd 100644 --- a/framework/gii/controllers/DefaultController.php +++ b/framework/gii/controllers/DefaultController.php @@ -41,7 +41,7 @@ public function actionLogin() $model->attributes=$_POST['LoginForm']; // validate user input and redirect to the previous page if valid if($model->validate() && $model->login()) - $this->redirect(Yii::app()->createUrl('gii/default/index')); + $this->redirect(array('index')); } // display the login form $this->render('login',array('model'=>$model)); @@ -53,6 +53,6 @@ public function actionLogin() public function actionLogout() { Yii::app()->user->logout(false); - $this->redirect(Yii::app()->createUrl('gii/default/index')); + $this->redirect(array('index')); } } \ No newline at end of file diff --git a/framework/gii/generators/controller/ControllerCode.php b/framework/gii/generators/controller/ControllerCode.php index 6cdc9fd21aa..cb67eeec0f9 100644 --- a/framework/gii/generators/controller/ControllerCode.php +++ b/framework/gii/generators/controller/ControllerCode.php @@ -13,7 +13,7 @@ public function rules() array('controller, baseClass', 'required'), array('controller', 'match', 'pattern'=>'/^\w+[\w+\\/]*$/', 'message'=>'{attribute} should only contain word characters and slashes.'), array('actions', 'match', 'pattern'=>'/^\w+[\w\s,]*$/', 'message'=>'{attribute} should only contain word characters, spaces and commas.'), - array('baseClass', 'match', 'pattern'=>'/^[a-zA-Z_]\w*$/', 'message'=>'{attribute} should only contain word characters.'), + array('baseClass', 'match', 'pattern'=>'/^[a-zA-Z_][\w\\\\]*$/', 'message'=>'{attribute} should only contain word characters and backslashes.'), array('baseClass', 'validateReservedWord', 'skipOnError'=>true), array('baseClass, actions', 'sticky'), )); diff --git a/framework/gii/generators/controller/views/index.php b/framework/gii/generators/controller/views/index.php index 6224e7e461e..e3bebe5b92c 100644 --- a/framework/gii/generators/controller/views/index.php +++ b/framework/gii/generators/controller/views/index.php @@ -16,6 +16,7 @@
  • admin/user generates admin/UserController.php. If the application has an admin module enabled, it will generate UserController within the module instead. + Make sure to write module name in the correct case if it has a camelCase name.
  • diff --git a/framework/gii/generators/crud/CrudCode.php b/framework/gii/generators/crud/CrudCode.php index e720f7b5e71..9e252b7683e 100644 --- a/framework/gii/generators/crud/CrudCode.php +++ b/framework/gii/generators/crud/CrudCode.php @@ -16,7 +16,7 @@ public function rules() array('model, controller, baseControllerClass', 'required'), array('model', 'match', 'pattern'=>'/^\w+[\w+\\.]*$/', 'message'=>'{attribute} should only contain word characters and dots.'), array('controller', 'match', 'pattern'=>'/^\w+[\w+\\/]*$/', 'message'=>'{attribute} should only contain word characters and slashes.'), - array('baseControllerClass', 'match', 'pattern'=>'/^[a-zA-Z_]\w*$/', 'message'=>'{attribute} should only contain word characters.'), + array('baseControllerClass', 'match', 'pattern'=>'/^[a-zA-Z_][\w\\\\]*$/', 'message'=>'{attribute} should only contain word characters and backslashes.'), array('baseControllerClass', 'validateReservedWord', 'skipOnError'=>true), array('model', 'validateModel'), array('baseControllerClass', 'sticky'), diff --git a/framework/gii/generators/crud/templates/default/_form.php b/framework/gii/generators/crud/templates/default/_form.php index f0d34e895c7..caf6f2a25cf 100644 --- a/framework/gii/generators/crud/templates/default/_form.php +++ b/framework/gii/generators/crud/templates/default/_form.php @@ -14,6 +14,10 @@ beginWidget('CActiveForm', array( 'id'=>'".$this->class2id($this->modelClass)."-form', + // Please note: When you enable ajax validation, make sure the corresponding + // controller action is handling ajax validation correctly. + // There is a call to performAjaxValidation() commented in generated controller code. + // See class documentation of CActiveForm for details on this. 'enableAjaxValidation'=>false, )); ?>\n"; ?> diff --git a/framework/gii/generators/crud/templates/default/create.php b/framework/gii/generators/crud/templates/default/create.php index 1fa14a0327d..9fd3ccf2b96 100644 --- a/framework/gii/generators/crud/templates/default/create.php +++ b/framework/gii/generators/crud/templates/default/create.php @@ -24,4 +24,4 @@

    Create modelClass; ?>

    -renderPartial('_form', array('model'=>\$model)); ?>"; ?> +renderPartial('_form', array('model'=>\$model)); ?>"; ?> diff --git a/framework/gii/generators/crud/templates/default/update.php b/framework/gii/generators/crud/templates/default/update.php index 1efea588bc2..4adc72d00ba 100644 --- a/framework/gii/generators/crud/templates/default/update.php +++ b/framework/gii/generators/crud/templates/default/update.php @@ -28,4 +28,4 @@

    Update modelClass." {$this->tableSchema->primaryKey}; ?>"; ?>

    -renderPartial('_form', array('model'=>\$model)); ?>"; ?> \ No newline at end of file +renderPartial('_form', array('model'=>\$model)); ?>"; ?> \ No newline at end of file diff --git a/framework/gii/generators/form/templates/default/form.php b/framework/gii/generators/form/templates/default/form.php index 7538e3f1519..9a080a8c44d 100644 --- a/framework/gii/generators/form/templates/default/form.php +++ b/framework/gii/generators/form/templates/default/form.php @@ -15,6 +15,10 @@ beginWidget('CActiveForm', array( 'id'=>'".$this->class2id($this->modelClass).'-'.basename($this->viewName)."-form', + // Please note: When you enable ajax validation, make sure the corresponding + // controller action is handling ajax validation correctly. + // See class documentation of CActiveForm for details on this, + // you need to use the performAjaxValidation()-method described there. 'enableAjaxValidation'=>false, )); ?>\n"; ?> diff --git a/framework/gii/generators/model/ModelCode.php b/framework/gii/generators/model/ModelCode.php index 81ed744ee3b..31e795b5a26 100644 --- a/framework/gii/generators/model/ModelCode.php +++ b/framework/gii/generators/model/ModelCode.php @@ -9,6 +9,7 @@ class ModelCode extends CCodeModel public $modelPath='application.models'; public $baseClass='CActiveRecord'; public $buildRelations=true; + public $commentsAsLabels=false; /** * @var array list of candidate relation code. The array are indexed by AR class names and relation names. @@ -24,11 +25,12 @@ public function rules() array('tablePrefix, tableName, modelPath', 'match', 'pattern'=>'/^(\w+[\w\.]*|\*?|\w+\.\*)$/', 'message'=>'{attribute} should only contain word characters, dots, and an optional ending asterisk.'), array('connectionId', 'validateConnectionId', 'skipOnError'=>true), array('tableName', 'validateTableName', 'skipOnError'=>true), - array('tablePrefix, modelClass, baseClass', 'match', 'pattern'=>'/^[a-zA-Z_]\w*$/', 'message'=>'{attribute} should only contain word characters.'), + array('tablePrefix, modelClass', 'match', 'pattern'=>'/^[a-zA-Z_]\w*$/', 'message'=>'{attribute} should only contain word characters.'), + array('baseClass', 'match', 'pattern'=>'/^[a-zA-Z_][\w\\\\]*$/', 'message'=>'{attribute} should only contain word characters and backslashes.'), array('modelPath', 'validateModelPath', 'skipOnError'=>true), array('baseClass, modelClass', 'validateReservedWord', 'skipOnError'=>true), array('baseClass', 'validateBaseClass', 'skipOnError'=>true), - array('connectionId, tablePrefix, modelPath, baseClass, buildRelations', 'sticky'), + array('connectionId, tablePrefix, modelPath, baseClass, buildRelations, commentsAsLabels', 'sticky'), )); } @@ -41,6 +43,7 @@ public function attributeLabels() 'modelClass'=>'Model Class', 'baseClass'=>'Base Class', 'buildRelations'=>'Build Relations', + 'commentsAsLabels'=>'Use Column Comments as Attribute Labels', 'connectionId'=>'Database Connection', )); } @@ -197,13 +200,19 @@ public function generateLabels($table) $labels=array(); foreach($table->columns as $column) { - $label=ucwords(trim(strtolower(str_replace(array('-','_'),' ',preg_replace('/(?name))))); - $label=preg_replace('/\s+/',' ',$label); - if(strcasecmp(substr($label,-3),' id')===0) - $label=substr($label,0,-3); - if($label==='Id') - $label='ID'; - $labels[$column->name]=$label; + if($this->commentsAsLabels && $column->comment) + $labels[$column->name]=$column->comment; + else + { + $label=ucwords(trim(strtolower(str_replace(array('-','_'),' ',preg_replace('/(?name))))); + $label=preg_replace('/\s+/',' ',$label); + if(strcasecmp(substr($label,-3),' id')===0) + $label=substr($label,0,-3); + if($label==='Id') + $label='ID'; + $label=str_replace("'","\\'",$label); + $labels[$column->name]=$label; + } } return $labels; } @@ -286,8 +295,13 @@ protected function generateRelations() { if(!$this->buildRelations) return array(); + + $schemaName=''; + if(($pos=strpos($this->tableName,'.'))!==false) + $schemaName=substr($this->tableName,0,$pos); + $relations=array(); - foreach(Yii::app()->{$this->connectionId}->schema->getTables() as $table) + foreach(Yii::app()->{$this->connectionId}->schema->getTables($schemaName) as $table) { if($this->tablePrefix!='' && strpos($table->name,$this->tablePrefix)!==0) continue; @@ -366,6 +380,8 @@ protected function generateClassName($tableName) return $this->modelClass; $tableName=$this->removePrefix($tableName,false); + if(($pos=strpos($tableName,'.'))!==false) // remove schema part (e.g. remove 'public2.' from 'public2.post') + $tableName=substr($tableName,$pos+1); $className=''; foreach(explode('_',$tableName) as $name) { diff --git a/framework/gii/generators/model/templates/default/model.php b/framework/gii/generators/model/templates/default/model.php index 8c67e12db31..7e4b14838de 100644 --- a/framework/gii/generators/model/templates/default/model.php +++ b/framework/gii/generators/model/templates/default/model.php @@ -52,26 +52,6 @@ */ class extends baseClass."\n"; ?> { - /** - * Returns the static model of the specified AR class. - * @param string $className active record class name. - * @return the static model class - */ - public static function model($className=__CLASS__) - { - return parent::model($className); - } - - - /** - * @return CDbConnection database connection - */ - public function getDbConnection() - { - return Yii::app()->; - } - - /** * @return string the associated database table name */ @@ -92,7 +72,7 @@ public function rules() // The following rule is used by search(). - // Please remove those attributes that should not be searched. + // @todo Please remove those attributes that should not be searched. array('', 'safe', 'on'=>'search'), ); } @@ -125,12 +105,19 @@ public function attributeLabels() /** * Retrieves a list of models based on the current search/filter conditions. - * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions. + * + * Typical usecase: + * - Initialize the model fields with values from filter form. + * - Execute this method to get CActiveDataProvider instance which will filter + * models according to data in model fields. + * - Pass data provider to CGridView, CListView or any similar widget. + * + * @return CActiveDataProvider the data provider that can return the models + * based on the search/filter conditions. */ public function search() { - // Warning: Please modify the following code to remove attributes that - // should not be searched. + // @todo Please modify the following code to remove attributes that should not be searched. $criteria=new CDbCriteria; @@ -152,4 +139,25 @@ public function search() 'criteria'=>$criteria, )); } -} \ No newline at end of file + + + /** + * @return CDbConnection the database connection used for this class + */ + public function getDbConnection() + { + return Yii::app()->; + } + + + /** + * Returns the static model of the specified AR class. + * Please note that you should have this exact method in all your CActiveRecord descendants! + * @param string $className active record class name. + * @return the static model class + */ + public static function model($className=__CLASS__) + { + return parent::model($className); + } +} diff --git a/framework/gii/generators/model/views/index.php b/framework/gii/generators/model/views/index.php index 32fecacc75f..f2af2750ce8 100644 --- a/framework/gii/generators/model/views/index.php +++ b/framework/gii/generators/model/views/index.php @@ -80,16 +80,17 @@ 'options'=>array( 'minLength'=>'0', 'focus'=>new CJavaScriptExpression('function(event,ui) { - $("#'.CHtml::activeId($model,'tableName').'").val(ui.item.label); + $("#'.CHtml::activeId($model,'tableName').'").val(ui.item.label).change(); return false; }') ), 'htmlOptions'=>array( 'id'=>CHtml::activeId($model,'tableName'), - 'size'=>'65' + 'size'=>'65', + 'data-tooltip'=>'#tableName-tooltip' ), )); ?> -
    +
    This refers to the table name that a new model class should be generated for (e.g. tbl_user). It can contain schema name, if needed (e.g. public.tbl_post). You may also enter * (or schemaName.* for a particular DB schema) @@ -134,5 +135,15 @@
    error($model,'buildRelations'); ?>
    +
    + labelEx($model,'commentsAsLabels'); ?> + checkBox($model,'commentsAsLabels'); ?> +
    + Whether comments specified for the table columns should be used as the new model's attribute labels. + In case your RDBMS doesn't support feature of commenting columns or column comment wasn't set, + column name would be used as the attribute name base. +
    + error($model,'commentsAsLabels'); ?> +
    endWidget(); ?> diff --git a/framework/gii/generators/module/templates/default/components/.yii b/framework/gii/generators/module/templates/default/components/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/gii/generators/module/templates/default/messages/.yii b/framework/gii/generators/module/templates/default/messages/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/gii/generators/module/templates/default/models/.yii b/framework/gii/generators/module/templates/default/models/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/gii/generators/module/templates/default/views/layouts/.yii b/framework/gii/generators/module/templates/default/views/layouts/.yii deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/framework/gii/views/default/index.php b/framework/gii/views/default/index.php index f3470c9ec12..57fdac77a1d 100644 --- a/framework/gii/views/default/index.php +++ b/framework/gii/views/default/index.php @@ -5,7 +5,7 @@

      module->controllerMap as $name=>$config): ?> -
    • +
    diff --git a/framework/gii/views/layouts/generator.php b/framework/gii/views/layouts/generator.php index 3abbcf209b9..6109d6fb831 100644 --- a/framework/gii/views/layouts/generator.php +++ b/framework/gii/views/layouts/generator.php @@ -7,7 +7,7 @@ )); ?>
      module->controllerMap as $name=>$config): ?> -
    • +
    endWidget(); ?> diff --git a/framework/gii/views/layouts/main.php b/framework/gii/views/layouts/main.php index 78860252520..f5c2fb8c981 100644 --- a/framework/gii/views/layouts/main.php +++ b/framework/gii/views/layouts/main.php @@ -4,7 +4,7 @@ $cs->scriptMap=array(); $baseUrl=$this->module->assetsUrl; $cs->registerCoreScript('jquery'); -$cs->registerScriptFile($baseUrl.'/js/jquery.tooltip-1.2.6.min.js'); +$cs->registerScriptFile($baseUrl.'/js/tooltip.js'); $cs->registerScriptFile($baseUrl.'/js/fancybox/jquery.fancybox-1.3.1.pack.js'); $cs->registerCssFile($baseUrl.'/js/fancybox/jquery.fancybox-1.3.1.css'); ?> @@ -38,10 +38,10 @@ homeUrl); ?> | yii user->isGuest): ?> - | + |
    - +
    diff --git a/framework/i18n/CChoiceFormat.php b/framework/i18n/CChoiceFormat.php index 90a4471ee72..d6f7e823c60 100644 --- a/framework/i18n/CChoiceFormat.php +++ b/framework/i18n/CChoiceFormat.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -15,20 +15,22 @@ *
      * 'expr1#message1|expr2#message2|expr3#message3'
      * 
    - * where each expression should be a valid PHP expression with 'n' as the only variable. - * For example, 'n==1' and 'n%10==2 && n>10' are both valid expressions. - * The variable 'n' will take the given number value, and if an expression evaluates true, + * where each expression should be a valid PHP expression with 'n' as the only variable. + * For example, 'n==1' and 'n%10==2 && n>10' are both valid expressions. + * The variable 'n' will take the given number value, and if an expression evaluates true, * the corresponding message will be returned. * - * For example, given the candidate messages 'n==1#one|n==2#two|n>2#others' and - * the number value 2, the resulting message will be 'two'. + * For example, given the candidate messages 'n==1#one|n==2#two|n>2#others' and + * the number value 2, the resulting message will be 'two'. * - * For expressions like 'n==1', we can also use a shortcut '1'. So the above example - * candidate messages can be simplified as '1#one|2#two|n>2#others'. + * For expressions like 'n==1', we can also use a shortcut '1'. So the above example + * candidate messages can be simplified as '1#one|2#two|n>2#others'. * * In case the given number doesn't select any message, the last candidate message * will be returned. * + * The PHP expressions will be evaluated using {@link evaluate}. + * * @author Qiang Xue * @package system.i18n */ diff --git a/framework/i18n/CDateFormatter.php b/framework/i18n/CDateFormatter.php index 0970606fd7b..49d5d80e5ed 100644 --- a/framework/i18n/CDateFormatter.php +++ b/framework/i18n/CDateFormatter.php @@ -5,7 +5,7 @@ * @author Wei Zhuo * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -17,7 +17,7 @@ * is associated with. For example, month names and weekday names may vary * under different locales, which yields different formatting results. * The patterns that CDateFormatter recognizes are as defined in - * {@link http://www.unicode.org/reports/tr35/#Date_Format_Patterns CLDR}. + * {@link http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns CLDR}. * * CDateFormatter supports predefined patterns as well as customized ones: *
      @@ -79,7 +79,7 @@ public function __construct($locale) /** * Formats a date according to a customized pattern. - * @param string $pattern the pattern (See {@link http://www.unicode.org/reports/tr35/#Date_Format_Patterns}) + * @param string $pattern the pattern (See {@link http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns}) * @param mixed $time UNIX timestamp or a string in strtotime format * @return string formatted date time. Null if $time is null. (the null value check is available since Yii 1.1.11) */ @@ -212,13 +212,14 @@ protected function formatYear($pattern,$date) /** * Get the month. - * "M" will return integer 1 through 12; - * "MM" will return two digits month number with necessary zero padding, e.g. 05; - * "MMM" will return the abrreviated month name, e.g. "Jan"; - * "MMMM" will return the full month name, e.g. "January"; - * "MMMMM" will return the narrow month name, e.g. "J"; + * "M" will return integer 1 through 12; + * "MM" will return two digits month number with necessary zero padding, e.g. 05; + * "MMM" will return the abrreviated month name, e.g. "Jan"; + * "MMMM" will return the full month name, e.g. "January"; + * "MMMMM" will return the narrow month name, e.g. "J"; * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException if "month" pattern is unknown * @return string month name */ protected function formatMonth($pattern,$date) @@ -256,6 +257,7 @@ protected function formatMonth($pattern,$date) * "d" for non-padding, "dd" will always return 2 digits day numbers, e.g. 05. * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException if "day" pattern is unknown * @return string day of the month */ protected function formatDay($pattern,$date) @@ -273,6 +275,7 @@ protected function formatDay($pattern,$date) * Get the day in the year, e.g. [1-366] * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException is "dayInYear" pattern is unknown * @return integer hours in AM/PM format. */ protected function formatDayInYear($pattern,$date) @@ -288,6 +291,7 @@ protected function formatDayInYear($pattern,$date) * Get day of week in the month, e.g. 2nd Wed in July. * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException if "dayInMonth" pattern is unknown * @return integer day in month * @see http://www.unicode.org/reports/tr35/#Date_Format_Patterns */ @@ -306,6 +310,7 @@ protected function formatDayInMonth($pattern,$date) * "EEEEE" will return the narrow week day name, e.g. "T"; * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException if "dayInWeek" pattern is unknown * @return string day of the week. * @see http://www.unicode.org/reports/tr35/#Date_Format_Patterns */ @@ -344,6 +349,7 @@ protected function formatDayInWeek($pattern,$date) * Get the AM/PM designator, 12 noon is PM, 12 midnight is AM. * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException if "period" pattern is unknown * @return string AM or PM designator */ protected function formatPeriod($pattern,$date) @@ -364,6 +370,7 @@ protected function formatPeriod($pattern,$date) * "H" for non-padding, "HH" will always return 2 characters. * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException if "hour24" pattern is unknown * @return string hours in 24 hour format. */ protected function formatHour24($pattern,$date) @@ -382,6 +389,7 @@ protected function formatHour24($pattern,$date) * "h" for non-padding, "hh" will always return 2 characters. * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException if "hour12" pattern is unknown * @return string hours in 12 hour format. */ protected function formatHour12($pattern,$date) @@ -401,6 +409,7 @@ protected function formatHour12($pattern,$date) * 'k' for non-padding, and 'kk' with 2 characters padding. * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException if "hourInDay" pattern is unknown * @return integer hours [1-24] */ protected function formatHourInDay($pattern,$date) @@ -419,6 +428,7 @@ protected function formatHourInDay($pattern,$date) * "K" for non-padding, "KK" will always return 2 characters. * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException if "hourInPeriod" pattern is unknown * @return integer hours in AM/PM format. */ protected function formatHourInPeriod($pattern,$date) @@ -437,6 +447,7 @@ protected function formatHourInPeriod($pattern,$date) * "m" for non-padding, "mm" will always return 2 characters. * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException if "minutes" pattern is unknown * @return string minutes. */ protected function formatMinutes($pattern,$date) @@ -455,6 +466,7 @@ protected function formatMinutes($pattern,$date) * "s" for non-padding, "ss" will always return 2 characters. * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException if "seconds" pattern is unknown * @return string seconds */ protected function formatSeconds($pattern,$date) @@ -472,6 +484,7 @@ protected function formatSeconds($pattern,$date) * Get the week in the year. * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException if "weekInYear" pattern is unknown * @return integer week in year */ protected function formatWeekInYear($pattern,$date) @@ -486,12 +499,16 @@ protected function formatWeekInYear($pattern,$date) * Get week in the month. * @param array $pattern result of {@link CTimestamp::getdate}. * @param string $date a pattern. + * @throws CException if "weekInMonth" pattern is unknown * @return integer week in month */ protected function formatWeekInMonth($pattern,$date) { if($pattern==='W') - return @date('W',@mktime(0,0,0,$date['mon'], $date['mday'],$date['year']))-date('W', mktime(0,0,0,$date['mon'],1,$date['year']))+1; + { + $weekDay=date('N',mktime(0,0,0,$date['mon'],1,$date['year'])); + return floor(($weekDay+$date['mday']-2)/7)+1; + } else throw new CException(Yii::t('yii','The pattern for week in month must be "W".')); } @@ -500,6 +517,7 @@ protected function formatWeekInMonth($pattern,$date) * Get the timezone of the server machine. * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException if "timeZone" pattern is unknown * @return string time zone * @todo How to get the timezone for a different region? */ @@ -517,6 +535,7 @@ protected function formatTimeZone($pattern,$date) * Get the era. i.e. in gregorian, year > 0 is AD, else BC. * @param string $pattern a pattern. * @param array $date result of {@link CTimestamp::getdate}. + * @throws CException if "era" pattern is unknown * @return string era * @todo How to support multiple Eras?, e.g. Japanese. */ diff --git a/framework/i18n/CDbMessageSource.php b/framework/i18n/CDbMessageSource.php index 2703b8d7e8c..dd7227f6c70 100644 --- a/framework/i18n/CDbMessageSource.php +++ b/framework/i18n/CDbMessageSource.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -95,6 +95,7 @@ protected function loadMessages($category,$language) /** * Returns the DB connection used for the message source. + * @throws CException if {@link connectionID} application component is invalid * @return CDbConnection the DB connection used for the message source. * @since 1.1.5 */ diff --git a/framework/i18n/CGettextMessageSource.php b/framework/i18n/CGettextMessageSource.php index 83449ea64f5..77d7b66bbbd 100644 --- a/framework/i18n/CGettextMessageSource.php +++ b/framework/i18n/CGettextMessageSource.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -91,7 +91,7 @@ protected function loadMessages($category, $language) if ($this->cachingDuration > 0 && $this->cacheID!==false && ($cache=Yii::app()->getComponent($this->cacheID))!==null) { - $key = self::CACHE_KEY_PREFIX . $messageFile; + $key = self::CACHE_KEY_PREFIX . $messageFile . "." . $category; if (($data=$cache->get($key)) !== false) return unserialize($data); } diff --git a/framework/i18n/CLocale.php b/framework/i18n/CLocale.php index e744a5ff3b8..87fa9c65ed2 100644 --- a/framework/i18n/CLocale.php +++ b/framework/i18n/CLocale.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -92,6 +92,7 @@ public static function getLocaleIDs() * Since the constructor is protected, please use {@link getInstance} * to obtain an instance of the specified locale. * @param string $id the locale ID (e.g. en_US) + * @throws CException if given locale id is not recognized */ protected function __construct($id) { @@ -316,7 +317,7 @@ public function getOrientation() */ public function getPluralRules() { - return isset($this->_data['pluralRules']) ? $this->_data['pluralRules'] : array(); + return isset($this->_data['pluralRules']) ? $this->_data['pluralRules'] : array(0=>'true'); } /** @@ -417,17 +418,17 @@ public function getTerritoryID($id) public function getLocaleDisplayName($id=null, $category='languages') { $id = $this->getCanonicalID($id); - if (($category == 'languages') && ($id=$this->getLanguageID($id)) && (isset($this->_data[$category][$id]))) + if (($category == 'languages') && (isset($this->_data[$category][$id]))) { return $this->_data[$category][$id]; } - elseif (($category == 'scripts') && ($id=$this->getScriptID($id)) && (isset($this->_data[$category][$id]))) + elseif (($category == 'scripts') && ($val=$this->getScriptID($id)) && (isset($this->_data[$category][$val]))) { - return $this->_data[$category][$id]; + return $this->_data[$category][$val]; } - elseif (($category == 'territories') && ($id=$this->getTerritoryID($id)) && (isset($this->_data[$category][$id]))) + elseif (($category == 'territories') && ($val=$this->getTerritoryID($id)) && (isset($this->_data[$category][$val]))) { - return $this->_data[$category][$id]; + return $this->_data[$category][$val]; } elseif (isset($this->_data[$category][$id])) { @@ -445,6 +446,7 @@ public function getLocaleDisplayName($id=null, $category='languages') */ public function getLanguage($id) { + $id = $this->getLanguageID($id); return $this->getLocaleDisplayName($id, 'languages'); } @@ -467,4 +469,4 @@ public function getTerritory($id) { return $this->getLocaleDisplayName($id, 'territories'); } -} \ No newline at end of file +} diff --git a/framework/i18n/CMessageSource.php b/framework/i18n/CMessageSource.php index f07c68424d5..218d04f5137 100644 --- a/framework/i18n/CMessageSource.php +++ b/framework/i18n/CMessageSource.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/i18n/CNumberFormatter.php b/framework/i18n/CNumberFormatter.php index 3188ae2989f..b9448692b59 100644 --- a/framework/i18n/CNumberFormatter.php +++ b/framework/i18n/CNumberFormatter.php @@ -5,7 +5,7 @@ * @author Wei Zhuo * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -27,7 +27,7 @@ *
    • zero (0): required digit. This specifies the places where a digit must appear (will pad 0 if not).
    • *
    • hash (#): optional digit. This is mainly used to specify the location of decimal point and grouping separators.
    • *
    • currency (¤): the currency placeholder. It will be replaced with the localized currency symbol.
    • - *
    • percentage (%): the percetage mark. If appearing, the number will be multiplied by 100 before being formatted.
    • + *
    • percentage (%): the percentage mark. If appearing, the number will be multiplied by 100 before being formatted.
    • *
    • permillage (‰): the permillage mark. If appearing, the number will be multiplied by 1000 before being formatted.
    • *
    • semicolon (;): the character separating positive and negative number sub-patterns.
    • *
    @@ -138,11 +138,20 @@ public function formatDecimal($value) * @param array $format format with the following structure: *
     	 * array(
    -	 * 	'decimalDigits'=>2,     // number of required digits after decimal point; 0s will be padded if not enough digits; if -1, it means we should drop decimal point
    -	 *  'maxDecimalDigits'=>3,  // maximum number of digits after decimal point. Additional digits will be truncated.
    -	 * 	'integerDigits'=>1,     // number of required digits before decimal point; 0s will be padded if not enough digits
    -	 * 	'groupSize1'=>3,        // the primary grouping size; if 0, it means no grouping
    -	 * 	'groupSize2'=>0,        // the secondary grouping size; if 0, it means no secondary grouping
    +	 * 	// number of required digits after the decimal point,
    +	 * 	// will be padded with 0 if not enough digits,
    +	 * 	// -1 means we should drop the decimal point
    +	 * 	'decimalDigits'=>2,
    +	 * 	// maximum number of digits after the decimal point,
    +	 * 	// additional digits will be truncated.
    +	 * 	'maxDecimalDigits'=>3,
    +	 * 	// number of required digits before the decimal point,
    +	 * 	// will be padded with 0 if not enough digits
    +	 * 	'integerDigits'=>1,
    +	 * 	// the primary grouping size, 0 means no grouping
    +	 * 	'groupSize1'=>3,
    +	 * 	// the secondary grouping size, 0 means no secondary grouping
    +	 * 	'groupSize2'=>0,
     	 * 	'positivePrefix'=>'+',  // prefix to positive number
     	 * 	'positiveSuffix'=>'',   // suffix to positive number
     	 * 	'negativePrefix'=>'(',  // prefix to negative number
    diff --git a/framework/i18n/CPhpMessageSource.php b/framework/i18n/CPhpMessageSource.php
    index 226f9466688..215d907daca 100644
    --- a/framework/i18n/CPhpMessageSource.php
    +++ b/framework/i18n/CPhpMessageSource.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/i18n/data/aa.php b/framework/i18n/data/aa.php
    index d7a5970fff6..06fa5f7d087 100644
    --- a/framework/i18n/data/aa.php
    +++ b/framework/i18n/data/aa.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/aa_dj.php b/framework/i18n/data/aa_dj.php
    index fb074ca8d49..e168e5f3740 100644
    --- a/framework/i18n/data/aa_dj.php
    +++ b/framework/i18n/data/aa_dj.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5717',
    diff --git a/framework/i18n/data/aa_er.php b/framework/i18n/data/aa_er.php
    index 9819953d7d8..9d1fc6d7fe8 100644
    --- a/framework/i18n/data/aa_er.php
    +++ b/framework/i18n/data/aa_er.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5717',
    diff --git a/framework/i18n/data/aa_et.php b/framework/i18n/data/aa_et.php
    index e53797ff2dc..15463c4313a 100644
    --- a/framework/i18n/data/aa_et.php
    +++ b/framework/i18n/data/aa_et.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/af.php b/framework/i18n/data/af.php
    index 14aa1986b6d..1110ce8db86 100644
    --- a/framework/i18n/data/af.php
    +++ b/framework/i18n/data/af.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/af_na.php b/framework/i18n/data/af_na.php
    index 86135eff72a..aea32321c80 100644
    --- a/framework/i18n/data/af_na.php
    +++ b/framework/i18n/data/af_na.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/af_za.php b/framework/i18n/data/af_za.php
    index 2f2d8a0e16e..43846c07f62 100644
    --- a/framework/i18n/data/af_za.php
    +++ b/framework/i18n/data/af_za.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/agq.php b/framework/i18n/data/agq.php
    index cf6cc364dab..3b0e49583fa 100644
    --- a/framework/i18n/data/agq.php
    +++ b/framework/i18n/data/agq.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/agq_cm.php b/framework/i18n/data/agq_cm.php
    index 923f6c9dc95..e59a1395d3f 100644
    --- a/framework/i18n/data/agq_cm.php
    +++ b/framework/i18n/data/agq_cm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ak.php b/framework/i18n/data/ak.php
    index 716ce7b0833..e32a8626194 100644
    --- a/framework/i18n/data/ak.php
    +++ b/framework/i18n/data/ak.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ak_gh.php b/framework/i18n/data/ak_gh.php
    index 59b16db35e6..135efb1831e 100644
    --- a/framework/i18n/data/ak_gh.php
    +++ b/framework/i18n/data/ak_gh.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/am.php b/framework/i18n/data/am.php
    index 7a35a924b7b..720d4c78501 100644
    --- a/framework/i18n/data/am.php
    +++ b/framework/i18n/data/am.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/am_et.php b/framework/i18n/data/am_et.php
    index 8cc600caedc..39691698ec7 100644
    --- a/framework/i18n/data/am_et.php
    +++ b/framework/i18n/data/am_et.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ar.php b/framework/i18n/data/ar.php
    index ed60acf79bb..b3376820836 100644
    --- a/framework/i18n/data/ar.php
    +++ b/framework/i18n/data/ar.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6472',
    diff --git a/framework/i18n/data/ar_001.php b/framework/i18n/data/ar_001.php
    index 0d810a278b3..7646c0f4877 100644
    --- a/framework/i18n/data/ar_001.php
    +++ b/framework/i18n/data/ar_001.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6228',
    diff --git a/framework/i18n/data/ar_ae.php b/framework/i18n/data/ar_ae.php
    index 95014027615..1eb33fd3cef 100644
    --- a/framework/i18n/data/ar_ae.php
    +++ b/framework/i18n/data/ar_ae.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5829',
    diff --git a/framework/i18n/data/ar_bh.php b/framework/i18n/data/ar_bh.php
    index b85bb1192ec..e592a418075 100644
    --- a/framework/i18n/data/ar_bh.php
    +++ b/framework/i18n/data/ar_bh.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4753',
    diff --git a/framework/i18n/data/ar_dz.php b/framework/i18n/data/ar_dz.php
    index a46c0dcd988..b8d0b88bb59 100644
    --- a/framework/i18n/data/ar_dz.php
    +++ b/framework/i18n/data/ar_dz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6177',
    diff --git a/framework/i18n/data/ar_eg.php b/framework/i18n/data/ar_eg.php
    index 09a6c094723..b794bb9f6f1 100644
    --- a/framework/i18n/data/ar_eg.php
    +++ b/framework/i18n/data/ar_eg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ar_iq.php b/framework/i18n/data/ar_iq.php
    index a88dc203aed..18d8780eb90 100644
    --- a/framework/i18n/data/ar_iq.php
    +++ b/framework/i18n/data/ar_iq.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4753',
    diff --git a/framework/i18n/data/ar_jo.php b/framework/i18n/data/ar_jo.php
    index 6eed28ff4e6..68c7e4831f6 100644
    --- a/framework/i18n/data/ar_jo.php
    +++ b/framework/i18n/data/ar_jo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5695',
    diff --git a/framework/i18n/data/ar_kw.php b/framework/i18n/data/ar_kw.php
    index d80d30d4911..37a3296420c 100644
    --- a/framework/i18n/data/ar_kw.php
    +++ b/framework/i18n/data/ar_kw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4753',
    diff --git a/framework/i18n/data/ar_lb.php b/framework/i18n/data/ar_lb.php
    index ca9734558fc..8fa033ef313 100644
    --- a/framework/i18n/data/ar_lb.php
    +++ b/framework/i18n/data/ar_lb.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5695',
    diff --git a/framework/i18n/data/ar_ly.php b/framework/i18n/data/ar_ly.php
    index 72520a230d1..b33895a81f0 100644
    --- a/framework/i18n/data/ar_ly.php
    +++ b/framework/i18n/data/ar_ly.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4753',
    diff --git a/framework/i18n/data/ar_ma.php b/framework/i18n/data/ar_ma.php
    index 421679e04af..f5bb6c76913 100644
    --- a/framework/i18n/data/ar_ma.php
    +++ b/framework/i18n/data/ar_ma.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6177',
    diff --git a/framework/i18n/data/ar_om.php b/framework/i18n/data/ar_om.php
    index d306297a091..da6bb26ba1e 100644
    --- a/framework/i18n/data/ar_om.php
    +++ b/framework/i18n/data/ar_om.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4753',
    diff --git a/framework/i18n/data/ar_qa.php b/framework/i18n/data/ar_qa.php
    index d823cf0a900..711cdc49b3a 100644
    --- a/framework/i18n/data/ar_qa.php
    +++ b/framework/i18n/data/ar_qa.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ar_sa.php b/framework/i18n/data/ar_sa.php
    index e6f455f17cf..467dd093c02 100644
    --- a/framework/i18n/data/ar_sa.php
    +++ b/framework/i18n/data/ar_sa.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ar_sd.php b/framework/i18n/data/ar_sd.php
    index 02c8c179c53..a501e7ed17b 100644
    --- a/framework/i18n/data/ar_sd.php
    +++ b/framework/i18n/data/ar_sd.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4753',
    diff --git a/framework/i18n/data/ar_sy.php b/framework/i18n/data/ar_sy.php
    index 41d4fcb7b9a..92320399d4f 100644
    --- a/framework/i18n/data/ar_sy.php
    +++ b/framework/i18n/data/ar_sy.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ar_tn.php b/framework/i18n/data/ar_tn.php
    index f6ddf1c06e3..b96c907c514 100644
    --- a/framework/i18n/data/ar_tn.php
    +++ b/framework/i18n/data/ar_tn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ar_ye.php b/framework/i18n/data/ar_ye.php
    index 0300dcf291e..72ec20e643d 100644
    --- a/framework/i18n/data/ar_ye.php
    +++ b/framework/i18n/data/ar_ye.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/as.php b/framework/i18n/data/as.php
    index de5e8992dff..7f7f6fc4a24 100644
    --- a/framework/i18n/data/as.php
    +++ b/framework/i18n/data/as.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/as_in.php b/framework/i18n/data/as_in.php
    index e3c9326835c..11f8d4ee05a 100644
    --- a/framework/i18n/data/as_in.php
    +++ b/framework/i18n/data/as_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/asa.php b/framework/i18n/data/asa.php
    index 5d221124cd9..35facb7bcb9 100644
    --- a/framework/i18n/data/asa.php
    +++ b/framework/i18n/data/asa.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/asa_tz.php b/framework/i18n/data/asa_tz.php
    index 80c7a3c0375..7a7e7fd395e 100644
    --- a/framework/i18n/data/asa_tz.php
    +++ b/framework/i18n/data/asa_tz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/az.php b/framework/i18n/data/az.php
    index 24b885acd21..d9b43e91911 100644
    --- a/framework/i18n/data/az.php
    +++ b/framework/i18n/data/az.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/az_arab.php b/framework/i18n/data/az_arab.php
    index 86a92230335..96542f711b2 100644
    --- a/framework/i18n/data/az_arab.php
    +++ b/framework/i18n/data/az_arab.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4590',
    diff --git a/framework/i18n/data/az_arab_ir.php b/framework/i18n/data/az_arab_ir.php
    index c356b5d8f7a..a94097ba78e 100644
    --- a/framework/i18n/data/az_arab_ir.php
    +++ b/framework/i18n/data/az_arab_ir.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4590',
    diff --git a/framework/i18n/data/az_az.php b/framework/i18n/data/az_az.php
    index 5904a04eeef..f9651afebeb 100644
    --- a/framework/i18n/data/az_az.php
    +++ b/framework/i18n/data/az_az.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/az_cyrl.php b/framework/i18n/data/az_cyrl.php
    index 5722258be07..e5347fabbdd 100644
    --- a/framework/i18n/data/az_cyrl.php
    +++ b/framework/i18n/data/az_cyrl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/az_cyrl_az.php b/framework/i18n/data/az_cyrl_az.php
    index 60665a2b510..1d2fc80fa1e 100644
    --- a/framework/i18n/data/az_cyrl_az.php
    +++ b/framework/i18n/data/az_cyrl_az.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/az_ir.php b/framework/i18n/data/az_ir.php
    index 6c82a5184e5..ddf722a42de 100644
    --- a/framework/i18n/data/az_ir.php
    +++ b/framework/i18n/data/az_ir.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4590',
    diff --git a/framework/i18n/data/az_latn.php b/framework/i18n/data/az_latn.php
    index 88c27e25c2c..a5a9fcefff4 100644
    --- a/framework/i18n/data/az_latn.php
    +++ b/framework/i18n/data/az_latn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/az_latn_az.php b/framework/i18n/data/az_latn_az.php
    index 6947c8cd750..308edf56826 100644
    --- a/framework/i18n/data/az_latn_az.php
    +++ b/framework/i18n/data/az_latn_az.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/bas.php b/framework/i18n/data/bas.php
    index cda41040eae..349c15cc2e0 100644
    --- a/framework/i18n/data/bas.php
    +++ b/framework/i18n/data/bas.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/bas_cm.php b/framework/i18n/data/bas_cm.php
    index 8656a5a0874..c9492ff0964 100644
    --- a/framework/i18n/data/bas_cm.php
    +++ b/framework/i18n/data/bas_cm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/be.php b/framework/i18n/data/be.php
    index 3adce82f307..e48b81f587b 100644
    --- a/framework/i18n/data/be.php
    +++ b/framework/i18n/data/be.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/be_by.php b/framework/i18n/data/be_by.php
    index b422d7e2526..2b1cc84a9b0 100644
    --- a/framework/i18n/data/be_by.php
    +++ b/framework/i18n/data/be_by.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/bem.php b/framework/i18n/data/bem.php
    index 8c0bed0ff96..b275fd922dc 100644
    --- a/framework/i18n/data/bem.php
    +++ b/framework/i18n/data/bem.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/bem_zm.php b/framework/i18n/data/bem_zm.php
    index 11d2168c15a..59d1d3e4266 100644
    --- a/framework/i18n/data/bem_zm.php
    +++ b/framework/i18n/data/bem_zm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/bez.php b/framework/i18n/data/bez.php
    index 7dab156de59..2ecdeedf655 100644
    --- a/framework/i18n/data/bez.php
    +++ b/framework/i18n/data/bez.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/bez_tz.php b/framework/i18n/data/bez_tz.php
    index 0e7b3ff8cd0..143a68f93a0 100644
    --- a/framework/i18n/data/bez_tz.php
    +++ b/framework/i18n/data/bez_tz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/bg.php b/framework/i18n/data/bg.php
    index fa8a63b58cc..e155f59238a 100644
    --- a/framework/i18n/data/bg.php
    +++ b/framework/i18n/data/bg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/bg_bg.php b/framework/i18n/data/bg_bg.php
    index 64cdc44dd7b..f4178e31c27 100644
    --- a/framework/i18n/data/bg_bg.php
    +++ b/framework/i18n/data/bg_bg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/bm.php b/framework/i18n/data/bm.php
    index 7c6bba09454..42a1a1ec99d 100644
    --- a/framework/i18n/data/bm.php
    +++ b/framework/i18n/data/bm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/bm_ml.php b/framework/i18n/data/bm_ml.php
    index 9fdf4536ef2..b07d9feb7a8 100644
    --- a/framework/i18n/data/bm_ml.php
    +++ b/framework/i18n/data/bm_ml.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/bn.php b/framework/i18n/data/bn.php
    index 71f6308affb..4070fb6d6bd 100644
    --- a/framework/i18n/data/bn.php
    +++ b/framework/i18n/data/bn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/bn_bd.php b/framework/i18n/data/bn_bd.php
    index ceda73cfa51..9d3b0f21545 100644
    --- a/framework/i18n/data/bn_bd.php
    +++ b/framework/i18n/data/bn_bd.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/bn_in.php b/framework/i18n/data/bn_in.php
    index 6149418bee4..f3c3d01259f 100644
    --- a/framework/i18n/data/bn_in.php
    +++ b/framework/i18n/data/bn_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5953',
    diff --git a/framework/i18n/data/bo.php b/framework/i18n/data/bo.php
    index 28b23a3796b..965bdc409d1 100644
    --- a/framework/i18n/data/bo.php
    +++ b/framework/i18n/data/bo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/bo_cn.php b/framework/i18n/data/bo_cn.php
    index 6e21cb68af4..741260f2d80 100644
    --- a/framework/i18n/data/bo_cn.php
    +++ b/framework/i18n/data/bo_cn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/bo_in.php b/framework/i18n/data/bo_in.php
    index f50a0059d54..b15918eea92 100644
    --- a/framework/i18n/data/bo_in.php
    +++ b/framework/i18n/data/bo_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/br.php b/framework/i18n/data/br.php
    index 365597e8139..1408f737fd6 100644
    --- a/framework/i18n/data/br.php
    +++ b/framework/i18n/data/br.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6444',
    diff --git a/framework/i18n/data/br_fr.php b/framework/i18n/data/br_fr.php
    index 2b3ab374df5..e00a0030f92 100644
    --- a/framework/i18n/data/br_fr.php
    +++ b/framework/i18n/data/br_fr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/brx.php b/framework/i18n/data/brx.php
    index 41a4b84f1cb..328354864a9 100644
    --- a/framework/i18n/data/brx.php
    +++ b/framework/i18n/data/brx.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/brx_in.php b/framework/i18n/data/brx_in.php
    index 6ffb9b727a6..ee813aeb5bd 100644
    --- a/framework/i18n/data/brx_in.php
    +++ b/framework/i18n/data/brx_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/bs.php b/framework/i18n/data/bs.php
    index e8a109ddaa2..337f73ff0c5 100644
    --- a/framework/i18n/data/bs.php
    +++ b/framework/i18n/data/bs.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6472',
    diff --git a/framework/i18n/data/bs_ba.php b/framework/i18n/data/bs_ba.php
    index 92fd47bbc31..4a3e59534a1 100644
    --- a/framework/i18n/data/bs_ba.php
    +++ b/framework/i18n/data/bs_ba.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/byn.php b/framework/i18n/data/byn.php
    index 6b86c0ecb1e..f2784c64259 100644
    --- a/framework/i18n/data/byn.php
    +++ b/framework/i18n/data/byn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/byn_er.php b/framework/i18n/data/byn_er.php
    index 5eb01d8160c..10035bd7da5 100644
    --- a/framework/i18n/data/byn_er.php
    +++ b/framework/i18n/data/byn_er.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ca.php b/framework/i18n/data/ca.php
    index 5faf0d07694..bbeb42639d7 100644
    --- a/framework/i18n/data/ca.php
    +++ b/framework/i18n/data/ca.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ca_es.php b/framework/i18n/data/ca_es.php
    index bc7a5cdd813..6e5e845eac0 100644
    --- a/framework/i18n/data/ca_es.php
    +++ b/framework/i18n/data/ca_es.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/cch.php b/framework/i18n/data/cch.php
    index 60bad4b9639..6cea9e3c1df 100644
    --- a/framework/i18n/data/cch.php
    +++ b/framework/i18n/data/cch.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/cch_ng.php b/framework/i18n/data/cch_ng.php
    index f4e9f031c1e..1f971e86a8a 100644
    --- a/framework/i18n/data/cch_ng.php
    +++ b/framework/i18n/data/cch_ng.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/cgg.php b/framework/i18n/data/cgg.php
    index f0efcbf94ea..a8a8a7a62c2 100644
    --- a/framework/i18n/data/cgg.php
    +++ b/framework/i18n/data/cgg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/cgg_ug.php b/framework/i18n/data/cgg_ug.php
    index 44e1d0c40e1..7f63d564c01 100644
    --- a/framework/i18n/data/cgg_ug.php
    +++ b/framework/i18n/data/cgg_ug.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/chr.php b/framework/i18n/data/chr.php
    index 9c19a88fe29..33ff7d7af1b 100644
    --- a/framework/i18n/data/chr.php
    +++ b/framework/i18n/data/chr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/chr_us.php b/framework/i18n/data/chr_us.php
    index 411bfee53e3..d0e7a70b65f 100644
    --- a/framework/i18n/data/chr_us.php
    +++ b/framework/i18n/data/chr_us.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4421',
    diff --git a/framework/i18n/data/cs.php b/framework/i18n/data/cs.php
    index 043662caca5..16a02905c4b 100644
    --- a/framework/i18n/data/cs.php
    +++ b/framework/i18n/data/cs.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/cs_cz.php b/framework/i18n/data/cs_cz.php
    index 07d46ae914f..e6709d09d49 100644
    --- a/framework/i18n/data/cs_cz.php
    +++ b/framework/i18n/data/cs_cz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/cy.php b/framework/i18n/data/cy.php
    index 6971fd297db..cb0aa4b6fa2 100644
    --- a/framework/i18n/data/cy.php
    +++ b/framework/i18n/data/cy.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/cy_gb.php b/framework/i18n/data/cy_gb.php
    index 1c4341f3852..47583352dd6 100644
    --- a/framework/i18n/data/cy_gb.php
    +++ b/framework/i18n/data/cy_gb.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/da.php b/framework/i18n/data/da.php
    index bd1e6915a84..dc45d7ce0d7 100644
    --- a/framework/i18n/data/da.php
    +++ b/framework/i18n/data/da.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/da_dk.php b/framework/i18n/data/da_dk.php
    index 0edf3a08472..ceec2d1adc2 100644
    --- a/framework/i18n/data/da_dk.php
    +++ b/framework/i18n/data/da_dk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/dav.php b/framework/i18n/data/dav.php
    index c7ac282b3e3..6653dbf4583 100644
    --- a/framework/i18n/data/dav.php
    +++ b/framework/i18n/data/dav.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/dav_ke.php b/framework/i18n/data/dav_ke.php
    index 93fac582571..55558658cfd 100644
    --- a/framework/i18n/data/dav_ke.php
    +++ b/framework/i18n/data/dav_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/de.php b/framework/i18n/data/de.php
    index 46b8bacbed0..6bae66bbcdf 100644
    --- a/framework/i18n/data/de.php
    +++ b/framework/i18n/data/de.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/de_at.php b/framework/i18n/data/de_at.php
    index a4a1175453f..b129ac24681 100644
    --- a/framework/i18n/data/de_at.php
    +++ b/framework/i18n/data/de_at.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/de_be.php b/framework/i18n/data/de_be.php
    index f153ceef104..d5b5863f7ba 100644
    --- a/framework/i18n/data/de_be.php
    +++ b/framework/i18n/data/de_be.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5878',
    diff --git a/framework/i18n/data/de_ch.php b/framework/i18n/data/de_ch.php
    index 3ad65cbe142..94ac07f16fa 100644
    --- a/framework/i18n/data/de_ch.php
    +++ b/framework/i18n/data/de_ch.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/de_de.php b/framework/i18n/data/de_de.php
    index 071c61642ce..277db599b5d 100644
    --- a/framework/i18n/data/de_de.php
    +++ b/framework/i18n/data/de_de.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/de_li.php b/framework/i18n/data/de_li.php
    index 9b9a8e0b3e6..b1b0af7d3fb 100644
    --- a/framework/i18n/data/de_li.php
    +++ b/framework/i18n/data/de_li.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/de_lu.php b/framework/i18n/data/de_lu.php
    index 4b4c80acd19..dcc0da6a791 100644
    --- a/framework/i18n/data/de_lu.php
    +++ b/framework/i18n/data/de_lu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/dje.php b/framework/i18n/data/dje.php
    index 4d2a28b97ca..bc9949ea1b6 100644
    --- a/framework/i18n/data/dje.php
    +++ b/framework/i18n/data/dje.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/dje_ne.php b/framework/i18n/data/dje_ne.php
    index a6a40301f78..025c080a06c 100644
    --- a/framework/i18n/data/dje_ne.php
    +++ b/framework/i18n/data/dje_ne.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/dua.php b/framework/i18n/data/dua.php
    index 3860fbeb978..7e5a76b9747 100644
    --- a/framework/i18n/data/dua.php
    +++ b/framework/i18n/data/dua.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/dua_cm.php b/framework/i18n/data/dua_cm.php
    index f443eddfb7c..6ef01b9efea 100644
    --- a/framework/i18n/data/dua_cm.php
    +++ b/framework/i18n/data/dua_cm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/dv.php b/framework/i18n/data/dv.php
    index e23172593d9..61835570d88 100644
    --- a/framework/i18n/data/dv.php
    +++ b/framework/i18n/data/dv.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5030',
    diff --git a/framework/i18n/data/dv_mv.php b/framework/i18n/data/dv_mv.php
    index 94249aedef0..d5dc815ae4d 100644
    --- a/framework/i18n/data/dv_mv.php
    +++ b/framework/i18n/data/dv_mv.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/dyo.php b/framework/i18n/data/dyo.php
    index 071231dcbcb..f7228c61399 100644
    --- a/framework/i18n/data/dyo.php
    +++ b/framework/i18n/data/dyo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/dyo_sn.php b/framework/i18n/data/dyo_sn.php
    index 2edf31fd5e8..65758d04356 100644
    --- a/framework/i18n/data/dyo_sn.php
    +++ b/framework/i18n/data/dyo_sn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/dz.php b/framework/i18n/data/dz.php
    index 8dabef46f5c..e68f9f1ccd0 100644
    --- a/framework/i18n/data/dz.php
    +++ b/framework/i18n/data/dz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/dz_bt.php b/framework/i18n/data/dz_bt.php
    index 5a93e636c6a..e5e3e3877c3 100644
    --- a/framework/i18n/data/dz_bt.php
    +++ b/framework/i18n/data/dz_bt.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ebu.php b/framework/i18n/data/ebu.php
    index 43e25931fe8..3055a67eb09 100644
    --- a/framework/i18n/data/ebu.php
    +++ b/framework/i18n/data/ebu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ebu_ke.php b/framework/i18n/data/ebu_ke.php
    index bcca21d9eec..1185ad4194a 100644
    --- a/framework/i18n/data/ebu_ke.php
    +++ b/framework/i18n/data/ebu_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ee.php b/framework/i18n/data/ee.php
    index c99c5e2105d..3385699074e 100644
    --- a/framework/i18n/data/ee.php
    +++ b/framework/i18n/data/ee.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ee_gh.php b/framework/i18n/data/ee_gh.php
    index a24420d716f..6add271cb80 100644
    --- a/framework/i18n/data/ee_gh.php
    +++ b/framework/i18n/data/ee_gh.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ee_tg.php b/framework/i18n/data/ee_tg.php
    index d0954d11dae..fa452cc3255 100644
    --- a/framework/i18n/data/ee_tg.php
    +++ b/framework/i18n/data/ee_tg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/el.php b/framework/i18n/data/el.php
    index fdd29a528fd..c4069006a42 100644
    --- a/framework/i18n/data/el.php
    +++ b/framework/i18n/data/el.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/el_cy.php b/framework/i18n/data/el_cy.php
    index 2aaf72911a4..d612de74400 100644
    --- a/framework/i18n/data/el_cy.php
    +++ b/framework/i18n/data/el_cy.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/el_gr.php b/framework/i18n/data/el_gr.php
    index a7ea07369f6..6f2f058b649 100644
    --- a/framework/i18n/data/el_gr.php
    +++ b/framework/i18n/data/el_gr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/el_polyton.php b/framework/i18n/data/el_polyton.php
    index 563b8908ad8..206809f237c 100644
    --- a/framework/i18n/data/el_polyton.php
    +++ b/framework/i18n/data/el_polyton.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6444',
    diff --git a/framework/i18n/data/en.php b/framework/i18n/data/en.php
    index 51f9685b196..7d0c1b02764 100644
    --- a/framework/i18n/data/en.php
    +++ b/framework/i18n/data/en.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/en_as.php b/framework/i18n/data/en_as.php
    index f29b9100794..82c30a8052a 100644
    --- a/framework/i18n/data/en_as.php
    +++ b/framework/i18n/data/en_as.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/en_au.php b/framework/i18n/data/en_au.php
    index 6cccdec5ee1..922d2e2dfd7 100644
    --- a/framework/i18n/data/en_au.php
    +++ b/framework/i18n/data/en_au.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6465',
    diff --git a/framework/i18n/data/en_bb.php b/framework/i18n/data/en_bb.php
    index a8c959aa632..41bb5720d14 100644
    --- a/framework/i18n/data/en_bb.php
    +++ b/framework/i18n/data/en_bb.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/en_be.php b/framework/i18n/data/en_be.php
    index 31bed26c146..615d2ee1d86 100644
    --- a/framework/i18n/data/en_be.php
    +++ b/framework/i18n/data/en_be.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/en_bm.php b/framework/i18n/data/en_bm.php
    index 0d8e360a98b..65fd273c935 100644
    --- a/framework/i18n/data/en_bm.php
    +++ b/framework/i18n/data/en_bm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/en_bw.php b/framework/i18n/data/en_bw.php
    index 7d35aefbad3..96f6a490dfe 100644
    --- a/framework/i18n/data/en_bw.php
    +++ b/framework/i18n/data/en_bw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/en_bz.php b/framework/i18n/data/en_bz.php
    index c43c46a3e08..dc127e97683 100644
    --- a/framework/i18n/data/en_bz.php
    +++ b/framework/i18n/data/en_bz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/en_ca.php b/framework/i18n/data/en_ca.php
    index ad089a3ac97..d9d146ed33e 100644
    --- a/framework/i18n/data/en_ca.php
    +++ b/framework/i18n/data/en_ca.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6450',
    diff --git a/framework/i18n/data/en_dsrt.php b/framework/i18n/data/en_dsrt.php
    index d70660d51ca..3a0c533385e 100644
    --- a/framework/i18n/data/en_dsrt.php
    +++ b/framework/i18n/data/en_dsrt.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6472',
    diff --git a/framework/i18n/data/en_dsrt_us.php b/framework/i18n/data/en_dsrt_us.php
    index 03a8dcf6798..2e424e3209b 100644
    --- a/framework/i18n/data/en_dsrt_us.php
    +++ b/framework/i18n/data/en_dsrt_us.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/en_gb.php b/framework/i18n/data/en_gb.php
    index 77ea0402350..53c92145f05 100644
    --- a/framework/i18n/data/en_gb.php
    +++ b/framework/i18n/data/en_gb.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/en_gu.php b/framework/i18n/data/en_gu.php
    index cd56312a478..1dfc0f4d3a4 100644
    --- a/framework/i18n/data/en_gu.php
    +++ b/framework/i18n/data/en_gu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6144',
    diff --git a/framework/i18n/data/en_gy.php b/framework/i18n/data/en_gy.php
    index 512e22febe7..ba617eab0db 100644
    --- a/framework/i18n/data/en_gy.php
    +++ b/framework/i18n/data/en_gy.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/en_hk.php b/framework/i18n/data/en_hk.php
    index 50ba0e38378..be1d38abade 100644
    --- a/framework/i18n/data/en_hk.php
    +++ b/framework/i18n/data/en_hk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/en_ie.php b/framework/i18n/data/en_ie.php
    index 63ae57e7397..9196542521e 100644
    --- a/framework/i18n/data/en_ie.php
    +++ b/framework/i18n/data/en_ie.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6465',
    diff --git a/framework/i18n/data/en_in.php b/framework/i18n/data/en_in.php
    index 25ebfc45917..0a478d5737a 100644
    --- a/framework/i18n/data/en_in.php
    +++ b/framework/i18n/data/en_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/en_jm.php b/framework/i18n/data/en_jm.php
    index f32839883d9..aff06a1e549 100644
    --- a/framework/i18n/data/en_jm.php
    +++ b/framework/i18n/data/en_jm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/en_mh.php b/framework/i18n/data/en_mh.php
    index 5dc3d8179bc..e953f6faafb 100644
    --- a/framework/i18n/data/en_mh.php
    +++ b/framework/i18n/data/en_mh.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/en_mp.php b/framework/i18n/data/en_mp.php
    index 1a90a2974f4..4f8dca63478 100644
    --- a/framework/i18n/data/en_mp.php
    +++ b/framework/i18n/data/en_mp.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/en_mt.php b/framework/i18n/data/en_mt.php
    index c8ad3766c10..26841cc1ef6 100644
    --- a/framework/i18n/data/en_mt.php
    +++ b/framework/i18n/data/en_mt.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6465',
    diff --git a/framework/i18n/data/en_mu.php b/framework/i18n/data/en_mu.php
    index f0981c6a81c..dad5d749e5d 100644
    --- a/framework/i18n/data/en_mu.php
    +++ b/framework/i18n/data/en_mu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/en_na.php b/framework/i18n/data/en_na.php
    index 5fbd0b71b45..4b99484207c 100644
    --- a/framework/i18n/data/en_na.php
    +++ b/framework/i18n/data/en_na.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/en_nz.php b/framework/i18n/data/en_nz.php
    index 61cce0a4aab..7633d90192d 100644
    --- a/framework/i18n/data/en_nz.php
    +++ b/framework/i18n/data/en_nz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6465',
    diff --git a/framework/i18n/data/en_ph.php b/framework/i18n/data/en_ph.php
    index 575e0991fa0..a52ad09efcb 100644
    --- a/framework/i18n/data/en_ph.php
    +++ b/framework/i18n/data/en_ph.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5717',
    diff --git a/framework/i18n/data/en_pk.php b/framework/i18n/data/en_pk.php
    index 0548634d1d2..4a8f255d742 100644
    --- a/framework/i18n/data/en_pk.php
    +++ b/framework/i18n/data/en_pk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/en_sg.php b/framework/i18n/data/en_sg.php
    index 820e7950919..d7c771a7724 100644
    --- a/framework/i18n/data/en_sg.php
    +++ b/framework/i18n/data/en_sg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/en_shaw.php b/framework/i18n/data/en_shaw.php
    index ad494573355..41233ecb253 100644
    --- a/framework/i18n/data/en_shaw.php
    +++ b/framework/i18n/data/en_shaw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5953',
    diff --git a/framework/i18n/data/en_tt.php b/framework/i18n/data/en_tt.php
    index 10d8a9aa4a7..0ae5d32ff60 100644
    --- a/framework/i18n/data/en_tt.php
    +++ b/framework/i18n/data/en_tt.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/en_um.php b/framework/i18n/data/en_um.php
    index 728a9bdb7ce..7998ca9ce06 100644
    --- a/framework/i18n/data/en_um.php
    +++ b/framework/i18n/data/en_um.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/en_us.php b/framework/i18n/data/en_us.php
    index 215f23d17b6..3227f9af57b 100644
    --- a/framework/i18n/data/en_us.php
    +++ b/framework/i18n/data/en_us.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/en_us_posix.php b/framework/i18n/data/en_us_posix.php
    index 716bf1a4955..06ad09363cd 100644
    --- a/framework/i18n/data/en_us_posix.php
    +++ b/framework/i18n/data/en_us_posix.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/en_vi.php b/framework/i18n/data/en_vi.php
    index d03961acf81..1734bd40b6e 100644
    --- a/framework/i18n/data/en_vi.php
    +++ b/framework/i18n/data/en_vi.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/en_za.php b/framework/i18n/data/en_za.php
    index 93288f4563d..91c37332841 100644
    --- a/framework/i18n/data/en_za.php
    +++ b/framework/i18n/data/en_za.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6450',
    diff --git a/framework/i18n/data/en_zw.php b/framework/i18n/data/en_zw.php
    index 8fbc9cf2bf1..e2435aed988 100644
    --- a/framework/i18n/data/en_zw.php
    +++ b/framework/i18n/data/en_zw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/en_zz.php b/framework/i18n/data/en_zz.php
    index fc6f1c60f3d..cb78ecebfbd 100644
    --- a/framework/i18n/data/en_zz.php
    +++ b/framework/i18n/data/en_zz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5015',
    diff --git a/framework/i18n/data/eo.php b/framework/i18n/data/eo.php
    index 5a322e6138f..275f0c61300 100644
    --- a/framework/i18n/data/eo.php
    +++ b/framework/i18n/data/eo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5806',
    diff --git a/framework/i18n/data/es.php b/framework/i18n/data/es.php
    index e236cf4b7fc..e92b794b83c 100644
    --- a/framework/i18n/data/es.php
    +++ b/framework/i18n/data/es.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/es_419.php b/framework/i18n/data/es_419.php
    index d3ebdfc688c..636d53505e8 100644
    --- a/framework/i18n/data/es_419.php
    +++ b/framework/i18n/data/es_419.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/es_ar.php b/framework/i18n/data/es_ar.php
    index 5765459b7be..51289c50bfe 100644
    --- a/framework/i18n/data/es_ar.php
    +++ b/framework/i18n/data/es_ar.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6144',
    diff --git a/framework/i18n/data/es_bo.php b/framework/i18n/data/es_bo.php
    index 982ead401c7..86b87b1ef9c 100644
    --- a/framework/i18n/data/es_bo.php
    +++ b/framework/i18n/data/es_bo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5884',
    diff --git a/framework/i18n/data/es_cl.php b/framework/i18n/data/es_cl.php
    index 2053223b0b0..74b956e41ea 100644
    --- a/framework/i18n/data/es_cl.php
    +++ b/framework/i18n/data/es_cl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/es_co.php b/framework/i18n/data/es_co.php
    index 49fbc9f9f6a..36daf7384c6 100644
    --- a/framework/i18n/data/es_co.php
    +++ b/framework/i18n/data/es_co.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5884',
    diff --git a/framework/i18n/data/es_cr.php b/framework/i18n/data/es_cr.php
    index c2467368cd2..aab0e81d2a9 100644
    --- a/framework/i18n/data/es_cr.php
    +++ b/framework/i18n/data/es_cr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5884',
    diff --git a/framework/i18n/data/es_do.php b/framework/i18n/data/es_do.php
    index ad74bacb46b..546e9e69e29 100644
    --- a/framework/i18n/data/es_do.php
    +++ b/framework/i18n/data/es_do.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5884',
    diff --git a/framework/i18n/data/es_ec.php b/framework/i18n/data/es_ec.php
    index 842bc757c91..7cb7d338911 100644
    --- a/framework/i18n/data/es_ec.php
    +++ b/framework/i18n/data/es_ec.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/es_es.php b/framework/i18n/data/es_es.php
    index 59d739ed520..457a7f2a070 100644
    --- a/framework/i18n/data/es_es.php
    +++ b/framework/i18n/data/es_es.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/es_gq.php b/framework/i18n/data/es_gq.php
    index 3de3aaf926e..79c87651943 100644
    --- a/framework/i18n/data/es_gq.php
    +++ b/framework/i18n/data/es_gq.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/es_gt.php b/framework/i18n/data/es_gt.php
    index 7d6b994bff4..f00cd29bb4f 100644
    --- a/framework/i18n/data/es_gt.php
    +++ b/framework/i18n/data/es_gt.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5884',
    diff --git a/framework/i18n/data/es_hn.php b/framework/i18n/data/es_hn.php
    index 5e1c299de56..223f29b1d19 100644
    --- a/framework/i18n/data/es_hn.php
    +++ b/framework/i18n/data/es_hn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5884',
    diff --git a/framework/i18n/data/es_mx.php b/framework/i18n/data/es_mx.php
    index 92c7e1951b9..9f0e424970d 100644
    --- a/framework/i18n/data/es_mx.php
    +++ b/framework/i18n/data/es_mx.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5884',
    diff --git a/framework/i18n/data/es_ni.php b/framework/i18n/data/es_ni.php
    index d51b1d5a5b5..391f21131ea 100644
    --- a/framework/i18n/data/es_ni.php
    +++ b/framework/i18n/data/es_ni.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5884',
    diff --git a/framework/i18n/data/es_pa.php b/framework/i18n/data/es_pa.php
    index 3d2f2cf001f..cfc48f7073c 100644
    --- a/framework/i18n/data/es_pa.php
    +++ b/framework/i18n/data/es_pa.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6450',
    diff --git a/framework/i18n/data/es_pe.php b/framework/i18n/data/es_pe.php
    index 84ba6c1792d..74653afd499 100644
    --- a/framework/i18n/data/es_pe.php
    +++ b/framework/i18n/data/es_pe.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5884',
    diff --git a/framework/i18n/data/es_pr.php b/framework/i18n/data/es_pr.php
    index dce406ab0ad..34bc881259d 100644
    --- a/framework/i18n/data/es_pr.php
    +++ b/framework/i18n/data/es_pr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6450',
    diff --git a/framework/i18n/data/es_py.php b/framework/i18n/data/es_py.php
    index 1bc34cf9d2e..7546338804c 100644
    --- a/framework/i18n/data/es_py.php
    +++ b/framework/i18n/data/es_py.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/es_sv.php b/framework/i18n/data/es_sv.php
    index c7e16d7b4de..aa25dcec7e8 100644
    --- a/framework/i18n/data/es_sv.php
    +++ b/framework/i18n/data/es_sv.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5884',
    diff --git a/framework/i18n/data/es_us.php b/framework/i18n/data/es_us.php
    index 3dd68db4f52..ba1265c5071 100644
    --- a/framework/i18n/data/es_us.php
    +++ b/framework/i18n/data/es_us.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6450',
    diff --git a/framework/i18n/data/es_uy.php b/framework/i18n/data/es_uy.php
    index 3af24e6dbff..80a92fd7401 100644
    --- a/framework/i18n/data/es_uy.php
    +++ b/framework/i18n/data/es_uy.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/es_ve.php b/framework/i18n/data/es_ve.php
    index 9ac197b8092..d93bec7e7c2 100644
    --- a/framework/i18n/data/es_ve.php
    +++ b/framework/i18n/data/es_ve.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/et.php b/framework/i18n/data/et.php
    index ab4a70c4dda..49ee0479008 100644
    --- a/framework/i18n/data/et.php
    +++ b/framework/i18n/data/et.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/et_ee.php b/framework/i18n/data/et_ee.php
    index fca784897a0..1bc983bc2d5 100644
    --- a/framework/i18n/data/et_ee.php
    +++ b/framework/i18n/data/et_ee.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/eu.php b/framework/i18n/data/eu.php
    index ec814896da5..9f3fd2698ac 100644
    --- a/framework/i18n/data/eu.php
    +++ b/framework/i18n/data/eu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/eu_es.php b/framework/i18n/data/eu_es.php
    index c8b44cf69fa..7b2f45ff3ea 100644
    --- a/framework/i18n/data/eu_es.php
    +++ b/framework/i18n/data/eu_es.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ewo.php b/framework/i18n/data/ewo.php
    index 44ba9b2e940..482b8af61e6 100644
    --- a/framework/i18n/data/ewo.php
    +++ b/framework/i18n/data/ewo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ewo_cm.php b/framework/i18n/data/ewo_cm.php
    index 0cdb9ccff4b..170ed479a9b 100644
    --- a/framework/i18n/data/ewo_cm.php
    +++ b/framework/i18n/data/ewo_cm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fa.php b/framework/i18n/data/fa.php
    index 7e2e0382f7a..8c7c8d63080 100644
    --- a/framework/i18n/data/fa.php
    +++ b/framework/i18n/data/fa.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/fa_af.php b/framework/i18n/data/fa_af.php
    index fa9f8f87af1..6a4f09eafa5 100644
    --- a/framework/i18n/data/fa_af.php
    +++ b/framework/i18n/data/fa_af.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/fa_ir.php b/framework/i18n/data/fa_ir.php
    index 9250da72d32..81fff00875e 100644
    --- a/framework/i18n/data/fa_ir.php
    +++ b/framework/i18n/data/fa_ir.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ff.php b/framework/i18n/data/ff.php
    index 8b9e9ffbc73..b935f6ef24c 100644
    --- a/framework/i18n/data/ff.php
    +++ b/framework/i18n/data/ff.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ff_sn.php b/framework/i18n/data/ff_sn.php
    index f42927fa9de..77dcfa64b77 100644
    --- a/framework/i18n/data/ff_sn.php
    +++ b/framework/i18n/data/ff_sn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fi.php b/framework/i18n/data/fi.php
    index f239683a44e..ae467ca1d7e 100644
    --- a/framework/i18n/data/fi.php
    +++ b/framework/i18n/data/fi.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/fi_fi.php b/framework/i18n/data/fi_fi.php
    index 00ae961475f..7a89bd07f58 100644
    --- a/framework/i18n/data/fi_fi.php
    +++ b/framework/i18n/data/fi_fi.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/fil.php b/framework/i18n/data/fil.php
    index 8240fc555c6..6361659ddb6 100644
    --- a/framework/i18n/data/fil.php
    +++ b/framework/i18n/data/fil.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/fil_ph.php b/framework/i18n/data/fil_ph.php
    index 3623a2993f4..d39d846353b 100644
    --- a/framework/i18n/data/fil_ph.php
    +++ b/framework/i18n/data/fil_ph.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/fo.php b/framework/i18n/data/fo.php
    index 7ea2753a4b6..29248ab6339 100644
    --- a/framework/i18n/data/fo.php
    +++ b/framework/i18n/data/fo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/fo_fo.php b/framework/i18n/data/fo_fo.php
    index c1f804c16e7..c30ff40ac8d 100644
    --- a/framework/i18n/data/fo_fo.php
    +++ b/framework/i18n/data/fo_fo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/fr.php b/framework/i18n/data/fr.php
    index 5157283869f..7b8bcb601e9 100644
    --- a/framework/i18n/data/fr.php
    +++ b/framework/i18n/data/fr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/fr_be.php b/framework/i18n/data/fr_be.php
    index ed70a2b447a..b23761633da 100644
    --- a/framework/i18n/data/fr_be.php
    +++ b/framework/i18n/data/fr_be.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_bf.php b/framework/i18n/data/fr_bf.php
    index 0d30bbcd39b..e1e56765d14 100644
    --- a/framework/i18n/data/fr_bf.php
    +++ b/framework/i18n/data/fr_bf.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_bi.php b/framework/i18n/data/fr_bi.php
    index 2553f092958..f29a9dbf180 100644
    --- a/framework/i18n/data/fr_bi.php
    +++ b/framework/i18n/data/fr_bi.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_bj.php b/framework/i18n/data/fr_bj.php
    index 71002942328..73eef7a7fc7 100644
    --- a/framework/i18n/data/fr_bj.php
    +++ b/framework/i18n/data/fr_bj.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_bl.php b/framework/i18n/data/fr_bl.php
    index f2ca787e1ac..01f03278dc4 100644
    --- a/framework/i18n/data/fr_bl.php
    +++ b/framework/i18n/data/fr_bl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_ca.php b/framework/i18n/data/fr_ca.php
    index 27a80463484..004c537f64a 100644
    --- a/framework/i18n/data/fr_ca.php
    +++ b/framework/i18n/data/fr_ca.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/fr_cd.php b/framework/i18n/data/fr_cd.php
    index 1ccc5568d4f..cd5ff294c85 100644
    --- a/framework/i18n/data/fr_cd.php
    +++ b/framework/i18n/data/fr_cd.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_cf.php b/framework/i18n/data/fr_cf.php
    index 78689ed529f..0d3b1a7feab 100644
    --- a/framework/i18n/data/fr_cf.php
    +++ b/framework/i18n/data/fr_cf.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_cg.php b/framework/i18n/data/fr_cg.php
    index b52c962304b..23e92330ae8 100644
    --- a/framework/i18n/data/fr_cg.php
    +++ b/framework/i18n/data/fr_cg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_ch.php b/framework/i18n/data/fr_ch.php
    index 7d4a00e2a7d..53ee98d0d0f 100644
    --- a/framework/i18n/data/fr_ch.php
    +++ b/framework/i18n/data/fr_ch.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/fr_ci.php b/framework/i18n/data/fr_ci.php
    index 4de0dde3633..59c9882f241 100644
    --- a/framework/i18n/data/fr_ci.php
    +++ b/framework/i18n/data/fr_ci.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_cm.php b/framework/i18n/data/fr_cm.php
    index f3f78fc3519..5a363d8be89 100644
    --- a/framework/i18n/data/fr_cm.php
    +++ b/framework/i18n/data/fr_cm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_dj.php b/framework/i18n/data/fr_dj.php
    index 0e61f2c1de4..63d95dc49a9 100644
    --- a/framework/i18n/data/fr_dj.php
    +++ b/framework/i18n/data/fr_dj.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_fr.php b/framework/i18n/data/fr_fr.php
    index 22312289fce..9e9cace4f31 100644
    --- a/framework/i18n/data/fr_fr.php
    +++ b/framework/i18n/data/fr_fr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/fr_ga.php b/framework/i18n/data/fr_ga.php
    index 711db20160a..db24088dbc5 100644
    --- a/framework/i18n/data/fr_ga.php
    +++ b/framework/i18n/data/fr_ga.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_gf.php b/framework/i18n/data/fr_gf.php
    index 8f7d3cafb60..12ff903a73c 100644
    --- a/framework/i18n/data/fr_gf.php
    +++ b/framework/i18n/data/fr_gf.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_gn.php b/framework/i18n/data/fr_gn.php
    index cf2d474506c..83cd990ee5c 100644
    --- a/framework/i18n/data/fr_gn.php
    +++ b/framework/i18n/data/fr_gn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_gp.php b/framework/i18n/data/fr_gp.php
    index 490d3faf47c..fa038ef6091 100644
    --- a/framework/i18n/data/fr_gp.php
    +++ b/framework/i18n/data/fr_gp.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_gq.php b/framework/i18n/data/fr_gq.php
    index 99adf84be3c..b1114ae1e15 100644
    --- a/framework/i18n/data/fr_gq.php
    +++ b/framework/i18n/data/fr_gq.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_km.php b/framework/i18n/data/fr_km.php
    index 5287656372a..40e9e3f8154 100644
    --- a/framework/i18n/data/fr_km.php
    +++ b/framework/i18n/data/fr_km.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_lu.php b/framework/i18n/data/fr_lu.php
    index db2009e58c5..8787f835778 100644
    --- a/framework/i18n/data/fr_lu.php
    +++ b/framework/i18n/data/fr_lu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5719',
    diff --git a/framework/i18n/data/fr_mc.php b/framework/i18n/data/fr_mc.php
    index 90033eff3aa..2f8542a3503 100644
    --- a/framework/i18n/data/fr_mc.php
    +++ b/framework/i18n/data/fr_mc.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/fr_mf.php b/framework/i18n/data/fr_mf.php
    index b1803023f96..f40e0c37656 100644
    --- a/framework/i18n/data/fr_mf.php
    +++ b/framework/i18n/data/fr_mf.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_mg.php b/framework/i18n/data/fr_mg.php
    index be57b84a12f..d69547af1d1 100644
    --- a/framework/i18n/data/fr_mg.php
    +++ b/framework/i18n/data/fr_mg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_ml.php b/framework/i18n/data/fr_ml.php
    index 3476e315f1f..7ac35123879 100644
    --- a/framework/i18n/data/fr_ml.php
    +++ b/framework/i18n/data/fr_ml.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_mq.php b/framework/i18n/data/fr_mq.php
    index 9b17f7b51ae..fc60ce08d63 100644
    --- a/framework/i18n/data/fr_mq.php
    +++ b/framework/i18n/data/fr_mq.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_ne.php b/framework/i18n/data/fr_ne.php
    index 51fbd5fe427..43b7f6168e9 100644
    --- a/framework/i18n/data/fr_ne.php
    +++ b/framework/i18n/data/fr_ne.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_re.php b/framework/i18n/data/fr_re.php
    index 36f96d73e5b..995ad9efc04 100644
    --- a/framework/i18n/data/fr_re.php
    +++ b/framework/i18n/data/fr_re.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_rw.php b/framework/i18n/data/fr_rw.php
    index affd2bf4f93..a1ef5ac1671 100644
    --- a/framework/i18n/data/fr_rw.php
    +++ b/framework/i18n/data/fr_rw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_sn.php b/framework/i18n/data/fr_sn.php
    index ad92da66062..ca599448032 100644
    --- a/framework/i18n/data/fr_sn.php
    +++ b/framework/i18n/data/fr_sn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/fr_td.php b/framework/i18n/data/fr_td.php
    index 93c1d159a7e..9beb5b8ff27 100644
    --- a/framework/i18n/data/fr_td.php
    +++ b/framework/i18n/data/fr_td.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_tg.php b/framework/i18n/data/fr_tg.php
    index 8e283225275..1edb3cf3791 100644
    --- a/framework/i18n/data/fr_tg.php
    +++ b/framework/i18n/data/fr_tg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fr_yt.php b/framework/i18n/data/fr_yt.php
    index 3e2d8a59f72..26e442dd18f 100644
    --- a/framework/i18n/data/fr_yt.php
    +++ b/framework/i18n/data/fr_yt.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/fur.php b/framework/i18n/data/fur.php
    index eed3d426ef8..24b97147fba 100644
    --- a/framework/i18n/data/fur.php
    +++ b/framework/i18n/data/fur.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/fur_it.php b/framework/i18n/data/fur_it.php
    index 6a8d9b0b7c2..0c645da6497 100644
    --- a/framework/i18n/data/fur_it.php
    +++ b/framework/i18n/data/fur_it.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ga.php b/framework/i18n/data/ga.php
    index 8fd9e43e9d3..e1c49ebdc45 100644
    --- a/framework/i18n/data/ga.php
    +++ b/framework/i18n/data/ga.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ga_ie.php b/framework/i18n/data/ga_ie.php
    index 1c03b183bd3..9df63ced1aa 100644
    --- a/framework/i18n/data/ga_ie.php
    +++ b/framework/i18n/data/ga_ie.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/gaa.php b/framework/i18n/data/gaa.php
    index 02150b771a5..74041cbc3d0 100644
    --- a/framework/i18n/data/gaa.php
    +++ b/framework/i18n/data/gaa.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6443',
    diff --git a/framework/i18n/data/gaa_gh.php b/framework/i18n/data/gaa_gh.php
    index 98bbf58989d..7e4a94cef58 100644
    --- a/framework/i18n/data/gaa_gh.php
    +++ b/framework/i18n/data/gaa_gh.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/gd.php b/framework/i18n/data/gd.php
    index c2a5984670c..711056a1c77 100644
    --- a/framework/i18n/data/gd.php
    +++ b/framework/i18n/data/gd.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/gd_gb.php b/framework/i18n/data/gd_gb.php
    index 6236e1ad7e9..0f8f50cd360 100644
    --- a/framework/i18n/data/gd_gb.php
    +++ b/framework/i18n/data/gd_gb.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6157',
    diff --git a/framework/i18n/data/gez.php b/framework/i18n/data/gez.php
    index c42eba17a37..a5b3662c13c 100644
    --- a/framework/i18n/data/gez.php
    +++ b/framework/i18n/data/gez.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4768',
    diff --git a/framework/i18n/data/gez_er.php b/framework/i18n/data/gez_er.php
    index 5bca57bcb23..69040e90e72 100644
    --- a/framework/i18n/data/gez_er.php
    +++ b/framework/i18n/data/gez_er.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/gez_et.php b/framework/i18n/data/gez_et.php
    index 74806786021..a12028fd867 100644
    --- a/framework/i18n/data/gez_et.php
    +++ b/framework/i18n/data/gez_et.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/gl.php b/framework/i18n/data/gl.php
    index b020a92a09e..b15b5f86301 100644
    --- a/framework/i18n/data/gl.php
    +++ b/framework/i18n/data/gl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/gl_es.php b/framework/i18n/data/gl_es.php
    index 188dda5d394..ded04ad3b9a 100644
    --- a/framework/i18n/data/gl_es.php
    +++ b/framework/i18n/data/gl_es.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/gsw.php b/framework/i18n/data/gsw.php
    index 2e4199ad9b1..1ea72bc50eb 100644
    --- a/framework/i18n/data/gsw.php
    +++ b/framework/i18n/data/gsw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/gsw_ch.php b/framework/i18n/data/gsw_ch.php
    index 4404c07cbc7..a05be92bd72 100644
    --- a/framework/i18n/data/gsw_ch.php
    +++ b/framework/i18n/data/gsw_ch.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/gu.php b/framework/i18n/data/gu.php
    index 3fc1ffbe11d..8c3fd11a6a4 100644
    --- a/framework/i18n/data/gu.php
    +++ b/framework/i18n/data/gu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/gu_in.php b/framework/i18n/data/gu_in.php
    index cdae1fed80d..e93957956c2 100644
    --- a/framework/i18n/data/gu_in.php
    +++ b/framework/i18n/data/gu_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/guz.php b/framework/i18n/data/guz.php
    index 1174e66f1ae..47fb347e3d0 100644
    --- a/framework/i18n/data/guz.php
    +++ b/framework/i18n/data/guz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/guz_ke.php b/framework/i18n/data/guz_ke.php
    index ba7d5a358ec..276864acf6c 100644
    --- a/framework/i18n/data/guz_ke.php
    +++ b/framework/i18n/data/guz_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/gv.php b/framework/i18n/data/gv.php
    index 7257a383927..4b1d9b38743 100644
    --- a/framework/i18n/data/gv.php
    +++ b/framework/i18n/data/gv.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/gv_gb.php b/framework/i18n/data/gv_gb.php
    index cfd4629cad1..b016bd3cee9 100644
    --- a/framework/i18n/data/gv_gb.php
    +++ b/framework/i18n/data/gv_gb.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ha.php b/framework/i18n/data/ha.php
    index c3137b59310..b63ecc48b57 100644
    --- a/framework/i18n/data/ha.php
    +++ b/framework/i18n/data/ha.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ha_arab.php b/framework/i18n/data/ha_arab.php
    index 8bd7cda5e19..a1a3b59cf55 100644
    --- a/framework/i18n/data/ha_arab.php
    +++ b/framework/i18n/data/ha_arab.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4599',
    diff --git a/framework/i18n/data/ha_arab_ng.php b/framework/i18n/data/ha_arab_ng.php
    index 5f4ca676cf2..139a715b3ff 100644
    --- a/framework/i18n/data/ha_arab_ng.php
    +++ b/framework/i18n/data/ha_arab_ng.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ha_arab_sd.php b/framework/i18n/data/ha_arab_sd.php
    index 32af347e6ca..c05d4271326 100644
    --- a/framework/i18n/data/ha_arab_sd.php
    +++ b/framework/i18n/data/ha_arab_sd.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ha_gh.php b/framework/i18n/data/ha_gh.php
    index 8534067409e..fab36fece57 100644
    --- a/framework/i18n/data/ha_gh.php
    +++ b/framework/i18n/data/ha_gh.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ha_latn.php b/framework/i18n/data/ha_latn.php
    index ce36f56288b..2b2665e7068 100644
    --- a/framework/i18n/data/ha_latn.php
    +++ b/framework/i18n/data/ha_latn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ha_latn_gh.php b/framework/i18n/data/ha_latn_gh.php
    index faacfc5ea65..153e1f2a06b 100644
    --- a/framework/i18n/data/ha_latn_gh.php
    +++ b/framework/i18n/data/ha_latn_gh.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ha_latn_ne.php b/framework/i18n/data/ha_latn_ne.php
    index 3f760b70bdd..4a5bbaa72ea 100644
    --- a/framework/i18n/data/ha_latn_ne.php
    +++ b/framework/i18n/data/ha_latn_ne.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ha_latn_ng.php b/framework/i18n/data/ha_latn_ng.php
    index 3b6cdb130e5..a647864bf94 100644
    --- a/framework/i18n/data/ha_latn_ng.php
    +++ b/framework/i18n/data/ha_latn_ng.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ha_ne.php b/framework/i18n/data/ha_ne.php
    index 5843c6c5e34..d8630adacff 100644
    --- a/framework/i18n/data/ha_ne.php
    +++ b/framework/i18n/data/ha_ne.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ha_ng.php b/framework/i18n/data/ha_ng.php
    index 37a9d1c1e95..aa70e00b3d9 100644
    --- a/framework/i18n/data/ha_ng.php
    +++ b/framework/i18n/data/ha_ng.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ha_sd.php b/framework/i18n/data/ha_sd.php
    index d80b99008db..068a4d62b87 100644
    --- a/framework/i18n/data/ha_sd.php
    +++ b/framework/i18n/data/ha_sd.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/haw.php b/framework/i18n/data/haw.php
    index fcbf4b7eaee..53d2f556d97 100644
    --- a/framework/i18n/data/haw.php
    +++ b/framework/i18n/data/haw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/haw_us.php b/framework/i18n/data/haw_us.php
    index b997851a2d5..46f0d2e51b5 100644
    --- a/framework/i18n/data/haw_us.php
    +++ b/framework/i18n/data/haw_us.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/he.php b/framework/i18n/data/he.php
    index 3b412d63a12..4275b60c656 100644
    --- a/framework/i18n/data/he.php
    +++ b/framework/i18n/data/he.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/he_il.php b/framework/i18n/data/he_il.php
    index 7afde88be8b..eff4661355b 100644
    --- a/framework/i18n/data/he_il.php
    +++ b/framework/i18n/data/he_il.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/hi.php b/framework/i18n/data/hi.php
    index 7817011f900..107de8dab8e 100644
    --- a/framework/i18n/data/hi.php
    +++ b/framework/i18n/data/hi.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/hi_in.php b/framework/i18n/data/hi_in.php
    index d71f980409f..c16903814c3 100644
    --- a/framework/i18n/data/hi_in.php
    +++ b/framework/i18n/data/hi_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/hr.php b/framework/i18n/data/hr.php
    index e74d5c69f1f..92c9a53440d 100644
    --- a/framework/i18n/data/hr.php
    +++ b/framework/i18n/data/hr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/hr_hr.php b/framework/i18n/data/hr_hr.php
    index 1699d065624..165d1a519ce 100644
    --- a/framework/i18n/data/hr_hr.php
    +++ b/framework/i18n/data/hr_hr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/hu.php b/framework/i18n/data/hu.php
    index bc6fb7ea544..f4d668de4ae 100644
    --- a/framework/i18n/data/hu.php
    +++ b/framework/i18n/data/hu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/hu_hu.php b/framework/i18n/data/hu_hu.php
    index 13e04876554..114c25001bf 100644
    --- a/framework/i18n/data/hu_hu.php
    +++ b/framework/i18n/data/hu_hu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/hy.php b/framework/i18n/data/hy.php
    index ddc66b32720..e54725a366d 100644
    --- a/framework/i18n/data/hy.php
    +++ b/framework/i18n/data/hy.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/hy_am.php b/framework/i18n/data/hy_am.php
    index 7e3bdda4704..36bba97360a 100644
    --- a/framework/i18n/data/hy_am.php
    +++ b/framework/i18n/data/hy_am.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ia.php b/framework/i18n/data/ia.php
    index 25a5c32bea4..2255fb870d8 100644
    --- a/framework/i18n/data/ia.php
    +++ b/framework/i18n/data/ia.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/id.php b/framework/i18n/data/id.php
    index 6b1ed408b73..ed74720ff5b 100644
    --- a/framework/i18n/data/id.php
    +++ b/framework/i18n/data/id.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/id_id.php b/framework/i18n/data/id_id.php
    index 5f18228e18e..357e5fa4496 100644
    --- a/framework/i18n/data/id_id.php
    +++ b/framework/i18n/data/id_id.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ig.php b/framework/i18n/data/ig.php
    index f21e9ac1068..59ed0090614 100644
    --- a/framework/i18n/data/ig.php
    +++ b/framework/i18n/data/ig.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ig_ng.php b/framework/i18n/data/ig_ng.php
    index 0f76d3db00e..35eae98266d 100644
    --- a/framework/i18n/data/ig_ng.php
    +++ b/framework/i18n/data/ig_ng.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ii.php b/framework/i18n/data/ii.php
    index 09d8c60983f..2288221830d 100644
    --- a/framework/i18n/data/ii.php
    +++ b/framework/i18n/data/ii.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6443',
    diff --git a/framework/i18n/data/ii_cn.php b/framework/i18n/data/ii_cn.php
    index 4f7ddd8d113..0bf26bec3b3 100644
    --- a/framework/i18n/data/ii_cn.php
    +++ b/framework/i18n/data/ii_cn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/in.php b/framework/i18n/data/in.php
    index 957f0c1bae3..49667fa2aab 100644
    --- a/framework/i18n/data/in.php
    +++ b/framework/i18n/data/in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/is.php b/framework/i18n/data/is.php
    index 2fa355dd974..bbf364ba355 100644
    --- a/framework/i18n/data/is.php
    +++ b/framework/i18n/data/is.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/is_is.php b/framework/i18n/data/is_is.php
    index 06b0f790c91..f8f182be226 100644
    --- a/framework/i18n/data/is_is.php
    +++ b/framework/i18n/data/is_is.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/it.php b/framework/i18n/data/it.php
    index dd3f0515560..6a90d0b98a8 100644
    --- a/framework/i18n/data/it.php
    +++ b/framework/i18n/data/it.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/it_ch.php b/framework/i18n/data/it_ch.php
    index 773bd6a0243..1e0a6a3f7ec 100644
    --- a/framework/i18n/data/it_ch.php
    +++ b/framework/i18n/data/it_ch.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/it_it.php b/framework/i18n/data/it_it.php
    index 9edaa30af36..6757272bb7d 100644
    --- a/framework/i18n/data/it_it.php
    +++ b/framework/i18n/data/it_it.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/iu.php b/framework/i18n/data/iu.php
    index 1949738dc4a..f306666e52c 100644
    --- a/framework/i18n/data/iu.php
    +++ b/framework/i18n/data/iu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4763',
    diff --git a/framework/i18n/data/iw.php b/framework/i18n/data/iw.php
    index 36d19e75549..9386fe3926d 100644
    --- a/framework/i18n/data/iw.php
    +++ b/framework/i18n/data/iw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ja.php b/framework/i18n/data/ja.php
    index 3c226af5915..0815be8da9a 100644
    --- a/framework/i18n/data/ja.php
    +++ b/framework/i18n/data/ja.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ja_jp.php b/framework/i18n/data/ja_jp.php
    index 98233b224be..d3bca14a3a9 100644
    --- a/framework/i18n/data/ja_jp.php
    +++ b/framework/i18n/data/ja_jp.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/jmc.php b/framework/i18n/data/jmc.php
    index 710e2892c2b..9183ff4457b 100644
    --- a/framework/i18n/data/jmc.php
    +++ b/framework/i18n/data/jmc.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/jmc_tz.php b/framework/i18n/data/jmc_tz.php
    index 6405594f702..c9374762315 100644
    --- a/framework/i18n/data/jmc_tz.php
    +++ b/framework/i18n/data/jmc_tz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ka.php b/framework/i18n/data/ka.php
    index a1f61751217..0a7a5533bac 100644
    --- a/framework/i18n/data/ka.php
    +++ b/framework/i18n/data/ka.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ka_ge.php b/framework/i18n/data/ka_ge.php
    index a66b62cf379..e743a828c63 100644
    --- a/framework/i18n/data/ka_ge.php
    +++ b/framework/i18n/data/ka_ge.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/kab.php b/framework/i18n/data/kab.php
    index 26696b06773..586f44dfae3 100644
    --- a/framework/i18n/data/kab.php
    +++ b/framework/i18n/data/kab.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/kab_dz.php b/framework/i18n/data/kab_dz.php
    index af318fff3cb..44668c3c1ca 100644
    --- a/framework/i18n/data/kab_dz.php
    +++ b/framework/i18n/data/kab_dz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/kaj.php b/framework/i18n/data/kaj.php
    index 3dfe7fc81b4..612b21e3588 100644
    --- a/framework/i18n/data/kaj.php
    +++ b/framework/i18n/data/kaj.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/kaj_ng.php b/framework/i18n/data/kaj_ng.php
    index cabc8ad79a4..1ba1a4b79cf 100644
    --- a/framework/i18n/data/kaj_ng.php
    +++ b/framework/i18n/data/kaj_ng.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/kam.php b/framework/i18n/data/kam.php
    index c462a0456d6..c1d2ddd1a5e 100644
    --- a/framework/i18n/data/kam.php
    +++ b/framework/i18n/data/kam.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/kam_ke.php b/framework/i18n/data/kam_ke.php
    index 73571625e40..9a1ba608e5a 100644
    --- a/framework/i18n/data/kam_ke.php
    +++ b/framework/i18n/data/kam_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/kcg.php b/framework/i18n/data/kcg.php
    index 8a15c891cb9..26094902e30 100644
    --- a/framework/i18n/data/kcg.php
    +++ b/framework/i18n/data/kcg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/kcg_ng.php b/framework/i18n/data/kcg_ng.php
    index 01cc4de0542..bda96707ecd 100644
    --- a/framework/i18n/data/kcg_ng.php
    +++ b/framework/i18n/data/kcg_ng.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/kde.php b/framework/i18n/data/kde.php
    index 61467c1cb2c..9580102b366 100644
    --- a/framework/i18n/data/kde.php
    +++ b/framework/i18n/data/kde.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/kde_tz.php b/framework/i18n/data/kde_tz.php
    index ca7d852657f..a5bff4d3693 100644
    --- a/framework/i18n/data/kde_tz.php
    +++ b/framework/i18n/data/kde_tz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/kea.php b/framework/i18n/data/kea.php
    index fe882e11eec..995f538f042 100644
    --- a/framework/i18n/data/kea.php
    +++ b/framework/i18n/data/kea.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/kea_cv.php b/framework/i18n/data/kea_cv.php
    index 2c7eb9a7c27..6daeac00814 100644
    --- a/framework/i18n/data/kea_cv.php
    +++ b/framework/i18n/data/kea_cv.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/kfo.php b/framework/i18n/data/kfo.php
    index 1405541a596..2715e7d3f67 100644
    --- a/framework/i18n/data/kfo.php
    +++ b/framework/i18n/data/kfo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4763',
    diff --git a/framework/i18n/data/kfo_ci.php b/framework/i18n/data/kfo_ci.php
    index ae63305785a..90a5dfa3f01 100644
    --- a/framework/i18n/data/kfo_ci.php
    +++ b/framework/i18n/data/kfo_ci.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/khq.php b/framework/i18n/data/khq.php
    index 7a7497c148b..58a40da2d0a 100644
    --- a/framework/i18n/data/khq.php
    +++ b/framework/i18n/data/khq.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/khq_ml.php b/framework/i18n/data/khq_ml.php
    index 51b065438b4..9b5dede3338 100644
    --- a/framework/i18n/data/khq_ml.php
    +++ b/framework/i18n/data/khq_ml.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ki.php b/framework/i18n/data/ki.php
    index f75032fd44e..6e2d8152f6a 100644
    --- a/framework/i18n/data/ki.php
    +++ b/framework/i18n/data/ki.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ki_ke.php b/framework/i18n/data/ki_ke.php
    index 5939411766c..a62ca9b3554 100644
    --- a/framework/i18n/data/ki_ke.php
    +++ b/framework/i18n/data/ki_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/kk.php b/framework/i18n/data/kk.php
    index 67203220385..878bc513b55 100644
    --- a/framework/i18n/data/kk.php
    +++ b/framework/i18n/data/kk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/kk_cyrl.php b/framework/i18n/data/kk_cyrl.php
    index 451a8a6fdb0..685d5eeed8f 100644
    --- a/framework/i18n/data/kk_cyrl.php
    +++ b/framework/i18n/data/kk_cyrl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/kk_cyrl_kz.php b/framework/i18n/data/kk_cyrl_kz.php
    index c9d80d23a29..c50cf3bcae1 100644
    --- a/framework/i18n/data/kk_cyrl_kz.php
    +++ b/framework/i18n/data/kk_cyrl_kz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/kk_kz.php b/framework/i18n/data/kk_kz.php
    index a17ae98d019..5b8821d0b1e 100644
    --- a/framework/i18n/data/kk_kz.php
    +++ b/framework/i18n/data/kk_kz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/kl.php b/framework/i18n/data/kl.php
    index f76fa346e3a..b23a8d738dd 100644
    --- a/framework/i18n/data/kl.php
    +++ b/framework/i18n/data/kl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/kl_gl.php b/framework/i18n/data/kl_gl.php
    index 211f85cdd56..94628bb8d0b 100644
    --- a/framework/i18n/data/kl_gl.php
    +++ b/framework/i18n/data/kl_gl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/kln.php b/framework/i18n/data/kln.php
    index a7f3d16cc1d..5d93c77b54e 100644
    --- a/framework/i18n/data/kln.php
    +++ b/framework/i18n/data/kln.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/kln_ke.php b/framework/i18n/data/kln_ke.php
    index 381c26b682a..5868e37b260 100644
    --- a/framework/i18n/data/kln_ke.php
    +++ b/framework/i18n/data/kln_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/km.php b/framework/i18n/data/km.php
    index 14bf9e1a77b..29c4d646e58 100644
    --- a/framework/i18n/data/km.php
    +++ b/framework/i18n/data/km.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/km_kh.php b/framework/i18n/data/km_kh.php
    index a5b8419445b..9fe6862bba7 100644
    --- a/framework/i18n/data/km_kh.php
    +++ b/framework/i18n/data/km_kh.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/kn.php b/framework/i18n/data/kn.php
    index 051af767ad9..2bee75f3225 100644
    --- a/framework/i18n/data/kn.php
    +++ b/framework/i18n/data/kn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/kn_in.php b/framework/i18n/data/kn_in.php
    index 13b1ec97e10..579b5f70087 100644
    --- a/framework/i18n/data/kn_in.php
    +++ b/framework/i18n/data/kn_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ko.php b/framework/i18n/data/ko.php
    index c1954fdf0f1..e8e3cc99191 100644
    --- a/framework/i18n/data/ko.php
    +++ b/framework/i18n/data/ko.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ko_kr.php b/framework/i18n/data/ko_kr.php
    index 72b38225d7e..85f130c5ef3 100644
    --- a/framework/i18n/data/ko_kr.php
    +++ b/framework/i18n/data/ko_kr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/kok.php b/framework/i18n/data/kok.php
    index eec33f3f8ed..1d12d4f7ad2 100644
    --- a/framework/i18n/data/kok.php
    +++ b/framework/i18n/data/kok.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/kok_in.php b/framework/i18n/data/kok_in.php
    index a2c94d4e847..9854f610d80 100644
    --- a/framework/i18n/data/kok_in.php
    +++ b/framework/i18n/data/kok_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/kpe.php b/framework/i18n/data/kpe.php
    index 6caecb334a8..9b290aab566 100644
    --- a/framework/i18n/data/kpe.php
    +++ b/framework/i18n/data/kpe.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4763',
    diff --git a/framework/i18n/data/kpe_gn.php b/framework/i18n/data/kpe_gn.php
    index 2fcbfb30ead..54a9bd3601d 100644
    --- a/framework/i18n/data/kpe_gn.php
    +++ b/framework/i18n/data/kpe_gn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/kpe_lr.php b/framework/i18n/data/kpe_lr.php
    index 203131080a5..288119a4c02 100644
    --- a/framework/i18n/data/kpe_lr.php
    +++ b/framework/i18n/data/kpe_lr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ksb.php b/framework/i18n/data/ksb.php
    index 2cefd243d01..687511c4b32 100644
    --- a/framework/i18n/data/ksb.php
    +++ b/framework/i18n/data/ksb.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ksb_tz.php b/framework/i18n/data/ksb_tz.php
    index f48d962c6ec..7ac26d6f3bb 100644
    --- a/framework/i18n/data/ksb_tz.php
    +++ b/framework/i18n/data/ksb_tz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ksf.php b/framework/i18n/data/ksf.php
    index 06944d0cc29..555a110dfe6 100644
    --- a/framework/i18n/data/ksf.php
    +++ b/framework/i18n/data/ksf.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ksf_cm.php b/framework/i18n/data/ksf_cm.php
    index cc922a33d07..491242d62cf 100644
    --- a/framework/i18n/data/ksf_cm.php
    +++ b/framework/i18n/data/ksf_cm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ksh.php b/framework/i18n/data/ksh.php
    index 486671c58d0..0ac86b9a4ea 100644
    --- a/framework/i18n/data/ksh.php
    +++ b/framework/i18n/data/ksh.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ksh_de.php b/framework/i18n/data/ksh_de.php
    index 9bb6a702526..967e635f529 100644
    --- a/framework/i18n/data/ksh_de.php
    +++ b/framework/i18n/data/ksh_de.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ku.php b/framework/i18n/data/ku.php
    index b7efa6e204b..0080032e79c 100644
    --- a/framework/i18n/data/ku.php
    +++ b/framework/i18n/data/ku.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ku_arab.php b/framework/i18n/data/ku_arab.php
    index b29f149314f..b83b92c4633 100644
    --- a/framework/i18n/data/ku_arab.php
    +++ b/framework/i18n/data/ku_arab.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ku_arab_iq.php b/framework/i18n/data/ku_arab_iq.php
    index bdabd941ef0..bfb64c1ac09 100644
    --- a/framework/i18n/data/ku_arab_iq.php
    +++ b/framework/i18n/data/ku_arab_iq.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ku_arab_ir.php b/framework/i18n/data/ku_arab_ir.php
    index b06b1bce092..aca3b4331c8 100644
    --- a/framework/i18n/data/ku_arab_ir.php
    +++ b/framework/i18n/data/ku_arab_ir.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5695',
    diff --git a/framework/i18n/data/ku_iq.php b/framework/i18n/data/ku_iq.php
    index e233db778c6..3c4922674ce 100644
    --- a/framework/i18n/data/ku_iq.php
    +++ b/framework/i18n/data/ku_iq.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ku_ir.php b/framework/i18n/data/ku_ir.php
    index 7d010c0564a..fbbf9a27e94 100644
    --- a/framework/i18n/data/ku_ir.php
    +++ b/framework/i18n/data/ku_ir.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ku_latn.php b/framework/i18n/data/ku_latn.php
    index b5ada2db924..b727f3adb19 100644
    --- a/framework/i18n/data/ku_latn.php
    +++ b/framework/i18n/data/ku_latn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ku_latn_sy.php b/framework/i18n/data/ku_latn_sy.php
    index 1fc58099610..96ec02ed03b 100644
    --- a/framework/i18n/data/ku_latn_sy.php
    +++ b/framework/i18n/data/ku_latn_sy.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ku_latn_tr.php b/framework/i18n/data/ku_latn_tr.php
    index bd57fe4c0b2..4dcd4759265 100644
    --- a/framework/i18n/data/ku_latn_tr.php
    +++ b/framework/i18n/data/ku_latn_tr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ku_sy.php b/framework/i18n/data/ku_sy.php
    index a0cbe75b65e..eb2badec1e6 100644
    --- a/framework/i18n/data/ku_sy.php
    +++ b/framework/i18n/data/ku_sy.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4291',
    diff --git a/framework/i18n/data/ku_tr.php b/framework/i18n/data/ku_tr.php
    index c26d2d59283..5138073301d 100644
    --- a/framework/i18n/data/ku_tr.php
    +++ b/framework/i18n/data/ku_tr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/kw.php b/framework/i18n/data/kw.php
    index 30b5fc46a1a..d6de9ebc769 100644
    --- a/framework/i18n/data/kw.php
    +++ b/framework/i18n/data/kw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/kw_gb.php b/framework/i18n/data/kw_gb.php
    index ac6d871a7fd..3d6a2d28126 100644
    --- a/framework/i18n/data/kw_gb.php
    +++ b/framework/i18n/data/kw_gb.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ky.php b/framework/i18n/data/ky.php
    index 11a4efc9450..b4b318f4d98 100644
    --- a/framework/i18n/data/ky.php
    +++ b/framework/i18n/data/ky.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ky_kg.php b/framework/i18n/data/ky_kg.php
    index c47e6e65af2..53c908dd7eb 100644
    --- a/framework/i18n/data/ky_kg.php
    +++ b/framework/i18n/data/ky_kg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/lag.php b/framework/i18n/data/lag.php
    index 18f19544d90..1e4a0638d02 100644
    --- a/framework/i18n/data/lag.php
    +++ b/framework/i18n/data/lag.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6450',
    diff --git a/framework/i18n/data/lag_tz.php b/framework/i18n/data/lag_tz.php
    index b7aa0998087..dc1d386a23a 100644
    --- a/framework/i18n/data/lag_tz.php
    +++ b/framework/i18n/data/lag_tz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/lg.php b/framework/i18n/data/lg.php
    index 03483a5824a..d1534025c67 100644
    --- a/framework/i18n/data/lg.php
    +++ b/framework/i18n/data/lg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/lg_ug.php b/framework/i18n/data/lg_ug.php
    index d3802196e92..ad8b9f2a704 100644
    --- a/framework/i18n/data/lg_ug.php
    +++ b/framework/i18n/data/lg_ug.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ln.php b/framework/i18n/data/ln.php
    index 045d6e201fc..34f08051a02 100644
    --- a/framework/i18n/data/ln.php
    +++ b/framework/i18n/data/ln.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ln_cd.php b/framework/i18n/data/ln_cd.php
    index 7d46b36ab40..cb6d3c50f2f 100644
    --- a/framework/i18n/data/ln_cd.php
    +++ b/framework/i18n/data/ln_cd.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ln_cg.php b/framework/i18n/data/ln_cg.php
    index cc4104afac1..6f52a673df7 100644
    --- a/framework/i18n/data/ln_cg.php
    +++ b/framework/i18n/data/ln_cg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/lo.php b/framework/i18n/data/lo.php
    index dd9a046e075..6bd681775c9 100644
    --- a/framework/i18n/data/lo.php
    +++ b/framework/i18n/data/lo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/lo_la.php b/framework/i18n/data/lo_la.php
    index 1d6ec601663..e0e5dd797a6 100644
    --- a/framework/i18n/data/lo_la.php
    +++ b/framework/i18n/data/lo_la.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/lt.php b/framework/i18n/data/lt.php
    index b3694eb3bd1..6a9a473ca92 100644
    --- a/framework/i18n/data/lt.php
    +++ b/framework/i18n/data/lt.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/lt_lt.php b/framework/i18n/data/lt_lt.php
    index 18fdce09ad5..79f758a6666 100644
    --- a/framework/i18n/data/lt_lt.php
    +++ b/framework/i18n/data/lt_lt.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/lu.php b/framework/i18n/data/lu.php
    index 05350960986..44d40b5145f 100644
    --- a/framework/i18n/data/lu.php
    +++ b/framework/i18n/data/lu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/lu_cd.php b/framework/i18n/data/lu_cd.php
    index 9f143aadb2c..a1acc19aa6c 100644
    --- a/framework/i18n/data/lu_cd.php
    +++ b/framework/i18n/data/lu_cd.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/luo.php b/framework/i18n/data/luo.php
    index 4e8d04e5c92..69e4548d710 100644
    --- a/framework/i18n/data/luo.php
    +++ b/framework/i18n/data/luo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/luo_ke.php b/framework/i18n/data/luo_ke.php
    index 36769763829..ab4eb2b82c0 100644
    --- a/framework/i18n/data/luo_ke.php
    +++ b/framework/i18n/data/luo_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/luy.php b/framework/i18n/data/luy.php
    index b777aad39b2..4a27b74c23f 100644
    --- a/framework/i18n/data/luy.php
    +++ b/framework/i18n/data/luy.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/luy_ke.php b/framework/i18n/data/luy_ke.php
    index da1d3d7dcbc..ce253d4cbe5 100644
    --- a/framework/i18n/data/luy_ke.php
    +++ b/framework/i18n/data/luy_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/lv.php b/framework/i18n/data/lv.php
    index c62e584e942..cdf39cb889b 100644
    --- a/framework/i18n/data/lv.php
    +++ b/framework/i18n/data/lv.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/lv_lv.php b/framework/i18n/data/lv_lv.php
    index 278534c5a41..978fcf52eec 100644
    --- a/framework/i18n/data/lv_lv.php
    +++ b/framework/i18n/data/lv_lv.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/mas.php b/framework/i18n/data/mas.php
    index 73f5bb9baf5..d7290878894 100644
    --- a/framework/i18n/data/mas.php
    +++ b/framework/i18n/data/mas.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/mas_ke.php b/framework/i18n/data/mas_ke.php
    index 63260bf9da6..d8bad6ca9b6 100644
    --- a/framework/i18n/data/mas_ke.php
    +++ b/framework/i18n/data/mas_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/mas_tz.php b/framework/i18n/data/mas_tz.php
    index 0f1453665c0..ddaf5af16c6 100644
    --- a/framework/i18n/data/mas_tz.php
    +++ b/framework/i18n/data/mas_tz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/mer.php b/framework/i18n/data/mer.php
    index ca7b87c1512..32b654080c6 100644
    --- a/framework/i18n/data/mer.php
    +++ b/framework/i18n/data/mer.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/mer_ke.php b/framework/i18n/data/mer_ke.php
    index 3266f9c225d..88abd307467 100644
    --- a/framework/i18n/data/mer_ke.php
    +++ b/framework/i18n/data/mer_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/mfe.php b/framework/i18n/data/mfe.php
    index 3c622627b2c..dba21a3b612 100644
    --- a/framework/i18n/data/mfe.php
    +++ b/framework/i18n/data/mfe.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6450',
    diff --git a/framework/i18n/data/mfe_mu.php b/framework/i18n/data/mfe_mu.php
    index cc50cbbfda6..83e2fc08404 100644
    --- a/framework/i18n/data/mfe_mu.php
    +++ b/framework/i18n/data/mfe_mu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/mg.php b/framework/i18n/data/mg.php
    index 585dd43745f..3b3006ff221 100644
    --- a/framework/i18n/data/mg.php
    +++ b/framework/i18n/data/mg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/mg_mg.php b/framework/i18n/data/mg_mg.php
    index 4a453e6230c..87e266ce4cb 100644
    --- a/framework/i18n/data/mg_mg.php
    +++ b/framework/i18n/data/mg_mg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/mgh.php b/framework/i18n/data/mgh.php
    index 5a56e717927..bcd4fdf43ff 100644
    --- a/framework/i18n/data/mgh.php
    +++ b/framework/i18n/data/mgh.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6450',
    diff --git a/framework/i18n/data/mgh_mz.php b/framework/i18n/data/mgh_mz.php
    index 4b6b839f4d2..2f80123906b 100644
    --- a/framework/i18n/data/mgh_mz.php
    +++ b/framework/i18n/data/mgh_mz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/mi.php b/framework/i18n/data/mi.php
    index ff7b2bba541..b1aabcc9047 100644
    --- a/framework/i18n/data/mi.php
    +++ b/framework/i18n/data/mi.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4599',
    diff --git a/framework/i18n/data/mi_nz.php b/framework/i18n/data/mi_nz.php
    index eb69e23e901..00017040bc6 100644
    --- a/framework/i18n/data/mi_nz.php
    +++ b/framework/i18n/data/mi_nz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4421',
    diff --git a/framework/i18n/data/mk.php b/framework/i18n/data/mk.php
    index 8e2186fe36b..455c4b37aa6 100644
    --- a/framework/i18n/data/mk.php
    +++ b/framework/i18n/data/mk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/mk_mk.php b/framework/i18n/data/mk_mk.php
    index 377bce0bfd7..d7a0f936b7f 100644
    --- a/framework/i18n/data/mk_mk.php
    +++ b/framework/i18n/data/mk_mk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ml.php b/framework/i18n/data/ml.php
    index c9e2261d56c..1aa1b44e3f9 100644
    --- a/framework/i18n/data/ml.php
    +++ b/framework/i18n/data/ml.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ml_in.php b/framework/i18n/data/ml_in.php
    index 5eeb7eceb50..9adcc18562a 100644
    --- a/framework/i18n/data/ml_in.php
    +++ b/framework/i18n/data/ml_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/mn.php b/framework/i18n/data/mn.php
    index 5495a11a774..2155bf0c2bc 100644
    --- a/framework/i18n/data/mn.php
    +++ b/framework/i18n/data/mn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5806',
    diff --git a/framework/i18n/data/mn_cn.php b/framework/i18n/data/mn_cn.php
    index 8d991cab0d2..6972c5b207c 100644
    --- a/framework/i18n/data/mn_cn.php
    +++ b/framework/i18n/data/mn_cn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/mn_cyrl.php b/framework/i18n/data/mn_cyrl.php
    index 4c1382a0f5a..06784735eda 100644
    --- a/framework/i18n/data/mn_cyrl.php
    +++ b/framework/i18n/data/mn_cyrl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/mn_cyrl_mn.php b/framework/i18n/data/mn_cyrl_mn.php
    index 260179c9801..92619a9f98b 100644
    --- a/framework/i18n/data/mn_cyrl_mn.php
    +++ b/framework/i18n/data/mn_cyrl_mn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/mn_mn.php b/framework/i18n/data/mn_mn.php
    index 873d5c4f7ad..165c46da75d 100644
    --- a/framework/i18n/data/mn_mn.php
    +++ b/framework/i18n/data/mn_mn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/mn_mong.php b/framework/i18n/data/mn_mong.php
    index 58b9fb5f271..4b3fcef5fdb 100644
    --- a/framework/i18n/data/mn_mong.php
    +++ b/framework/i18n/data/mn_mong.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6177',
    diff --git a/framework/i18n/data/mn_mong_cn.php b/framework/i18n/data/mn_mong_cn.php
    index fd5c1cd995f..c38b080b689 100644
    --- a/framework/i18n/data/mn_mong_cn.php
    +++ b/framework/i18n/data/mn_mong_cn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/mo.php b/framework/i18n/data/mo.php
    index 7e04ccdc847..7d2deb005d1 100644
    --- a/framework/i18n/data/mo.php
    +++ b/framework/i18n/data/mo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/mr.php b/framework/i18n/data/mr.php
    index a09e8b1e343..db4cec151a2 100644
    --- a/framework/i18n/data/mr.php
    +++ b/framework/i18n/data/mr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/mr_in.php b/framework/i18n/data/mr_in.php
    index 55ad8544883..d8830ca7d14 100644
    --- a/framework/i18n/data/mr_in.php
    +++ b/framework/i18n/data/mr_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ms.php b/framework/i18n/data/ms.php
    index a0e260e5e02..ac2e818516d 100644
    --- a/framework/i18n/data/ms.php
    +++ b/framework/i18n/data/ms.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ms_bn.php b/framework/i18n/data/ms_bn.php
    index d30cbf826a1..cc4cabd9b74 100644
    --- a/framework/i18n/data/ms_bn.php
    +++ b/framework/i18n/data/ms_bn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ms_my.php b/framework/i18n/data/ms_my.php
    index c3641bbeca2..93283174330 100644
    --- a/framework/i18n/data/ms_my.php
    +++ b/framework/i18n/data/ms_my.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/mt.php b/framework/i18n/data/mt.php
    index 7b1a58c3901..8206cc87cfd 100644
    --- a/framework/i18n/data/mt.php
    +++ b/framework/i18n/data/mt.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/mt_mt.php b/framework/i18n/data/mt_mt.php
    index 6d38ea5dd3e..24d0b832ae6 100644
    --- a/framework/i18n/data/mt_mt.php
    +++ b/framework/i18n/data/mt_mt.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/mua.php b/framework/i18n/data/mua.php
    index be997a7ea55..61c92ae850a 100644
    --- a/framework/i18n/data/mua.php
    +++ b/framework/i18n/data/mua.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/mua_cm.php b/framework/i18n/data/mua_cm.php
    index 44c48964e9e..7d4c94e122e 100644
    --- a/framework/i18n/data/mua_cm.php
    +++ b/framework/i18n/data/mua_cm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/my.php b/framework/i18n/data/my.php
    index 70b96e3b64a..f4ef7c56a99 100644
    --- a/framework/i18n/data/my.php
    +++ b/framework/i18n/data/my.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/my_mm.php b/framework/i18n/data/my_mm.php
    index 2cc4c7b23f5..f9cd2f8d17b 100644
    --- a/framework/i18n/data/my_mm.php
    +++ b/framework/i18n/data/my_mm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/naq.php b/framework/i18n/data/naq.php
    index c52da7cf52e..028ac77dec1 100644
    --- a/framework/i18n/data/naq.php
    +++ b/framework/i18n/data/naq.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/naq_na.php b/framework/i18n/data/naq_na.php
    index a09bfd5f74e..a12e0fbf653 100644
    --- a/framework/i18n/data/naq_na.php
    +++ b/framework/i18n/data/naq_na.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/nb.php b/framework/i18n/data/nb.php
    index ff84b4384a0..74e13059a8e 100644
    --- a/framework/i18n/data/nb.php
    +++ b/framework/i18n/data/nb.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/nb_no.php b/framework/i18n/data/nb_no.php
    index 92eab379831..d9f59c75557 100644
    --- a/framework/i18n/data/nb_no.php
    +++ b/framework/i18n/data/nb_no.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/nd.php b/framework/i18n/data/nd.php
    index 3e09862be5f..da6ec15093b 100644
    --- a/framework/i18n/data/nd.php
    +++ b/framework/i18n/data/nd.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/nd_zw.php b/framework/i18n/data/nd_zw.php
    index 593ecb6d006..92b968455ce 100644
    --- a/framework/i18n/data/nd_zw.php
    +++ b/framework/i18n/data/nd_zw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/nds.php b/framework/i18n/data/nds.php
    index 42c38fcef57..6f72b1f1f4f 100644
    --- a/framework/i18n/data/nds.php
    +++ b/framework/i18n/data/nds.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/nds_de.php b/framework/i18n/data/nds_de.php
    index 8fac912d988..7a9fe1f9a15 100644
    --- a/framework/i18n/data/nds_de.php
    +++ b/framework/i18n/data/nds_de.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ne.php b/framework/i18n/data/ne.php
    index 714b9d55985..c9305b38a89 100644
    --- a/framework/i18n/data/ne.php
    +++ b/framework/i18n/data/ne.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6472',
    diff --git a/framework/i18n/data/ne_in.php b/framework/i18n/data/ne_in.php
    index c7d09c3a8b6..cf3500b2746 100644
    --- a/framework/i18n/data/ne_in.php
    +++ b/framework/i18n/data/ne_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5953',
    diff --git a/framework/i18n/data/ne_np.php b/framework/i18n/data/ne_np.php
    index 5c10d7b2239..8e92d36aa50 100644
    --- a/framework/i18n/data/ne_np.php
    +++ b/framework/i18n/data/ne_np.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/nl.php b/framework/i18n/data/nl.php
    index 4577b65e411..a1025f80efc 100644
    --- a/framework/i18n/data/nl.php
    +++ b/framework/i18n/data/nl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/nl_aw.php b/framework/i18n/data/nl_aw.php
    index e125cf13a53..99d0cb936ab 100644
    --- a/framework/i18n/data/nl_aw.php
    +++ b/framework/i18n/data/nl_aw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/nl_be.php b/framework/i18n/data/nl_be.php
    index c62a0585e89..b3747ead95a 100644
    --- a/framework/i18n/data/nl_be.php
    +++ b/framework/i18n/data/nl_be.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/nl_cw.php b/framework/i18n/data/nl_cw.php
    index 1c4ad320048..56b0bcb909a 100644
    --- a/framework/i18n/data/nl_cw.php
    +++ b/framework/i18n/data/nl_cw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6159',
    diff --git a/framework/i18n/data/nl_nl.php b/framework/i18n/data/nl_nl.php
    index d6d296f50ca..9f581f836f3 100644
    --- a/framework/i18n/data/nl_nl.php
    +++ b/framework/i18n/data/nl_nl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/nl_sx.php b/framework/i18n/data/nl_sx.php
    index 4731bb5544e..6f3f92af625 100644
    --- a/framework/i18n/data/nl_sx.php
    +++ b/framework/i18n/data/nl_sx.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6159',
    diff --git a/framework/i18n/data/nmg.php b/framework/i18n/data/nmg.php
    index 7d952759a73..7fed3ae2b9b 100644
    --- a/framework/i18n/data/nmg.php
    +++ b/framework/i18n/data/nmg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/nmg_cm.php b/framework/i18n/data/nmg_cm.php
    index bd602376ec3..052ad46ec9d 100644
    --- a/framework/i18n/data/nmg_cm.php
    +++ b/framework/i18n/data/nmg_cm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/nn.php b/framework/i18n/data/nn.php
    index e1b40bbcd0d..e17f839f4d5 100644
    --- a/framework/i18n/data/nn.php
    +++ b/framework/i18n/data/nn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/nn_no.php b/framework/i18n/data/nn_no.php
    index fc8fade2053..2e5169bef2b 100644
    --- a/framework/i18n/data/nn_no.php
    +++ b/framework/i18n/data/nn_no.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/no.php b/framework/i18n/data/no.php
    index 6b83e8a14ee..ddca21db992 100644
    --- a/framework/i18n/data/no.php
    +++ b/framework/i18n/data/no.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/nr.php b/framework/i18n/data/nr.php
    index 19b500ab950..8fd99d158f9 100644
    --- a/framework/i18n/data/nr.php
    +++ b/framework/i18n/data/nr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/nr_za.php b/framework/i18n/data/nr_za.php
    index b8fd6a0f84c..31331a64ba4 100644
    --- a/framework/i18n/data/nr_za.php
    +++ b/framework/i18n/data/nr_za.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/nso.php b/framework/i18n/data/nso.php
    index fc00c8c27db..4b3ed274aae 100644
    --- a/framework/i18n/data/nso.php
    +++ b/framework/i18n/data/nso.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/nso_za.php b/framework/i18n/data/nso_za.php
    index 19f0798fa0e..572ba95cf75 100644
    --- a/framework/i18n/data/nso_za.php
    +++ b/framework/i18n/data/nso_za.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/nus.php b/framework/i18n/data/nus.php
    index 8e8617cd8d6..30ddffab7a3 100644
    --- a/framework/i18n/data/nus.php
    +++ b/framework/i18n/data/nus.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/nus_sd.php b/framework/i18n/data/nus_sd.php
    index 94880815d31..b497abbfaad 100644
    --- a/framework/i18n/data/nus_sd.php
    +++ b/framework/i18n/data/nus_sd.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ny.php b/framework/i18n/data/ny.php
    index 8e7ece4f1a0..09ca55d03de 100644
    --- a/framework/i18n/data/ny.php
    +++ b/framework/i18n/data/ny.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4763',
    diff --git a/framework/i18n/data/ny_mw.php b/framework/i18n/data/ny_mw.php
    index 003eabecb5f..f935960d975 100644
    --- a/framework/i18n/data/ny_mw.php
    +++ b/framework/i18n/data/ny_mw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/nyn.php b/framework/i18n/data/nyn.php
    index 1edb2ca545b..0f429166a42 100644
    --- a/framework/i18n/data/nyn.php
    +++ b/framework/i18n/data/nyn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/nyn_ug.php b/framework/i18n/data/nyn_ug.php
    index 695cfdbd3d0..03a62a571fc 100644
    --- a/framework/i18n/data/nyn_ug.php
    +++ b/framework/i18n/data/nyn_ug.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/oc.php b/framework/i18n/data/oc.php
    index cb2bfc21d24..1264e860e1a 100644
    --- a/framework/i18n/data/oc.php
    +++ b/framework/i18n/data/oc.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5859',
    diff --git a/framework/i18n/data/oc_fr.php b/framework/i18n/data/oc_fr.php
    index 9a6cd5933be..b6861493419 100644
    --- a/framework/i18n/data/oc_fr.php
    +++ b/framework/i18n/data/oc_fr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/om.php b/framework/i18n/data/om.php
    index 727a79ea3e0..5be8f81b0b8 100644
    --- a/framework/i18n/data/om.php
    +++ b/framework/i18n/data/om.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/om_et.php b/framework/i18n/data/om_et.php
    index e16692f7624..5e8ecb7ba8e 100644
    --- a/framework/i18n/data/om_et.php
    +++ b/framework/i18n/data/om_et.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/om_ke.php b/framework/i18n/data/om_ke.php
    index 60b4a2744e8..63df2cc002d 100644
    --- a/framework/i18n/data/om_ke.php
    +++ b/framework/i18n/data/om_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5717',
    diff --git a/framework/i18n/data/or.php b/framework/i18n/data/or.php
    index b3290c4eba8..6d515aa5a3a 100644
    --- a/framework/i18n/data/or.php
    +++ b/framework/i18n/data/or.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/or_in.php b/framework/i18n/data/or_in.php
    index 9a1931050e9..93ef4f30cc8 100644
    --- a/framework/i18n/data/or_in.php
    +++ b/framework/i18n/data/or_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/pa.php b/framework/i18n/data/pa.php
    index 0d152514be6..46088e49dad 100644
    --- a/framework/i18n/data/pa.php
    +++ b/framework/i18n/data/pa.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/pa_arab.php b/framework/i18n/data/pa_arab.php
    index d92e81876ba..f6fc39e3391 100644
    --- a/framework/i18n/data/pa_arab.php
    +++ b/framework/i18n/data/pa_arab.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6177',
    diff --git a/framework/i18n/data/pa_arab_pk.php b/framework/i18n/data/pa_arab_pk.php
    index dcb70c8575f..f22ae9cd33d 100644
    --- a/framework/i18n/data/pa_arab_pk.php
    +++ b/framework/i18n/data/pa_arab_pk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/pa_guru.php b/framework/i18n/data/pa_guru.php
    index 1b9a963f7ac..ebe9db47309 100644
    --- a/framework/i18n/data/pa_guru.php
    +++ b/framework/i18n/data/pa_guru.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/pa_guru_in.php b/framework/i18n/data/pa_guru_in.php
    index a6388fc8071..e35b46e4987 100644
    --- a/framework/i18n/data/pa_guru_in.php
    +++ b/framework/i18n/data/pa_guru_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/pa_in.php b/framework/i18n/data/pa_in.php
    index ff8d85c7a1c..824feb1cd6d 100644
    --- a/framework/i18n/data/pa_in.php
    +++ b/framework/i18n/data/pa_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/pa_pk.php b/framework/i18n/data/pa_pk.php
    index 38cc82c81ab..9f237ab4495 100644
    --- a/framework/i18n/data/pa_pk.php
    +++ b/framework/i18n/data/pa_pk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/pl.php b/framework/i18n/data/pl.php
    index 6bff166eb1b..fd088de4c17 100644
    --- a/framework/i18n/data/pl.php
    +++ b/framework/i18n/data/pl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/pl_pl.php b/framework/i18n/data/pl_pl.php
    index 0ba7ffad42f..811fc76f91e 100644
    --- a/framework/i18n/data/pl_pl.php
    +++ b/framework/i18n/data/pl_pl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ps.php b/framework/i18n/data/ps.php
    index 07367b85332..6e7fadb3b29 100644
    --- a/framework/i18n/data/ps.php
    +++ b/framework/i18n/data/ps.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ps_af.php b/framework/i18n/data/ps_af.php
    index 7f58a8289db..c97236a3669 100644
    --- a/framework/i18n/data/ps_af.php
    +++ b/framework/i18n/data/ps_af.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/pt.php b/framework/i18n/data/pt.php
    index eb02f185619..55975018e3f 100644
    --- a/framework/i18n/data/pt.php
    +++ b/framework/i18n/data/pt.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/pt_ao.php b/framework/i18n/data/pt_ao.php
    index c79fffb6e14..82eeb085e59 100644
    --- a/framework/i18n/data/pt_ao.php
    +++ b/framework/i18n/data/pt_ao.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/pt_br.php b/framework/i18n/data/pt_br.php
    index 043c54e561b..54429e969f2 100644
    --- a/framework/i18n/data/pt_br.php
    +++ b/framework/i18n/data/pt_br.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5663',
    diff --git a/framework/i18n/data/pt_gw.php b/framework/i18n/data/pt_gw.php
    index eefe586675c..71d96591cc5 100644
    --- a/framework/i18n/data/pt_gw.php
    +++ b/framework/i18n/data/pt_gw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/pt_mz.php b/framework/i18n/data/pt_mz.php
    index 08419616e95..41f1363f7ce 100644
    --- a/framework/i18n/data/pt_mz.php
    +++ b/framework/i18n/data/pt_mz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/pt_pt.php b/framework/i18n/data/pt_pt.php
    index 100dd5676ab..e6232b8fdfa 100644
    --- a/framework/i18n/data/pt_pt.php
    +++ b/framework/i18n/data/pt_pt.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/pt_st.php b/framework/i18n/data/pt_st.php
    index 1ac7d395344..753b48b24be 100644
    --- a/framework/i18n/data/pt_st.php
    +++ b/framework/i18n/data/pt_st.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/rm.php b/framework/i18n/data/rm.php
    index 869b104b039..ddcc8d91cbe 100644
    --- a/framework/i18n/data/rm.php
    +++ b/framework/i18n/data/rm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/rm_ch.php b/framework/i18n/data/rm_ch.php
    index 115cc742434..7f23c01f2aa 100644
    --- a/framework/i18n/data/rm_ch.php
    +++ b/framework/i18n/data/rm_ch.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/rn.php b/framework/i18n/data/rn.php
    index 81a9dc59cf9..7f48dbae6fe 100644
    --- a/framework/i18n/data/rn.php
    +++ b/framework/i18n/data/rn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/rn_bi.php b/framework/i18n/data/rn_bi.php
    index ec9627e7397..2d0dc4dbdc2 100644
    --- a/framework/i18n/data/rn_bi.php
    +++ b/framework/i18n/data/rn_bi.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ro.php b/framework/i18n/data/ro.php
    index c8444cdf312..f82bf9c5eb5 100644
    --- a/framework/i18n/data/ro.php
    +++ b/framework/i18n/data/ro.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ro_md.php b/framework/i18n/data/ro_md.php
    index b4b6ca548b8..61adb1a3960 100644
    --- a/framework/i18n/data/ro_md.php
    +++ b/framework/i18n/data/ro_md.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ro_ro.php b/framework/i18n/data/ro_ro.php
    index adeada8f63c..75154028f80 100644
    --- a/framework/i18n/data/ro_ro.php
    +++ b/framework/i18n/data/ro_ro.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/rof.php b/framework/i18n/data/rof.php
    index ee49de030d4..7b385ebdef1 100644
    --- a/framework/i18n/data/rof.php
    +++ b/framework/i18n/data/rof.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/rof_tz.php b/framework/i18n/data/rof_tz.php
    index 08e2674a8b9..b42dd5d9d3d 100644
    --- a/framework/i18n/data/rof_tz.php
    +++ b/framework/i18n/data/rof_tz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/root.php b/framework/i18n/data/root.php
    index 472c4ace304..18bc7c68b52 100644
    --- a/framework/i18n/data/root.php
    +++ b/framework/i18n/data/root.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6549',
    diff --git a/framework/i18n/data/ru.php b/framework/i18n/data/ru.php
    index 17640c21333..98341401d4e 100644
    --- a/framework/i18n/data/ru.php
    +++ b/framework/i18n/data/ru.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ru_md.php b/framework/i18n/data/ru_md.php
    index dde3646183a..300de9b1f7c 100644
    --- a/framework/i18n/data/ru_md.php
    +++ b/framework/i18n/data/ru_md.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ru_ru.php b/framework/i18n/data/ru_ru.php
    index 278c6e7dc76..ed272531d38 100644
    --- a/framework/i18n/data/ru_ru.php
    +++ b/framework/i18n/data/ru_ru.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ru_ua.php b/framework/i18n/data/ru_ua.php
    index 3b9fd8c6190..a3d6a1f8abb 100644
    --- a/framework/i18n/data/ru_ua.php
    +++ b/framework/i18n/data/ru_ua.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/rw.php b/framework/i18n/data/rw.php
    index 75a969e35d9..23620c0f17c 100644
    --- a/framework/i18n/data/rw.php
    +++ b/framework/i18n/data/rw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6355',
    diff --git a/framework/i18n/data/rw_rw.php b/framework/i18n/data/rw_rw.php
    index 0d82c0fdb67..fc1c5cafeac 100644
    --- a/framework/i18n/data/rw_rw.php
    +++ b/framework/i18n/data/rw_rw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/rwk.php b/framework/i18n/data/rwk.php
    index a804b8edcca..13eb6dec82f 100644
    --- a/framework/i18n/data/rwk.php
    +++ b/framework/i18n/data/rwk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/rwk_tz.php b/framework/i18n/data/rwk_tz.php
    index 0329192110e..75a0b1c5407 100644
    --- a/framework/i18n/data/rwk_tz.php
    +++ b/framework/i18n/data/rwk_tz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/sa.php b/framework/i18n/data/sa.php
    index 52c510a1406..938b57a990d 100644
    --- a/framework/i18n/data/sa.php
    +++ b/framework/i18n/data/sa.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5030',
    diff --git a/framework/i18n/data/sa_in.php b/framework/i18n/data/sa_in.php
    index 6b20630a038..5814aaae024 100644
    --- a/framework/i18n/data/sa_in.php
    +++ b/framework/i18n/data/sa_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sah.php b/framework/i18n/data/sah.php
    index 0a75aafaff2..d639984d536 100644
    --- a/framework/i18n/data/sah.php
    +++ b/framework/i18n/data/sah.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5953',
    diff --git a/framework/i18n/data/sah_ru.php b/framework/i18n/data/sah_ru.php
    index 60f914b0053..3ab07548cd3 100644
    --- a/framework/i18n/data/sah_ru.php
    +++ b/framework/i18n/data/sah_ru.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/saq.php b/framework/i18n/data/saq.php
    index c2f1171efa8..904e10ad209 100644
    --- a/framework/i18n/data/saq.php
    +++ b/framework/i18n/data/saq.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/saq_ke.php b/framework/i18n/data/saq_ke.php
    index 3e6d202ac34..6c19ed6d177 100644
    --- a/framework/i18n/data/saq_ke.php
    +++ b/framework/i18n/data/saq_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/sbp.php b/framework/i18n/data/sbp.php
    index 8fe2c8f7d2e..c70bc83a790 100644
    --- a/framework/i18n/data/sbp.php
    +++ b/framework/i18n/data/sbp.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/sbp_tz.php b/framework/i18n/data/sbp_tz.php
    index 66b0464a77e..0777dab87a1 100644
    --- a/framework/i18n/data/sbp_tz.php
    +++ b/framework/i18n/data/sbp_tz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/se.php b/framework/i18n/data/se.php
    index a2591fc089d..4fced5099d5 100644
    --- a/framework/i18n/data/se.php
    +++ b/framework/i18n/data/se.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/se_fi.php b/framework/i18n/data/se_fi.php
    index b6e45c905d6..547e9ce09a7 100644
    --- a/framework/i18n/data/se_fi.php
    +++ b/framework/i18n/data/se_fi.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5663',
    diff --git a/framework/i18n/data/se_no.php b/framework/i18n/data/se_no.php
    index cf8f98b8a24..72998a049da 100644
    --- a/framework/i18n/data/se_no.php
    +++ b/framework/i18n/data/se_no.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/seh.php b/framework/i18n/data/seh.php
    index c3ce32a4027..0ead2963ae1 100644
    --- a/framework/i18n/data/seh.php
    +++ b/framework/i18n/data/seh.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/seh_mz.php b/framework/i18n/data/seh_mz.php
    index 259403a7e90..3e9fa94b7b9 100644
    --- a/framework/i18n/data/seh_mz.php
    +++ b/framework/i18n/data/seh_mz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ses.php b/framework/i18n/data/ses.php
    index 8b92f67347f..8d349a24900 100644
    --- a/framework/i18n/data/ses.php
    +++ b/framework/i18n/data/ses.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ses_ml.php b/framework/i18n/data/ses_ml.php
    index 564f1fa46cb..be60b0db4c1 100644
    --- a/framework/i18n/data/ses_ml.php
    +++ b/framework/i18n/data/ses_ml.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/sg.php b/framework/i18n/data/sg.php
    index dfb0bdd5765..03f6edcf340 100644
    --- a/framework/i18n/data/sg.php
    +++ b/framework/i18n/data/sg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/sg_cf.php b/framework/i18n/data/sg_cf.php
    index f3346de7cee..f8e1de5411d 100644
    --- a/framework/i18n/data/sg_cf.php
    +++ b/framework/i18n/data/sg_cf.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/sh.php b/framework/i18n/data/sh.php
    index 8a1afe867ab..a411d83f677 100644
    --- a/framework/i18n/data/sh.php
    +++ b/framework/i18n/data/sh.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sh_ba.php b/framework/i18n/data/sh_ba.php
    index f82029c51ab..84b5c737016 100644
    --- a/framework/i18n/data/sh_ba.php
    +++ b/framework/i18n/data/sh_ba.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sh_cs.php b/framework/i18n/data/sh_cs.php
    index 1c81e7ecd5a..0e91cab3eb7 100644
    --- a/framework/i18n/data/sh_cs.php
    +++ b/framework/i18n/data/sh_cs.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sh_yu.php b/framework/i18n/data/sh_yu.php
    index 779f21cddb1..a4e02ff96da 100644
    --- a/framework/i18n/data/sh_yu.php
    +++ b/framework/i18n/data/sh_yu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/shi.php b/framework/i18n/data/shi.php
    index c282ef66cab..b2fc77ebfa4 100644
    --- a/framework/i18n/data/shi.php
    +++ b/framework/i18n/data/shi.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/shi_latn.php b/framework/i18n/data/shi_latn.php
    index 6bcd2f9c3fb..5ae9f5b68eb 100644
    --- a/framework/i18n/data/shi_latn.php
    +++ b/framework/i18n/data/shi_latn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/shi_latn_ma.php b/framework/i18n/data/shi_latn_ma.php
    index 892c6221359..0230464bfeb 100644
    --- a/framework/i18n/data/shi_latn_ma.php
    +++ b/framework/i18n/data/shi_latn_ma.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/shi_ma.php b/framework/i18n/data/shi_ma.php
    index 64593493bfd..e525b44c71a 100644
    --- a/framework/i18n/data/shi_ma.php
    +++ b/framework/i18n/data/shi_ma.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4590',
    diff --git a/framework/i18n/data/shi_tfng.php b/framework/i18n/data/shi_tfng.php
    index 23620417f3e..3c5c83e76f0 100644
    --- a/framework/i18n/data/shi_tfng.php
    +++ b/framework/i18n/data/shi_tfng.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/shi_tfng_ma.php b/framework/i18n/data/shi_tfng_ma.php
    index 0adef06e212..b440c21c243 100644
    --- a/framework/i18n/data/shi_tfng_ma.php
    +++ b/framework/i18n/data/shi_tfng_ma.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/si.php b/framework/i18n/data/si.php
    index 2dba31509ad..c4fd9d533a2 100644
    --- a/framework/i18n/data/si.php
    +++ b/framework/i18n/data/si.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/si_lk.php b/framework/i18n/data/si_lk.php
    index 9a988660ce1..8f9a821fecd 100644
    --- a/framework/i18n/data/si_lk.php
    +++ b/framework/i18n/data/si_lk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sid.php b/framework/i18n/data/sid.php
    index 0dc945a4fd5..e465a46b852 100644
    --- a/framework/i18n/data/sid.php
    +++ b/framework/i18n/data/sid.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/sid_et.php b/framework/i18n/data/sid_et.php
    index 64073ca7ce4..e374603a604 100644
    --- a/framework/i18n/data/sid_et.php
    +++ b/framework/i18n/data/sid_et.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sk.php b/framework/i18n/data/sk.php
    index af3fe0516f5..6bd2b1c09e1 100644
    --- a/framework/i18n/data/sk.php
    +++ b/framework/i18n/data/sk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/sk_sk.php b/framework/i18n/data/sk_sk.php
    index f5befd42a73..d4ca5c2c913 100644
    --- a/framework/i18n/data/sk_sk.php
    +++ b/framework/i18n/data/sk_sk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sl.php b/framework/i18n/data/sl.php
    index a4c0d2ab0a1..c620d9b3bb4 100644
    --- a/framework/i18n/data/sl.php
    +++ b/framework/i18n/data/sl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/sl_si.php b/framework/i18n/data/sl_si.php
    index 64c7ac18740..3bb698f02d6 100644
    --- a/framework/i18n/data/sl_si.php
    +++ b/framework/i18n/data/sl_si.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sn.php b/framework/i18n/data/sn.php
    index 89c96dfe1c7..4a8ec5c8cb0 100644
    --- a/framework/i18n/data/sn.php
    +++ b/framework/i18n/data/sn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/sn_zw.php b/framework/i18n/data/sn_zw.php
    index 45c375a475c..648521285ba 100644
    --- a/framework/i18n/data/sn_zw.php
    +++ b/framework/i18n/data/sn_zw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/so.php b/framework/i18n/data/so.php
    index 975f576c271..8e1dd97ff11 100644
    --- a/framework/i18n/data/so.php
    +++ b/framework/i18n/data/so.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/so_dj.php b/framework/i18n/data/so_dj.php
    index 35119a667b7..a6dc66dd40a 100644
    --- a/framework/i18n/data/so_dj.php
    +++ b/framework/i18n/data/so_dj.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5717',
    diff --git a/framework/i18n/data/so_et.php b/framework/i18n/data/so_et.php
    index 9ad861f6374..656b6978c96 100644
    --- a/framework/i18n/data/so_et.php
    +++ b/framework/i18n/data/so_et.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5717',
    diff --git a/framework/i18n/data/so_ke.php b/framework/i18n/data/so_ke.php
    index 55608d6dca6..bc336e178b6 100644
    --- a/framework/i18n/data/so_ke.php
    +++ b/framework/i18n/data/so_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5717',
    diff --git a/framework/i18n/data/so_so.php b/framework/i18n/data/so_so.php
    index 6924f0dacb0..e363b9db0a7 100644
    --- a/framework/i18n/data/so_so.php
    +++ b/framework/i18n/data/so_so.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sq.php b/framework/i18n/data/sq.php
    index f3cecb3afe2..52df0cc73f8 100644
    --- a/framework/i18n/data/sq.php
    +++ b/framework/i18n/data/sq.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/sq_al.php b/framework/i18n/data/sq_al.php
    index 0729e42a3c3..94c6ad885fa 100644
    --- a/framework/i18n/data/sq_al.php
    +++ b/framework/i18n/data/sq_al.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sr.php b/framework/i18n/data/sr.php
    index 4f287981c79..3c66ca746ba 100644
    --- a/framework/i18n/data/sr.php
    +++ b/framework/i18n/data/sr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/sr_ba.php b/framework/i18n/data/sr_ba.php
    index 6c04a54fece..92cf98b7f3b 100644
    --- a/framework/i18n/data/sr_ba.php
    +++ b/framework/i18n/data/sr_ba.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sr_cs.php b/framework/i18n/data/sr_cs.php
    index 5e6743fcbd3..fe4e3909adb 100644
    --- a/framework/i18n/data/sr_cs.php
    +++ b/framework/i18n/data/sr_cs.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5213',
    diff --git a/framework/i18n/data/sr_cyrl.php b/framework/i18n/data/sr_cyrl.php
    index 3a7263fd8b1..ca350a7760d 100644
    --- a/framework/i18n/data/sr_cyrl.php
    +++ b/framework/i18n/data/sr_cyrl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sr_cyrl_ba.php b/framework/i18n/data/sr_cyrl_ba.php
    index a39c9005235..06971d3088b 100644
    --- a/framework/i18n/data/sr_cyrl_ba.php
    +++ b/framework/i18n/data/sr_cyrl_ba.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4582',
    diff --git a/framework/i18n/data/sr_cyrl_cs.php b/framework/i18n/data/sr_cyrl_cs.php
    index a7d6c316c98..a1ca082f612 100644
    --- a/framework/i18n/data/sr_cyrl_cs.php
    +++ b/framework/i18n/data/sr_cyrl_cs.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sr_cyrl_me.php b/framework/i18n/data/sr_cyrl_me.php
    index 07acbeaa7b2..9576aaa3e1a 100644
    --- a/framework/i18n/data/sr_cyrl_me.php
    +++ b/framework/i18n/data/sr_cyrl_me.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sr_cyrl_rs.php b/framework/i18n/data/sr_cyrl_rs.php
    index 1834c2599e6..f18b9886dcd 100644
    --- a/framework/i18n/data/sr_cyrl_rs.php
    +++ b/framework/i18n/data/sr_cyrl_rs.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sr_cyrl_yu.php b/framework/i18n/data/sr_cyrl_yu.php
    index 8790abe4ebf..edb86e44847 100644
    --- a/framework/i18n/data/sr_cyrl_yu.php
    +++ b/framework/i18n/data/sr_cyrl_yu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sr_latn.php b/framework/i18n/data/sr_latn.php
    index d789b62bb97..8be3eb8d2a3 100644
    --- a/framework/i18n/data/sr_latn.php
    +++ b/framework/i18n/data/sr_latn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6472',
    diff --git a/framework/i18n/data/sr_latn_ba.php b/framework/i18n/data/sr_latn_ba.php
    index 20f0b8c8969..50412ffad06 100644
    --- a/framework/i18n/data/sr_latn_ba.php
    +++ b/framework/i18n/data/sr_latn_ba.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sr_latn_cs.php b/framework/i18n/data/sr_latn_cs.php
    index 1cb1cf73db7..a7370b04ae5 100644
    --- a/framework/i18n/data/sr_latn_cs.php
    +++ b/framework/i18n/data/sr_latn_cs.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sr_latn_me.php b/framework/i18n/data/sr_latn_me.php
    index 3aa543e6577..980c7c1a4e8 100644
    --- a/framework/i18n/data/sr_latn_me.php
    +++ b/framework/i18n/data/sr_latn_me.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5695',
    diff --git a/framework/i18n/data/sr_latn_rs.php b/framework/i18n/data/sr_latn_rs.php
    index 8a423469fc7..7d16f59e60e 100644
    --- a/framework/i18n/data/sr_latn_rs.php
    +++ b/framework/i18n/data/sr_latn_rs.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sr_latn_yu.php b/framework/i18n/data/sr_latn_yu.php
    index b10d1c17394..0d4bab994a8 100644
    --- a/framework/i18n/data/sr_latn_yu.php
    +++ b/framework/i18n/data/sr_latn_yu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sr_me.php b/framework/i18n/data/sr_me.php
    index e4b6984a78a..1597d589a0e 100644
    --- a/framework/i18n/data/sr_me.php
    +++ b/framework/i18n/data/sr_me.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4165',
    diff --git a/framework/i18n/data/sr_rs.php b/framework/i18n/data/sr_rs.php
    index 71c8a31eb43..d81b2771966 100644
    --- a/framework/i18n/data/sr_rs.php
    +++ b/framework/i18n/data/sr_rs.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sr_yu.php b/framework/i18n/data/sr_yu.php
    index c08e7722870..cfdab8d5097 100644
    --- a/framework/i18n/data/sr_yu.php
    +++ b/framework/i18n/data/sr_yu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ss.php b/framework/i18n/data/ss.php
    index a4a02df248d..26898025196 100644
    --- a/framework/i18n/data/ss.php
    +++ b/framework/i18n/data/ss.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ss_sz.php b/framework/i18n/data/ss_sz.php
    index 72261fd95e3..70e1ed794f3 100644
    --- a/framework/i18n/data/ss_sz.php
    +++ b/framework/i18n/data/ss_sz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4582',
    diff --git a/framework/i18n/data/ss_za.php b/framework/i18n/data/ss_za.php
    index 0b7a6541a21..a8cb643c6c6 100644
    --- a/framework/i18n/data/ss_za.php
    +++ b/framework/i18n/data/ss_za.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ssy.php b/framework/i18n/data/ssy.php
    index fec707d5a40..0148027ab26 100644
    --- a/framework/i18n/data/ssy.php
    +++ b/framework/i18n/data/ssy.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ssy_er.php b/framework/i18n/data/ssy_er.php
    index 32faa90d174..337619f3a67 100644
    --- a/framework/i18n/data/ssy_er.php
    +++ b/framework/i18n/data/ssy_er.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4582',
    diff --git a/framework/i18n/data/st.php b/framework/i18n/data/st.php
    index 37a196d7248..944d2d2338f 100644
    --- a/framework/i18n/data/st.php
    +++ b/framework/i18n/data/st.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/st_ls.php b/framework/i18n/data/st_ls.php
    index f2fe75c0ec2..c5b57cbfa6f 100644
    --- a/framework/i18n/data/st_ls.php
    +++ b/framework/i18n/data/st_ls.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/st_za.php b/framework/i18n/data/st_za.php
    index c4caf53d30a..fcd4eb32a45 100644
    --- a/framework/i18n/data/st_za.php
    +++ b/framework/i18n/data/st_za.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sv.php b/framework/i18n/data/sv.php
    index 69dd77cbed7..0cd7e57db98 100644
    --- a/framework/i18n/data/sv.php
    +++ b/framework/i18n/data/sv.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/sv_fi.php b/framework/i18n/data/sv_fi.php
    index c1d6deb5af8..f013aea6157 100644
    --- a/framework/i18n/data/sv_fi.php
    +++ b/framework/i18n/data/sv_fi.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5884',
    diff --git a/framework/i18n/data/sv_se.php b/framework/i18n/data/sv_se.php
    index 6d664967b76..e972f9773c7 100644
    --- a/framework/i18n/data/sv_se.php
    +++ b/framework/i18n/data/sv_se.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/sw.php b/framework/i18n/data/sw.php
    index b7dbd99fea0..46733a194b3 100644
    --- a/framework/i18n/data/sw.php
    +++ b/framework/i18n/data/sw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/sw_ke.php b/framework/i18n/data/sw_ke.php
    index dd4a6a101d2..5f51ec58496 100644
    --- a/framework/i18n/data/sw_ke.php
    +++ b/framework/i18n/data/sw_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/sw_tz.php b/framework/i18n/data/sw_tz.php
    index 5cb92ac7a19..f0b36e71ddc 100644
    --- a/framework/i18n/data/sw_tz.php
    +++ b/framework/i18n/data/sw_tz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5875',
    diff --git a/framework/i18n/data/swc.php b/framework/i18n/data/swc.php
    index 63cd5a822c6..fb975a240d5 100644
    --- a/framework/i18n/data/swc.php
    +++ b/framework/i18n/data/swc.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/swc_cd.php b/framework/i18n/data/swc_cd.php
    index fe04b6ca8ee..b6578448337 100644
    --- a/framework/i18n/data/swc_cd.php
    +++ b/framework/i18n/data/swc_cd.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/syr.php b/framework/i18n/data/syr.php
    index 42baed2b815..7c21ea2cba7 100644
    --- a/framework/i18n/data/syr.php
    +++ b/framework/i18n/data/syr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5101',
    diff --git a/framework/i18n/data/syr_sy.php b/framework/i18n/data/syr_sy.php
    index 7aaf0dfecd5..d830ffb5401 100644
    --- a/framework/i18n/data/syr_sy.php
    +++ b/framework/i18n/data/syr_sy.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ta.php b/framework/i18n/data/ta.php
    index e5fb0472598..555e2430995 100644
    --- a/framework/i18n/data/ta.php
    +++ b/framework/i18n/data/ta.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ta_in.php b/framework/i18n/data/ta_in.php
    index 43ef9933121..a90be9017f4 100644
    --- a/framework/i18n/data/ta_in.php
    +++ b/framework/i18n/data/ta_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ta_lk.php b/framework/i18n/data/ta_lk.php
    index b05e31ffeae..a66e04994ab 100644
    --- a/framework/i18n/data/ta_lk.php
    +++ b/framework/i18n/data/ta_lk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/te.php b/framework/i18n/data/te.php
    index e5cd7deaca4..0bc15963aa1 100644
    --- a/framework/i18n/data/te.php
    +++ b/framework/i18n/data/te.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/te_in.php b/framework/i18n/data/te_in.php
    index 55f101a947a..b133ca8fd81 100644
    --- a/framework/i18n/data/te_in.php
    +++ b/framework/i18n/data/te_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/teo.php b/framework/i18n/data/teo.php
    index 481194e8f70..d9386248aaa 100644
    --- a/framework/i18n/data/teo.php
    +++ b/framework/i18n/data/teo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/teo_ke.php b/framework/i18n/data/teo_ke.php
    index 3bcb8fa2a16..9245bb4b3ef 100644
    --- a/framework/i18n/data/teo_ke.php
    +++ b/framework/i18n/data/teo_ke.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/teo_ug.php b/framework/i18n/data/teo_ug.php
    index fa57f5d3d93..72d42fbc200 100644
    --- a/framework/i18n/data/teo_ug.php
    +++ b/framework/i18n/data/teo_ug.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/tg.php b/framework/i18n/data/tg.php
    index fda19503a92..3abaccb56d6 100644
    --- a/framework/i18n/data/tg.php
    +++ b/framework/i18n/data/tg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5806',
    diff --git a/framework/i18n/data/tg_cyrl.php b/framework/i18n/data/tg_cyrl.php
    index f504193e1dd..9941f72deed 100644
    --- a/framework/i18n/data/tg_cyrl.php
    +++ b/framework/i18n/data/tg_cyrl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/tg_cyrl_tj.php b/framework/i18n/data/tg_cyrl_tj.php
    index 5a523e901f1..0016931b208 100644
    --- a/framework/i18n/data/tg_cyrl_tj.php
    +++ b/framework/i18n/data/tg_cyrl_tj.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/tg_tj.php b/framework/i18n/data/tg_tj.php
    index 2979eaf486a..bc8f4b3ea7b 100644
    --- a/framework/i18n/data/tg_tj.php
    +++ b/framework/i18n/data/tg_tj.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/th.php b/framework/i18n/data/th.php
    index 8bf8514bcc1..623e6a3e1d9 100644
    --- a/framework/i18n/data/th.php
    +++ b/framework/i18n/data/th.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/th_th.php b/framework/i18n/data/th_th.php
    index 7dc733333bd..a51813f4312 100644
    --- a/framework/i18n/data/th_th.php
    +++ b/framework/i18n/data/th_th.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ti.php b/framework/i18n/data/ti.php
    index b1055125d1e..00c4e368db7 100644
    --- a/framework/i18n/data/ti.php
    +++ b/framework/i18n/data/ti.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ti_er.php b/framework/i18n/data/ti_er.php
    index cf0baae0b68..a7c399a2d53 100644
    --- a/framework/i18n/data/ti_er.php
    +++ b/framework/i18n/data/ti_er.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6459',
    diff --git a/framework/i18n/data/ti_et.php b/framework/i18n/data/ti_et.php
    index f4640509e3f..2b684835133 100644
    --- a/framework/i18n/data/ti_et.php
    +++ b/framework/i18n/data/ti_et.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/tig.php b/framework/i18n/data/tig.php
    index 62950e0e8b6..11a57b567a9 100644
    --- a/framework/i18n/data/tig.php
    +++ b/framework/i18n/data/tig.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/tig_er.php b/framework/i18n/data/tig_er.php
    index 36ada7f6310..00202138bd8 100644
    --- a/framework/i18n/data/tig_er.php
    +++ b/framework/i18n/data/tig_er.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/tl.php b/framework/i18n/data/tl.php
    index 6cb0fef328c..4f3d4d57ae1 100644
    --- a/framework/i18n/data/tl.php
    +++ b/framework/i18n/data/tl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/tl_ph.php b/framework/i18n/data/tl_ph.php
    index e4d380306bc..135c2454c66 100644
    --- a/framework/i18n/data/tl_ph.php
    +++ b/framework/i18n/data/tl_ph.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4991',
    diff --git a/framework/i18n/data/tn.php b/framework/i18n/data/tn.php
    index 37d12dc89df..271fd0bf5e4 100644
    --- a/framework/i18n/data/tn.php
    +++ b/framework/i18n/data/tn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/tn_za.php b/framework/i18n/data/tn_za.php
    index 7260eeaa0b2..9d852f89bbb 100644
    --- a/framework/i18n/data/tn_za.php
    +++ b/framework/i18n/data/tn_za.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/to.php b/framework/i18n/data/to.php
    index db125e653dc..57afda7f6ea 100644
    --- a/framework/i18n/data/to.php
    +++ b/framework/i18n/data/to.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/to_to.php b/framework/i18n/data/to_to.php
    index a4b9daed0df..268e4ee8d61 100644
    --- a/framework/i18n/data/to_to.php
    +++ b/framework/i18n/data/to_to.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/tr.php b/framework/i18n/data/tr.php
    index c6c12f0d28f..9be16ecb894 100644
    --- a/framework/i18n/data/tr.php
    +++ b/framework/i18n/data/tr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/tr_tr.php b/framework/i18n/data/tr_tr.php
    index e88cfcaa189..4f65045a1a2 100644
    --- a/framework/i18n/data/tr_tr.php
    +++ b/framework/i18n/data/tr_tr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/trv.php b/framework/i18n/data/trv.php
    index ad9c3139d53..a1e3b975457 100644
    --- a/framework/i18n/data/trv.php
    +++ b/framework/i18n/data/trv.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/trv_tw.php b/framework/i18n/data/trv_tw.php
    index 11c16ed4c6d..78862f6ea2d 100644
    --- a/framework/i18n/data/trv_tw.php
    +++ b/framework/i18n/data/trv_tw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ts.php b/framework/i18n/data/ts.php
    index e237d34b5a7..3498ddf3fa5 100644
    --- a/framework/i18n/data/ts.php
    +++ b/framework/i18n/data/ts.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ts_za.php b/framework/i18n/data/ts_za.php
    index ce681b0ed26..7998c2f91ea 100644
    --- a/framework/i18n/data/ts_za.php
    +++ b/framework/i18n/data/ts_za.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/tt.php b/framework/i18n/data/tt.php
    index d31888652fe..2d717aac4ae 100644
    --- a/framework/i18n/data/tt.php
    +++ b/framework/i18n/data/tt.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4767',
    diff --git a/framework/i18n/data/tt_ru.php b/framework/i18n/data/tt_ru.php
    index 66e4bdeefd9..c57841977b1 100644
    --- a/framework/i18n/data/tt_ru.php
    +++ b/framework/i18n/data/tt_ru.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/twq.php b/framework/i18n/data/twq.php
    index 8e1dcf8cb77..2c2e54b5395 100644
    --- a/framework/i18n/data/twq.php
    +++ b/framework/i18n/data/twq.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/twq_ne.php b/framework/i18n/data/twq_ne.php
    index 311f2bdf71b..a6ba05bc381 100644
    --- a/framework/i18n/data/twq_ne.php
    +++ b/framework/i18n/data/twq_ne.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/tzm.php b/framework/i18n/data/tzm.php
    index ffa2f0211bd..03dc92c6f1c 100644
    --- a/framework/i18n/data/tzm.php
    +++ b/framework/i18n/data/tzm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/tzm_latn.php b/framework/i18n/data/tzm_latn.php
    index ead5e7d5014..b1438fe25ff 100644
    --- a/framework/i18n/data/tzm_latn.php
    +++ b/framework/i18n/data/tzm_latn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/tzm_latn_ma.php b/framework/i18n/data/tzm_latn_ma.php
    index ee12da8c2e2..fdeda5cf41a 100644
    --- a/framework/i18n/data/tzm_latn_ma.php
    +++ b/framework/i18n/data/tzm_latn_ma.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/tzm_ma.php b/framework/i18n/data/tzm_ma.php
    index 0eab737e239..c576fb46c31 100644
    --- a/framework/i18n/data/tzm_ma.php
    +++ b/framework/i18n/data/tzm_ma.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4590',
    diff --git a/framework/i18n/data/ug.php b/framework/i18n/data/ug.php
    index ed5e6afe71a..b224bd5a980 100644
    --- a/framework/i18n/data/ug.php
    +++ b/framework/i18n/data/ug.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4765',
    diff --git a/framework/i18n/data/ug_arab.php b/framework/i18n/data/ug_arab.php
    index 2db070c5c93..d84b7fd405d 100644
    --- a/framework/i18n/data/ug_arab.php
    +++ b/framework/i18n/data/ug_arab.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ug_arab_cn.php b/framework/i18n/data/ug_arab_cn.php
    index 263e7744b0d..5290a516f02 100644
    --- a/framework/i18n/data/ug_arab_cn.php
    +++ b/framework/i18n/data/ug_arab_cn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ug_cn.php b/framework/i18n/data/ug_cn.php
    index baf0f4d931b..2db548d9648 100644
    --- a/framework/i18n/data/ug_cn.php
    +++ b/framework/i18n/data/ug_cn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/uk.php b/framework/i18n/data/uk.php
    index 455b72d3b4f..7b1fa56bf32 100644
    --- a/framework/i18n/data/uk.php
    +++ b/framework/i18n/data/uk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/uk_ua.php b/framework/i18n/data/uk_ua.php
    index 198fa5f30ae..d59eef5bc0f 100644
    --- a/framework/i18n/data/uk_ua.php
    +++ b/framework/i18n/data/uk_ua.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/ur.php b/framework/i18n/data/ur.php
    index 819ced2a42f..a2b357e8241 100644
    --- a/framework/i18n/data/ur.php
    +++ b/framework/i18n/data/ur.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ur_in.php b/framework/i18n/data/ur_in.php
    index 6ddeda09b99..cb8dc8b5f5b 100644
    --- a/framework/i18n/data/ur_in.php
    +++ b/framework/i18n/data/ur_in.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ur_pk.php b/framework/i18n/data/ur_pk.php
    index c0e3befa176..213ca735264 100644
    --- a/framework/i18n/data/ur_pk.php
    +++ b/framework/i18n/data/ur_pk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/uz.php b/framework/i18n/data/uz.php
    index 351fea15354..f549c6eb11a 100644
    --- a/framework/i18n/data/uz.php
    +++ b/framework/i18n/data/uz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5912',
    diff --git a/framework/i18n/data/uz_af.php b/framework/i18n/data/uz_af.php
    index 2a0ad087b60..0e88e7e139d 100644
    --- a/framework/i18n/data/uz_af.php
    +++ b/framework/i18n/data/uz_af.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/uz_arab.php b/framework/i18n/data/uz_arab.php
    index bd057bb5c64..ac8b26195a0 100644
    --- a/framework/i18n/data/uz_arab.php
    +++ b/framework/i18n/data/uz_arab.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/uz_arab_af.php b/framework/i18n/data/uz_arab_af.php
    index b0b57c3b4be..999c20215a5 100644
    --- a/framework/i18n/data/uz_arab_af.php
    +++ b/framework/i18n/data/uz_arab_af.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/uz_cyrl.php b/framework/i18n/data/uz_cyrl.php
    index c03196806cf..f068237bec2 100644
    --- a/framework/i18n/data/uz_cyrl.php
    +++ b/framework/i18n/data/uz_cyrl.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/uz_cyrl_uz.php b/framework/i18n/data/uz_cyrl_uz.php
    index 5f979f8b85e..e40384165ff 100644
    --- a/framework/i18n/data/uz_cyrl_uz.php
    +++ b/framework/i18n/data/uz_cyrl_uz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/uz_latn.php b/framework/i18n/data/uz_latn.php
    index bda438a3f47..3a94fa7f84b 100644
    --- a/framework/i18n/data/uz_latn.php
    +++ b/framework/i18n/data/uz_latn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5882',
    diff --git a/framework/i18n/data/uz_latn_uz.php b/framework/i18n/data/uz_latn_uz.php
    index c47a71a8ac3..080cb437ab0 100644
    --- a/framework/i18n/data/uz_latn_uz.php
    +++ b/framework/i18n/data/uz_latn_uz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/uz_uz.php b/framework/i18n/data/uz_uz.php
    index 8ab1237c006..576620f88ca 100644
    --- a/framework/i18n/data/uz_uz.php
    +++ b/framework/i18n/data/uz_uz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/vai.php b/framework/i18n/data/vai.php
    index a7c40362693..6084243fae5 100644
    --- a/framework/i18n/data/vai.php
    +++ b/framework/i18n/data/vai.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/vai_latn.php b/framework/i18n/data/vai_latn.php
    index b9047764e51..d8e61d98583 100644
    --- a/framework/i18n/data/vai_latn.php
    +++ b/framework/i18n/data/vai_latn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/vai_latn_lr.php b/framework/i18n/data/vai_latn_lr.php
    index 5a23ce9c866..e68c6c720fb 100644
    --- a/framework/i18n/data/vai_latn_lr.php
    +++ b/framework/i18n/data/vai_latn_lr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/vai_vaii.php b/framework/i18n/data/vai_vaii.php
    index 4eeb8616799..e23996129f3 100644
    --- a/framework/i18n/data/vai_vaii.php
    +++ b/framework/i18n/data/vai_vaii.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5799',
    diff --git a/framework/i18n/data/vai_vaii_lr.php b/framework/i18n/data/vai_vaii_lr.php
    index 34577ec5444..af09ed7e961 100644
    --- a/framework/i18n/data/vai_vaii_lr.php
    +++ b/framework/i18n/data/vai_vaii_lr.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/ve.php b/framework/i18n/data/ve.php
    index a1dc9d12bbd..f1f25982fb5 100644
    --- a/framework/i18n/data/ve.php
    +++ b/framework/i18n/data/ve.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/ve_za.php b/framework/i18n/data/ve_za.php
    index 444e928533f..334de1f3aa5 100644
    --- a/framework/i18n/data/ve_za.php
    +++ b/framework/i18n/data/ve_za.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/vi.php b/framework/i18n/data/vi.php
    index e9d015ad399..fdb863b9076 100644
    --- a/framework/i18n/data/vi.php
    +++ b/framework/i18n/data/vi.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/vi_vn.php b/framework/i18n/data/vi_vn.php
    index 5ada48a0bfd..61f97571124 100644
    --- a/framework/i18n/data/vi_vn.php
    +++ b/framework/i18n/data/vi_vn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/vun.php b/framework/i18n/data/vun.php
    index 23aa7fdcc8d..8c613d2fbc7 100644
    --- a/framework/i18n/data/vun.php
    +++ b/framework/i18n/data/vun.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/vun_tz.php b/framework/i18n/data/vun_tz.php
    index f21d27cab56..e55eb3a54fa 100644
    --- a/framework/i18n/data/vun_tz.php
    +++ b/framework/i18n/data/vun_tz.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/wae.php b/framework/i18n/data/wae.php
    index 2fe550a628b..e33ae2ad8d4 100644
    --- a/framework/i18n/data/wae.php
    +++ b/framework/i18n/data/wae.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/wae_ch.php b/framework/i18n/data/wae_ch.php
    index 82bf1a5c922..f7311e80310 100644
    --- a/framework/i18n/data/wae_ch.php
    +++ b/framework/i18n/data/wae_ch.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/wal.php b/framework/i18n/data/wal.php
    index b4b7edaa5c8..7be196ae1c5 100644
    --- a/framework/i18n/data/wal.php
    +++ b/framework/i18n/data/wal.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/wal_et.php b/framework/i18n/data/wal_et.php
    index b093b0493df..43bbd695232 100644
    --- a/framework/i18n/data/wal_et.php
    +++ b/framework/i18n/data/wal_et.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/wo.php b/framework/i18n/data/wo.php
    index 41e7dec9b9a..d7b78aa63c3 100644
    --- a/framework/i18n/data/wo.php
    +++ b/framework/i18n/data/wo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4864',
    diff --git a/framework/i18n/data/wo_latn.php b/framework/i18n/data/wo_latn.php
    index 61b37de6fc8..52a72778210 100644
    --- a/framework/i18n/data/wo_latn.php
    +++ b/framework/i18n/data/wo_latn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/wo_latn_sn.php b/framework/i18n/data/wo_latn_sn.php
    index 4946007a5b5..7c616024e8f 100644
    --- a/framework/i18n/data/wo_latn_sn.php
    +++ b/framework/i18n/data/wo_latn_sn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/wo_sn.php b/framework/i18n/data/wo_sn.php
    index 084e36718b5..54a56a72cfb 100644
    --- a/framework/i18n/data/wo_sn.php
    +++ b/framework/i18n/data/wo_sn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4555',
    diff --git a/framework/i18n/data/xh.php b/framework/i18n/data/xh.php
    index cc37310600b..236dad7a6c4 100644
    --- a/framework/i18n/data/xh.php
    +++ b/framework/i18n/data/xh.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/xh_za.php b/framework/i18n/data/xh_za.php
    index 56a82d1df6b..c41c81d5daf 100644
    --- a/framework/i18n/data/xh_za.php
    +++ b/framework/i18n/data/xh_za.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/xog.php b/framework/i18n/data/xog.php
    index 2ffa7ca903d..2626a816ee6 100644
    --- a/framework/i18n/data/xog.php
    +++ b/framework/i18n/data/xog.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/xog_ug.php b/framework/i18n/data/xog_ug.php
    index f9bcfffb718..85a300ff56f 100644
    --- a/framework/i18n/data/xog_ug.php
    +++ b/framework/i18n/data/xog_ug.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/yav.php b/framework/i18n/data/yav.php
    index 427e2acab08..d6f52a53318 100644
    --- a/framework/i18n/data/yav.php
    +++ b/framework/i18n/data/yav.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/yav_cm.php b/framework/i18n/data/yav_cm.php
    index 8f6d94fa791..07a1b41da46 100644
    --- a/framework/i18n/data/yav_cm.php
    +++ b/framework/i18n/data/yav_cm.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '5798',
    diff --git a/framework/i18n/data/yo.php b/framework/i18n/data/yo.php
    index 2c62880c111..87638a0a516 100644
    --- a/framework/i18n/data/yo.php
    +++ b/framework/i18n/data/yo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/yo_ng.php b/framework/i18n/data/yo_ng.php
    index 4fcc6752184..0207a4bf396 100644
    --- a/framework/i18n/data/yo_ng.php
    +++ b/framework/i18n/data/yo_ng.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/zh.php b/framework/i18n/data/zh.php
    index 793de53a5d2..513d3836fc6 100644
    --- a/framework/i18n/data/zh.php
    +++ b/framework/i18n/data/zh.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/zh_cn.php b/framework/i18n/data/zh_cn.php
    index 35a1228360c..6d5565b636a 100644
    --- a/framework/i18n/data/zh_cn.php
    +++ b/framework/i18n/data/zh_cn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/zh_hans.php b/framework/i18n/data/zh_hans.php
    index 1332e568261..72fa01c9fef 100644
    --- a/framework/i18n/data/zh_hans.php
    +++ b/framework/i18n/data/zh_hans.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/zh_hans_cn.php b/framework/i18n/data/zh_hans_cn.php
    index bc85e430cf9..6d792095c54 100644
    --- a/framework/i18n/data/zh_hans_cn.php
    +++ b/framework/i18n/data/zh_hans_cn.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/zh_hans_hk.php b/framework/i18n/data/zh_hans_hk.php
    index 1fb7a89693e..6024655fd13 100644
    --- a/framework/i18n/data/zh_hans_hk.php
    +++ b/framework/i18n/data/zh_hans_hk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6465',
    diff --git a/framework/i18n/data/zh_hans_mo.php b/framework/i18n/data/zh_hans_mo.php
    index 718a488afb2..c3e7b802fc3 100644
    --- a/framework/i18n/data/zh_hans_mo.php
    +++ b/framework/i18n/data/zh_hans_mo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6465',
    diff --git a/framework/i18n/data/zh_hans_sg.php b/framework/i18n/data/zh_hans_sg.php
    index fa7a7043bcd..fe3904dde55 100644
    --- a/framework/i18n/data/zh_hans_sg.php
    +++ b/framework/i18n/data/zh_hans_sg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6465',
    diff --git a/framework/i18n/data/zh_hant.php b/framework/i18n/data/zh_hant.php
    index c211609b156..53e6c26a8be 100644
    --- a/framework/i18n/data/zh_hant.php
    +++ b/framework/i18n/data/zh_hant.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/zh_hant_hk.php b/framework/i18n/data/zh_hant_hk.php
    index b565c75dca8..9d58b6ef702 100644
    --- a/framework/i18n/data/zh_hant_hk.php
    +++ b/framework/i18n/data/zh_hant_hk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/zh_hant_mo.php b/framework/i18n/data/zh_hant_mo.php
    index a036848576f..b93993c9015 100644
    --- a/framework/i18n/data/zh_hant_mo.php
    +++ b/framework/i18n/data/zh_hant_mo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6255',
    diff --git a/framework/i18n/data/zh_hant_tw.php b/framework/i18n/data/zh_hant_tw.php
    index 78598c48daa..c05de6489d6 100644
    --- a/framework/i18n/data/zh_hant_tw.php
    +++ b/framework/i18n/data/zh_hant_tw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/zh_hk.php b/framework/i18n/data/zh_hk.php
    index 1b53d008124..d619e1e954d 100644
    --- a/framework/i18n/data/zh_hk.php
    +++ b/framework/i18n/data/zh_hk.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/zh_mo.php b/framework/i18n/data/zh_mo.php
    index d587399a6dd..7734860f1e8 100644
    --- a/framework/i18n/data/zh_mo.php
    +++ b/framework/i18n/data/zh_mo.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/zh_sg.php b/framework/i18n/data/zh_sg.php
    index 0a274860358..50d5e6cb547 100644
    --- a/framework/i18n/data/zh_sg.php
    +++ b/framework/i18n/data/zh_sg.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/zh_tw.php b/framework/i18n/data/zh_tw.php
    index 9aba9f33630..7d09f4cace4 100644
    --- a/framework/i18n/data/zh_tw.php
    +++ b/framework/i18n/data/zh_tw.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/data/zu.php b/framework/i18n/data/zu.php
    index 757f902c27a..ba32442e320 100644
    --- a/framework/i18n/data/zu.php
    +++ b/framework/i18n/data/zu.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '6546',
    diff --git a/framework/i18n/data/zu_za.php b/framework/i18n/data/zu_za.php
    index 1d40294741b..087bccc6d3b 100644
    --- a/framework/i18n/data/zu_za.php
    +++ b/framework/i18n/data/zu_za.php
    @@ -7,7 +7,7 @@
      * Copyright © 1991-2007 Unicode, Inc. All rights reserved.
      * Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
      *
    - * Copyright © 2008-2011 Yii Software LLC (http://www.yiiframework.com/license/)
    + * @copyright 2008-2013 Yii Software LLC (http://www.yiiframework.com/license/)
      */
     return array (
       'version' => '4123',
    diff --git a/framework/i18n/gettext/CGettextFile.php b/framework/i18n/gettext/CGettextFile.php
    index d869cd95922..572c6555c0e 100644
    --- a/framework/i18n/gettext/CGettextFile.php
    +++ b/framework/i18n/gettext/CGettextFile.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/i18n/gettext/CGettextMoFile.php b/framework/i18n/gettext/CGettextMoFile.php
    index e6a48c69906..b9c0c18268d 100644
    --- a/framework/i18n/gettext/CGettextMoFile.php
    +++ b/framework/i18n/gettext/CGettextMoFile.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/i18n/gettext/CGettextPoFile.php b/framework/i18n/gettext/CGettextPoFile.php
    index eac8c69bd23..077649687ae 100644
    --- a/framework/i18n/gettext/CGettextPoFile.php
    +++ b/framework/i18n/gettext/CGettextPoFile.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -25,22 +25,23 @@ class CGettextPoFile extends CGettextFile
     	 */
     	public function load($file,$context)
     	{
    -		$pattern='/(msgctxt\s+"(.*?(?decode($matches[3][$i]);
    -	        	$message=$this->decode($matches[4][$i]);
    -	        	$messages[$id]=$message;
    -	        }
    -        }
    -        return $messages;
    +		$pattern='/(msgctxt\s+"(.*?(?decode($matches[3][$i]);
    +				$message=$this->decode($matches[4][$i]);
    +				$messages[$id]=$message;
    +			}
    +		}
    +		return $messages;
     	}
     
     	/**
    @@ -73,7 +74,11 @@ public function save($file,$messages)
     	 */
     	protected function encode($string)
     	{
    -		return str_replace(array('"', "\n", "\t", "\r"),array('\\"', "\\n", '\\t', '\\r'),$string);
    +		return str_replace(
    +			array('"',"\n","\t","\r"),
    +			array('\\"',"\\n",'\\t','\\r'),
    +			$string
    +		);
     	}
     
     	/**
    @@ -83,6 +88,11 @@ protected function encode($string)
     	 */
     	protected function decode($string)
     	{
    -		return str_replace(array('\\"', "\\n", '\\t', '\\r'),array('"', "\n", "\t", "\r"),$string);
    +		$string=preg_replace(
    +			array('/"\s+"/','/\\\\n/','/\\\\r/','/\\\\t/','/\\\\"/'),
    +			array('',"\n","\r","\t",'"'),
    +			$string
    +		);
    +		return substr(rtrim($string),1,-1);
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/framework/logging/CChainedLogFilter.php b/framework/logging/CChainedLogFilter.php
    index 54bbea3d925..d9448442cd1 100644
    --- a/framework/logging/CChainedLogFilter.php
    +++ b/framework/logging/CChainedLogFilter.php
    @@ -4,7 +4,7 @@
      *
      * @author Carsten Brandt 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2012 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/logging/CDbLogRoute.php b/framework/logging/CDbLogRoute.php
    index 47e817d8e5f..342ebc4c936 100644
    --- a/framework/logging/CDbLogRoute.php
    +++ b/framework/logging/CDbLogRoute.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/logging/CEmailLogRoute.php b/framework/logging/CEmailLogRoute.php
    index 789c2bd6b8c..aa7b892f88e 100644
    --- a/framework/logging/CEmailLogRoute.php
    +++ b/framework/logging/CEmailLogRoute.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -78,7 +78,7 @@ protected function sendEmail($email,$subject,$message)
     		if($this->utf8)
     		{
     			$headers[]="MIME-Version: 1.0";
    -			$headers[]="Content-type: text/plain; charset=UTF-8";
    +			$headers[]="Content-Type: text/plain; charset=UTF-8";
     			$subject='=?UTF-8?B?'.base64_encode($subject).'?=';
     		}
     		if(($from=$this->getSentFrom())!==null)
    diff --git a/framework/logging/CFileLogRoute.php b/framework/logging/CFileLogRoute.php
    index 2dad1a5bc7f..310eb4ba1b0 100644
    --- a/framework/logging/CFileLogRoute.php
    +++ b/framework/logging/CFileLogRoute.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -18,6 +18,9 @@
      * with '.1'. All existing log files are moved backwards one place, i.e., '.2'
      * to '.3', '.1' to '.2'. The property {@link setMaxLogFiles maxLogFiles}
      * specifies how many files to be kept.
    + * If the property {@link rotateByCopy} is true, the primary log file will be
    + * rotated by a copy and truncated (to be more compatible with log tailers)
    + * otherwise it will be rotated by being renamed.
      *
      * @property string $logPath Directory storing log files. Defaults to application runtime path.
      * @property string $logFile Log file name. Defaults to 'application.log'.
    @@ -46,7 +49,12 @@ class CFileLogRoute extends CLogRoute
     	 * @var string log file name
     	 */
     	private $_logFile='application.log';
    -
    +	/**
    +	 * @var boolean Whether to rotate primary log by copy and truncate
    +	 * which is more compatible with log tailers. Defaults to false.
    +	 * @since 1.1.14
    +	 */
    +	public $rotateByCopy=false;
     
     	/**
     	 * Initializes the route.
    @@ -135,15 +143,26 @@ public function setMaxLogFiles($value)
     	 */
     	protected function processLogs($logs)
     	{
    +		$text='';
    +		foreach($logs as $log)
    +			$text.=$this->formatLogMessage($log[0],$log[1],$log[2],$log[3]);
    +
     		$logFile=$this->getLogPath().DIRECTORY_SEPARATOR.$this->getLogFile();
    -		if(@filesize($logFile)>$this->getMaxFileSize()*1024)
    -			$this->rotateFiles();
     		$fp=@fopen($logFile,'a');
     		@flock($fp,LOCK_EX);
    -		foreach($logs as $log)
    -			@fwrite($fp,$this->formatLogMessage($log[0],$log[1],$log[2],$log[3]));
    -		@flock($fp,LOCK_UN);
    -		@fclose($fp);
    +		if(@filesize($logFile)>$this->getMaxFileSize()*1024)
    +		{
    +			$this->rotateFiles();
    +			@flock($fp,LOCK_UN);
    +			@fclose($fp);
    +			@file_put_contents($logFile,$text,FILE_APPEND|LOCK_EX);
    +		}
    +		else
    +		{
    +			@fwrite($fp,$text);
    +			@flock($fp,LOCK_UN);
    +			@fclose($fp);
    +		}
     	}
     
     	/**
    @@ -166,6 +185,19 @@ protected function rotateFiles()
     			}
     		}
     		if(is_file($file))
    -			@rename($file,$file.'.1'); // suppress errors because it's possible multiple processes enter into this section
    +		{
    +			// suppress errors because it's possible multiple processes enter into this section
    +			if($this->rotateByCopy)
    +			{
    +				@copy($file,$file.'.1');
    +				if($fp=@fopen($file,'a'))
    +				{
    +					@ftruncate($fp,0);
    +					@fclose($fp);
    +				}
    +			}
    +			else
    +				@rename($file,$file.'.1');
    +		}
     	}
     }
    diff --git a/framework/logging/CLogFilter.php b/framework/logging/CLogFilter.php
    index 552ff7305a0..db3c98eabfe 100644
    --- a/framework/logging/CLogFilter.php
    +++ b/framework/logging/CLogFilter.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -42,6 +42,14 @@ class CLogFilter extends CComponent implements ILogFilter
     	 * Note that a variable must be accessible via $GLOBALS. Otherwise it won't be logged.
     	 */
     	public $logVars=array('_GET','_POST','_FILES','_COOKIE','_SESSION','_SERVER');
    +	/**
    +	 * @var callable or function which will be used to dump context information.
    +	 * Defaults to `var_export`. If you're experiencing issues with circular references
    +	 * problem change it to `print_r`. Any kind of callable (static methods, user defined
    +	 * functions, lambdas, etc.) could also be used.
    +	 * @since 1.1.14
    +	 */
    +	public $dumper='var_export';
     
     
     	/**
    @@ -94,12 +102,39 @@ protected function getContext()
     		if($this->logUser && ($user=Yii::app()->getComponent('user',false))!==null)
     			$context[]='User: '.$user->getName().' (ID: '.$user->getId().')';
     
    -		foreach($this->logVars as $name)
    +		if($this->dumper==='var_export' || $this->dumper==='print_r')
    +		{
    +			foreach($this->logVars as $name)
    +				if(($value=$this->getGlobalsValue($name))!==null)
    +					$context[]="\${$name}=".call_user_func($this->dumper,$value,true);
    +		}
    +		else
     		{
    -			if(!empty($GLOBALS[$name]))
    -				$context[]="\${$name}=".var_export($GLOBALS[$name],true);
    +			foreach($this->logVars as $name)
    +				if(($value=$this->getGlobalsValue($name))!==null)
    +					$context[]="\${$name}=".call_user_func($this->dumper,$value);
     		}
     
     		return implode("\n\n",$context);
     	}
    -}
    \ No newline at end of file
    +
    +	/**
    +	 * @param string[] $path
    +	 * @return string|null
    +	 */
    +	private function getGlobalsValue(&$path)
    +	{
    +		if(is_scalar($path))
    +			return !empty($GLOBALS[$path]) ? $GLOBALS[$path] : null;
    +		$pathAux=$path;
    +		$parts=array();
    +		$value=$GLOBALS;
    +		do
    +		{
    +			$value=$value[$parts[]=array_shift($pathAux)];
    +		}
    +		while(!empty($value) && !empty($pathAux) && !is_string($value));
    +		$path=implode('.',$parts);
    +		return $value;
    +	}
    +}
    diff --git a/framework/logging/CLogRoute.php b/framework/logging/CLogRoute.php
    index 49c6c64b050..fa80686be1a 100644
    --- a/framework/logging/CLogRoute.php
    +++ b/framework/logging/CLogRoute.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/logging/CLogRouter.php b/framework/logging/CLogRouter.php
    index 98c725b04c9..262bdf6c8f1 100644
    --- a/framework/logging/CLogRouter.php
    +++ b/framework/logging/CLogRouter.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/logging/CLogger.php b/framework/logging/CLogger.php
    index 5cc5f5a87d3..2aa98b374bf 100644
    --- a/framework/logging/CLogger.php
    +++ b/framework/logging/CLogger.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -120,7 +120,8 @@ public function log($message,$level='info',$category='application')
     	 * satisfying both filter conditions will be returned.
     	 *
     	 * @param string $levels level filter
    -	 * @param string $categories category filter
    +	 * @param array|string $categories category filter
    +	 * @param array|string $except list of log categories to ignore
     	 * @return array list of messages. Each array element represents one message
     	 * with the following structure:
     	 * array(
    @@ -177,7 +178,7 @@ private function filterTimingByCategory($value)
     	/**
     	 * Filter function used to filter included and excluded categories
     	 * @param array $value element to be filtered
    -	 * @param integer index of the values array to be used for check
    +	 * @param integer $index index of the values array to be used for check
     	 * @return boolean true if valid timing entry, false if not.
     	 */
     	private function filterAllCategories($value, $index)
    diff --git a/framework/logging/CProfileLogRoute.php b/framework/logging/CProfileLogRoute.php
    index 229b911647d..34dcce470e9 100644
    --- a/framework/logging/CProfileLogRoute.php
    +++ b/framework/logging/CProfileLogRoute.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -59,6 +59,7 @@ public function getReport()
     
     	/**
     	 * @param string $value the type of the profiling report to display. Valid values include 'summary' and 'callstack'.
    +	 * @throws CException if given value is not "summary" or "callstack"
     	 */
     	public function setReport($value)
     	{
    @@ -88,6 +89,7 @@ public function processLogs($logs)
     	/**
     	 * Displays the callstack of the profiling procedures for display.
     	 * @param array $logs list of logs
    +	 * @throws CException if Yii::beginProfile() and Yii::endProfile() are not matching
     	 */
     	protected function displayCallstack($logs)
     	{
    @@ -130,10 +132,12 @@ protected function displayCallstack($logs)
     	/**
     	 * Displays the summary report of the profiling result.
     	 * @param array $logs list of logs
    +	 * @throws CException if Yii::beginProfile() and Yii::endProfile() are not matching
     	 */
     	protected function displaySummary($logs)
     	{
     		$stack=array();
    +		$results=array();
     		foreach($logs as $log)
     		{
     			if($log[1]!==CLogger::LEVEL_PROFILE)
    diff --git a/framework/logging/CWebLogRoute.php b/framework/logging/CWebLogRoute.php
    index 54944732f00..1aa222a296e 100644
    --- a/framework/logging/CWebLogRoute.php
    +++ b/framework/logging/CWebLogRoute.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -69,6 +69,12 @@ protected function render($view,$data)
     			if($isAjax && $this->ignoreAjaxInFireBug || $isFlash && $this->ignoreFlashInFireBug)
     				return;
     			$view.='-firebug';
    +			if(($userAgent=$app->getRequest()->getUserAgent())!==null && preg_match('/msie [5-9]/i',$userAgent))
    +			{
    +				echo '\n";
    +			}
     		}
     		elseif(!($app instanceof CWebApplication) || $isAjax || $isFlash)
     			return;
    diff --git a/framework/messages/ca/yii.php b/framework/messages/ca/yii.php
    new file mode 100644
    index 00000000000..7e17d8b62a0
    --- /dev/null
    +++ b/framework/messages/ca/yii.php
    @@ -0,0 +1,270 @@
    + 'La clase d\'acció {class} ha d\'implementar el mètode "run".',
    +  'Adding a foreign key constraint to an existing table is not supported by SQLite.' => 'Afegir una restricció de clau forània no és suportat per SQLite.',
    +  'Adding a primary key after table has been created is not supported by SQLite.' => 'Afegir una clau primària després de que la taula hagi set creada no és suportat per SQLite.',
    +  'Alias "{alias}" is invalid. Make sure it points to an existing PHP file and the file is readable.' => 'L\' àlias "{alias}" no és vàlid. Asseguris de que apunta a un arxiu PHP i l\'arxiu té permisos de lectura.',
    +  'Alias "{alias}" is invalid. Make sure it points to an existing directory.' => 'L\' alias {alias} no és vàlid. Asseguris de que apunta a un directori existent.',
    +  'Altering a DB column is not supported by SQLite.' => 'Alterar una columna de la BDD no és suportat per SQLite.',
    +  'Application Log' => 'Registre d\'Aplicació',
    +  'CDbCacheDependency.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCacheDependency.connectionID "{id}"  no és vàlid. Si us plau, asseguris de que fa referència a l\'ID d\'un component d\'aplicació CDbConnection.',
    +  'CDbCommand::execute() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::execute() ha fallat: {error}. La sentència SQL executada ha set: {sql}.',
    +  'CDbCommand::{method}() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::{method}() ha fallat: {error}. La sentència SQL executada ha set: {sql}.',
    +  'CDbTestFixture.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbTestFixture.connectionID "{id}" es invàlid. Si us plau, asseguris de que fa referència a l\'ID d\'un component d\'aplicació CDbConnection.',
    +  'CHttpCacheFilter.lastModified contained a value that could not be understood by strtotime()' => 'CHttpCacheFilter.lastModified ha tingut un valor que no ha pogut ser entès per strtotime()',
    +  'CHttpSession.gcProbability "{value}" is invalid. It must be a float between 0 and 100.' => 'CHttpSession.gcProbability "{value}" no és vàlid. Ha de ser un decimal entre 0 i 100.',
    +  'CMemCache requires PHP {extension} extension to be loaded.' => 'CMemCache necessita que l\'extensió de PHP {extension} estigui carregada.',
    +  'CTypedMap<{type}> can only hold objects of {type} class.' => 'CTypedMap<{type}> només pot tenir objectes de la clase {type}.',
    +  'CWinCache requires PHP wincache extension to be loaded.' => 'CWinCache necessita que l\'extensió de PHP estigui carregada.',
    +  'CWinCache user cache is disabled. Please set wincache.ucenabled to On in your php.ini.' => 'La caché d\'usuari CWinCache esta desactivada. Si us plau, canvï wincache.ucenabled a ON al seu php.ini.',
    +  'Class name "{class}" does not match class file "{file}".' => 'El nom de la clase "{class}" no correspon amb la clase de l\'arxiu "{file}".',
    +  'Dropping DB column is not supported by SQLite.' => 'Eliminar una columna de la BDD no és suportat per SQLite.',
    +  'Dropping a foreign key constraint is not supported by SQLite.' => 'Eliminar una restricció de clau forània no és suportat per SQLite.',
    +  'Extension path "{path}" does not exist.' => 'La ruta "{path}" de l\'extensió no existeix.',
    +  'Failed to initialize the mcrypt module.' => 'Error al inicialitzar el mòdul mcrypt.',
    +  'Failed to set unsafe attribute "{attribute}" of "{class}".' => 'Error al definir unsafe l\'atribut "{attribute}" de "{class}".',
    +  'Failed to start session.' => 'Error al iniciar sessió.',
    +  'Filter "{filter}" is invalid. Controller "{class}" does not have the filter method "filter{filter}".' => 'El filtre "{filter}" no és vàlid. El controlador "{class}" no conté el mètodo de filtre "filter{filter}".',
    +  'GD with FreeType or ImageMagick PHP extensions are required.' => 'Les extensions de PHP GD amb FreeType o ImageMagick són necessàries.',
    +  'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'Amb el fi d\'utilitzar la validació de tipus MIME prevista per CFileValidator, l\'extensió de PECL fileinfo ha d\'estar instalada.',
    +  'Invalid expression for CHttpCacheFilter.lastModifiedExpression: The evaluation result "{value}" could not be understood by strtotime()' => 'Expressió no vàlida per CHttpCacheFilter.lastModifiedExpression: El resultat de l\'evaluació "{value}" no ha pogut ser entès per strototime()',
    +  'Invalid operator "{operator}".' => 'Operador no vàlid "{operator}".',
    +  'Powered by {yii}.' => 'Potenciat per {yii}.',
    +  'Property CMaskedTextField.mask cannot be empty.' => 'La propietat CMaskedTextField.mask no pot ser buida.',
    +  'Removing a primary key after table has been created is not supported by SQLite.' => 'Eliminar una clau primària després de que una taula hagi set creada, no és suportat per SQLite.',
    +  'Renaming a DB column is not supported by SQLite.' => 'Re-anomenar una columna de la BDD no és suportat per SQLite.',
    +  'The "db" application component must be configured to be a CDbConnection object.' => 'El component de l\'aplicació "db" ha d\'estar configurat per a ésser un objecte CDbConnection.',
    +  'The "range" property must be specified with a list of values.' => 'La propietat "range" ha de ser especificada amb una llista de valors.',
    +  'The DB query must contain the "from" portion.' => 'La consulta a la BDD ha de contenir la clàusula "from".',
    +  'The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.' => 'L\'arxiu "{file}" no pot ser pujat. Només els arxius d\'aquests tipus MIME estan permesos: {mimeTypes}.',
    +  'The format of {attribute} is invalid.' => 'El format de {attribute} no és vàlid.',
    +  'The pattern for day of the week must be "E", "EE", "EEE", "EEEE", "EEEEE", "e", "ee", "eee", "eeee", "eeeee", "c", "cccc" or "ccccc".' => 'El patró pel dia de la setmana ha de ser "E", "EE", "EEE", "EEEE", "EEEEE", "e", "ee", "eee", "eeee", "eeeee", "c", "cccc" o "ccccc".',
    +  'The pattern for month must be "M", "MM", "MMM", "MMMM", "L", "LL", "LLL" or "LLLL".' => 'El patró pel mes ha de ser "M", "MM", "MMM", "MMMM", "L", "LL", "LLL" o "LLLL".',
    +  'The requested view "{name}" was not found.' => 'No s\'ha trobat la vista sol·licitada "{name}" ',
    +  'Unable to find "{column}" in table "{table}".' => 'No s\'ha trobat la columna "{column}" a la taula "{table}".',
    +  'Unknown operator "{operator}".' => 'Operador desconegut "{operator}".',
    +  'Unknown type "{type}".' => 'Tipus desconegut "{type}".',
    +  'Your request is invalid.' => 'La sol·licitud no és vàlida.',
    +  '{attribute} cannot accept more than {limit} files.' => '{attribute} no pot acceptar més de {limit} arxius.',
    +  '{attribute} is in the list.' => '{attribute} esta a la llista.',
    +  '{attribute} must be {value}.' => '{attribute} ha de ser {value}.',
    +  '{attribute} must not be equal to "{compareValue}".' => '{attribute} no hauría de ser igual a "{compareValue}".',
    +  '{className} does not support flushValues() functionality.' => '{className} no suporta la funcionalitat flushValues().',
    +  '{class} and its behaviors do not have a method or closure named "{name}".' => '{class} i els seus comportaments no ténen un mètoda o clàusula anomenat "{name}".',
    +  '{n} B' => '{n} B',
    +  '{n} GB' => '{n} GB',
    +  '{n} KB' => '{n} KB',
    +  '{n} MB' => '{n} MB',
    +  '{n} TB' => '{n} TB',
    +  '{n} byte|{n} bytes' => '{n} byte|{n} bytes',
    +  '{n} gigabyte|{n} gigabytes' => '{n} gigabyte|{n} gigabytes',
    +  '{n} kilobyte|{n} kilobytes' => '{n} kilobyte|{n} kilobytes',
    +  '{n} megabyte|{n} megabytes' => '{n} megabyte|{n} megabytes',
    +  '{n} terabyte|{n} terabytes' => '{n} terabyte|{n} terabytes',
    +  '"{path}" is not a valid directory.' => '"{path}" no és un directori vàlid.',
    +  '< Previous' => '< Anterior',
    +  '<< First' => '<< Primer',
    +  'Active Record requires a "db" CDbConnection application component.' => 'Active Record requiereix un component d\'aplicació "db" de tipus CDbConnection.',
    +  '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.' => 'Active record "{class}" conté una configuració de relació invàlida "{relation}". La mateixa ha d\'especificar el tipus de relació, la clase active record relacionada i la clau forània.',
    +  '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.' => 'Active Record "{class}" esta intentant seleccionar una columna que no és vàlida {"column"}. Nota: la columna pot existir a la BDD o ser una expressió amb àlies.',
    +  'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Alias "{alias}" es inválido. Verifique que el mismo apunta a un directorio o archivo exisitente.',
    +  'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'L\'àlies "{alias}" no és vàlid. Verifiqui que el mateix apunta a un directori o arxiu exisitent.',
    +  'Application base path "{path}" is not a valid directory.' => 'Ruta base de l\'aplicació "{path}" no és un directori vàlid.',
    +  'Application runtime path "{path}" is not valid. Please make sure it is a directory writable by the Web server process.' => 'Ruta de runtime d\'aplicació "{path}" no és vàlida. Asseguri\'s de que sigui un directori amb permisos d\'escriptura pel procés que corre el servidor Web.',
    +  'Authorization item "{item}" has already been assigned to user "{user}".' => 'L\'element d\'autorització "{item}" ha set assignat a l\'usuari "{user}".',
    +  'Base path "{path}" is not a valid directory.' => 'La ruta base "{path}" no és un directori vàlid.',
    +  'CApcCache requires PHP apc extension to be loaded.' => 'CApcCache nexessita que l\'extensió apc de PHP estigui carregada.',
    +  'CAssetManager.basePath "{path}" is invalid. Please make sure the directory exists and is writable by the Web server process.' => 'CAssetManager.basePath "{path}" no és vàlid. Asseguri\'s de que sigui un directori amb permisos d\'escriptura pel procés que corre el servidor Web.',
    +  'CCacheHttpSession.cacheID is invalid. Please make sure "{id}" refers to a valid cache application component.' => 'CCacheHttpSession.cacheID no és vàlid. Asseguri\'s de que "{id}" fa referència a un component d\'aplicació de caché vàlid.',
    +  'CCaptchaValidator.action "{id}" is invalid. Unable to find such an action in the current controller.' => 'CCaptchaValidator.action "{id}" no és vàlid. No s\'ha trobat aquesta acció en el controlador actual.',
    +  'CDbAuthManager.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbAuthManager.connectionID "{id}" no és vàlid. Asseguri\'s de que fa referència a un ID d\'un component d\'aplicació CDbConnection.',
    +  'CDbCache.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCache.connectionID "{id}" no és vàlid. Asseguri\'s que es refereix a un ID d\'un component d\'aplicació CDbConnection.',
    +  'CDbCacheDependency.sql cannot be empty.' => 'CDbCacheDependency.sql no pot ser buit.',
    +  'CDbCommand failed to execute the SQL statement: {error}' => 'CDbCommand ha fallat al executar la sentència SQL: {error}',
    +  'CDbCommand failed to prepare the SQL statement: {error}' => 'CDbCommand ha fallat al preparar la sentència SQL: {error}',
    +  'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection no suporta la lectura de l\'esquema de la base de dades {driver}.',
    +  'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader no pot tornar enrere ja que és un lector cap endavant únicament.',
    +  'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" no és vàlid. Aseguri\'s de que fa referència a un ID d\'un component d\'aplicació CDbConnection.',
    +  'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" no refiere a un componente de aplicación CDbConnection válido.',
    +  'CDbMessageSource.connectionID is invalid. Please make sure "{id}" refers to a valid database application component.' => 'CDbMessageSource.connectionID no és vàlid. Aseguri\'s de que "{id}" fa referència a un component d\'aplicació de base de dades vàlid.',
    +  'CDbTransaction is inactive and cannot perform commit or roll back operations.' => 'CDbTransaction es troba inactiva i no es poden realitzar les operacions commit i roll back.',
    +  'CDirectoryCacheDependency.directory cannot be empty.' => 'CDirectoryCacheDependency.directory no pot ser buit.',
    +  'CEAcceleratorCache requires PHP eAccelerator extension to be loaded, enabled or compiled with the "--with-eaccelerator-shared-memory" option.' => 'CEAcceleratorCache necessita l\'extensió eAccelerator de PHP per ser carregada, activada o carregada amb la opció "--with-eaccelerator-shared-memory".',
    +  'CFileCacheDependency.fileName cannot be empty.' => 'CFileCacheDependency.fileName no puede ser vacío.',
    +  '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}" no apunta a un directori vàlid. Verifiqui que el directori existeix i que tingui permisos d\'escriptura pel procés que corre el servidor Web.',
    +  'CFilterChain can only take objects implementing the IFilter interface.' => 'CFilterChain tan sols pot obtindre objectes que implementin la interfície IFilter.',
    +  'CFlexWidget.baseUrl cannot be empty.' => 'CFlexWidget.baseUrl no pot ser buit.',
    +  'CFlexWidget.name cannot be empty.' => 'CFlexWidget.name no pot ser buit.',
    +  'CGlobalStateCacheDependency.stateName cannot be empty.' => 'CGlobalStateCacheDependency.stateName no pot ser buit.',
    +  'CHttpCookieCollection can only hold CHttpCookie objects.' => 'CHttpCookieCollection només pot contenir objectes CHttpCookie.',
    +  'CHttpRequest is unable to determine the entry script URL.' => 'CHttpRequest no pot determinar la URL del vostre script d\'entrada.',
    +  'CHttpRequest is unable to determine the path info of the request.' => 'CHttpRequest no pot determinar la informació de la ruta de sol·licitud.',
    +  'CHttpRequest is unable to determine the request URI.' => 'CHttpRequest no pot determinar la URL determinada.',
    +  'CHttpSession.cookieMode can only be "none", "allow" or "only".' => 'CHttpSession.cookieMode només pot ser "none", "allow" o "only".',
    +  'CHttpSession.savePath "{path}" is not a valid directory.' => 'CHttpSession.savePath "{path}" no és un directori vàlid.',
    +  'CMemCache server configuration must be an array.' => 'La configuració del servidor CMemCache ha de ser un vector (array).',
    +  'CMemCache server configuration must have "host" value.' => 'La configuració del servidor CMemCache ha de contenir un client "host".',
    +  'CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.' => 'CProfileLogRoute ha trobat un bloc de codi "{token}" desalineat. Asseguri\'s de que las crides a Yii::beginProfile() i a Yii::endProfile() estan correctament anidades.',
    +  'CProfileLogRoute.report "{report}" is invalid. Valid values include "summary" and "callstack".' => 'CProfileLogRoute.report "{report}" no és vàlid. El valors vàlid són "summary" i "callstack".',
    +  'CSecurityManager requires PHP mcrypt extension to be loaded in order to use data encryption feature.' => 'CSecurityManager necessita que l\'extensió mcrypt de PHP sigui carregada per utilitzar la opció d\'encriptació de dades.',
    +  'CSecurityManager.encryptionKey cannot be empty.' => 'CSecurityManager.encryptionKey no pot ser buit.',
    +  'CSecurityManager.validationKey cannot be empty.' => 'CSecurityManager.validationKey no pot ser buit.',
    +  'CTypedList<{type}> can only hold objects of {type} class.' => 'CTypedList<{type}> només pot contenir objectes de la clase {type}.',
    +  'CUrlManager.UrlFormat must be either "path" or "get".' => 'CUrlManager.UrlFormat ha de ser "path" o "get".',
    +  'CXCache requires PHP XCache extension to be loaded.' => 'CXCache necessita l\'extensió XCache de PHP per ser carregat.',
    +  'CZendDataCache requires PHP Zend Data Cache extension to be loaded.' => 'CZendDataCache necessita l\'extensió PHP Zend Data Cache per poder ser carregada.',
    +  'Cannot add "{child}" as a child of "{name}". A loop has been detected.' => 'No es pot afegir "{child}" com a fill de "{name}". S\'ha detectat un cicle infinit.',
    +  'Cannot add "{child}" as a child of "{parent}". A loop has been detected.' => 'No es pot afegir "{child}" com a fill de "{parent}". S\'ha detectat un cicle infinit.',
    +  'Cannot add "{name}" as a child of itself.' => 'No es pot afegir "{name}" com a element fill d\'ell mateix.',
    +  'Cannot add an item of type "{child}" to an item of type "{parent}".' => 'No es pot afegir un element de tipus "{child}" a un altr de tipus "{parent}".',
    +  'Column name must be either a string or an array.' => 'El nom de la columna ha de ser una cadena o un vector (array).',
    +  'Either "{parent}" or "{child}" does not exist.' => '"{parent}" o "{child}" no existeix.',
    +  'Error: Table "{table}" does not have a primary key.' => 'Error: La taula "{table}" no té clau primària.',
    +  'Error: Table "{table}" has a composite primary key which is not supported by crud command.' => 'Error: La taula "{table}" té una clau primària composta que no és suportada per la comanda crud.',
    +  'Event "{class}.{event}" is attached with an invalid handler "{handler}".' => 'L\'event "{class}"."{event}" té associat un maniuplador "{handler}" invàlid.',
    +  'Event "{class}.{event}" is not defined.' => 'L\'event "{class}"."{event}" no es troba definit.',
    +  'Failed to write the uploaded file "{file}" to disk.' => 'Error en escriure l\'arxiu pujat "{file}" al disc.',
    +  'File upload was stopped by extension.' => 'La pujada de l\'arxiu ha hagut de ser interrumpuda degut a la seva extensió.',
    +  'Get a new code' => 'Obtingui un nou codi',
    +  'Go to page: ' => 'Anar a la pàgina: ',
    +  'Invalid MO file revision: {revision}.' => 'Revisió d\'arxiu MO invàlida: {revision}.',
    +  'Invalid MO file: {file} (magic: {magic}).' => 'L\'arxiu MO no és vàlid: {file} (magic: {magic}).',
    +  'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'Valor d\'enumerador invàlid "{value}". Asseguri\'s que esta entre ({enum}).',
    +  'Last >>' => 'Últim >>',
    +  'List data must be an array or an object implementing Traversable.' => 'Les dades de la llista han de ser un vector (array) o bé un objecte que implementi la interfície Traversable.',
    +  'List index "{index}" is out of bound.' => 'L\' índex "{index}" de la llista es troba fora del límit.',
    +  'Login Required' => 'Inici de sessió necessàri.',
    +  'Map data must be an array or an object implementing Traversable.' => 'Les dades del mapa han de ser un vector (array) o un objecte que implementi la interfície Traversable',
    +  'Missing the temporary folder to store the uploaded file "{file}".' => 'No s\'ha trobat la carpeta temporal per guardar l\'arxiu pujat "{file}".',
    +  'Next >' => 'Següent >',
    +  'No columns are being updated for table "{table}".' => 'No s\'ha actualitzat cap columna per la taula "{table}".',
    +  'No counter columns are being updated for table "{table}".' => 'Cap comptador de columnes ha set actualitzat per la taula "{table}".',
    +  'Object configuration must be an array containing a "class" element.' => 'La configuració de l\'objecte ha de ser un vector (array) que contingui un element "class".',
    +  'Please fix the following input errors:' => 'Si us plau, corretgeixi els següents errors d\'ingrés:',
    +  'Property "{class}.{property}" is not defined.' => 'La propietat "{class}"."{property}" no es troba definida.',
    +  'Property "{class}.{property}" is read only.' => 'La propietat "{class}"."{property}" només és de lectura.',
    +  'Queue data must be an array or an object implementing Traversable.' => 'Les dades de la cua han de ser un vector (array) o un objecte que implementi la interfície Traversable.',
    +  'Relation "{name}" is not defined in active record class "{class}".' => 'La relació "{name}" no es troba definida no se encuentra definida en la clase active record "{class}".',
    +  'Stack data must be an array or an object implementing Traversable.' => 'Les dades de la pila han de ser un vector (array) o un objecte que implementi la interfície Traversable',
    +  'Table "{table}" does not exist.' => 'La taula "{table}" no existeix.',
    +  'Table "{table}" does not have a column named "{column}".' => 'La taula "{table}" no conté la columna "{column}".',
    +  'The "filter" property must be specified with a valid callback.' => 'La propietat "filter" ha de ser especificada amb un callback vàlid.',
    +  'The "pattern" property must be specified with a valid regular expression.' => 'La propietat "pattern" ha de ser especificada amb una expressió regular vàlida.',
    +  'The CSRF token could not be verified.' => 'El vostre token CSRF no pot ser verificat.',
    +  'The STAT relation "{name}" cannot have child relations.' => 'La relació STAT "{name}" no pot tenir relaciones filles.',
    +  'The URL pattern "{pattern}" for route "{route}" is not a valid regular expression.' => 'El patró d\'URL "{pattern}" no és una expressió regular vàlida.',
    +  'The active record cannot be deleted because it is new.' => 'L\' active record no pot ser eliminat perquè és nou.',
    +  'The active record cannot be inserted to database because it is not new.' => 'L\'active record no pot ser inserit a la base de dades perquè no és nou.',
    +  'The active record cannot be updated because it is new.' => 'L\' active record no pot ser actualitzat perquè és nou.',
    +  'The asset "{asset}" to be published does not exist.' => 'L\' asset "{asset} a que ha de ser publicat no existeix.',
    +  'The command path "{path}" is not a valid directory.' => 'La ruta de comanda "{path}" no és un directori vàlid.',
    +  'The controller path "{path}" is not a valid directory.' => 'La ruta del controlador "{path}" no és un directori vàlid.',
    +  'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'L\'arxiu "{file}" no pot ser pujat. Només els arxius amb les següents extensions són permesos: {extensions}.',
    +  'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'L\'arxuy "{file}" és massa gran. La seva mida màxima no pot excedir de {limit} bytes.',
    +  'The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.' => 'L\'arxiu "{file}" és massa petit. La seva mida mínima no pot ser menor de {limit} bytes.',
    +  'The file "{file}" was only partially uploaded.' => 'L\'arxiu "{file}" s\'ha pujat parcialment.',
    +  'The first element in a filter configuration must be the filter class.' => 'El primer element de la configuració d\'un filtre ha de ser la clase del filtre.',
    +  'The item "{name}" does not exist.' => 'L\'element "{name}" és inexistent.',
    +  'The item "{parent}" already has a child "{child}".' => 'L\'element "{parent}" ja conté un element fill "{child}".',
    +  'The layout path "{path}" is not a valid directory.' => 'La ruta d\'esquema "{path}" no és un directori vàlid.',
    +  'The list is read only.' => 'La llista només és de lectura.',
    +  'The map is read only.' => 'El mapa només és de lectura.',
    +  'The module path "{path}" is not a valid directory.' => 'La ruta del mòdul "{path}" no és un directori vàlid.',
    +  'The pattern for 12 hour format must be "h" or "hh".' => 'El patró per les hores en format de 12 hores ha de ser "h" o "hh".',
    +  'The pattern for 24 hour format must be "H" or "HH".' => 'El patró per les hores en format de 24 hores ha de ser "H" o "HH".',
    +  'The pattern for AM/PM marker must be "a".' => 'El patró pel marcador AM/PM ha de ser "a".',
    +  'The pattern for day in month must be "F".' => 'El patró pel dia del mes ha de ser "F".',
    +  'The pattern for day in year must be "D", "DD" or "DDD".' => 'El patró pel dia de l\'any ha de ser "D", "DD", "DDD".',
    +  'The pattern for day of the month must be "d" or "dd".' => 'El patró pel dia ha de ser "d" o "dd".',
    +  'The pattern for era must be "G", "GG", "GGG", "GGGG" or "GGGGG".' => 'El patró per les eres ha de ser "G", "GG", "GGG", "GGGG" o "GGGGG".',
    +  'The pattern for hour in AM/PM must be "K" or "KK".' => 'El patró per les hores en AM/PM ha de ser "K" o "KK".',
    +  'The pattern for hour in day must be "k" or "kk".' => 'El patró per les hores del dia ha de ser "k" o "kk".',
    +  'The pattern for minutes must be "m" or "mm".' => 'El patró pels minuts ha de ser "m" o "mm".',
    +  'The pattern for seconds must be "s" or "ss".' => 'El patró pels segons ha de ser "s" o "ss".',
    +  'The pattern for time zone must be "z" or "v".' => 'El patró per la zona horària ha de ser "z" o "v".',
    +  'The pattern for week in month must be "W".' => 'El patró per la setmana del mes ha de ser "W".',
    +  'The pattern for week in year must be "w".' => 'El patró per la setmana de l\'any ha de ser "w".',
    +  'The queue is empty.' => 'La cua esta buida',
    +  '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 relació "{relation}" de la clase de registre actiu (Active Record) "{class}" s\'ha especificat correctament. La taula d\' unió o de junta (UNION o JOIN) "{joinTable}" donada a la clau forània no es troba a la base de dades.',
    +  '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 relació "{relation}" de la clase de regsitre actiu (Active Record) "{class}" no s\'ha especificat correctament. La taula de junta (JOIN) "{joinTable}" donada no s\'ha trobat a la base de dades.',
    +  '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 relación "{relation}" de la clase de registre actiu (Active Record) "{class}" és especificada amb una clau forània "{key}" que no apunta a la taula pare "{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 relació "{relation}" de la clase de regsitre actiu (Active Record) "{class}" s\'ha especificat amb una clau forània de manera incompleta. La clau forània ha de consistir de les columnes que referencien la unió de les taules.',
    +  '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 relació "{relation}" de la clase de regsitre actiu (Active Record) "{class}" és especificada amb una clau forània que no és vàlida "{key}". No existeix dita columna a la taula "{table}".',
    +  '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}".' => 'La relació "{relation}" de la clase de regsitre actiu (Active Record) "{class}" és especificada amb una clau forània que no és vàlida. Les columnes de la clau forània han de coincidir amb les claus primàries de les taula "{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,...)".' => 'La relació "{relation}" de la clase de regsitre actiu (Active Record) "{class}" es troba especificada amb una clau forània invàlida. El format de la clau forània ha de ser "joinTable(fk1,fk2,...)".',
    +  'The stack is empty.' => 'La pila esta buida.',
    +  'The system is unable to find the requested action "{action}".' => 'El sistema no ha pogut trobar l\'acció "{action}" sol·licitada.',
    +  'The system view path "{path}" is not a valid directory.' => 'La ruta de vistes de sistema "{path}" no és un directori vàlid.',
    +  'The table "{table}" for active record class "{class}" cannot be found in the database.' => 'La taula "{table}" definida a la clase de regsitre actiu (Active Record) "{class}" no s\'ha pogut trobar a la base de dades.',
    +  'The value for the column "{column}" is not supplied when querying the table "{table}".' => 'El valor per la columna "{column}" no és suministrat quan es consulta la taula "{table}".',
    +  'The verification code is incorrect.' => 'El codi de verificació és incorrecte.',
    +  'The view path "{path}" is not a valid directory.' => 'La ruta de la vista "{path}" no és un directori vàlid.',
    +  'Theme directory "{directory}" does not exist.' => 'El directori de tema "{directory}" no existeix.',
    +  'This content requires the Adobe Flash Player.' => 'Aquest contingut requereix Adobe Flash Player.',
    +  'Unable to add an item whose name is the same as an existing item.' => 'No s\'ha pogut afegir un element el qual el nom és el mateix que el d\'un altre element existent.',
    +  'Unable to change the item name. The name "{name}" is already used by another item.' => 'No es pot modificar el nom de l\'element. El nom "{name}" ja l\'utilitza un altre element.',
    +  'Unable to create application state file "{file}". Make sure the directory containing the file exists and is writable by the Web server process.' => 'No s\'ha pogut crear l\'arxiu d\'estat d\'aplicació "{file}". Asseguris que el directori que conté el fitxer existeix i que sigui un directori amb permisos d\'escriptura pel procés que corre el servidor Web.',
    +  'Unable to lock file "{file}" for reading.' => 'No s\'ha pogut bloquejar l\'arxiu "{file}" per la lectura.',
    +  'Unable to lock file "{file}" for writing.' => 'No s\'ha pogut bloquejar l\'arxiu "{file}" per l\'escriptura.',
    +  'Unable to read file "{file}".' => 'No s\'ha pogut llegir el fitxer "{file}".',
    +  'Unable to replay the action "{object}.{method}". The method does not exist.' => 'Impossible replicar l\'acció "{object}.{method}". El mètode no existeix.',
    +  'Unable to resolve the request "{route}".' => 'No és possible resoldre la sol·licitud "{route}"',
    +  'Unable to write file "{file}".' => 'No s\'ha pogut escriure el fitxer "{file}".',
    +  'Unknown authorization item "{name}".' => 'Element d\'autorizació "{name}" desconegut.',
    +  'Unrecognized locale "{locale}".' => 'Localització no reconeguda: "{locale}".',
    +  'View file "{file}" does not exist.' => 'L\'arxiu de vista "{view}" no existeix.',
    +  'Yii application can only be created once.' => 'Només es pot crear una aplicació Yii.',
    +  'You are not authorized to perform this action.' => 'Vostè no es troba autoritzat a realitzar aquesta operació.',
    +  '{attribute} "{value}" has already been taken.' => '{attribute} "{value}" ja ha sigut especificat.',
    +  '{attribute} "{value}" is invalid.' => '{attribute} "{value}" no és vàlid.',
    +  '{attribute} cannot be blank.' => '{attribute} no pot ser nul.',
    +  '{attribute} is invalid.' => '{attribute} no és vàlid.',
    +  '{attribute} is not a valid URL.' => '{attribute} no és una URL vàlida.',
    +  '{attribute} is not a valid email address.' => '{attribute} no és un correu electrònic vàlid.',
    +  '{attribute} is not in the list.' => '{attribute} no es troba a la llista.',
    +  '{attribute} is of the wrong length (should be {length} characters).' => '{attribute} té una llargada incorrecta (ha de ser de {length} caràcters).',
    +  '{attribute} is too big (maximum is {max}).' => '{attribute} és massa gran (el màxim és {max}).',
    +  '{attribute} is too long (maximum is {max} characters).' => '{attribute} és massa llarg (el màxim és de {max} caràcters).',
    +  '{attribute} is too short (minimum is {min} characters).' => '{attribute} és massa curt (el mínim és de {min} caràcters).',
    +  '{attribute} is too small (minimum is {min}).' => '{attribute} és massa petit (el mínim és {min}).',
    +  '{attribute} must be a number.' => '{attribute} ha de ser un nombre.',
    +  '{attribute} must be an integer.' => '{attribute} ha de ser un nombre enter.',
    +  '{attribute} must be either {true} or {false}.' => '{attribute} ha de ser {true} o {false}.',
    +  '{attribute} must be greater than "{compareValue}".' => '{attribute} ha de ser major que "{compareValue}".',
    +  '{attribute} must be greater than or equal to "{compareValue}".' => '{attribute} ha de ser major o igual que "{compareValue}".',
    +  '{attribute} must be less than "{compareValue}".' => '{attribute} ha de ser menor que "{compareValue}".',
    +  '{attribute} must be less than or equal to "{compareValue}".' => '{attribute} ha de ser menor o igual que "{compareValue}".',
    +  '{attribute} must be repeated exactly.' => '{attribute} ha de ser repetit exactament.',
    +  '{attribute} must be {type}.' => '{attribute} ha de ser {type}.',
    +  '{className} does not support add() functionality.' => '{className} no suporta la funcionalitat add().',
    +  '{className} does not support delete() functionality.' => '{className} no suporta la funcionalitat delete().',
    +  '{className} does not support get() functionality.' => '{className} no suporta la funcionalitat get().',
    +  '{className} does not support set() functionality.' => '{className} no suporta la funcionalitat set().',
    +  '{class} does not have relation "{name}".' => '{class} no té la relació "{name}".',
    +  '{class} does not support fetching all table names.' => '{class} no suporta portar tots els noms de les taules.',
    +  '{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => '{class} té una regla de validació que no és vàlida. La regla ha d\'especificar els atributs que han de ser validats i un nom pel validador.',
    +  '{class} must specify "model" and "attribute" or "name" property values.' => '{class} ha d\'especificar els valors de la propietat "model" i "attribute" o "name".',
    +  '{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => '{class}.allowAutoLogin ha de ser assignat com a {true} per poder utilitzar l\'autenticació basada en cookies.',
    +  '{class}::authenticate() must be implemented.' => '{class}::authenticate() ha de ser implementat.',
    +  '{controller} cannot find the requested view "{view}".' => '{controller} no ha pogut trobar la vista "{view}" sol·licitada.',
    +  '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => '{controller} conté etiquetes de widget a la vista "{view}" tancades incorrectament. {widget} widget no conté la crida a endWidget().',
    +  '{controller} has an extra endWidget({id}) call in its view.' => '{controller} té una crida extra a endWidget({id}) a la seva vista.',
    +  '{widget} cannot find the view "{view}".' => '{widget} no ha pogut trobar la vista "{view}".',
    +);
    diff --git a/framework/messages/ca/zii.php b/framework/messages/ca/zii.php
    new file mode 100644
    index 00000000000..79c24fc64cf
    --- /dev/null
    +++ b/framework/messages/ca/zii.php
    @@ -0,0 +1,41 @@
    + 'Home',
    +  'The button type "{type}" is not supported.' => 'El tipus de botó "{type}" no és suportat.',
    +  'The property filterSelector should be defined.' => 'La propietat filterSelector hauría d\'estar definida.',
    +  'The property updateSelector should be defined.' => 'La propietat updateSelector hauría d\'estar definida.',
    +  'Are you sure you want to delete this item?' => 'De debò que vol eliminar aquest element?',
    +  'Delete' => 'Eliminar',
    +  'Displaying {start}-{end} of 1 result.|Displaying {start}-{end} of {count} results.' => 'Desplegant {start}-{end} de 1 resultat.|Desplegant {start}-{end} de {count} resultats.',
    +  'Either "name" or "value" must be specified for CDataColumn.' => '"name" o "value" s\'han d\'especificar per a CDataColumn.',
    +  'No results found.' => 'No s\'han trobat resultats.',
    +  'Not set' => 'No assignat.',
    +  'Please specify the "attributes" property.' => 'Si us plau, especifiqui la propietat d\'atributs "attributes".',
    +  'Please specify the "data" property.' => 'Si us plau, especifiqui la propietat "data".',
    +  'Sort by: ' => 'Ordenat per: ',
    +  'The "dataProvider" property cannot be empty.' => 'La propietat "dataProvider" no pot ser buida.',
    +  'The attribute must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.' => 'L\'atribut ha d\'especificar-se en el format "Nom:Tipus:Etiqueta", en què "Tipus" i "Etiqueta" són opcionals.',
    +  'The column must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.' => 'La columna ha d\'especificar-se en el format "Nom:Tipus:Etiqueta", en què "Tipus" i "Etiqueta" són opcionals.',
    +  'The property "itemView" cannot be empty.' => 'La propietat "itemView" no pot ser buida.',
    +  'Total 1 result.|Total {count} results.' => 'Total de 1 resultat.|Total de {count} resultats.',
    +  'Update' => 'Actualitzar',
    +  'View' => 'Mostrar',
    +  '{class} must specify "model" and "attribute" or "name" property values.' => '{class} ha d\'especificar valor/s per a "model" i "atributte" o per a "name".',
    +);
    diff --git a/framework/messages/config.php b/framework/messages/config.php
    index 6e4b5b83008..cb5828608b7 100644
    --- a/framework/messages/config.php
    +++ b/framework/messages/config.php
    @@ -6,7 +6,7 @@
     return array(
     	'sourcePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
     	'messagePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'messages',
    -	'languages'=>array('fi','zh_cn','zh_tw','de','el','es','sv','he','nl','pt','pt_br','ru','it','fr','ja','pl','hu','ro','id','vi','bg','lv','sk','uk','ko_kr','kk','cs'),
    +	'languages'=>array('fi','zh_cn','zh_tw','ca','de','el','es','sv','he','nl','pt','pt_br','ru','it','fr','ja','pl','hu','ro','id','vi','bg','lv','sk','uk','ko_kr','kk','cs'),
     	'fileTypes'=>array('php'),
     	'overwrite'=>true,
     	'exclude'=>array(
    diff --git a/framework/messages/de/yii.php b/framework/messages/de/yii.php
    index 6505348ec22..cb680ab66f0 100644
    --- a/framework/messages/de/yii.php
    +++ b/framework/messages/de/yii.php
    @@ -17,18 +17,23 @@
      * NOTE, this file must be saved in UTF-8 encoding.
      */
     return array (
    -  'Powered by {yii}.' => 'Powered by {yii}.',
    +  'A PHP extension stopped the file upload.' => 'Der Datei-Upload wurde von einer PHP-Erweiterung angehalten.',
    +  'CSecurityManager::generateRandomString() cannot generate random string in the current environment.' => 'CSecurityManager::generateRandomString() ist auf diesem System nicht in der Lage eine zufällige Zeichenkette zu erzeugen.',
    +  'Only SHA1 and MD5 hashing algorithms are supported when using PHP 5.1.1 or below.' => 'PHP 5.1.1 oder kleiner unterstützt nur die Hashing-Algorithmen SHA1 und MD5.',
    +  'Script HTML options are not allowed for "CClientScript::POS_LOAD" and "CClientScript::POS_READY".' => 'Für "CClientScript::POS_LOAD" and "CClientScript::POS_READY" ist die Angabe von HTML-Attributen nicht erlaubt.',
    +  'The $converter argument must be a valid callback or null.' => 'Das $converter Argument muss ein gültiges PHP-Callback oder null sein.',
    +  'Unable to generate random string.' => 'Es war nicht möglich eine zufällige Zeichenkette zu erzeugen.',
       '"{path}" is not a valid directory.' => '"{path}" ist kein gültiges Verzeichnis.',
       '< Previous' => '< Vorherige',
       '<< First' => '<< Erste',
       'Action class {class} must implement the "run" method.' => 'Action-Klasse {class} muss die Methode "run" implementieren.',
    -  'Active Record requires a "db" CDbConnection application component.' => 'ActiveRecord erfordert eine "db" CDbConnection Applikations-Komponente.',
    +  'Active Record requires a "db" CDbConnection application component.' => 'ActiveRecord erfordert eine Applikations-Komponente "db" vom Typ CDbConnection.',
       '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-Klasse "{class}" hat eine ungültige Konfiguration für die Relation "{relation}". Relations-Typ, verknüpftes ActiveRecord und Fremdschlüssel müssen angegeben werden.',
       '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}" benutzt das ungültige Feld "{column}" in SELECT. Beachten Sie, dass dieses Feld in der Tabelle existieren oder ein Alias-Ausdruck sein muss.',
       'Adding a foreign key constraint to an existing table is not supported by SQLite.' => 'SQLite unterstützt das Hinzufügen eines Fremdschüssel zu einer bestehenden Tabelle nicht.',
    +  'Adding a primary key after table has been created is not supported by SQLite.' => 'Das Hinzufügen eines Primärschlüssels nach dem Erstellen einer Tabelle wird von SQLite nicht unterstützt.',
       'Alias "{alias}" is invalid. Make sure it points to an existing PHP file and the file is readable.' => 'Alias "{alias}" ist ungültig. Stellen Sie sicher, dass er auf eine existierende PHP-Datei verweist und die Datei lesbar ist.',
       'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Der Alias "{alias}" ist ungültig. Stellen Sie sicher, dass er auf ein existierendes Verzeichnis oder eine existierende Datei verweist.',
    -  'Alias "{alias}" is invalid. Make sure it points to an existing directory.' => 'Alias "{alias}" ist ungültig. Stellen Sie sicher, dass er auf ein existierendes Verzeichnis verweist.',
       'Altering a DB column is not supported by SQLite.' => 'SQLite unterstützt das Verändern einer DB-Spalte nicht.',
       'Application Log' => 'Anwendungsprotokoll',
       'Application base path "{path}" is not a valid directory.' => 'Der Basispfad "{path}" der Applikation ist kein gültiges Verzeichnis.',
    @@ -49,8 +54,7 @@
       'CDbCommand::{method}() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::{method} fehlgeschlagen: {error}. Der SQL-Ausdruck war: {sql}.',
       'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection unterstützt das Lesen von Schemas für {driver}-Datenbanken nicht.',
       'CDbConnection failed to open the DB connection.' => 'CDbConnection konnte die DB-Verbindung nicht aufbauen.',
    -  'CDbConnection failed to open the DB connection: {error}' => 'CDbConnection konnte keine DB-Verbindung herstellen: {error}',
    -  'CDbConnection.connectionString cannot be empty.' => 'CDbConnection.connectionString darf nicht leer sein.',
    +  'CDbConnection is unable to find PDO class "{className}". Make sure PDO is installed correctly.' => 'CDbConnection konnte die PDO Klasse "{className}" nicht finden. Stellen Sie sicher, dass PDO korrekt installiert ist.',
       'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader ist nicht rewind-fähig. Es ist ein forward-only (nur-vorwärts) Leser.',
       'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" ist ungültig. Bitte stellen Sie sicher, dass sie sich auf die ID einer Applikations-Komponente vom Typ CDbConnection bezieht.',
       'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" zeigt nicht auf eine gültige Applikations-Komponente vom Typ CDbConnection.',
    @@ -65,13 +69,15 @@
       'CFlexWidget.baseUrl cannot be empty.' => 'CFlexWidget.baseUrl darf nicht leer sein.',
       'CFlexWidget.name cannot be empty.' => 'CFlexWidget.name darf nicht leer sein.',
       'CGlobalStateCacheDependency.stateName cannot be empty.' => 'CGlobalStateCacheDependency.stateName darf nicht leer sein.',
    +  'CHttpCacheFilter.lastModified contained a value that could not be understood by strtotime()' => 'CHttpCacheFilter.lastModified enthält einen Wert, der nicht von strtotime() gelesen werden kann.',
       'CHttpCookieCollection can only hold CHttpCookie objects.' => 'CHttpCookieCollection kann nur CHttpCookie-Objekte enthalten.',
       'CHttpRequest is unable to determine the entry script URL.' => 'CHttpRequest kann die URL des Eingangs-Scripts nicht bestimmen.',
       'CHttpRequest is unable to determine the path info of the request.' => 'CHttpRequest kann die Pfadinformation der Anfrage nicht ermitteln.',
       'CHttpRequest is unable to determine the request URI.' => 'CHttpRequest kann die angeforderte URI nicht ermitteln.',
       'CHttpSession.cookieMode can only be "none", "allow" or "only".' => 'CHttpSession.cookieMode kann nur "none", "allow" oder "only" sein.',
    -  'CHttpSession.gcProbability "{value}" is invalid. It must be an integer between 0 and 100.' => 'CHttpSession.gcProbability "{value}" ist ungültig. Es muss eine ganze Zahl zwischen 0 und 100 sein.',
    +  'CHttpSession.gcProbability "{value}" is invalid. It must be a float between 0 and 100.' => 'CHttpSession.gcProbability "{value}" ist ungültig. Der Wert muss eine Fließkommazahl zwischen 0 und 100 sein.',
       'CHttpSession.savePath "{path}" is not a valid directory.' => 'CHttpSession.savePath "{path}" ist kein gültiges Verzeichnis.',
    +  'CMemCache requires PHP {extension} extension to be loaded.' => 'CMemCache benötigt die PHP Erweiterung "{extension}".',
       'CMemCache server configuration must be an array.' => 'CMemCache Serverkonfiguration muss ein Array sein.',
       'CMemCache server configuration must have "host" value.' => 'CMemCache Serverkonfiguration erfordert einen Wert für "host".',
       'CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.' => 'CProfileLogRoute fand einen unzugehörigen Code-Block "{token}". Stellen Sie sicher dass Aufrufe von Yii::beginProfile() und Yii::endProfile() richtig verschachtelt sind.',
    @@ -90,6 +96,7 @@
       'Cannot add "{child}" as a child of "{parent}". A loop has been detected.' => 'Kann "{child}" nicht als Kind von "{parent}" hinzufügen. Es wurde eine Schleife entdeckt.',
       'Cannot add "{name}" as a child of itself.' => 'Kann "{name}" nicht als Kind von sich selbst hinzufügen.',
       'Cannot add an item of type "{child}" to an item of type "{parent}".' => 'Kann ein Element vom Typ "{child}" nicht als Kind zu einem Element vom Typ "{parent}" hinzufügen.',
    +  'Class name "{class}" does not match class file "{file}".' => 'Der Klassenname "{class}" passt nicht zum Dateinamen "{file}".',
       'Column name must be either a string or an array.' => 'Spaltenname muss entweder ein String oder ein Array sein.',
       'Dropping DB column is not supported by SQLite.' => 'SQLite untestützt das Entfernen einer DB-Spalte nicht.',
       'Dropping a foreign key constraint is not supported by SQLite.' => 'SQLite unterstützt das Entfernen eines Fremdschlüssels nicht.',
    @@ -103,14 +110,16 @@
       'Failed to set unsafe attribute "{attribute}" of "{class}".' => 'Ungesichertes Attribut "{attribute}" konnte nicht gesetzt werden.',
       'Failed to start session.' => 'Session konnte nicht gestartet werden.',
       'Failed to write the uploaded file "{file}" to disk.' => 'Hochgeladene Datei "{file}" konnte nicht auf die Festplatte gespeichert werden.',
    -  'File upload was stopped by extension.' => 'Datei-Upload wurde von einer Erweiterung angehalten.',
       'Filter "{filter}" is invalid. Controller "{class}" does not have the filter method "filter{filter}".' => 'Filter "{filter}" ist ungültig. Controller "{class}" hat keine Filter-Methode "filter{filter}".',
    -  'GD and FreeType PHP extensions are required.' => 'Die PHP Erweiterungen GD und FreeType werden benötigt.',
    +  'GD with FreeType or ImageMagick PHP extensions are required.' => 'Es werden entweder die PHP Erweiterung GD und FreeType oder die PHP Erweiterung ImageMagick benötigt.',
       'Get a new code' => 'Neuen Code erzeugen',
       'Go to page: ' => 'Zu Seite: ',
    +  'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'Um die Validierung von MIME-Typen des CFileValidator zu nutzen, muss die PECL Erweiterung "fileinfo" installiert sein.',
    +  'Internal error while generating hash.' => 'Beim Erstellen des Hash-Wertes ist ein interner Fehler aufgetreten.',
       'Invalid MO file revision: {revision}.' => 'Ungültige MO-Datei-Revision: {revision}',
       'Invalid MO file: {file} (magic: {magic}).' => 'Ungültige MO-Datei: {file} (magic: {magic}).',
       'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'Ungültiger Enumerable-Wert "{value}". Bitte stellen Sie sicher er ist in ({enum}) enthalten.',
    +  'Invalid expression for CHttpCacheFilter.lastModifiedExpression: The evaluation result "{value}" could not be understood by strtotime()' => 'Ungültiger Ausdruck für CHttpCacheFilter.lastModifiedExpression: Die Auswertung des Ausdrucks "{value}" kann nicht von strtotime() gelesen werden.',
       'Invalid operator "{operator}".' => 'Ungültiger Operator "{operator}".',
       'Last >>' => 'Letzte >>',
       'List data must be an array or an object implementing Traversable.' => 'List-Daten müssen ein Array sein oder ein Objekt, das das Interface Traversable implementiert.',
    @@ -119,21 +128,25 @@
       'Map data must be an array or an object implementing Traversable.' => 'Map-Daten müssen ein Array sein oder ein Objekt, das das Interface Traversable implementiert.',
       'Missing the temporary folder to store the uploaded file "{file}".' => 'Temporäres Verzeichnis zum Speichern der hochgeladenene Datei "{file}" nicht vorhanden.',
       'Next >' => 'Nächste >',
    +  'No' => 'Nein',
       'No columns are being updated for table "{table}".' => 'Für Tabelle "{table}" werden keine Felder aktualisiert.',
       'No counter columns are being updated for table "{table}".' => 'Für die Tabelle "{table}" werden keine Zähler-Felder aktualisiert.',
       'Object configuration must be an array containing a "class" element.' => 'Objekt-Konfiguration muss ein Array sein, das ein "class"-Element beinhaltet.',
       'Please fix the following input errors:' => 'Bitte beheben Sie folgende Eingabefehler:',
    +  'Powered by {yii}.' => 'Powered by {yii}.',
       'Property "{class}.{property}" is not defined.' => 'Eigenschaft "{class}.{property} ist nicht definiert.',
       'Property "{class}.{property}" is read only.' => 'Eigenschaft "{class}.{property} kann nur gelesen werden.',
       'Property CMaskedTextField.mask cannot be empty.' => 'Eigenschaft CMaskedTextField.mask darf nicht leer sein.',
       'Queue data must be an array or an object implementing Traversable.' => 'Queue-Daten müssen ein Array sein oder ein Objekt, das das Interface Traversable implementiert.',
       'Relation "{name}" is not defined in active record class "{class}".' => 'Relation "{name}" ist in der ActiveRecord-Klasse "{class}" nicht definiert.',
    +  'Removing a primary key after table has been created is not supported by SQLite.' => 'Das Entfernen eines Primärschlüssels nach dem Erstellen einer Tabelle wird von SQLite nicht unterstützt.',
       'Renaming a DB column is not supported by SQLite.' => 'SQLite unterstützt das Umbenennen einer DB-Spalte nicht.',
       'Stack data must be an array or an object implementing Traversable.' => 'Stack-Daten müssen ein Array sein oder ein Objekt, das das Interface Traversable implementiert.',
       'Table "{table}" does not exist.' => 'Tabelle "{table}" existiert nicht.',
       'Table "{table}" does not have a column named "{column}".' => 'Tabelle "{table}" hat kein Feld namens "{column}".',
       'The "db" application component must be configured to be a CDbConnection object.' => 'Die "db"-Komponente der Anwendung muss als CDBConnection-Objekt konfigureirt sein.',
       'The "filter" property must be specified with a valid callback.' => 'Für "filter" muss ein gültiger Callback angegeben werden.',
    +  'The "forceCopy" and "linkAssets" cannot be both true.' => 'Die Werte "forceCopy" und "linkAssets" können nicht gleichzeitig "true" sein.',
       'The "pattern" property must be specified with a valid regular expression.' => 'Für "pattern" muss ein gültiger regulärer Ausdruck angegeben werden.',
       'The "range" property must be specified with a list of values.' => 'Die "range"-Eigenschaft muss eine Liste von Werten enthalten.',
       'The CSRF token could not be verified.' => 'Der CSRF-Token konnte nicht verifiziert werden.',
    @@ -146,6 +159,7 @@
       'The asset "{asset}" to be published does not exist.' => 'Das zu veröffentlichende Asset "{asset}" existiert nicht.',
       'The command path "{path}" is not a valid directory.' => 'Der Kommando-Pfad "{path}" ist kein gültiges Verzeichnis.',
       'The controller path "{path}" is not a valid directory.' => 'Der Controller-Pfad "{path}" ist kein gültiges Verzeichnis.',
    +  'The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.' => 'Die Datei "{file}" konnte nicht hochgeladen werden. Es sind nur Dateien mit den folgenden MIME-Typen erlaubt: {mimeTypes}.',
       'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'Die Datei "{file}" kann nicht hochgeladen werden. Nur Dateien mit diesen Endungen sind erlaubt: {extensions}.',
       'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'Die Datei "{file}" ist zu groß. Die Größe kann {limit} Bytes nicht überschreiten.',
       'The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.' => 'Die Datei "{file}" ist zu klein. Die Größe kann {limit} Bytes nicht unterschreiten.',
    @@ -175,7 +189,6 @@
       'The pattern for week in month must be "W".' => 'Das Schema für die Woche im Monat muss "W" lauten.',
       'The pattern for week in year must be "w".' => 'Das Schema für Kalenderwochen muss "w" lauten.',
       'The queue is empty.' => 'Die Queue ist leer.',
    -  '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.' => 'Die Relation "{relation}" in der ActiveRecord-Klasse "{class}" ist nicht korrekt definiert: Die im Fremdschlüssel angegebene Join-Tabelle "{joinTable}" wurde in der Datenbank nicht gefunden',
       '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.' => 'Die Relation "{relation}" in der ActiveRecord-Klasse "{class}" ist nicht korrekt definiert: Die im Fremdschlüssel verwendete Join-Tabelle "{joinTable}" wurde in der Datenbank nicht gefunden.',
       'The relation "{relation}" in active record class "{class}" is specified with a foreign key "{key}" that does not point to the parent table "{table}".' => 'Die Relation "{relation}" in der ActiveRecord-Klasse "{class}" wurde mit dem Fremschlüssel "{key}" angegeben, der nicht auf die Elterntabelle "{table}" verweist.',
       '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.' => 'Zur Relation "{relation} in der ActiveRecord-Klasse "{class}" wurde ein unvollständiger Fremdschlüssel angegeben. Der Fremdschlüssel muss aus Feldern bestehen, die sich auf beide zu joinende Tabellen beziehen.',
    @@ -207,6 +220,7 @@
       'Unknown type "{type}".' => 'Unbekannter Typ "{type}".',
       'Unrecognized locale "{locale}".' => 'Unbekanntes Locale "{locale}".',
       'View file "{file}" does not exist.' => 'View-Datei "{file}" existiert nicht.',
    +  'Yes' => 'Ja',
       'Yii application can only be created once.' => 'Eine Yii Applikation kann nur einmal erzeugt werden.',
       'You are not authorized to perform this action.' => 'Sie sind nicht berechtigt, diese Aktion auszuführen.',
       'Your request is invalid.' => 'Ihre Anfrage ist ungültig.',
    @@ -245,20 +259,24 @@
       '{class} does not support fetching all table names.' => '{class} unterstützt das Beziehen aller Tabellennamen nicht.',
       '{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => '{class} hat eine ungültige Validierungs-Regel. Die Regel muss die zu validierenden Attribute und den Validatornamen enthalten.',
       '{class} must specify "model" and "attribute" or "name" property values.' => '{class} muss "model" und "attribute" oder "name" Eigenschaften festlegen.',
    +  '{class} requires the Blowfish option of the PHP crypt() function. This system does not have it.' => '{class} benötigt die Blowfish-Option der PHP-crypt()-Funktion, welche auf diesem System nicht zur verfügung steht.',
    +  '{class} requires the PHP crypt() function. This system does not have it.' => '{class} benötigt die PHP-crypt()-Funktion, welche auf diesem System nicht zur verfügung steht.',
       '{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => '{class}.allowAutoLogin muss auf true gesetzt werden, um cookie-basierte Authentifizierung zu verwenden.',
    +  '{class}::$cost must be a number.' => '{class}::$cost muss eine Zahl sein.',
    +  '{class}::$cost must be between 4 and 31.' => '{class}::$cost muss eine Zahl zwischen 4 und 31 sein.',
       '{class}::authenticate() must be implemented.' => '{class}::authenticate() muss implementiert werden.',
       '{controller} cannot find the requested view "{view}".' => '{controller} kann den angeforderten View "{view}" nicht finden.',
       '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => '{controller} enthält falsch verschachtelte Widget-Tags im View "{view}". Ein {widget}-Widget hat keinen endwidget()-Aufruf.',
       '{controller} has an extra endWidget({id}) call in its view.' => '{controller} hat einen überzähligen endwidget({id})-Aufruf in seinem View.',
       '{n} B' => '{n} B',
    -  '{n} byte|{n} bytes' => '{n} Byte',
       '{n} GB' => '{n} GB',
    -  '{n} gigabyte|{n} gigabytes' => '{n} Gigabyte',
       '{n} KB' => '{n} KB',
    -  '{n} kilobyte|{n} kilobytes' => '{n} Kilobyte',
       '{n} MB' => '{n} MB',
    -  '{n} megabyte|{n} megabytes' => '{n} Megabyte',
       '{n} TB' => '{n} TB',
    +  '{n} byte|{n} bytes' => '{n} Byte',
    +  '{n} gigabyte|{n} gigabytes' => '{n} Gigabyte',
    +  '{n} kilobyte|{n} kilobytes' => '{n} Kilobyte',
    +  '{n} megabyte|{n} megabytes' => '{n} Megabyte',
       '{n} terabyte|{n} terabytes' => '{n} Terabyte',
       '{widget} cannot find the view "{view}".' => '{widget} kann den View "{view}" nicht finden.',
     );
    diff --git a/framework/messages/de/zii.php b/framework/messages/de/zii.php
    index 5d73fc9fe16..7c90119dbec 100644
    --- a/framework/messages/de/zii.php
    +++ b/framework/messages/de/zii.php
    @@ -11,15 +11,18 @@
      * Messages that no longer need translation will have their translations
      * enclosed between a pair of '@@' marks.
      *
    + * Message string can be used with plural forms format. Check i18n section
    + * of the guide for details.
    + *
      * NOTE, this file must be saved in UTF-8 encoding.
      */
     return array (
    -  'Home' => 'Home',
    -  'The button type "{type}" is not supported.' => 'Buttontyp "{type}" wird nicht unterstützt.',
    +  '{class} must specify "model" and "{attribute}" or "{name}" property values.' => '{class} muss die Eigenschaften "model" und "{attribute}" oder "{name}" spezifizieren.',
       'Are you sure you want to delete this item?' => 'Wollen Sie diesen Eintrag wirklich löschen?',
       'Delete' => 'Löschen',
       'Displaying {start}-{end} of 1 result.|Displaying {start}-{end} of {count} results.' => 'Zeige Ergebnisse {start}-{end} von {count}.',
       'Either "name" or "value" must be specified for CDataColumn.' => 'Für CDataColumn muss entweder "name" oder "value" angegeben werden.',
    +  'Home' => 'Home',
       'No results found.' => 'Keine Ergebnisse gefunden.',
       'Not set' => 'Nicht gesetzt',
       'Please specify the "attributes" property.' => 'Bitte geben Sie die "attributes"-Eigenschaft an.',
    @@ -27,10 +30,12 @@
       'Sort by: ' => 'Sortieren nach:',
       'The "dataProvider" property cannot be empty.' => 'Die Eigenschaft "dataProvider" darf nicht leer sein.',
       'The attribute must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.' => 'Das Attribut muss im Format "Name:Typ:Label" angegeben werden, wobei "Typ" und "Label" optional sind.',
    +  'The button type "{type}" is not supported.' => 'Buttontyp "{type}" wird nicht unterstützt.',
       'The column must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.' => 'Die Spalte muss im Format "Name:Typ:Label" angegeben werden, wobei "Typ" und "Label" optional sind.',
       'The property "itemView" cannot be empty.' => 'Die Eigenschaft "itemView" darf nicht leer sein.',
    +  'The property filterSelector should be defined.' => 'Die Eigenschaft "filterSelector" muss definiert werden.',
    +  'The property updateSelector should be defined.' => 'Die Eigenschaft "updateSelector" muss definiert werden.',
       'Total 1 result.|Total {count} results.' => 'Insgesamt 1 Ergebnis.|Insgesamt {count} Ergebnisse.',
       'Update' => 'Bearbeiten',
       'View' => 'Anzeigen',
    -  '{class} must specify "model" and "attribute" or "name" property values.' => '{class} muss die Eigenschaften "model" und "attribute" oder "name" spezifizieren.',
     );
    diff --git a/framework/messages/el/yii.php b/framework/messages/el/yii.php
    index 847d057a9aa..8367c51760a 100644
    --- a/framework/messages/el/yii.php
    +++ b/framework/messages/el/yii.php
    @@ -17,23 +17,21 @@
      * NOTE, this file must be saved in UTF-8 encoding.
      */
     return array (
    -  'Adding a primary key after table has been created is not supported by SQLite.' => 'Η προσθήκη πρωτεύοντος κλειδιού αφού έχει δημιουργηθεί ο πίνακας δεν υποστηρίζεται από το SQLite.',
    -  'CHttpSession.gcProbability "{value}" is invalid. It must be a float between 0 and 100.' => 'Η τιμή "{value}" για το CHttpSession.gcProbability δεν είναι έγκυρη. Πρέπει να είναι πραγματικός αριθμός μεταξύ 0 και 100.',
    -  'GD with FreeType or ImageMagick PHP extensions are required.' => 'Απαιτούνται οι PHP επεκτάσεις GD με το FreeType ή το ImageMagick.',
    -  'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'Προκειμένου να χρησιμοποιήσετε την επαλήθευση για τον MIME τύπο που παρέχει το CFileValidator, απαιτείται να είναι εγκατεστημένη η επέκταση PECL fileinfo.',
    -  'Removing a primary key after table has been created is not supported by SQLite.' => 'Η αφαίρεση πρωτεύοντος κλειδιού αφού έχει δημιουργηθεί ο πίνακας δεν υποστηρίζεται από το SQLite.',
    -  'The "forceCopy" and "linkAssets" cannot be both true.' => 'Τα "forceCopy" και "linkAssets" δεν μπορεί να είναι και τα δύο αληθή.',
    -  'The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.' => 'Δεν είναι δυνατό το ανέβασμα του αρχείου "{file}". Επιτρέπονται μόνο οι παρακάτω MIME τύποι: {mimeTypes}.',
    -  '{n} B' => '{n} B',
    -  '{n} GB' => '{n} GB',
    -  '{n} KB' => '{n} KB',
    -  '{n} MB' => '{n} MB',
    -  '{n} TB' => '{n} TB',
    -  '{n} byte|{n} bytes' => '{n} byte|{n} bytes',
    -  '{n} gigabyte|{n} gigabytes' => '{n} gigabyte|{n} gigabytes',
    -  '{n} kilobyte|{n} kilobytes' => '{n} kilobyte|{n} kilobytes',
    -  '{n} kilobyte|{n} kilobytes' => '{n} kilobyte|{n} kilobytes',
    -  '{n} kilobyte|{n} kilobytes' => '{n} kilobyte|{n} kilobytes',
    +  'CDbConnection failed to open the DB connection.' => 'Το CDbConnection απέτυχε να ανοίξει τη σύνδεση με τη βάση δεδομένων.',
    +  'CDbConnection is unable to find PDO class "{className}". Make sure PDO is installed correctly.' => 'Το CDbConnection αδυνατεί να βρει την PDO κλάση "{className}". Σιγουρευτείτε ότι το PDO είναι σωστά εγκατεστημένο.',
    +  'CSecurityManager::generateRandomString() cannot generate random string in the current environment.' => 'Η μέθοδος CSecurityManager::generateRandomString() δεν μπορεί να δημιουργήσει τυχαία αλφαριθμητική φράση στο τρέχον περιβάλλον.',
    +  'Cannot hash a password that is empty or not a string.' => 'Δεν είναι δυνατός ο κατακερματισμός ένας συνθηματικού που δεν έχει τιμή ή δεν είναι αλφαριθμητική φράση.',
    +  'Internal error while generating hash.' => 'Εσωτερικό σφάλμα κατά τον κατακερματισμό.',
    +  'No' => 'Όχι',
    +  'Only SHA1 and MD5 hashing algorithms are supported when using PHP 5.1.1 or below.' => 'Μόνο αλγόριθμοι κατακερματισμού SHA1 και MD5 υποστηρίζονται όταν χρησιμοποιείται έκδοση PHP 5.1.1 και πιο κάτω.',
    +  'Script HTML options are not allowed for "CClientScript::POS_LOAD" and "CClientScript::POS_READY".' => 'Οι επιλογές σεναρίου HTML δεν επιτρέπονται για τα "CClientScript::POS_LOAD" και "CClientScript::POS_READY".',
    +  'The $converter argument must be a valid callback or null.' => 'Το όρισμα $converter πρέπει να είναι έγκυρη συνάρτηση επανάκλησης ή null.',
    +  'Unable to generate random string.' => 'Δεν ήταν δυνατή η δημιουργία τυχαίας αλφαριθμητικής φράσης.',
    +  'Yes' => 'Ναι',
    +  '{class} requires the Blowfish option of the PHP crypt() function. This system does not have it.' => 'Η κλάση {class} απαιτεί την επιλογή Blowfish της συνάρτησης crypt() της PHP. Το σύστημα δεν την έχει.',
    +  '{class} requires the PHP crypt() function. This system does not have it.' => 'Η κλάση {class} απαιτεί τη συνάρτηση crypt() της PHP. Το σύστημα δεν την έχει.',
    +  '{class}::$cost must be a number.' => 'Το {class}::$cost πρέπει να είναι αριθμός.',
    +  '{class}::$cost must be between 4 and 31.' => 'Το {class}::$cost πρέπει να είναι μεταξύ 4 και 31.',
       '"{path}" is not a valid directory.' => 'Η διαδρομή "{path}" δεν είναι έγκυρος κατάλογος.',
       '< Previous' => '< Προηγούμενη',
       '<< First' => '<< Αρχική',
    @@ -42,6 +40,7 @@
       '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.' => 'Η Active record κλάση "{class}" έχει μια μη έγκυρη παραμετροποίηση για τη σχέση "{relation}". Θα πρέπει να ορίζεται ο τύπος της σχέσης, η σχετιζόμενη κλάση Active record και το ξένο κλειδί.',
       '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.' => 'Η Active record κλάση "{class}" προσπαθεί να επιλέξει μια μη έγκυρη στήλη "{column}". Πρέπει να σημειωθεί, ότι η στήλη θα πρέπει να υπάρχει στον πίνακα ή να είναι μια έκφραση με κάποιο ψευδώνυμο.',
       'Adding a foreign key constraint to an existing table is not supported by SQLite.' => 'Η προσθήκη περιορισμού ξένου κλειδιού σε υπάρχοντα πίνακα δεν υποστηρίζεται από την SQLite.',
    +  'Adding a primary key after table has been created is not supported by SQLite.' => 'Η προσθήκη πρωτεύοντος κλειδιού αφού έχει δημιουργηθεί ο πίνακας δεν υποστηρίζεται από το SQLite.',
       'Alias "{alias}" is invalid. Make sure it points to an existing PHP file and the file is readable.' => 'Το ψευδώνυμο "{alias}" δεν είναι έγκυρο. Βεβαιωθείτε ότι δείχνει σε υπάρχον αρχείο PHP.',
       'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Το ψευδώνυμο "{alias}" δεν είναι έγκυρο. Επιβεβαιώστε ότι δείχνει σε ένα υπάρχων κατάλογο ή αρχείο.',
       'Alias "{alias}" is invalid. Make sure it points to an existing directory.' => 'Το ψευδώνυμο "{alias}" είναι μη έγκυρο. Βεβαιωθείτε ότι δείχνει σε υπάρχοντα κατάλογο.',
    @@ -84,6 +83,7 @@
       'CHttpRequest is unable to determine the path info of the request.' => 'Το CHttpRequest δεν μπόρεσε να καθορίσει τις πληροφορίες διαδρομής της αίτησης.',
       'CHttpRequest is unable to determine the request URI.' => 'Το CHttpRequest δεν μπόρεσε να καθορίσει το URI αίτησης.',
       'CHttpSession.cookieMode can only be "none", "allow" or "only".' => 'Το CHttpSession.cookieMode μπορεί να είναι μόνο "none", "allow" ή "only".',
    +  'CHttpSession.gcProbability "{value}" is invalid. It must be a float between 0 and 100.' => 'Η τιμή "{value}" για το CHttpSession.gcProbability δεν είναι έγκυρη. Πρέπει να είναι πραγματικός αριθμός μεταξύ 0 και 100.',
       'CHttpSession.savePath "{path}" is not a valid directory.' => 'Το CHttpSession.savePath "{path}" δεν είναι έγκυρος κατάλογος.',
       'CMemCache requires PHP {extension} extension to be loaded.' => 'Το CMemCache απαιτεί την PHP επέκταση {extension} να έχει φορτωθεί.',
       'CMemCache server configuration must be an array.' => 'Η παραμετροποίηση διακομιστή του CMemCache πρέπει να είναι πίνακας.',
    @@ -120,8 +120,10 @@
       'Failed to write the uploaded file "{file}" to disk.' => 'Δεν ήταν δυνατή η εγγραφή του απεσταλμένου αρχείου "{file}" στο δίσκο.',
       'File upload was stopped by extension.' => 'Η αποστολή του αρχείου διακόπηκε από επέκταση.',
       'Filter "{filter}" is invalid. Controller "{class}" does not have the filter method "filter{filter}".' => 'Το φίλτρο "{filter}" δεν είναι έγκυρο. Ο ελεγκτής "{class}" δεν περιέχει τη μέθοδο φίλτρου "filter{filter}".',
    +  'GD with FreeType or ImageMagick PHP extensions are required.' => 'Απαιτούνται οι PHP επεκτάσεις GD με το FreeType ή το ImageMagick.',
       'Get a new code' => 'Δημιουργία νέου κωδικού',
       'Go to page: ' => 'Μετάβαση στη σελίδα: ',
    +  'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'Προκειμένου να χρησιμοποιήσετε την επαλήθευση για τον MIME τύπο που παρέχει το CFileValidator, απαιτείται να είναι εγκατεστημένη η επέκταση PECL fileinfo.',
       'Invalid MO file revision: {revision}.' => 'Μη έγκυρος αριθμός αρχείου MO αναθεώρησης: {revision}.',
       'Invalid MO file: {file} (magic: {magic}).' => 'Μη έγκυρο αρχείο MO: {file} (magic: {magic}).',
       'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'Μη έγκυρη τιμή απαρίθμησης "{value}". Βεβαιωθείτε ότι είναι μεταξύ ({enum}).',
    @@ -144,12 +146,14 @@
       'Property CMaskedTextField.mask cannot be empty.' => 'Η ιδιότητα CMaskedTextField.mask δεν μπορεί να είναι κενή.',
       'Queue data must be an array or an object implementing Traversable.' => 'Τα δεδομένα ουράς πρέπει να είναι πίνακας ή αντικείμενο που υλοποιεί το Traversable.',
       'Relation "{name}" is not defined in active record class "{class}".' => 'Η σχέση "{name}" δεν έχει οριστεί για την active record κλάση "{class}".',
    +  'Removing a primary key after table has been created is not supported by SQLite.' => 'Η αφαίρεση πρωτεύοντος κλειδιού αφού έχει δημιουργηθεί ο πίνακας δεν υποστηρίζεται από το SQLite.',
       'Renaming a DB column is not supported by SQLite.' => 'Η μετονομασία μια στήλης πίνακα της βάσης δεδομένων δεν υποστηρίζεται από την SQLite.',
       'Stack data must be an array or an object implementing Traversable.' => 'Τα δεδομένα στοίβας πρέπει να είναι πίνακας ή αντικείμενο που υλοποιεί το Traversable.',
       'Table "{table}" does not exist.' => 'Ο πίνακας "{table}" δεν υπάρχει.',
       'Table "{table}" does not have a column named "{column}".' => 'Ο πίνακας "{table}" δεν έχει στήλη με όνομα "{column}".',
       'The "db" application component must be configured to be a CDbConnection object.' => 'Το συστατικό εφαρμογής "db" πρέπει να οριστεί ως αντικείμενο τύπου CDbConnection.',
       'The "filter" property must be specified with a valid callback.' => 'Η ιδιότητα "filter" πρέπει να οριστεί με ένα έγκυρο callback.',
    +  'The "forceCopy" and "linkAssets" cannot be both true.' => 'Τα "forceCopy" και "linkAssets" δεν μπορεί να είναι και τα δύο αληθή.',
       'The "pattern" property must be specified with a valid regular expression.' => 'Η ιδιότητα "pattern" πρέπει να οριστεί με μια έγκυρη κανονική έκφραση.',
       'The "range" property must be specified with a list of values.' => 'Η ιδιότητα "range" πρέπει να καθοριστεί με μια λίστα τιμών.',
       'The CSRF token could not be verified.' => 'Ήταν αδύνατη η επαλήθευση του συμβόλου CSRF.',
    @@ -162,6 +166,7 @@
       'The asset "{asset}" to be published does not exist.' => 'Το στοιχείο "{asset}" για δημοσίευση δεν υπάρχει.',
       'The command path "{path}" is not a valid directory.' => 'Η διαδρομή εντολής "{path}" δεν είναι έγκυρος κατάλογος.',
       'The controller path "{path}" is not a valid directory.' => 'Η διαδρομή ελεγκτή "{path}" δεν είναι έγκυρος κατάλογος.',
    +  'The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.' => 'Δεν είναι δυνατό το ανέβασμα του αρχείου "{file}". Επιτρέπονται μόνο οι παρακάτω MIME τύποι: {mimeTypes}.',
       'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'Δεν ήταν δυνατό το ανέβασμα του αρχείου "{file}". Επιτρέπονται μόνο αρχεία με τις ακόλουθες επεκτάσεις: {extensions}.',
       'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'Το αρχείο "{file}" είναι πολύ μεγάλο. Το μέγεθός του δεν μπορεί να υπερβαίνει τα {limit} bytes.',
       'The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.' => 'Το αρχείο "{file}" είναι πολύ μικρό. Το μέγεθός του δεν μπορεί να είναι μικρότερο των {limit} bytes.',
    @@ -266,5 +271,15 @@
       '{controller} cannot find the requested view "{view}".' => 'Ο ελεγκτής {controller} δεν μπορεί να βρει την καλούμενη όψη "{view}".',
       '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => 'Ο ελεγκτής {controller} περιέχει λάθος εμφωλευμένες σημάνσεις widget στην όψη "{view}". Το widget {widget} δεν περιέχει την κλήση endWidget().',
       '{controller} has an extra endWidget({id}) call in its view.' => 'Ο ελεγκτής {controller} έχει μια επιπλέον κλήση endWidget({id}) στην όψη του.',
    +  '{n} B' => '{n} B',
    +  '{n} GB' => '{n} GB',
    +  '{n} KB' => '{n} KB',
    +  '{n} MB' => '{n} MB',
    +  '{n} TB' => '{n} TB',
    +  '{n} byte|{n} bytes' => '{n} byte|{n} bytes',
    +  '{n} gigabyte|{n} gigabytes' => '{n} gigabyte|{n} gigabytes',
    +  '{n} kilobyte|{n} kilobytes' => '{n} kilobyte|{n} kilobytes',
    +  '{n} megabyte|{n} megabytes' => '{n} megabyte|{n} megabytes',
    +  '{n} terabyte|{n} terabytes' => '{n} terabyte|{n} terabytes',
       '{widget} cannot find the view "{view}".' => 'Το widget {widget} δεν μπορεί να βρει την όψη "{view}".',
     );
    diff --git a/framework/messages/el/zii.php b/framework/messages/el/zii.php
    index a3bacf301db..7c1bc16db0a 100644
    --- a/framework/messages/el/zii.php
    +++ b/framework/messages/el/zii.php
    @@ -17,7 +17,7 @@
      * NOTE, this file must be saved in UTF-8 encoding.
      */
     return array (
    -  'The property filterSelector should be defined.' => 'Πρέπει να οριστεί η ιδιότητα filterSelector.',
    +  '{class} must specify "model" and "{attribute}" or "{name}" property values.' => 'Η κλάση {class} πρέπει να ορίσει τις ιδιότητες "model" και "{attribute}" ή "{name}".',
       'Are you sure you want to delete this item?' => 'Είστε σίγουρος ότι θέλετε να διαγράψετε το αντικείμενο;',
       'Delete' => 'Διαγραφή',
       'Displaying {start}-{end} of 1 result.|Displaying {start}-{end} of {count} results.' => 'Εμφάνιση {start}-{end} από 1 αποτέλεσμα.|Εμφάνιση {start}-{end} από {count} αποτελέσματα.',
    @@ -33,9 +33,9 @@
       'The button type "{type}" is not supported.' => 'Ο τύπος κουμπιού "{type}" δεν υποστηρίζεται.',
       'The column must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.' => 'Η στήλη πρέπει να οριστεί στη μορφή "Όνομα:Τύπος:Ετικέτα", όπου "Τύπος" και "Ετικέτα" είναι προαιρετικά.',
       'The property "itemView" cannot be empty.' => 'Η ιδιότητα "itemView" δεν μπορεί να μην έχει τιμή.',
    +  'The property filterSelector should be defined.' => 'Πρέπει να οριστεί η ιδιότητα filterSelector.',
       'The property updateSelector should be defined.' => 'Πρέπει να οριστεί η ιδιότητα updateSelector.',
       'Total 1 result.|Total {count} results.' => 'Συνολικά 1 αποτέλεσμα.|Συνολικά {count} αποτελέσματα.',
       'Update' => 'Ενημέρωση',
       'View' => 'Εμφάνιση',
    -  '{class} must specify "model" and "attribute" or "name" property values.' => 'Το {class} πρέπει να ορίζει τις ιδιότητες "model" και "attribute" ή "name".',
     );
    diff --git a/framework/messages/es/yii.php b/framework/messages/es/yii.php
    index 2d1c1d7e3c7..62078fdd819 100644
    --- a/framework/messages/es/yii.php
    +++ b/framework/messages/es/yii.php
    @@ -17,197 +17,187 @@
      * NOTE, this file must be saved in UTF-8 encoding.
      */
     return array (
    -  'Action class {class} must implement the "run" method.' => 'La clase de acción {class} debe implementar el método "run".',
    -  'Adding a foreign key constraint to an existing table is not supported by SQLite.' => 'Agregar una restricción de llave foránea no es soportado por SQLite.',
    -  'Adding a primary key after table has been created is not supported by SQLite.' => 'Agregar una llave primaria después de que la tabla ha sido creada no es soportado por SQLite.',
    -  'Alias "{alias}" is invalid. Make sure it points to an existing PHP file and the file is readable.' => 'El alias "{alias}" es inválido. Asegúrese de que apunta a un archivo PHP y el archivo tiene permisos de lectura.',
    -  'Alias "{alias}" is invalid. Make sure it points to an existing directory.' => 'El alias "{alias}" es inválido. Asegúrese de que apunte a un directorio existente.',
    -  'Altering a DB column is not supported by SQLite.' => ' Alterar un columna de la BD no es soportado por SQLite.',
    -  'Application Log' => 'Registro de Aplicación',
    -  'CDbCacheDependency.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCacheDependency.connectionID "{id}" es inválido. Por favor, asegúrese de que hace referencia al ID de un componente de aplicación CDbConnection.',
    -  'CDbCommand::execute() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::execute() falló: {error}. La sentencia SQL ejecutada fue: {sql}.',
    -  'CDbCommand::{method}() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::{method}() falló: {error}. La sentencia SQL ejecutada fue: {sql}.',
    -  'CDbTestFixture.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbTestFixture.connectionID "{id}" es inválido. Por favor, asegúrese de que hace referencia al ID de un componente de aplicación CDbConnection.',
    -  'CHttpCacheFilter.lastModified contained a value that could not be understood by strtotime()' => 'CHttpCacheFilter.lastModified tuvo un valor que no pudo ser entendido por strtotime()',
    -  'CHttpSession.gcProbability "{value}" is invalid. It must be a float between 0 and 100.' => 'CHttpSession.gcProbability "{value}" es inválido. Debe ser un flotante entre 0 y 100.',
    -  'CMemCache requires PHP {extension} extension to be loaded.' => 'CMemCache requiere la extensión de PHP {extension} esté cargada.',
    -  'CTypedMap<{type}> can only hold objects of {type} class.' => 'CTypedMap<{type}> sólo puede tener objetos de clase {type}.',
    -  'CWinCache requires PHP wincache extension to be loaded.' => 'CWinCache requiere que la extensión de PHP esté cargada.',
    -  'CWinCache user cache is disabled. Please set wincache.ucenabled to On in your php.ini.' => 'La caché de usuario de CWinCache está desactivada. Por favor, cambie wincache.ucenabled a On en su php.ini.',
    -  'Class name "{class}" does not match class file "{file}".' => 'El nombre de la clase "{class}" no corresponde con la clase del archivo "{file}".',
    -  'Dropping DB column is not supported by SQLite.' => 'Eliminar columna de la BD no es soportado por SQLite.',
    -  'Dropping a foreign key constraint is not supported by SQLite.' => 'Eliminar una restricción de llave foránea no es soportado por SQLite.',
    -  'Extension path "{path}" does not exist.' => 'La ruta "{path}" de la extensión no existe.',
    -  'Failed to initialize the mcrypt module.' => 'Error al inicializar el módulo mcrypt.',
    -  'Failed to set unsafe attribute "{attribute}" of "{class}".' => 'Error al definir unsafe el atributo "{attribute}" de "{class}".',
    -  'Failed to start session.' => 'Error al iniciar sesión.',
    -  'Filter "{filter}" is invalid. Controller "{class}" does not have the filter method "filter{filter}".' => 'El filtro "{filter}" es inválido. El controlador "{class}" no contiene el método de filtro "filter{filter}".',
    -  'GD with FreeType or ImageMagick PHP extensions are required.' => 'Las extensiones de PHP GD con FreeType o ImageMagick son requeridas.',
    -  'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'Con el fin de usar la validación de tipos MIME provista por CFileValidator, la extensión de PECL fileinfo debe estar instalada.',
    -  'Invalid expression for CHttpCacheFilter.lastModifiedExpression: The evaluation result "{value}" could not be understood by strtotime()' => 'Expresión inválida para CHttpCacheFilter.lastModifiedExpression: El resultado de la evaluación "{value}" no pudo ser entendido por strtotime()',
    -  'Invalid operator "{operator}".' => 'Operador inválido "{operator}".',
    -  'Powered by {yii}.' => 'Potenciado por {yii}.',
    -  'Property CMaskedTextField.mask cannot be empty.' => 'La propiedad CMaskedTextField.mask no puede estar vacía.',
    -  'Removing a primary key after table has been created is not supported by SQLite.' => 'Remover una llave primaria después de que una tabla ha sido creada, no es soportado por SQLite.',
    -  'Renaming a DB column is not supported by SQLite.' => 'Renombrar una columna de la BD no es soportado por SQLite.',
    -  'The "db" application component must be configured to be a CDbConnection object.' => 'El componente de la aplicación "db" debe estar configurado para ser un objeto CDbConnection.',
    -  'The "range" property must be specified with a list of values.' => 'La propiedad "range" debe ser especificada con una lista de valores.',
    -  'The DB query must contain the "from" portion.' => 'La consulta de BD debe contener la parte "from".',
    -  'The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.' => 'El archivo "{file}" no puede ser subido. Solo los archivos de estos tipo MIME están permitidos: {mimeTypes}.',
    -  'The format of {attribute} is invalid.' => 'El formato de {attribute} es inválido.',
    -  'The pattern for day of the week must be "E", "EE", "EEE", "EEEE", "EEEEE", "e", "ee", "eee", "eeee", "eeeee", "c", "cccc" or "ccccc".' => 'El patrón para el día de la semana de ser "E", "EE", "EEE", "EEEE", "EEEEE", "e", "ee", "eee", "eeee", "eeeee", "c", "cccc" o "ccccc".',
    -  'The pattern for month must be "M", "MM", "MMM", "MMMM", "L", "LL", "LLL" or "LLLL".' => 'El patrón para mes debe ser "M", "MM", "MMM", "MMMM", "L", "LL", "LLL" o "LLLL".',
    -  'The requested view "{name}" was not found.' => 'La vista solicitada "{name}" no fue encontrada.',
    -  'Unable to find "{column}" in table "{table}".' => 'No se ha podido encontrar "{column}" in la tabla "{table}".',
    -  'Unknown operator "{operator}".' => 'Operador desconocido "{operator}".',
    -  'Unknown type "{type}".' => 'Tipo desconocido "{type}".',
    -  'Your request is invalid.' => 'Su solicitud es inválida.',
    -  '{attribute} cannot accept more than {limit} files.' => '{attribute} no puede aceptar más de {limit} archivos.',
    -  '{attribute} is in the list.' => '{attribute} está en la lista.',
    -  '{attribute} must be {value}.' => '{attribute} debe ser {value}.',
    -  '{attribute} must not be equal to "{compareValue}".' => '{attribute} no debe ser igual a "{compareValue}".',
    -  '{className} does not support flushValues() functionality.' => '{className} no soporta la funcionalidad flushValues().',
    -  '{class} and its behaviors do not have a method or closure named "{name}".' => '{class} y sus behaviors no tienen un método o closure llamado "{name}".',
    -  '{n} B' => '{n} B',
    -  '{n} GB' => '{n} GB',
    -  '{n} KB' => '{n} KB',
    -  '{n} MB' => '{n} MB',
    -  '{n} TB' => '{n} TB',
    -  '{n} byte|{n} bytes' => '{n} byte|{n} bytes',
    -  '{n} gigabyte|{n} gigabytes' => '{n} gigabyte|{n} gigabytes',
    -  '{n} kilobyte|{n} kilobytes' => '{n} kilobyte|{n} kilobytes',
    -  '{n} megabyte|{n} megabytes' => '{n} megabyte|{n} megabytes',
    -  '{n} terabyte|{n} terabytes' => '{n} terabyte|{n} terabytes',
       '"{path}" is not a valid directory.' => '"{path}" no es un directorio válido.',
       '< Previous' => '< Anterior',
       '<< First' => '<< Primero',
    +  'Action class {class} must implement the "run" method.' => 'La clase de acción {class} debe implementar el método "run".',
       'Active Record requires a "db" CDbConnection application component.' => 'Active Record requiere un componente de aplicación "db" del tipo CDbConnection.',
    -  '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.' => 'Active record "{class}" contiene una configuración de relación inválida "{relation}". La misma debe especificar el tipo de relación, la clase active record relacionada y la clave foranea.',
    -  '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.' => 'Active record "{class}" esta intentando de seleccionar una columna inválida "{column}". Nota: La columna puede existir en la base o ser una expresion con alias.',
    -  'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Alias "{alias}" es inválido. Verifique que el mismo apunta a un directorio o archivo exisitente.',
    -  'Application base path "{path}" is not a valid directory.' => 'Ruta base de la aplicación "{path}" no es un directorio válido.',
    -  'Application runtime path "{path}" is not valid. Please make sure it is a directory writable by the Web server process.' => 'Ruta de runtime de aplicación "{path}" es inválida. Verifique que sea un directorio con permisos de escritura por el proceso que corre el servidor Web.',
    -  'Authorization item "{item}" has already been assigned to user "{user}".' => 'Elemento de autorización "{item}" ha sido asignado al usuario "{user}".',
    +  '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.' => 'La clase Active Record "{class}" contiene una configuración inválida para la relación "{relation}". La misma debe especificar el tipo de relación, la clase active record relacionada y la clave foránea.',
    +  '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.' => 'La clase Active record "{class}" esta intentando seleccionar una columna inválida "{column}". Nota: la columna debe existir en la tabla o ser una expresion con alias.',
    +  'Adding a foreign key constraint to an existing table is not supported by SQLite.' => 'Agregar una restricción de clave foránea a una tabla existente no es soportado por SQLite.',
    +  'Adding a primary key after table has been created is not supported by SQLite.' => 'Agregar una clave primaria después de que la tabla ha sido creada no es soportado por SQLite.',
    +  'Alias "{alias}" is invalid. Make sure it points to an existing PHP file and the file is readable.' => 'El alias "{alias}" es inválido. Asegúrese de que apunta a un archivo PHP existente y que el archivo tiene permisos de lectura.',
    +  'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'El alias "{alias}" es inválido. Asegúrese de que apunta a un directorio o archivo existente.',
    +  'Alias "{alias}" is invalid. Make sure it points to an existing directory.' => 'El alias "{alias}" es inválido. Asegúrese de que apunta a un directorio existente.',
    +  'Altering a DB column is not supported by SQLite.' => 'Alterar una columna de la BD no esta soportado por SQLite.',
    +  'Application Log' => 'Registro de Aplicación',
    +  'Application base path "{path}" is not a valid directory.' => 'La ruta base de la aplicación "{path}" no es un directorio válido.',
    +  'Application runtime path "{path}" is not valid. Please make sure it is a directory writable by the Web server process.' => 'La ruta de tiempo de ejecución de la aplicación "{path}" es inválida. Por favor asegúrese de que sea un directorio con permisos de escritura por el proceso que corre el servidor Web.',
    +  'Authorization item "{item}" has already been assigned to user "{user}".' => 'El elemento de autorización "{item}" ya ha sido asignado con anterioridad al usuario "{user}".',
       'Base path "{path}" is not a valid directory.' => 'La ruta base "{path}" no es un directorio válido',
       'CApcCache requires PHP apc extension to be loaded.' => 'CApcCache requiere que la extensión apc de PHP se encuentre cargada.',
    -  'CAssetManager.basePath "{path}" is invalid. Please make sure the directory exists and is writable by the Web server process.' => 'CAssetManager.basePath "{path}" es inválido. Verifique que el directorio exista y tenga permisos de escritura por el proceso que corre el servidor Web.',
    -  'CCacheHttpSession.cacheID is invalid. Please make sure "{id}" refers to a valid cache application component.' => 'CCacheHttpSession.cacheID es inválido. Asegurese que "{id}" refiere a un componente de aplicación de cache válido.',
    -  'CCaptchaValidator.action "{id}" is invalid. Unable to find such an action in the current controller.' => 'CCaptchaValidator.action "{id}" es inválido. No se há podido encontrar dicha acción en el controlador actual.',
    -  'CDbAuthManager.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbAuthManager.connectionID "{id}" es inválido. Asegurese que se refiere a un ID de un componente de aplicación CDbConnection.',
    -  'CDbCache.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCache.connectionID "{id}" es inválido. Asegurese que refiera a un ID de un componente de aplicación CDbConnection.',
    +  'CAssetManager.basePath "{path}" is invalid. Please make sure the directory exists and is writable by the Web server process.' => 'CAssetManager.basePath "{path}" es inválido. Asegúrese que el directorio exista y tenga permisos de escritura por el proceso que corre el servidor Web.',
    +  'CCacheHttpSession.cacheID is invalid. Please make sure "{id}" refers to a valid cache application component.' => 'CCacheHttpSession.cacheID es inválido. Por favor, asegúrese que "{id}" hace referencia a un componente de aplicación de cache válido.',
    +  'CCaptchaValidator.action "{id}" is invalid. Unable to find such an action in the current controller.' => 'CCaptchaValidator.action "{id}" es inválido. No se ha podido encontrar dicha acción en el controlador actual.',
    +  'CDbAuthManager.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbAuthManager.connectionID "{id}" es inválido. Por favor, asegúrese de que hace referencia a un ID de un componente de aplicación CDbConnection.',
    +  'CDbCache.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCache.connectionID "{id}" es inválido. Por favor, asegúrese de que hace referencia a un ID de un componente de aplicación CDbConnection.',
    +  'CDbCacheDependency.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCacheDependency.connectionID "{id}" es inválido. Por favor, asegúrese de que hace referencia al ID de un componente de aplicación CDbConnection.',
       'CDbCacheDependency.sql cannot be empty.' => 'CDbCacheDependency.sql no puede ser vacío.',
       'CDbCommand failed to execute the SQL statement: {error}' => 'CDbCommand falló al ejecutar la sentencia SQL: {error}',
       'CDbCommand failed to prepare the SQL statement: {error}' => 'CDbCommand falló al preparar la sentencia SQL: {error}',
    +  'CDbCommand::execute() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::execute() falló: {error}. La sentencia SQL ejecutada fue: {sql}.',
    +  'CDbCommand::{method}() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::{method}() falló: {error}. La sentencia SQL ejecutada fue: {sql}.',
       'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection no soporta la lectura del esquema para la base de datos {driver}.',
    -  'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader no puede volver atras ya que es un lector de un avance únicamente.',
    -  'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" es inválido. Asegurese que refiera a un ID de un componente de aplicación CDbConnection',
    -  'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" no refiere a un componente de aplicación CDbConnection válido.',
    -  'CDbMessageSource.connectionID is invalid. Please make sure "{id}" refers to a valid database application component.' => 'CDbMessageSource.connectionID es inválido. Asegurese que "{id}" refiera a un componente de aplicación de base de datos válido.',
    -  'CDbTransaction is inactive and cannot perform commit or roll back operations.' => 'CDbTransaction se encuentra inactiva y no puede realizar la operación commit ni roll back.',
    +  'CDbConnection failed to open the DB connection.' => 'CDbConnection falló al abrir la conexión con la BD',
    +  'CDbConnection is unable to find PDO class "{className}". Make sure PDO is installed correctly.' => 'CDbConnection no puede encontrar la clase PDO "{className}". Asegúrate de que PDO esté instalado correctamente',
    +  'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader no puede rebobinar. Se trata de un lector de solo avance.',
    +  'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" es inválido. Por favor, asegúrese de que hace referencia a un ID de un componente de aplicación CDbConnection',
    +  'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" no hace referencia a un componente de aplicación CDbConnection válido.',
    +  'CDbMessageSource.connectionID is invalid. Please make sure "{id}" refers to a valid database application component.' => 'CDbMessageSource.connectionID es inválido. Por favor, asegúrese que "{id}" hace referencia a un componente de aplicación de base de datos válido.',
    +  'CDbTestFixture.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbTestFixture.connectionID "{id}" es inválido. Por favor, asegúrese de que hace referencia al ID de un componente de aplicación CDbConnection.',
    +  'CDbTransaction is inactive and cannot perform commit or roll back operations.' => 'CDbTransaction se encuentra inactiva y no puede realizar las operacines commit ni roll back.',
       'CDirectoryCacheDependency.directory cannot be empty.' => 'CDirectoryCacheDependency.directory no puede ser vacío.',
    -  'CEAcceleratorCache requires PHP eAccelerator extension to be loaded, enabled or compiled with the "--with-eaccelerator-shared-memory" option.' => 'CEAcceleratorCache requiere la extensión eAccelerator de PHP para ser cargada, activada o cargada con la opción "--with-eaccelerator-shared-memory".',
    +  'CEAcceleratorCache requires PHP eAccelerator extension to be loaded, enabled or compiled with the "--with-eaccelerator-shared-memory" option.' => 'CEAcceleratorCache requiere que la extensión eAccelerator de PHP esté cargada, activada o compilada con la opción "--with-eaccelerator-shared-memory".',
       'CFileCacheDependency.fileName cannot be empty.' => 'CFileCacheDependency.fileName no puede ser vacío.',
    -  '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}" no apunta a un directorio válido. Verifique que el directorio exista y tenga permisos de escritura por el proceso que corre el servidor Web.',
    -  'CFilterChain can only take objects implementing the IFilter interface.' => 'CFilterChain solamente puede tomar objetos que implementen la interface IFilter.',
    +  '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}" no apunta a un directorio válido. Asegúrese que el directorio exista y tenga permisos de escritura por el proceso que corre el servidor Web.',
    +  'CFilterChain can only take objects implementing the IFilter interface.' => 'CFilterChain solamente puede tomar objetos que implementen la interfaz IFilter.',
       'CFlexWidget.baseUrl cannot be empty.' => 'CFlexWidget.baseUrl no puede ser vacío.',
       'CFlexWidget.name cannot be empty.' => 'CFlexWidget.name no puede ser vacío.',
       'CGlobalStateCacheDependency.stateName cannot be empty.' => 'CGlobalStateCacheDependency.stateName no puede ser vacío.',
    +  'CHttpCacheFilter.lastModified contained a value that could not be understood by strtotime()' => 'CHttpCacheFilter.lastModified tuvo un valor que no pudo ser entendido por strtotime()',
       'CHttpCookieCollection can only hold CHttpCookie objects.' => 'CHttpCookieCollection solo puede contener objetos CHttpCookie.',
    -  'CHttpRequest is unable to determine the entry script URL.' => 'CHttpRequest no puede determinar la URL de su script de entrada.',
    +  'CHttpRequest is unable to determine the entry script URL.' => 'CHttpRequest no puede determinar la URL del script de entrada.',
       'CHttpRequest is unable to determine the path info of the request.' => 'CHttpRequest no puede determinar la información de la ruta de la solicitud.',
    -  'CHttpRequest is unable to determine the request URI.' => 'CHttpRequest no puede derminar la URI solicitada',
    -  'CHttpSession.cookieMode can only be "none", "allow" or "only".' => 'CHttpSession.cookieMode solo puede ser "none", "allow" ó "only".',
    +  'CHttpRequest is unable to determine the request URI.' => 'CHttpRequest no puede derminar la URI de la solicitud.',
    +  'CHttpSession.cookieMode can only be "none", "allow" or "only".' => 'CHttpSession.cookieMode solo puede ser "none", "allow" u "only".',
    +  'CHttpSession.gcProbability "{value}" is invalid. It must be a float between 0 and 100.' => 'CHttpSession.gcProbability "{value}" es inválido. Debe ser un flotante entre 0 y 100.',
       'CHttpSession.savePath "{path}" is not a valid directory.' => 'CHttpSession.savePath "{path}" no es un directorio válido.',
    +  'CMemCache requires PHP {extension} extension to be loaded.' => 'CMemCache requiere que la extensión de PHP {extension} esté cargada.',
       'CMemCache server configuration must be an array.' => 'La configuración del servidor CMemCache debe ser un array.',
       'CMemCache server configuration must have "host" value.' => 'La configuración del servidor CMemCache debe contener un "host".',
    -  'CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.' => 'CProfileLogRoute ha encontrado un bloque de código "{token}" desalineado. Asegurese que las llamadas a Yii::beginProfile() y a Yii::endProfile() esten correctamente anidadas.',
    -  'CProfileLogRoute.report "{report}" is invalid. Valid values include "summary" and "callstack".' => 'CProfileLogRoute.report "{report}" es inválido. Los valores validos son "summary" y "callstack".',
    -  'CSecurityManager requires PHP mcrypt extension to be loaded in order to use data encryption feature.' => 'CSecurityManager requiere que la extensión mcrypt de PHP sea cargada para utilizar la opción de encriptación de datos.',
    +  'CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.' => 'CProfileLogRoute ha encontrado un bloque de código "{token}" no coincidente. Asegúrese que las llamadas a Yii::beginProfile() y a Yii::endProfile() esten correctamente anidadas.',
    +  'CProfileLogRoute.report "{report}" is invalid. Valid values include "summary" and "callstack".' => 'CProfileLogRoute.report "{report}" es inválido. Los valores válidos son "summary" y "callstack".',
    +  'CSecurityManager requires PHP mcrypt extension to be loaded in order to use data encryption feature.' => 'CSecurityManager requiere que la extensión mcrypt de PHP esté cargada para utilizar la característica de encriptación de datos.',
       'CSecurityManager.encryptionKey cannot be empty.' => 'CSecurityManager.encryptionKey no puede ser vacío.',
       'CSecurityManager.validationKey cannot be empty.' => 'CSecurityManager.validationKey no puede ser vacío.',
    +  'CSecurityManager::generateRandomString() cannot generate random string in the current environment.' => 'CSecurityManager::generateRandomString() no puede generar una cadena aleatoria en el entorno actual.',
       'CTypedList<{type}> can only hold objects of {type} class.' => 'CTypedList<{type}> solo puede contener objetos de la clase {type}.',
    +  'CTypedMap<{type}> can only hold objects of {type} class.' => 'CTypedMap<{type}> solo puede tener objetos de clase {type}.',
       'CUrlManager.UrlFormat must be either "path" or "get".' => 'CUrlManager.UrlFormat debe ser "path" o "get".',
    -  'CXCache requires PHP XCache extension to be loaded.' => 'CXCache requiere la extensión XCache de PHP para ser cargado',
    -  'CZendDataCache requires PHP Zend Data Cache extension to be loaded.' => 'CZendDataCache requiere la extensión PHP Zend Data Cache para poder ser cargada.',
    -  'Cannot add "{child}" as a child of "{name}". A loop has been detected.' => 'No se puede agregar "{child}" como hijo de "{name}". Un ciclo infinito se há detectado.',
    -  'Cannot add "{child}" as a child of "{parent}". A loop has been detected.' => 'No se puede agregar "{child}" como hijo de "{parent}". Un ciclo infinito se há detectado.',
    +  'CWinCache requires PHP wincache extension to be loaded.' => 'CWinCache requiere que la extensión wincache de PHP esté cargada.',
    +  'CWinCache user cache is disabled. Please set wincache.ucenabled to On in your php.ini.' => 'La caché de usuario de CWinCache está desactivada. Por favor, cambie wincache.ucenabled a On en su php.ini.',
    +  'CXCache requires PHP XCache extension to be loaded.' => 'CXCache requiere que la extensión XCache de PHP esté cargada.',
    +  'CZendDataCache requires PHP Zend Data Cache extension to be loaded.' => 'CZendDataCache requiere que la extensión PHP Zend Data Cache esté cargada.',
    +  'Cannot add "{child}" as a child of "{name}". A loop has been detected.' => 'No se puede agregar "{child}" como hijo de "{name}". Un ciclo infinito se ha detectado.',
    +  'Cannot add "{child}" as a child of "{parent}". A loop has been detected.' => 'No se puede agregar "{child}" como hijo de "{parent}". Un ciclo infinito se ha detectado.',
       'Cannot add "{name}" as a child of itself.' => 'No se puede agregar "{name}" como hijo de sí mismo.',
    -  'Cannot add an item of type "{child}" to an item of type "{parent}".' => 'No se le puede agregar un elemento del tipo "{child}" a otro del tipo "{parent}".',
    +  'Cannot add an item of type "{child}" to an item of type "{parent}".' => 'No se puede agregar un elemento del tipo "{child}" a un elemento del tipo "{parent}".',
    +  'Cannot hash a password that is empty or not a string.' => 'No se puede generar un hash de un password que es vacío o que no es una cadena',
    +  'Class name "{class}" does not match class file "{file}".' => 'El nombre de la clase "{class}" no coincide con el archivo de la clase "{file}".',
       'Column name must be either a string or an array.' => 'El nombre de la columna debe ser una cadena o un array.',
    -  'Either "{parent}" or "{child}" does not exist.' => '"{parent}" o "{child}" es inexistente',
    +  'Dropping DB column is not supported by SQLite.' => 'La eliminación de columnas de BD no es soportado por SQLite.',
    +  'Dropping a foreign key constraint is not supported by SQLite.' => 'La eliminación de una restricción de clave foránea no es soportado por SQLite.',
    +  'Either "{parent}" or "{child}" does not exist.' => 'No existe "{parent}" ni "{child}"',
       'Error: Table "{table}" does not have a primary key.' => 'Error: Tabla "{table}" no tiene una clave primaria.',
       'Error: Table "{table}" has a composite primary key which is not supported by crud command.' => 'Error: Tabla "{table}" tiene una clave primaria compuesta que no es soportada por el comando crud.',
       'Event "{class}.{event}" is attached with an invalid handler "{handler}".' => 'Evento "{class}"."{event}" tiene asociado un manejador "{handler}" inválido.',
       'Event "{class}.{event}" is not defined.' => 'Evento "{class}"."{event}" no se encuentra definido.',
    -  'Failed to write the uploaded file "{file}" to disk.' => 'Error al escribir el archivo subido "{file}" al disco.',
    -  'File upload was stopped by extension.' => 'El upload de archivo fue terminado debido a su extensión.',
    +  'Extension path "{path}" does not exist.' => 'La ruta "{path}" de la extensión no existe.',
    +  'Failed to initialize the mcrypt module.' => 'Error al inicializar el módulo mcrypt.',
    +  'Failed to set unsafe attribute "{attribute}" of "{class}".' => 'Error al establecer unsafe al atributo "{attribute}" de "{class}".',
    +  'Failed to start session.' => 'Error al iniciar sesión.',
    +  'Failed to write the uploaded file "{file}" to disk.' => 'No se pudo escribir el archivo subido "{file}" en el disco',
    +  'File upload was stopped by extension.' => 'La subida del archivo fue detenida debido a una extensión PHP.',
    +  'Filter "{filter}" is invalid. Controller "{class}" does not have the filter method "filter{filter}".' => 'El filtro "{filter}" es inválido. El controlador "{class}" no contiene el método de filtro "filter{filter}".',
    +  'GD with FreeType or ImageMagick PHP extensions are required.' => 'Las extensiones de PHP GD con FreeType o ImageMagick son requeridas.',
       'Get a new code' => 'Obtenga un nuevo código',
       'Go to page: ' => 'Ir a página: ',
    +  'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'Con el fin de usar la validación de tipos MIME provista por CFileValidator, la extensión de PECL fileinfo debe estar instalada.',
    +  'Internal error while generating hash.' => 'Hubo un error interno al generar el hash',
       'Invalid MO file revision: {revision}.' => 'Revisión de archivo MO inválido: {revision}.',
       'Invalid MO file: {file} (magic: {magic}).' => 'Archivo MO inválido: {file} (magic: {magic}).',
    -  'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'Valor de enumerador inválido "{value}". Asegurese que este entre ({enum}).',
    +  'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'Valor de enumerador inválido "{value}". Asegúrese que este entre ({enum}).',
    +  'Invalid expression for CHttpCacheFilter.lastModifiedExpression: The evaluation result "{value}" could not be understood by strtotime()' => 'Expresión inválida para CHttpCacheFilter.lastModifiedExpression: El resultado de la evaluación "{value}" no pudo ser entendido por strtotime()',
    +  'Invalid operator "{operator}".' => 'Operador inválido "{operator}".',
       'Last >>' => 'Último >>',
    -  'List data must be an array or an object implementing Traversable.' => 'Los datos de la lista deben ser un array o un objeto que implemento Traversable.',
    -  'List index "{index}" is out of bound.' => 'Indice de la lista "{index}" esta fuera del limite.',
    -  'Login Required' => 'Iniciar sesión requerido.',
    -  'Map data must be an array or an object implementing Traversable.' => 'Los datos del mapa deben ser un array o un objeto que implemento Traversable',
    -  'Missing the temporary folder to store the uploaded file "{file}".' => 'La carpeta temoporaria para guardar el archivo subido "{file}" no se encuentra.',
    +  'List data must be an array or an object implementing Traversable.' => 'Los datos de la lista deben ser un array o un objeto que implemente Traversable.',
    +  'List index "{index}" is out of bound.' => 'El índice de la lista "{index}" está fuera del límite.',
    +  'Login Required' => 'Inicio de sesión necesario',
    +  'Map data must be an array or an object implementing Traversable.' => 'Los datos del mapa deben ser un array o un objeto que implementa Traversable',
    +  'Missing the temporary folder to store the uploaded file "{file}".' => 'No se encuentra la carpeta temoporaria para almacenar el archivo subido "{file}".',
       'Next >' => 'Siguiente >',
    +  'No' => 'No',
       'No columns are being updated for table "{table}".' => 'No se actualizó ninguna columna para la tabla "{table}".',
       'No counter columns are being updated for table "{table}".' => 'Ningun contador de columnas ha sido actualizado para la tabla "{table}".',
       'Object configuration must be an array containing a "class" element.' => 'La configuración del objeto debe ser un array conteniendo un elemento "class".',
    +  'Only SHA1 and MD5 hashing algorithms are supported when using PHP 5.1.1 or below.' => 'Solo los algoritmos de hash SHA1 y MD5 son soportados cuando se usa PHP 5.1.1 o menor',
       'Please fix the following input errors:' => 'Por favor corrija los siguientes errores de ingreso:',
    -  'Property "{class}.{property}" is not defined.' => 'Propiedad "{class}"."{property}" no se encuentra definida.',
    -  'Property "{class}.{property}" is read only.' => 'Propiedad "{class}"."{property}" es de solo lectura..',
    -  'Queue data must be an array or an object implementing Traversable.' => 'Los datos de la cola deben ser un array o un objeto que implemento Traversable',
    +  'Powered by {yii}.' => 'Potenciado por {yii}.',
    +  'Property "{class}.{property}" is not defined.' => 'La propiedad "{class}"."{property}" no se encuentra definida.',
    +  'Property "{class}.{property}" is read only.' => 'La propiedad "{class}"."{property}" es de solo lectura..',
    +  'Property CMaskedTextField.mask cannot be empty.' => 'La propiedad CMaskedTextField.mask no puede estar vacía.',
    +  'Queue data must be an array or an object implementing Traversable.' => 'Los datos de la cola deben ser un array o un objeto que implementa Traversable',
       'Relation "{name}" is not defined in active record class "{class}".' => 'La relación "{name}" no se encuentra definida en la clase active record "{class}".',
    -  'Stack data must be an array or an object implementing Traversable.' => 'Los datos de la pila deben ser un array o un objeto que implemento Traversable',
    +  'Removing a primary key after table has been created is not supported by SQLite.' => 'Remover una clave primaria después de que una tabla ha sido creada, no es soportado por SQLite.',
    +  'Renaming a DB column is not supported by SQLite.' => 'Renombrar una columna de la BD no es soportado por SQLite.',
    +  'Script HTML options are not allowed for "CClientScript::POS_LOAD" and "CClientScript::POS_READY".' => 'Las opciones de Script de HTML no son permitidas para "CClientScript::POS_LOAD" ni "CClientScript::POS_READY".',
    +  'Stack data must be an array or an object implementing Traversable.' => 'Los datos de la pila deben ser un array o un objeto que implementa Traversable',
       'Table "{table}" does not exist.' => 'La tabla "{table}" no existe.',
    -  'Table "{table}" does not have a column named "{column}".' => 'Tabla "{table}" no contiene la columna "{column}".',
    +  'Table "{table}" does not have a column named "{column}".' => 'Tabla "{table}" no contiene la columna con nombre "{column}".',
    +  'The "db" application component must be configured to be a CDbConnection object.' => 'El componente de la aplicación "db" debe estar configurado para ser un objeto CDbConnection.',
       'The "filter" property must be specified with a valid callback.' => 'La propiedad "filter" debe ser especificada con un callback válido.',
    +  'The "forceCopy" and "linkAssets" cannot be both true.' => 'Los parámetros "forceCopy" y "linkAssets" no pueden ser a la vez verdaderos',
       'The "pattern" property must be specified with a valid regular expression.' => 'La propiedad "pattern" debe ser especificada con una expresión regular válida.',
    -  'The CSRF token could not be verified.' => 'Su token CSRF no puede ser verificado.',
    +  'The "range" property must be specified with a list of values.' => 'La propiedad "range" debe ser especificada con una lista de valores.',
    +  'The $converter argument must be a valid callback or null.' => 'El argumento $converter debe tener un callback válido o nulo',
    +  'The CSRF token could not be verified.' => 'El token CSRF no puede ser verificado.',
    +  'The DB query must contain the "from" portion.' => 'La consulta de BD debe contener la parte "from".',
       'The STAT relation "{name}" cannot have child relations.' => 'La relación STAT "{name}" no puede tener relaciones hijas.',
       'The URL pattern "{pattern}" for route "{route}" is not a valid regular expression.' => 'El patrón de URL "{pattern}" para la ruta "{route}" no es una expresión regular válida.',
       'The active record cannot be deleted because it is new.' => 'El active record no puede ser eliminado porque es nuevo.',
       'The active record cannot be inserted to database because it is not new.' => 'El active record no puede ser insertado a la base de datos porque no es nuevo.',
       'The active record cannot be updated because it is new.' => 'El active record no puede ser actualizado porque es nuevo.',
       'The asset "{asset}" to be published does not exist.' => 'El asset "{asset} a ser publicado no existe.',
    -  'The command path "{path}" is not a valid directory.' => 'La ruta de comando "{path}" no es un directorio válido.',
    +  'The command path "{path}" is not a valid directory.' => 'La ruta del comando "{path}" no es un directorio válido.',
       'The controller path "{path}" is not a valid directory.' => 'La ruta del controlador "{path}" no es un directorio válido.',
    +  'The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.' => 'El archivo "{file}" no puede ser subido. Solo los archivos de estos tipo MIME están permitidos: {mimeTypes}.',
       'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'El archivo "{file}" no puede ser subido. Solo los archivos con estas extensiones son permitidos: {extensions}.',
       'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'El archivo "{file}" es muy grande. Su tamaño no puede exceder {limit} bytes.',
       'The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.' => 'El archivo "{file}" es muy chico. Su tamaño no puede ser menor que {limit} bytes.',
       'The file "{file}" was only partially uploaded.' => 'El archivo "{file}" ha sido subido parcialmente.',
       'The first element in a filter configuration must be the filter class.' => 'El primer elemento en la configuración de un filtro debe ser la clase del filtro.',
    +  'The format of {attribute} is invalid.' => 'El formato de {attribute} es inválido.',
       'The item "{name}" does not exist.' => 'El elemento "{name}" es inexistente.',
       'The item "{parent}" already has a child "{child}".' => 'El elemento "{parent}" ya contiene un hijo "{child}".',
    -  'The layout path "{path}" is not a valid directory.' => 'La ruta de esquema "{path}" no es un directorio válido.',
    +  'The layout path "{path}" is not a valid directory.' => 'La ruta del diseño "{path}" no es un directorio válido.',
       'The list is read only.' => 'La lista es de solo lectura',
       'The map is read only.' => 'El mapa es de solo lectura',
       'The module path "{path}" is not a valid directory.' => 'La ruta del módulo "{path}" no es un directorio válido.',
    -  'The pattern for 12 hour format must be "h" or "hh".' => 'El patrón para hora en formato 12 debe ser "h" ó "hh".',
    -  'The pattern for 24 hour format must be "H" or "HH".' => 'El patrón para hora en formato 24 debe ser "H" ó "HH".',
    +  'The pattern for 12 hour format must be "h" or "hh".' => 'El patrón para hora en formato 12 debe ser "h" o "hh".',
    +  'The pattern for 24 hour format must be "H" or "HH".' => 'El patrón para hora en formato 24 debe ser "H" o "HH".',
       'The pattern for AM/PM marker must be "a".' => 'El patrón para el marcador AM/PM debe ser "a".',
    -  'The pattern for day in month must be "F".' => 'El patrón para día del mes debe ser "F".',
    -  'The pattern for day in year must be "D", "DD" or "DDD".' => 'El patrón para día del año debe ser "D", "DD", "DDD".',
    -  'The pattern for day of the month must be "d" or "dd".' => 'El patrón para día debe ser "d" ó "dd".',
    -  'The pattern for era must be "G", "GG", "GGG", "GGGG" or "GGGGG".' => 'El patrón para era debe ser "G", "GG", "GGG", "GGGG" ó "GGGGG".',
    -  'The pattern for hour in AM/PM must be "K" or "KK".' => 'El patrón para hora en AM/PM debe ser "K" ó "KK".',
    -  'The pattern for hour in day must be "k" or "kk".' => 'El patrón para hora del día debe ser "k" ó "kk".',
    -  'The pattern for minutes must be "m" or "mm".' => 'El patrón para minutos debe ser "m" ó "mm".',
    -  'The pattern for seconds must be "s" or "ss".' => 'El patrón para segundos debe ser "s" ó "ss".',
    -  'The pattern for time zone must be "z" or "v".' => 'El patrón para zona horaria debe ser "z" ó "v".',
    +  'The pattern for day in month must be "F".' => 'El patrón para día en el mes debe ser "F".',
    +  'The pattern for day in year must be "D", "DD" or "DDD".' => 'El patrón para día en el año debe ser "D", "DD", "DDD".',
    +  'The pattern for day of the month must be "d" or "dd".' => 'El patrón para día del mes debe ser "d" o "dd".',
    +  'The pattern for day of the week must be "E", "EE", "EEE", "EEEE", "EEEEE", "e", "ee", "eee", "eeee", "eeeee", "c", "cccc" or "ccccc".' => 'El patrón para el día de la semana de ser "E", "EE", "EEE", "EEEE", "EEEEE", "e", "ee", "eee", "eeee", "eeeee", "c", "cccc" o "ccccc".',
    +  'The pattern for era must be "G", "GG", "GGG", "GGGG" or "GGGGG".' => 'El patrón para era debe ser "G", "GG", "GGG", "GGGG" o "GGGGG".',
    +  'The pattern for hour in AM/PM must be "K" or "KK".' => 'El patrón para hora en AM/PM debe ser "K" o "KK".',
    +  'The pattern for hour in day must be "k" or "kk".' => 'El patrón para hora del día debe ser "k" o "kk".',
    +  'The pattern for minutes must be "m" or "mm".' => 'El patrón para minutos debe ser "m" o "mm".',
    +  'The pattern for month must be "M", "MM", "MMM", "MMMM", "L", "LL", "LLL" or "LLLL".' => 'El patrón para mes debe ser "M", "MM", "MMM", "MMMM", "L", "LL", "LLL" o "LLLL".',
    +  'The pattern for seconds must be "s" or "ss".' => 'El patrón para segundos debe ser "s" o "ss".',
    +  'The pattern for time zone must be "z" or "v".' => 'El patrón para zona horaria debe ser "z" o "v".',
       'The pattern for week in month must be "W".' => 'El patron para semana del mes debe ser "W".',
       'The pattern for week in year must be "w".' => 'El patrón para semana del año debe ser "w".',
       'The queue is empty.' => 'La cola está vacía',
    -  '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 relación "{relation}" en la clase de registro activo "{class}" está especificada correctamente. La tabla de unión o join "{joinTable}" dada en la llave foránea no se encuentra en la base de datos.',
    -  '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 relación "{relation}" en la clase active record "{class}" no se encuentra especificada correctamente: La tabla de junta (join table) "{joinTable}" dada no se encontro en la base de datos.',
    -  '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 relación "{relation}" en la clase de registro activo "{class}" es especificada con una llave foránea "{key}" que no apunta a la tabla padre "{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 relación "{relation}" en la clase active record "{class}" se encuentra especificada con una clave foranea incompleta. La clave foranea debe consistir de las columnas que referencian la junta de tablas.',
    -  '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 relación "{relation}" en la clase de registro activo "{class}" es especificada con una llave foránea inválida "{key}". No hay tal columna en la tabla "{table}".',
    -  '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}".' => 'La relación "{relation}" en la clase de registro activo "{class}" es especificada con una llave foránea inválida. Las columnas en la llave deben coincidir con las llaves primarias de la tabla "{table}".',
    +  '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 relación "{relation}" en la clase active record "{class}" no se encuentra especificada correctamente. La tabla de combinacion "{joinTable}" dada en la clave foránea no se encuentra en la base de datos.',
    +  '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 relación "{relation}" en la clase active record "{class}" no se encuentra especificada correctamente: la tabla de combinacion "{joinTable}" dada en la clave foránea no se encuentra en la base de datos.',
    +  '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 relación "{relation}" en la clase active record "{class}" es especificada con una clave foránea "{key}" que no apunta a la tabla padre "{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 relación "{relation}" en la clase active record "{class}" se encuentra especificada con una clave foranea incompleta. La clave foranea debe consistir de las columnas que referencian la combinación de tablas.',
    +  '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 relación "{relation}" en la clase active record "{class}" es especificada con una clave foránea inválida "{key}". No hay tal columna en la tabla "{table}".',
    +  '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}".' => 'La relación "{relation}" en la clase active record "{class}" es especificada con una clave foránea inválida. Las columnas en la clave deben coincidir con las claves primarias de la tabla "{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,...)".' => 'La relación "{relation}" en la clase active record "{class}" se encuentra especificada con una clave foranea inválida. El formato de la clave foranea debe ser "joinTable(fk1,fk2,...)".',
    +  'The requested view "{name}" was not found.' => 'La vista solicitada "{name}" no fue encontrada.',
       'The stack is empty.' => 'La pila está vacía',
       'The system is unable to find the requested action "{action}".' => 'El sistema no ha podido encontrar la acción "{action}" solicitada.',
       'The system view path "{path}" is not a valid directory.' => 'La ruta de vistas de sistema "{path}" no es un directorio válido.',
    @@ -216,27 +206,35 @@
       'The verification code is incorrect.' => 'El código de verificación es incorrecto.',
       'The view path "{path}" is not a valid directory.' => 'La ruta de la vista "{path}" no es un directorio válido.',
       'Theme directory "{directory}" does not exist.' => 'El directorio de tema "{directory}" no existe.',
    -  'This content requires the Adobe Flash Player.' => 'Este contenido requiere el Adobe Flash Player.',
    +  'This content requires the Adobe Flash Player.' => 'Este contenido requiere el Reproductor de Adobe Flash.',
       'Unable to add an item whose name is the same as an existing item.' => 'No se puede agregar un elemento cuyo nombre es el mismo que el de un elemento existente.',
       'Unable to change the item name. The name "{name}" is already used by another item.' => 'No se puede modificar el nombre del elemento. El nombre "{name}" ya se encuentra utilizado por otro elemento.',
    -  'Unable to create application state file "{file}". Make sure the directory containing the file exists and is writable by the Web server process.' => 'No se ha podido crear el archivo de estado de aplicación "{file}". Asegurese que el directorio que contiene el archivo exista y sea un directorio con permisos de escritura por el proceso que corre el servidor Web.',
    -  'Unable to lock file "{file}" for reading.' => 'No se há podido bloquear el archivo "{file}" para lectura.',
    +  'Unable to create application state file "{file}". Make sure the directory containing the file exists and is writable by the Web server process.' => 'No se ha podido crear el archivo de estado de aplicación "{file}". Asegúrese que el directorio que contiene el archivo exista y sea un directorio con permisos de escritura por el proceso que corre el servidor Web.',
    +  'Unable to find "{column}" in table "{table}".' => 'No se ha podido encontrar "{column}" en la tabla "{table}".',
    +  'Unable to generate random string.' => 'No se puede generar una cadena aleatoria.',
    +  'Unable to lock file "{file}" for reading.' => 'No se ha podido bloquear el archivo "{file}" para lectura.',
       'Unable to lock file "{file}" for writing.' => 'No se ha podido bloquear el archivo "{file}" para escritura.',
       'Unable to read file "{file}".' => 'No se ha podido leer el archivo "{file}".',
    -  'Unable to replay the action "{object}.{method}". The method does not exist.' => 'Imposible de replicar la acción "{object}.{method}". El metodo es inexistente.',
    +  'Unable to replay the action "{object}.{method}". The method does not exist.' => 'No se puede reproducir la acción "{object}.{method}". El método es inexistente.',
       'Unable to resolve the request "{route}".' => 'No es posible resolver la solicitud "{route}"',
       'Unable to write file "{file}".' => 'No se ha podido escribir el archivo "{file}".',
       'Unknown authorization item "{name}".' => 'Elemento de autorización "{name}" desconocido.',
    -  'Unrecognized locale "{locale}".' => 'Localizacion no reconocida "{locale}".',
    +  'Unknown operator "{operator}".' => 'Operador desconocido "{operator}".',
    +  'Unknown type "{type}".' => 'Tipo desconocido "{type}".',
    +  'Unrecognized locale "{locale}".' => 'Configuración regional no reconocida "{locale}".',
       'View file "{file}" does not exist.' => 'El archivo de vista "{view}" no existe.',
    -  'Yii application can only be created once.' => 'Solo se puede crear una aplicación Yii.',
    +  'Yes' => 'Si',
    +  'Yii application can only be created once.' => 'La aplicación Yii puede ser creada solo una vez.',
       'You are not authorized to perform this action.' => 'Usted no se encuentra autorizado a realizar esta acción.',
    +  'Your request is invalid.' => 'Su solicitud es inválida.',
       '{attribute} "{value}" has already been taken.' => '{attribute} "{value}" ya ha sido tomado.',
       '{attribute} "{value}" is invalid.' => '{attribute} "{value}" es inválido.',
    +  '{attribute} cannot accept more than {limit} files.' => '{attribute} no puede aceptar más de {limit} archivos.',
       '{attribute} cannot be blank.' => '{attribute} no puede ser nulo.',
    +  '{attribute} is in the list.' => '{attribute} está en la lista.',
       '{attribute} is invalid.' => '{attribute} es inválido.',
       '{attribute} is not a valid URL.' => '{attribute} no es una URL válida.',
    -  '{attribute} is not a valid email address.' => '{attribute} no es un email válido.',
    +  '{attribute} is not a valid email address.' => '{attribute} no es una dirección de email válida.',
       '{attribute} is not in the list.' => '{attribute} no se encuentra en la lista.',
       '{attribute} is of the wrong length (should be {length} characters).' => '{attribute} tiene un largo incorrecto (debe ser de {length} caracteres)',
       '{attribute} is too big (maximum is {max}).' => '{attribute} es muy grande (el máximo es {max}).',
    @@ -252,18 +250,36 @@
       '{attribute} must be less than or equal to "{compareValue}".' => '{attribute} debe ser menor o igual que "{compareValue}".',
       '{attribute} must be repeated exactly.' => '{attribute} debe ser repetido exactamente.',
       '{attribute} must be {type}.' => '{attribute} debe ser {type}.',
    +  '{attribute} must be {value}.' => '{attribute} debe ser {value}.',
    +  '{attribute} must not be equal to "{compareValue}".' => '{attribute} no debe ser igual a "{compareValue}".',
       '{className} does not support add() functionality.' => '{className} no soporta la funcionalidad add().',
       '{className} does not support delete() functionality.' => '{className} no soporta la funcionalidad delete().',
    +  '{className} does not support flushValues() functionality.' => '{className} no soporta la funcionalidad flushValues().',
       '{className} does not support get() functionality.' => '{className} no soporta la funcionalidad get().',
       '{className} does not support set() functionality.' => '{className} no soporta la funcionalidad set().',
    +  '{class} and its behaviors do not have a method or closure named "{name}".' => '{class} y sus behaviors no tienen un método o closure llamado "{name}".',
       '{class} does not have relation "{name}".' => '{class} no tiene la relación "{name}".',
       '{class} does not support fetching all table names.' => '{class} no soporta traer todos los nombres de las tablas.',
       '{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => '{class} tiene una regla de validación inválida. La regla se debe especificar attributos para ser validados y el nombre de su validador.',
       '{class} must specify "model" and "attribute" or "name" property values.' => '{class} debe especificar los valores de propiedad "model" y "attribute" o "name".',
    -  '{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => '{class}.allowAutoLogin debe ser asignado verdadero para poder utilizar la autenticación basada en cookies.',
    -  '{class}::authenticate() must be implemented.' => '{class}::authenticate() debe ser implementad.',
    +  '{class} requires the Blowfish option of the PHP crypt() function. This system does not have it.' => '{class} requiere la opción Blowfish de la función PHP crypt(). Este sistema no la tiene.',
    +  '{class} requires the PHP crypt() function. This system does not have it.' => '{class} requiere la función PHP crypt(). Este sistema no la tiene.',
    +  '{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => '{class}.allowAutoLogin debe ser asignado true para poder utilizar la autenticación basada en cookies.',
    +  '{class}::$cost must be a number.' => '{class}::$cost debe ser un número.',
    +  '{class}::$cost must be between 4 and 31.' => '{class}::$cost debe estar entre 4 y 31.',
    +  '{class}::authenticate() must be implemented.' => '{class}::authenticate() debe ser implementada.',
       '{controller} cannot find the requested view "{view}".' => '{controller} no ha podido encontrar la vista "{view}" solicitada.',
    -  '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => '{controller} contiene etiquetas de widget en la vista "{view}" anidados incorrectamente. {widget} widget no contiene la llamada a endWidget().',
    +  '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => '{controller} contiene etiquetas de widget en la vista "{view}" anidadas incorrectamente. {widget} widget no contiene la llamada a endWidget().',
       '{controller} has an extra endWidget({id}) call in its view.' => '{controller} tiene una llamada extra a endWidget({id}) en su vista.',
    +  '{n} B' => '{n} B',
    +  '{n} GB' => '{n} GB',
    +  '{n} KB' => '{n} KB',
    +  '{n} MB' => '{n} MB',
    +  '{n} TB' => '{n} TB',
    +  '{n} byte|{n} bytes' => '{n} byte|{n} bytes',
    +  '{n} gigabyte|{n} gigabytes' => '{n} gigabyte|{n} gigabytes',
    +  '{n} kilobyte|{n} kilobytes' => '{n} kilobyte|{n} kilobytes',
    +  '{n} megabyte|{n} megabytes' => '{n} megabyte|{n} megabytes',
    +  '{n} terabyte|{n} terabytes' => '{n} terabyte|{n} terabytes',
       '{widget} cannot find the view "{view}".' => '{widget} no ha podido encontrar la vista "{view}".',
     );
    diff --git a/framework/messages/es/zii.php b/framework/messages/es/zii.php
    index 1f61ca66cbd..15984ad7eb7 100644
    --- a/framework/messages/es/zii.php
    +++ b/framework/messages/es/zii.php
    @@ -17,25 +17,25 @@
      * NOTE, this file must be saved in UTF-8 encoding.
      */
     return array (
    -  'Home' => 'Home',
    -  'The button type "{type}" is not supported.' => 'El tipo de botón "{type}" no es soportado.',
    -  'The property filterSelector should be defined.' => 'La propiedad filterSelector debería estar definida.',
    -  'The property updateSelector should be defined.' => 'La propiedad updateSelector debería estar definida.',
    -  'Are you sure you want to delete this item?' => 'Seguro que desea borrar este elemento?',
    +  'Are you sure you want to delete this item?' => '¿Está seguro que desea borrar este elemento?',
       'Delete' => 'Borrar',
    -  'Displaying {start}-{end} of 1 result.|Displaying {start}-{end} of {count} results.' => 'Desplegando {start}-{end} de 1 resultado.|Desplegando {start}-{end} de {count} resultados.',
    -  'Either "name" or "value" must be specified for CDataColumn.' => '"name" o "value" deben especificarse para CDataColumn.',
    +  'Displaying {start}-{end} of 1 result.|Displaying {start}-{end} of {count} results.' => 'Viendo {start}-{end} de 1 resultado.|Viendo {start}-{end} de {count} resultados.',
    +  'Either "name" or "value" must be specified for CDataColumn.' => 'Deben especificarse ya sea "name" o "value" para CDataColumn.',
    +  'Home' => 'Inicio',
       'No results found.' => 'No se encontraron resultados.',
       'Not set' => 'No asignado',
    -  'Please specify the "attributes" property.' => 'Favor de especificar la propiedad "attributes".',
    -  'Please specify the "data" property.' => 'Favor de especificar la propiedad "data".',
    +  'Please specify the "attributes" property.' => 'Por favor especifique la propiedad "attributes".',
    +  'Please specify the "data" property.' => 'Por favor especifique la propiedad "data".',
       'Sort by: ' => 'Ordenar por: ',
       'The "dataProvider" property cannot be empty.' => 'La propiedad "dataProvider" no puede estar vacia.',
       'The attribute must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.' => 'El atributo debe especificarse en el formato "Nombre:Tipo:Etiqueta", donde "Tipo" y "Etiqueta" son opcionales.',
    +  'The button type "{type}" is not supported.' => 'El tipo de botón "{type}" no es soportado.',
       'The column must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.' => 'La columna debe especificarse en el formato "Nombre:Tipo:Etiqueta", donde "Tipo" y "Etiqueta" son opcionales.',
       'The property "itemView" cannot be empty.' => 'La propiedad "itemView" no puede estar vacia.',
    +  'The property filterSelector should be defined.' => 'La propiedad filterSelector debería estar definida.',
    +  'The property updateSelector should be defined.' => 'La propiedad updateSelector debería estar definida.',
       'Total 1 result.|Total {count} results.' => 'Total de 1 resultado.|Total de {count} resultados.',
    -  'Update' => 'Actualiza',
    -  'View' => 'Mostrar',
    -  '{class} must specify "model" and "attribute" or "name" property values.' => '{class} debe especificar valor/es para "model" y "atributte" o para "name".',
    +  'Update' => 'Actualizar',
    +  'View' => 'Ver',
    +  '{class} must specify "model" and "{attribute}" or "{name}" property values.' => '{class} debe especificar valores para las propiedades "model" y "{attribute}" o para "{name}".',
     );
    diff --git a/framework/messages/fa_ir/yii.php b/framework/messages/fa_ir/yii.php
    index 573fc3c30d5..4a5c965a00d 100644
    --- a/framework/messages/fa_ir/yii.php
    +++ b/framework/messages/fa_ir/yii.php
    @@ -17,44 +17,44 @@
      */
     return array (
       'Active record class "{class}" does not have a scope named "{scope}".' => 'اکتیو رکورد با نام کلاس {class} اسکوپی با نام  {scope} ندارد.',
    -  '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.' => 'اکتیو رکورد "{class}" پیکربندی معتبر برای رابطه "{relation}" دارد.باید نوع رابطه ، کلاس اکتیو رکورد مرتبط و کلید خارجی را مشخص کند',
    +  '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.' => 'اکتیو رکورد "{class}" پیکربندی معتبر برای رابطه "{relation}" دارد.باید نوع رابطه ، کلاس اکتیو رکورد مرتبط و کلید خارجی را مشخص کند.',
       '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.' => 'اکتیو رکورد "{class}" سعی می کند ستون نامعتبر "{column}" را انتخاب کند.',
    -  'Active Record requires a "db" CDbConnection application component.' => ' اکتیو رکورد نیاز به یک کامپوننت اپلیکیشن "db" CDbConnection دارد',
    -  'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Alias "{alias}" نامعتبر است .اطمینان حاصل کنید به یک فابل یا دایرکتوری موجو اشاره می کند',
    -  'Application base path "{path}" is not a valid directory.' => 'مسیر بیس اپلیکیشن "{path}" دایرکتوری معتبری نمی باشد',
    -  'Application runtime path "{path}" is not valid. Please make sure it is a directory writable by the Web server process.' => 'مسیر زمان اجرا اپلیکیشن معتبر نیست. اطمینان حاصل کنید این دایرکتوری قابل نوشتن توسط وب سرور می باشد',
    -  '{attribute} cannot be blank.' => '{attribute} نمی تواند خالی باشد',
    -  '{attribute} is invalid.' => '{attribute} نا معتبر است',
    -  '{attribute} is not a valid email address.' => '{attribute} یک آدرس ایمیل معتبر نمی باشد',
    -  '{attribute} is not a valid URL.' => '{attribute} یک URL معتبر نمی باشد',
    -  '{attribute} is not in the list.' => '{attribute} در لیست نیست',
    +  'Active Record requires a "db" CDbConnection application component.' => ' اکتیو رکورد نیاز به یک کامپوننت اپلیکیشن "db" CDbConnection دارد.',
    +  'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Alias "{alias}" نامعتبر است .اطمینان حاصل کنید به یک فابل یا دایرکتوری موجو اشاره می کند.',
    +  'Application base path "{path}" is not a valid directory.' => 'مسیر بیس اپلیکیشن "{path}" دایرکتوری معتبری نمی باشد.',
    +  'Application runtime path "{path}" is not valid. Please make sure it is a directory writable by the Web server process.' => 'مسیر زمان اجرا اپلیکیشن معتبر نیست. اطمینان حاصل کنید این دایرکتوری قابل نوشتن توسط وب سرور می باشد.',
    +  '{attribute} cannot be blank.' => '{attribute} نمی تواند خالی باشد.',
    +  '{attribute} is invalid.' => '{attribute} نامعتبر است.',
    +  '{attribute} is not a valid email address.' => '{attribute} یک آدرس ایمیل معتبر نمی باشد.',
    +  '{attribute} is not a valid URL.' => '{attribute} یک URL معتبر نمی باشد.',
    +  '{attribute} is not in the list.' => '{attribute} در لیست نیست.',
       '{attribute} is of the wrong length (should be {length} characters).' => '{attribute} دارای طول اشتباه است ( باشدcharacters {length} باید)',
       '{attribute} is too big (maximum is {max}).' => '{attribute} بسیار بزرگ است. ({max}حداکثر)',
       '{attribute} is too long (maximum is {max} characters).' => '{attribute} بسیار طویل است. (می باشد {max}حداکثر کاراکتر)',
    -  '{attribute} is too short (minimum is {min} characters).' => '{attribute} بسیار کوتاه است (می باشد {min} حداقل کاراکتر )',
    -  '{attribute} is too small (minimum is {min}).' => '{attribute} بسیار کوچک است.(می باشد {min}حداقل) ',
    -  '{attribute} must be an integer.' => '  integer باشدباید {attribute}',
    -  '{attribute} must be a number.' => '{attribute} باید عدد باشد',
    -  '{attribute} must be either {true} or {false}.' => '{attribute} باید {true} یا {false} باشد',
    -  '{attribute} must be greater than "{compareValue}".' => '{attribute} باید از "{compareValue}" بزرگتر باشد',
    -  '{attribute} must be greater than or equal to "{compareValue}".' => '{attribute} باید بزرگتر مساوی "{compareValue}" باشد',
    -  '{attribute} must be less than "{compareValue}".' => '{attribute} باید کوچکتر از "{compareValue}" باشد',
    -  '{attribute} must be less than or equal to "{compareValue}".' => '{attribute} باید کوچکتر مساوی "{compareValue}" باشد',
    -  '{attribute} must be repeated exactly.' => '{attribute} باید دقیقا تکرار شود',
    -  '{attribute} must be {type}.' => '{attribute} باید {type} باشد',
    -  '{attribute} must be {value}.' => '{attribute} باید {value} باشد',
    -  '{attribute} must not be equal to "{compareValue}".' => '{attribute} نباید مساوی "{compareValue}" باشد',
    -  '{attribute} "{value}" has already been taken.' => '{attribute} "{value}" در حال حاضر گرفته شده است',
    -  '{attribute} "{value}" is invalid.' => '{attribute} "{value}" نا معتبر است',
    -  'Authorization item "{item}" has already been assigned to user "{user}".' => 'آیتم مجوز "{item}" قبلا به کاربر "{user}" اختصاص یافته است',
    +  '{attribute} is too short (minimum is {min} characters).' => '{attribute} بسیار کوتاه است (می باشد {min} حداقل کاراکتر)',
    +  '{attribute} is too small (minimum is {min}).' => '{attribute} بسیار کوچک است.(می باشد {min}حداقل)',
    +  '{attribute} must be an integer.' => '  integer باشدباید {attribute}.',
    +  '{attribute} must be a number.' => '{attribute} باید عدد باشد.',
    +  '{attribute} must be either {true} or {false}.' => '{attribute} باید {true} یا {false} باشد.',
    +  '{attribute} must be greater than "{compareValue}".' => '{attribute} باید از "{compareValue}" بزرگتر باشد.',
    +  '{attribute} must be greater than or equal to "{compareValue}".' => '{attribute} باید بزرگتر مساوی "{compareValue}" باشد.',
    +  '{attribute} must be less than "{compareValue}".' => '{attribute} باید کوچکتر از "{compareValue}" باشد.',
    +  '{attribute} must be less than or equal to "{compareValue}".' => '{attribute} باید کوچکتر مساوی "{compareValue}" باشد.',
    +  '{attribute} must be repeated exactly.' => '{attribute} باید دقیقا تکرار شود.',
    +  '{attribute} must be {type}.' => '{attribute} باید {type} باشد.',
    +  '{attribute} must be {value}.' => '{attribute} باید {value} باشد.',
    +  '{attribute} must not be equal to "{compareValue}".' => '{attribute} نباید مساوی "{compareValue}" باشد.',
    +  '{attribute} "{value}" has already been taken.' => '{attribute} "{value}" در حال حاضر گرفته شده است.',
    +  '{attribute} "{value}" is invalid.' => '{attribute} "{value}" نامعتبر است.',
    +  'Authorization item "{item}" has already been assigned to user "{user}".' => 'آیتم مجوز "{item}" قبلا به کاربر "{user}" اختصاص یافته است.',
       'Base path "{path}" is not a valid directory.' => 'Base path "{path}" دایرکتوری معتبری نمی باشد',
       'Cannot add an item of type "{child}" to an item of type "{parent}".' => ' نمی توان آیتم از نوع "{child}" "{parent}" اضافه کرد را نمی توان به آیتم از نوع  ',
       'Cannot add "{child}" as a child of "{name}". A loop has been detected.' => 'نمی توان "{child}" را به عنوان چایلدی از "{name}" اضافه کرد. لوپ شناسایی شده است',
       'Cannot add "{child}" as a child of "{parent}". A loop has been detected.' => 'نمی توان "{child}" را به عنوان چایلدی از "{parent}" اضافه کرد. لوپ شناسایی شد',
       'Cannot add "{name}" as a child of itself.' => 'نمی توان "{name}" را به عنوان چایلد خودش اضافه کرد',
       'CApcCache requires PHP apc extension to be loaded.' => 'CApcCache نیاز به PHP apc extension دارد برای لود شدن',
    -  'CAssetManager.basePath "{path}" is invalid. Please make sure the directory exists and is writable by the Web server process.' => 'CAssetManager.basePath "{path}" نا معتبر می باشد.اطمینان حاصل کنید که دایرکتوری وجود دارد و قابل نوشتن توسط وب سرور می باشد',
    -  'CCacheHttpSession.cacheID is invalid. Please make sure "{id}" refers to a valid cache application component.' => 'CCacheHttpSession.cacheID نا معتبر است.اطمینان حاصل کنید مه "{id}" به کامپوننت اپلیکیشن کش معتبر ارجاع داده می شود',
    +  'CAssetManager.basePath "{path}" is invalid. Please make sure the directory exists and is writable by the Web server process.' => 'CAssetManager.basePath "{path}" نامعتبر می باشد.اطمینان حاصل کنید که دایرکتوری وجود دارد و قابل نوشتن توسط وب سرور می باشد',
    +  'CCacheHttpSession.cacheID is invalid. Please make sure "{id}" refers to a valid cache application component.' => 'CCacheHttpSession.cacheID نامعتبر است.اطمینان حاصل کنید مه "{id}" به کامپوننت اپلیکیشن کش معتبر ارجاع داده می شود',
       'CCaptchaValidator.action "{id}" is invalid. Unable to find such an action in the current controller.' => 'CCaptchaValidator.action "{id}" نامعتبر است.قادر به یافتن این عمل در کنترلر جاری نمی باشد',
       'CDbAuthManager.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbAuthManager.connectionID "{id}" ID ازنامعتبر است. اطمینان حاصل کنید که بهCDbConnection application component اشاره می کند ',
       'CDbCache.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCache.connectionID "{id}" نامعتبر است.',
    @@ -87,9 +87,9 @@
       'CHttpSession.savePath "{path}" is not a valid directory.' => 'CHttpSession.savePath "{path}" دایرکتوری معتبری نیست',
       '{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => '{class}.allowAutoLogin باید true باشد به منظور استفاده از cookie-based authentication',
       '{class}::authenticate() must be implemented.' => '{class}::authenticate() باید اجرا شود',
    -  '{class} does not have a method named "{name}".' => '{class} متدی با نام "{name}" ندارد',
    -  '{class} does not have relation "{name}".' => '{class}  رابطه "{name}" ندارد',
    -  '{class} does not support fetching all table names.' => '{class} دریافتهمه نامهای جدول را ساپورت نمی کند',
    +  '{class} does not have a method named "{name}".' => '{class} متدی با نام "{name}" ندارد.',
    +  '{class} does not have relation "{name}".' => '{class}  رابطه "{name}" ندارد.',
    +  '{class} does not support fetching all table names.' => '{class} دریافت همه نامهای جدول را ساپورت نمی کند.',
       '{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => '',
       '{class} must specify "model" and "attribute" or "name" property values.' => '',
       '{className} does not support add() functionality.' => '{className} عملکرد add() را پشتیبانی نمی کند',
    @@ -118,21 +118,21 @@
       'Either "{parent}" or "{child}" does not exist.' => '"{parent}" یا "{child}" وجود ندارد',
       'Error: Table "{table}" does not have a primary key.' => ' جدول "{table}" کلید اصلی ندارد: خطا',
       'Error: Table "{table}" has a composite primary key which is not supported by crud command.' => 'جدول "{table}" کلید اصلی مرکب دارد که توسط  : خطا crud command پشتیبانی نمی شود',
    -  'Event "{class}.{event}" is attached with an invalid handler "{handler}".' => 'ایونت "{class}.{event}" پیوست هندلر نا معتبر "{handler}" است',
    +  'Event "{class}.{event}" is attached with an invalid handler "{handler}".' => 'ایونت "{class}.{event}" پیوست هندلر نامعتبر "{handler}" است',
       'Event "{class}.{event}" is not defined.' => 'ایونت "{class}.{event}" تعریف شده نیست',
       'Extension path "{path}" does not exist.' => 'مسیر اکستنشن "{path}" وجود ندارد',
       'Failed to write the uploaded file "{file}" to disk.' => 'خطا در نوشتن فایل آپلود شده "{file}" بر روی دیسک',
       'File upload was stopped by extension.' => 'آپلود فایل توسط اکستنشن متوقف شد',
    -  'Filter "{filter}" is invalid. Controller "{class}" does have the filter method "filter{filter}".' => 'فیلتر "{filter}" نا معتبر است.کنترلر "{class}" دارای متد فیلتر  "filter{filter}" می باشد',
    +  'Filter "{filter}" is invalid. Controller "{class}" does have the filter method "filter{filter}".' => 'فیلتر "{filter}" نامعتبر است.کنترلر "{class}" دارای متد فیلتر  "filter{filter}" می باشد',
       'Get a new code' => 'کد جدید ایجاد کنید',
    -  'Go to page: ' => ' :برو به صفحه',
    -  'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'مقدار شمارش نامعتبر "{value}". اطمینان حاصل کنید که در میان ({enum}) می باشد',
    -  'Invalid MO file: {file} (magic: {magic}).' => 'فایل MO نا معتبر : {file} (magic: {magic}) ',
    +  'Go to page: ' => 'برو به صفحه: ',
    +  'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'مقدار شمارش نامعتبر "{value}". اطمینان حاصل کنید که در میان ({enum}) می باشد.',
    +  'Invalid MO file: {file} (magic: {magic}).' => 'فایل MO نامعتبر : {file} (magic: {magic})',
       'Invalid MO file revision: {revision}.' => 'ورژن فایل MO غیر معتبر:{revision}',
       'Invalid operator "{operator}".' => 'اپراتور غیر معتبر"{operator}"',
       'Last >>' => 'آخرین >>',
       'List data must be an array or an object implementing Traversable.' => 'List data باید یک array یا object باشد برای اجرای Traversable',
    -  'List index "{index}" is out of bound.' => 'ایندکس لیست خارج از محدوده میباشد',
    +  'List index "{index}" is out of bound.' => 'ایندکس لیست خارج از محدوده میباشد.',
       'Login Required' => 'ورود به سیستم لازم می باشد',
       '<< First' => '<<اول',
       '< Previous' => '<قبلی',
    @@ -142,11 +142,11 @@
       'No columns are being updated for table "{table}".' => 'هیچ ستونی برای جدول "{table}" آپدیت نمی شود',
       'No counter columns are being updated for table "{table}".' => 'هیچ counter columns در حال آپدیت برای جدول counter columns نمی باشد',
       'Object configuration must be an array containing a "class" element.' => 'پیکربندی abject باید آرایه ای شامل "class" باشد',
    -  '"{path}" is not a valid directory.' => '"{path}" دایرکتوری معتبر نیست',
    +  '"{path}" is not a valid directory.' => '"{path}" دایرکتوری معتبر نیست.',
       'Please fix the following input errors:' => 'لطفا خطاهای ورودی زیر را تصحیح کنید :',
    -  'Property "{class}.{property}" is not defined.' => 'ویژگیهای "{class}.{property}" تعریف نشده است',
    -  'Property "{class}.{property}" is read only.' => 'ویژگیهای "{class}.{property}" فقط قابل خواندن است',
    -  '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.',
    +  'Property "{class}.{property}" is not defined.' => 'ویژگیهای "{class}.{property}" تعریف نشده است.',
    +  'Property "{class}.{property}" is read only.' => 'ویژگیهای "{class}.{property}" فقط قابل خواندن است.',
    +  'Queue data must be an array or an object implementing Traversable.' => '',
       'Relation "{name}" is not defined in active record class "{class}".' => 'رابطه "{name}" در کلاس اکتیو رکورد "{class}" تعریف شده نمی باشد',
       'Stack data must be an array or an object implementing Traversable.' => '',
       'Table "{table}" does not exist.' => 'جدول "{table}" وجود ندارد',
    @@ -166,29 +166,29 @@
       'The first element in a filter configuration must be the filter class.' => 'اولین عنصر در پیکربندی  فیلتر باید کلاس فیلتر باشد',
       'The item "{name}" does not exist.' => 'آیتم "{name}" موجود نمی باشد',
       'The item "{parent}" already has a child "{child}".' => 'آیتم "{parent}" در حال حاضر چایلد "{child}" دارد',
    -  'The layout path "{path}" is not a valid directory.' => 'مسیر لی اوت دایرکتوری معتبری نمی باشد',
    -  'The list is read only.' => 'لیست فقط قابل خواندن می باشد',
    -  'The map is read only.' => 'نقشه فقط قابل خواندن می باشد',
    -  'Theme directory "{directory}" does not exist.' => 'دایرکتوری تم "{directory}" وجود ندارد',
    -  'The module path "{path}" is not a valid directory.' => 'مسیر ماژول "{path}" دایرکتوری معتبر نمی باشد',
    -  'The pattern for 12 hour format must be "h" or "hh".' => 'الگو برای فرمت 12 ساعت باید "h" یا "hh" باشد',
    -  'The pattern for 24 hour format must be "H" or "HH".' => 'الگو برای 24 ساعت باید "H" یا "HH" باشد',
    -  'The pattern for AM/PM marker must be "a".' => 'الگو برای AM/PM باید "a" باشد',
    -  'The pattern for day in month must be "F".' => 'الگو برای روز در ماه باید "F" باشد',
    -  'The pattern for day in year must be "D", "DD" or "DDD".' => 'الگو برای روز در سال باید "D", "DD" یا "DDD" باشد',
    -  'The pattern for day of the month must be "d" or "dd".' => 'الگو برای روز در ماه باید "d" یا "dd" باشد ',
    -  'The pattern for day of the week must be "E", "EE", "EEE", "EEEE" or "EEEEE".' => 'الگو برای روزدر هفته باید "E", "EE", "EEE", "EEEE" یا "EEEEE" باشد',
    -  'The pattern for era must be "G", "GG", "GGG", "GGGG" or "GGGGG".' => 'الگو برای era باید "G", "GG", "GGG", "GGGG" یا "GGGGG" باشد',
    -  'The pattern for hour in AM/PM must be "K" or "KK".' => 'الگو باری ساعت در AM/PM باید "K" یا "KK" باشد',
    -  'The pattern for hour in day must be "k" or "kk".' => 'الگو برای ساعت  در روز باید "k" یا "kk" باشد',
    -  'The pattern for minutes must be "m" or "mm".' => 'الگو برای دقیقه باید "mm" یا "m" باشد',
    -  'The pattern for month must be "M", "MM", "MMM", or "MMMM".' => 'الگو برای ماه باید "M", "MM", "MMM", با "MMMM"',
    -  'The pattern for seconds must be "s" or "ss".' => 'الگو برای ثانیه باید "s" یا "ss" باشد',
    -  'The pattern for time zone must be "z" or "v".' => 'الگو برای تایم زون باید "z" یا "v" باشد',
    -  'The pattern for week in month must be "W".' => 'الگوی برای هفتهدر ماه باید "w" باشد',
    -  'The pattern for week in year must be "w".' => 'الگوی هفته در سال باید "w" باشد ',
    -  'The "pattern" property must be specified with a valid regular expression.' => 'خصوصیات "pattern" باید با عبارت خاصی مشخص شود',
    -  'The queue is empty.' => 'کیو خالی است',
    +  'The layout path "{path}" is not a valid directory.' => 'مسیر لی اوت دایرکتوری معتبری نمی باشد.',
    +  'The list is read only.' => 'لیست فقط قابل خواندن می باشد.',
    +  'The map is read only.' => 'نقشه فقط قابل خواندن می باشد.',
    +  'Theme directory "{directory}" does not exist.' => 'دایرکتوری تم "{directory}" وجود ندارد.',
    +  'The module path "{path}" is not a valid directory.' => 'مسیر ماژول "{path}" دایرکتوری معتبر نمی باشد.',
    +  'The pattern for 12 hour format must be "h" or "hh".' => 'الگو برای فرمت 12 ساعت باید "h" یا "hh" باشد.',
    +  'The pattern for 24 hour format must be "H" or "HH".' => 'الگو برای 24 ساعت باید "H" یا "HH" باشد.',
    +  'The pattern for AM/PM marker must be "a".' => 'الگو برای AM/PM باید "a" باشد.',
    +  'The pattern for day in month must be "F".' => 'الگو برای روز در ماه باید "F" باشد.',
    +  'The pattern for day in year must be "D", "DD" or "DDD".' => 'الگو برای روز در سال باید "D", "DD" یا "DDD" باشد.',
    +  'The pattern for day of the month must be "d" or "dd".' => 'الگو برای روز در ماه باید "d" یا "dd" باشد.',
    +  'The pattern for day of the week must be "E", "EE", "EEE", "EEEE" or "EEEEE".' => 'الگو برای روزدر هفته باید "E", "EE", "EEE", "EEEE" یا "EEEEE" باشد.',
    +  'The pattern for era must be "G", "GG", "GGG", "GGGG" or "GGGGG".' => 'الگو برای era باید "G", "GG", "GGG", "GGGG" یا "GGGGG" باشد.',
    +  'The pattern for hour in AM/PM must be "K" or "KK".' => 'الگو باری ساعت در AM/PM باید "K" یا "KK" باشد.',
    +  'The pattern for hour in day must be "k" or "kk".' => 'الگو برای ساعت  در روز باید "k" یا "kk" باشد.',
    +  'The pattern for minutes must be "m" or "mm".' => 'الگو برای دقیقه باید "mm" یا "m" باشد.',
    +  'The pattern for month must be "M", "MM", "MMM", or "MMMM".' => 'الگو برای ماه باید "M", "MM", "MMM", با "MMMM" باشد.',
    +  'The pattern for seconds must be "s" or "ss".' => 'الگو برای ثانیه باید "s" یا "ss" باشد.',
    +  'The pattern for time zone must be "z" or "v".' => 'الگو برای تایم زون باید "z" یا "v" باشد.',
    +  'The pattern for week in month must be "W".' => 'الگوی برای هفته در ماه باید "w" باشد.',
    +  'The pattern for week in year must be "w".' => 'الگوی هفته در سال باید "w" باشد.',
    +  'The "pattern" property must be specified with a valid regular expression.' => 'خصوصیات "pattern" باید با عبارت با قاعده مشخص شود.',
    +  'The queue is empty.' => 'کیو خالی است.',
       '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.' => 'رابطه "{relation}" در اکتیو رکورد کلاس "{class}" به درستی مشخص نشده است. جوین تیبل "{joinTable}" داده شده در کلید خارجی در پایگاه د اده یافت نمی شود',
       '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.' => 'رابطه "{relation}" در اکتیو رکورد کلاس "{class}" به درستی مشخص نشده است. join table "{joinTable}" داده شده در کلید خارجی در پایگاه داده یافت نمی شود',
       'The relation "{relation}" in active record class "{class}" is specified with a foreign key "{key}" that does not point to the parent table "{table}".' => 'رابطه "{relation}" در اکتیو رکورد کلاس "{class}" با کلید خارجی "{key}"مشخص شده است که به جدول اصلی اشاره نمی کند "{table}"',
    @@ -197,20 +197,20 @@
       '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}".' => 'رابطه "{relation}" در اکتیو رکورد کلاس "{class}" توسط کلید خارجی "{key}" مشخص شده است.چنین ستونی در جدول "{table}"موجود نمی باشد',
       '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}".' => 'رابطه "{relation}" در اکتیو رکورد کلاس "{class}" توسط کلید خارجی مشخص شده است. ستونهای کلید باید مطابق با کلید اصلی جدول "{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,...)".' => 'رابطه "{relation}" با کلاس اکتیو رکورد "{class}"  با کلید خارجی  نامعتبری مشخض شده است . قالب کلید خارجی باید به صورت "joinTable(fk1,fk2,...)" باشد.',
    -  'The requested view "{name}" is not found.' => 'ظاهر در خواست داده شده با نام "{name}" موجود نمی باشد.',
    +  'The requested view "{name}" is not found.' => 'نمای در خواست داده شده با نام "{name}" موجود نمی باشد.',
       'The stack is empty.' => 'استک خالی است.',
       'The STAT relation "{name}" cannot have child relations.' => 'رابطه STAT با نام "{name}"  امکان داشتن رابطه فرزندی را ندارد.',
    -  'The system is unable to find the requested action "{action}".' => 'سیستم توانایی یافتن عمل  "{action}" را ندارد.',
    -  'The system view path "{path}" is not a valid directory.' => 'مسیر ظاهر سیستم "{path}" دایرکتوری معتبری نیست',
    +  'The system is unable to find the requested action "{action}".' => 'سیستم توانایی یافتن عمل "{action}" را ندارد.',
    +  'The system view path "{path}" is not a valid directory.' => 'مسیر نمای سیستم "{path}" دایرکتوری معتبری نیست.',
       'The table "{table}" for active record class "{class}" cannot be found in the database.' => 'جدول "{table}" برای اکتیو رکورد کلاس "{class}" در پایگاه اطلاعاتی یافت نمی شود',
       'The URL pattern "{pattern}" for route "{route}" is not a valid regular expression.' => 'الگوی URL"{pattern}" برای مسیر یابی "{route}"   عبارت با قاعده معتبری نمی باشد.',
       'The value for the column "{column}" is not supplied when querying the table "{table}".' => 'مقدار بازگردانی شده از کوئری ستون "{column}" در جدول "{table}" صحیح نمی باشد.',
    -  'The verification code is incorrect.' => 'کد تاییده نا معتبر است.',
    -  'The view path "{path}" is not a valid directory.' => 'مسیر ظاهر "{path}" معتبر نمی باشد.',
    +  'The verification code is incorrect.' => 'کد تأیید معتبر نیست.',
    +  'The view path "{path}" is not a valid directory.' => 'مسیر نمای "{path}" معتبر نمی باشد.',
       'This content requires the Adobe Flash Player.' => 'محتوای این صفحه احتیاج به Adobe Flash Player دارد.',
       'Unable to add an item whose name is the same as an existing item.' => 'امکان اضافه کردن آیتم جدیدی که نامش با نام آیتم موجودی برابر است وجود ندارد.',
       'Unable to change the item name. The name "{name}" is already used by another item.' => 'امکان تغییر نام به "{name}" وجود ندارد ، این نام در حال حاضر مورد استفاده آیتم دیگری می باشد.',
    -  'Unable to create application state file "{file}". Make sure the directory containing the file exists and is writable by the Web server process.' => 'قادر به ایجاد اپلیکیشن "{file}" نمی باشد.اطمینان حاصل کنید که فایل در دایرکتوری موجود می باشد و همچنین قابل نوشتن توسط وب سرور می باشد',
    +  'Unable to create application state file "{file}". Make sure the directory containing the file exists and is writable by the Web server process.' => 'قادر به ایجاد اپلیکیشن "{file}" نمی باشد.اطمینان حاصل کنید که فایل در دایرکتوری موجود می باشد و همچنین قابل نوشتن توسط وب سرور می باشد.',
       'Unable to lock file "{file}" for reading.' => 'امکان قفل کردن فایل "{file}"  برای خواندن وجود ندارد.',
       'Unable to lock file "{file}" for writing.' => 'امکان قفل کردن فایل "{file}" برای نوشتن وجود ندارد.',
       'Unable to read file "{file}".' => 'توانایی خواندن فایل "{file}" وجود ندارد.',
    @@ -224,4 +224,10 @@
       'Yii application can only be created once.' => 'اپلیکیشن یی تنها یک بار می تواند ایجاد شود.',
       'You are not authorized to perform this action.' => 'شما دسترسی انجام این عمل را ندارید.',
       'Your request is not valid.' => 'درخواست شما ، معتبر نمی باشد.',  
    -);
    \ No newline at end of file
    +  'The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.' => 'آپلود فایل "{file}" ممکن نیست. MIME-type های مجاز برای آپلود: {mimeTypes}',
    +  'The format of {attribute} is invalid.' => 'قالب {attribute} معتبر نیست.',
    +  'The requested view "{name}" was not found.' => 'نمای {name} پیدا نشد.',
    +  'Your request is invalid.' => 'درخواست شما معتبر است.',
    +  '{attribute} cannot accept more than {limit} files.' => '{attribute} نمی تواند بیشتر از {limit} فایل قبول کند.',
    +  '{attribute} is in the list.' => '{attribute} در لیست موجود است.',
    +);
    diff --git a/framework/messages/fa_ir/zii.php b/framework/messages/fa_ir/zii.php
    index e035bbd1e4e..46de3f67869 100644
    --- a/framework/messages/fa_ir/zii.php
    +++ b/framework/messages/fa_ir/zii.php
    @@ -33,4 +33,5 @@
       'Update' => 'به روز رسانی',
       'View' => 'مشاهده',
       '{class} must specify "model" and "attribute" or "name" property values.' => '{class} می بایست مقادیر  "model" و  "attribute"  یا "name" را مشخص کرده باشد.',
    +  'Home' => 'صفحه اول',
     );
    diff --git a/framework/messages/fi/yii.php b/framework/messages/fi/yii.php
    index 6cb30983f3d..d20fd61af57 100644
    --- a/framework/messages/fi/yii.php
    +++ b/framework/messages/fi/yii.php
    @@ -20,6 +20,7 @@
       '"{path}" is not a valid directory.' => '"{path}" ei ole kelvollinen hakemisto.',
       '< Previous' => '< Edellinen',
       '<< First' => '<< Ensimmäinen',
    +  'A PHP extension stopped the file upload.' => 'PHP-laajennus on pysäyttänyt tiedoston latauksen.',
       'Action class {class} must implement the "run" method.' => '{class}-toimintaluokan pitää toteuttaa "run"-metodi',
       'Active Record requires a "db" CDbConnection application component.' => 'Active record vaatii "db" CDbConnection -sovelluskomponentin.',
       '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.' => 'Active record -luokalla "{class}" on virheellinen konfiguraatio relaatiolle "{relation}". Sen pitää määrittää relaation tyyppi, siihen liittyvä active record -luokka ja viiteavain (fk).',
    @@ -28,7 +29,6 @@
       'Adding a primary key after table has been created is not supported by SQLite.' => 'SQLite ei tue perusavaimen (pk) lisäystä taulun luonnin jälkeen.',
       'Alias "{alias}" is invalid. Make sure it points to an existing PHP file and the file is readable.' => 'Alias "{alias}" on virheellinen. Varmista, että se osoittaa olemassa olevaan PHP-tiedostoon ja että tiedosto on luettavissa.',
       'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Alias "{alias}" on virheellinen. Varmista, että se osoittaa olemassa olevaan hakemistoon tai tiedostoon.',
    -  'Alias "{alias}" is invalid. Make sure it points to an existing directory.' => 'Alias "{alias}" on virheellinen. Varmista, että se osoittaa olemassa olevaan hakemistoon.',
       'Altering a DB column is not supported by SQLite.' => 'SQLite ei tue kentän muokkausta.',
       'Application Log' => 'Sovellusloki',
       'Application base path "{path}" is not a valid directory.' => 'Sovelluksen base-polku "{path}" ei ole kelvollinen hakemisto.',
    @@ -48,6 +48,8 @@
       'CDbCommand::execute() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::execute() epäonnistui: {error}. Suoritettu SQL-komento oli: {sql}.',
       'CDbCommand::{method}() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::{method}() epäonnistui: {error}. Suoritettu SQL-komento oli: {sql}.',
       'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection ei tue skeeman lukua {driver}-tietokannalla.',
    +  'CDbConnection failed to open the DB connection.' => 'CDbConnection ei voinut avata tietokantayhteyttä.',
    +  'CDbConnection is unable to find PDO class "{className}". Make sure PDO is installed correctly.' => 'CDbConnection ei löydä PDO-luokkaa "{className}". Varmista että PDO on asennettu oikein.',
       'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader ei voi kelata taaksepäin. Se lukee vain eteenpäin.',
       'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" on virheellinen. Varmista, että ID viittaa sovelluksen CDbConnection-komponenttiin.',
       'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" ei osoita kelvolliseen sovelluksen CDbConnection-komponenttiin.',
    @@ -78,6 +80,7 @@
       'CSecurityManager requires PHP mcrypt extension to be loaded in order to use data encryption feature.' => 'CSecurityManager vaatii, että PHP:n mcrypt-laajennus on ladattu, jotta tiedonsalaustoiminnallisuutta voi käyttää.',
       'CSecurityManager.encryptionKey cannot be empty.' => 'CSecurityManager.encryptionKey ei voi olla tyhjä.',
       'CSecurityManager.validationKey cannot be empty.' => 'CSecurityManager.validationKey ei voi olla tyhjä.',
    +  'CSecurityManager::generateRandomString() cannot generate random string in the current environment.' => 'CSecurityManager::generateRandomString() ei pysty generoimaan satunnaista merkkijonoa nykyisessä ympäristössä.',
       'CTypedList<{type}> can only hold objects of {type} class.' => 'CTypedList<{type}> hyväksyy vain {type}-luokan olioita.',
       'CTypedMap<{type}> can only hold objects of {type} class.' => 'CTypedMap<{type}> hyväksyy vain {type}-luokan olioita.',
       'CUrlManager.UrlFormat must be either "path" or "get".' => 'CUrlManager.UrlFormat pitää olla joko "path" tai "get".',
    @@ -103,12 +106,12 @@
       'Failed to set unsafe attribute "{attribute}" of "{class}".' => 'Ei voitu asettaa "{class}"-luokan turvatonta attribuuttia "{attribute}".',
       'Failed to start session.' => 'Ei voitu aloittaa sessiota.',
       'Failed to write the uploaded file "{file}" to disk.' => 'Ladattua tiedostoa "{file}" ei voitu kirjoittaa levylle.',
    -  'File upload was stopped by extension.' => 'Laajennus on pysäyttänyt tiedoston latauksen.',
       'Filter "{filter}" is invalid. Controller "{class}" does not have the filter method "filter{filter}".' => 'Suodatin "{filter}" on virheellinen. Käsittelijällä "{class}" ei ole suodattimen metodia "filter{filter}".',
       'GD with FreeType or ImageMagick PHP extensions are required.' => 'GD FreeType-tuella tai ImageMagick PHP -laajennuksia tarvitaan.',
       'Get a new code' => 'Pyydä uusi koodi',
       'Go to page: ' => 'Siirry sivulle: ',
       'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'fileinfo PECL -laajennus tulee asentaa, jotta voit käyttää CFileValidatorin tarjoamaa MIME-tyyppivalidointia.',
    +  'Internal error while generating hash.' => 'Tiivistettä generoitaessa tapahtui sisäinen virhe.',
       'Invalid MO file revision: {revision}.' => 'Virheellinen MO-tiedoston revisio: {revision}.',
       'Invalid MO file: {file} (magic: {magic}).' => 'Virheellinen MO-tiedosto: {file} (magic: {magic}).',
       'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'Virheellinen lueteltu arvo "{value}". Varmista, että se on kuuluu joukkoon ({enum}).',
    @@ -121,9 +124,11 @@
       'Map data must be an array or an object implementing Traversable.' => 'Map datan pitää olla taulukko tai olio, joka toteuttaa Traversablen.',
       'Missing the temporary folder to store the uploaded file "{file}".' => 'Väliaikaishakemisto ladatun tiedoston "{file}" tallentamiseen puuttuu.',
       'Next >' => 'Seuraava >',
    +  'No' => 'Ei',
       'No columns are being updated for table "{table}".' => 'Yksikään kenttä ei päivity tauluun "{table}".',
       'No counter columns are being updated for table "{table}".' => 'Yksikään laskurikenttä ei päivity tauluun "{table}".',
       'Object configuration must be an array containing a "class" element.' => 'Olion konfiguraation pitää olla taulukko, joka sisältää "class"-elementin.',
    +  'Only SHA1 and MD5 hashing algorithms are supported when using PHP 5.1.1 or below.' => 'Ainoastaan SHA-1 ja MD5 -tiivistealgoritmit ovat tuettuja, kun käytössä on PHP 5.1.1 tai vanhempi.',
       'Please fix the following input errors:' => 'Korjaa seuraavat virheelliset tiedot:',
       'Powered by {yii}.' => 'Powered by {yii}.',
       'Property "{class}.{property}" is not defined.' => 'Ominaisuutta "{class}.{property}" ei ole määritelty.',
    @@ -133,13 +138,16 @@
       'Relation "{name}" is not defined in active record class "{class}".' => 'Relaatiota "{name}" ei ole määritelty active record -luokassa "{class}".',
       'Removing a primary key after table has been created is not supported by SQLite.' => 'SQLite ei tue perusavaimen (pk) poistoa taulun luonnin jälkeen.',
       'Renaming a DB column is not supported by SQLite.' => 'SQLite ei tue kentän nimeämistä uudelleen.',
    +  'Script HTML options are not allowed for "CClientScript::POS_LOAD" and "CClientScript::POS_READY".' => '"CClientScript::POS_LOAD" ja "CClientScript::POS_READY" ei salli HTML-optioita.',
       'Stack data must be an array or an object implementing Traversable.' => 'Stack datan pitää olla taulukko tai olio, joka toteuttaa Traversablen.',
       'Table "{table}" does not exist.' => 'Taulua "{table}" ei ole olemassa.',
       'Table "{table}" does not have a column named "{column}".' => 'Talululla "{table}" ei ole "{column}"-nimistä kenttää.',
       'The "db" application component must be configured to be a CDbConnection object.' => 'Sovelluksen "db"-komponentin tulee olla konfiguroituna CDbConnection-olioksi.',
       'The "filter" property must be specified with a valid callback.' => '"filter"-ominaisuudelle pitää määrittää kelvollinen callback.',
    +  'The "forceCopy" and "linkAssets" cannot be both true.' => '"forceCopy" ja "linkAssets" eivät molemmat voi olla tosi.',
       'The "pattern" property must be specified with a valid regular expression.' => '"pattern"-ominaisuudelle pitää määrittää kelvollisen säännöllinen lausekke.',
       'The "range" property must be specified with a list of values.' => '"range"-ominaisuudelle pitää määrittää arvoluettelo.',
    +  'The $converter argument must be a valid callback or null.' => '$converter argumentin täytyy olla kelvollinen callback tai null.',
       'The CSRF token could not be verified.' => 'CSRF-tokenia ei voitu todentaa.',
       'The DB query must contain the "from" portion.' => 'Tietokantakyselyssä pitää olla "from"-osuus.',
       'The STAT relation "{name}" cannot have child relations.' => 'STAT-relaatiolla "{name}" ei voi olla lapsirelaatioita.',
    @@ -180,7 +188,6 @@
       'The pattern for week in month must be "W".' => 'Kuukauden viikon muodon pitää olla "W".',
       'The pattern for week in year must be "w".' => 'Vuoden viikon muodon pitää olla "w".',
       'The queue is empty.' => 'Jono on tyhjä.',
    -  '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.' => 'Relaation "{relation}" active record -luokkaa "{class}" ei ole määritelty oikein. Viiteavaimelle (fk) annettua liitostaulua "{joinTable}" ei löydy tietokannasta.',
       '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.' => 'Relaation "{relation}" active record -luokkaa "{class}" ei ole määritelty oikein: Viiteavaimelle (fk) annettua liitostaulua "{joinTable}" ei löydy tietokannasta.',
       'The relation "{relation}" in active record class "{class}" is specified with a foreign key "{key}" that does not point to the parent table "{table}".' => 'Relaation "{relation}" active record -luokalle "{class}" on määritelty viiteavain (fk) "{key}", joka ei osoita ylätauluun "{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.' => 'Relaation "{relation}" active record -luokalle "{class}" on määritelty puutteellinen viiteavain (fk). Viiteavaimen (fk) tulee koostua kentistä, jotka viittaavat molempiin liitostauluihin.',
    @@ -201,6 +208,7 @@
       'Unable to change the item name. The name "{name}" is already used by another item.' => 'Kohteen nimeä ei voi vaihtaa. Nimi "{name}" on jo toisen kohteen käytössä.',
       'Unable to create application state file "{file}". Make sure the directory containing the file exists and is writable by the Web server process.' => 'Sovelluksen tilatiedostoa ei voitu luoda. Varmista, että web-palvelimen prosessilla on kirjoitusoikeus hakemistoon, jossa tiedosto sijaitsee, ja että hakemisto on olemassa.',
       'Unable to find "{column}" in table "{table}".' => 'Taulusta "{table}" ei löydy kenttää "{column}".',
    +  'Unable to generate random string.' => 'Satunnaista merkkijonoa ei pysty generoimaan.',
       'Unable to lock file "{file}" for reading.' => 'Tiedoston "{file}" lukitseminen lukua varten epäonnistui.',
       'Unable to lock file "{file}" for writing.' => 'Tiedoston "{file}" lukitseminen kirjoitusta varten epäonnistui.',
       'Unable to read file "{file}".' => 'Tiedostoa "{file}" ei voida lukea.',
    @@ -212,6 +220,7 @@
       'Unknown type "{type}".' => 'Tuntematon tyyppi "{type}".',
       'Unrecognized locale "{locale}".' => 'Tunnistamaton kielitunnus "{locale}".',
       'View file "{file}" does not exist.' => 'Näkymätiedostoa "{file}" ei ole olemassa.',
    +  'Yes' => 'Kyllä',
       'Yii application can only be created once.' => 'Yii-sovellus voidaan luoda vain kerran.',
       'You are not authorized to perform this action.' => 'Sinulla ei ole tarvittavia oikeuksia toiminnon suorittamiseen.',
       'Your request is invalid.' => 'Pyyntösi on virheellinen.',
    @@ -222,7 +231,7 @@
       '{attribute} is in the list.' => '{attribute} on listalla.',
       '{attribute} is invalid.' => '{attribute} on virheellinen.',
       '{attribute} is not a valid URL.' => '{attribute} on virheellinen URL.',
    -  '{attribute} is not a valid email address.' => 'Sähköpostiosoite {attribute} on virheellinen.',
    +  '{attribute} is not a valid email address.' => '{attribute} on virheellinen sähköpostiosoite.',
       '{attribute} is not in the list.' => '{attribute} ei ole listalla.',
       '{attribute} is of the wrong length (should be {length} characters).' => '{attribute} on väärän pituinen (sen tulisi olla {length} merkkiä).',
       '{attribute} is too big (maximum is {max}).' => '{attribute} on liian suuri (enint. {max}).',
    @@ -245,12 +254,16 @@
       '{className} does not support flushValues() functionality.' => '{className} ei tue flushValues()-toiminnallisuutta.',
       '{className} does not support get() functionality.' => '{className} ei tue get()-toiminnallisuutta.',
       '{className} does not support set() functionality.' => '{className} ei tue set()-toiminnallisuutta.',
    -  '{class} and its behaviors do not have a method or closure named "{name}".' => 'Luokan {class} ja sen käyttäytymismallit eivät sisällä metodia tai sulkeumaa nimeltä "{name}".',
    -  '{class} does not have relation "{name}".' => 'Luokka {class} ei sisällä relaatiota "{name}".',
    -  '{class} does not support fetching all table names.' => 'Luokka {class} ei tue kaikkien taulujen nimien hakua.',
    -  '{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => 'Luokka {class} sisältää virheellisen validointisäännön. Säännön täytyy määritellä validoitavat attribuutit sekä validaattorin nimi.',
    +  '{class} and its behaviors do not have a method or closure named "{name}".' => '{class} ja sen käyttäytymismallit eivät sisällä metodia tai sulkeumaa nimeltä "{name}".',
    +  '{class} does not have relation "{name}".' => '{class} ei sisällä relaatiota "{name}".',
    +  '{class} does not support fetching all table names.' => '{class} ei tue kaikkien taulujen nimien hakua.',
    +  '{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => '{class} sisältää virheellisen validointisäännön. Säännön täytyy määritellä validoitavat attribuutit sekä validaattorin nimi.',
       '{class} must specify "model" and "attribute" or "name" property values.' => '{class}-luokan täytyy määrittää "model"- ja "attribute"- tai "name"-ominaisuuksien arvot.',
    +  '{class} requires the Blowfish option of the PHP crypt() function. This system does not have it.' => '{class} vaatii PHP crypt()-funktion Blowfish-option. Tästä järjestelmästä se puuttuu.',
    +  '{class} requires the PHP crypt() function. This system does not have it.' => '{class} vaatii PHP crypt()-funktion. Tästä järjestelmästä se puuttuu.',
       '{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => '{class}.allowAutoLogin täytyy asettaa arvoon true, jotta evästepohjaista autentikointia voi käyttää.',
    +  '{class}::$cost must be a number.' => '{class}::$cost täytyy olla luku.',
    +  '{class}::$cost must be between 4 and 31.' => '{class}::$cost täytyy olla 4 ja 31 väliltä.',
       '{class}::authenticate() must be implemented.' => '{class}::authenticate() täytyy olla toteutettuna.',
       '{controller} cannot find the requested view "{view}".' => '{controller} ei löydä pyydettyä näkymää "{view}".',
       '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => '{controller} sisältää virheellisesti sisäkkäisiä widget-tageja "{view}"-näkymässä. {widget}-widget ei sisällä endWidget()-kutsua.',
    diff --git a/framework/messages/fi/zii.php b/framework/messages/fi/zii.php
    index 246b0a17d9d..7c6d4ab29fa 100644
    --- a/framework/messages/fi/zii.php
    +++ b/framework/messages/fi/zii.php
    @@ -37,5 +37,5 @@
       'Total 1 result.|Total {count} results.' => 'Yhteensä 1 tulos.|Yhteensä {count} tulosta.',
       'Update' => 'Päivitä',
       'View' => 'Näytä',
    -  '{class} must specify "model" and "attribute" or "name" property values.' => 'Luokan {class} pitää määrittää "model"- ja "attribute"- tai "name"-ominaisuuksien arvot.',
    +  '{class} must specify "model" and "{attribute}" or "{name}" property values.' => '{class}-luokan täytyy määrittää "model"- ja "{attribute}"- tai "{name}"-ominaisuuksien arvot.',
     );
    diff --git a/framework/messages/hu/yii.php b/framework/messages/hu/yii.php
    index c8bc5b45073..f110e890937 100644
    --- a/framework/messages/hu/yii.php
    +++ b/framework/messages/hu/yii.php
    @@ -189,7 +189,7 @@
     '{attribute} is too small (minimum is {min}).' => '{attribute} túl kicsi (minimum {min} lehet).',
     '{attribute} must be a number.' => '{attribute} csak szám lehet.',
     '{attribute} must be an integer.' => '{attribute} csak egész szám lehet.',
    -'{attribute} must be repeated exactly.' => '{attribute} pontosan kell megismételni.',
    +'{attribute} must be repeated exactly.' => 'Ismételje meg pontosan a {attribute} mezőbe írtakat.',
     '{attribute} must be {type}.' => '{attribute} csak {type} lehet.',
     '{className} does not support add() functionality.' => '{className} nem támogatja az add() lehetőséget.',
     '{className} does not support delete() functionality.' => '{className} nem támogatja a delete() lehetőséget.',
    diff --git a/framework/messages/hu/zii.php b/framework/messages/hu/zii.php
    index 20bef87f973..06b42193a8b 100644
    --- a/framework/messages/hu/zii.php
    +++ b/framework/messages/hu/zii.php
    @@ -29,8 +29,8 @@
       'The attribute must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.' => 'Az értékeket az alábbi formában kell megadni "Name:Type:Label" a "Type" és a "Label" nem kötelező.',
       'The column must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.' => 'Az oszlopot az alábbi formában kell megadni "Name:Type:Label". A "Type" és a "Label" nem kötelező.',
       'The property "itemView" cannot be empty.' => 'Az "itemView" változó nem lehet üres.',
    -  'Total 1 result.|Total {count} results.' => 'Összesen 1 találat.|Összesen {count} találat.',
    +  'Total 1 result.|Total {count} results.' => 'Összesen {count} találat.',
       'Update' => 'Szerkeszt',
       'View' => 'Mutat',
       '{class} must specify "model" and "attribute" or "name" property values.' => '{class} meg kell határozni a "model" és a "attribute" vagy "name" értékét.',
    -);
    \ No newline at end of file
    +);
    diff --git a/framework/messages/ja/yii.php b/framework/messages/ja/yii.php
    index 5ba36e54525..3cd31e07e64 100644
    --- a/framework/messages/ja/yii.php
    +++ b/framework/messages/ja/yii.php
    @@ -20,6 +20,7 @@
       '"{path}" is not a valid directory.' => '{path} は有効なディレクトリではありません。',
       '< Previous' => '< 前',
       '<< First' => '<< 最初',
    +  'A PHP extension stopped the file upload.' => 'PHP の拡張モジュールがファイルのアップロードを中止しました。',
       'Action class {class} must implement the "run" method.' => 'アクションクラス{class}は"run"メソッドを実装する必要があります。',
       'Active Record requires a "db" CDbConnection application component.' => 'Active Record は "db" という CDbConnection アプリケーションコンポーネントを必要とします。',
       '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.' => 'アクティブレコード "{class}" の、リレーション {relation} のコンフィギュレーションに誤りがあります。リレーションタイプ、関係するアクティブレコードクラスと外部キーを指定して下さい。',
    @@ -48,6 +49,8 @@
       'CDbCommand::execute() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::execute()が{error}で失敗しました。実行されたSQL文は: {sql}',
       'CDbCommand::{method}() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::{method}() が{error}で失敗しました。実行されたSQL文は: {sql}',
       'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection は {driver} データベースに対してスキーマの読み取りをサポートしていません。',
    +  'CDbConnection failed to open the DB connection.' => 'CDbConnection が DB 接続に失敗しました。',
    +  'CDbConnection is unable to find PDO class "{className}". Make sure PDO is installed correctly.' => 'CDbConnection が PDO のクラス "{className}" を見つけることが出来ません。PDO が正しくインストールされているか、確認してください。',
       'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader は巻き戻しできません。これは順方向のみのリーダです。',
       'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" が無効です。CDbConnection アプリケーションコンポーネントのIDを参照しているかを確認してください。',
       'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" が正しい CDbConnection アプリケーションコンポーネントを参照していません',
    @@ -78,6 +81,7 @@
       'CSecurityManager requires PHP mcrypt extension to be loaded in order to use data encryption feature.' => 'CSecurityManager のデータ暗号化機能を使用するためにはPHPのmcrypt拡張を必要とします。',
       'CSecurityManager.encryptionKey cannot be empty.' => 'CSecurityManager.encryptionKey は空白ではいけません。',
       'CSecurityManager.validationKey cannot be empty.' => 'CSecurityManager.validationKey は空白ではいけません。',
    +  'CSecurityManager::generateRandomString() cannot generate random string in the current environment.' => 'CSecurityManager::generateRandomString() は現在の環境ではランダム文字列を生成できません。',
       'CTypedList<{type}> can only hold objects of {type} class.' => 'CTypedList<{type}> は {type} クラスのオブジェクトしか持てません。',
       'CTypedMap<{type}> can only hold objects of {type} class.' => 'CTypedMap<{type}>は{type}クラスのオブジェクトのみを保持できます。',
       'CUrlManager.UrlFormat must be either "path" or "get".' => 'CUrlManager.UrlFormat は "path" か "get" のいずれかです。',
    @@ -103,12 +107,12 @@
       'Failed to set unsafe attribute "{attribute}" of "{class}".' => '"{class}" の安全でない属性"{attribute}"をセットできませんでした。',
       'Failed to start session.' => 'セッションを開始できませんでした。',
       'Failed to write the uploaded file "{file}" to disk.' => 'アップロードされたファイル "{file}" をディスクに書き込めませんでした。',
    -  'File upload was stopped by extension.' => 'ファイルアップロードが拡張により停止されました。',
       'Filter "{filter}" is invalid. Controller "{class}" does not have the filter method "filter{filter}".' => '"{filter}"というフィルタは無効です。コントローラ"{class}"にはフィルタメソッド"filter{filter}"は存在しません。',
       'GD with FreeType or ImageMagick PHP extensions are required.' => 'GD と FreeType、または ImageMagick の PHP 拡張が必要です。',
       'Get a new code' => '新しいコードを取得',
       'Go to page: ' => 'ページ:',
       'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'CFileValidator が提供する MIME タイプ検証を使うためには、fileinfo PECL 拡張のインストールが必要です。',
    +  'Internal error while generating hash.' => 'ハッシュ生成中に内部エラーが発生しました。',
       'Invalid MO file revision: {revision}.' => '無効な MO ファイル版数({revision})です。',
       'Invalid MO file: {file} (magic: {magic}).' => '無効な MO ファイル: {file} (magic: {magic})です。',
       'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => '無効な列挙値("{value}")です。{enum} に存在するか確認してください。',
    @@ -121,9 +125,11 @@
       'Map data must be an array or an object implementing Traversable.' => 'マップデータは配列かTraversableを実装したオブジェクトでなければいけません。',
       'Missing the temporary folder to store the uploaded file "{file}".' => 'アップロードファイル "{file}" を保存する一時フォルダがありません。',
       'Next >' => '次 >',
    +  'No' => 'いいえ',
       'No columns are being updated for table "{table}".' => 'テーブル "{table}" のカラムは何も変更されません。',
       'No counter columns are being updated for table "{table}".' => 'テーブル "{table}" のカウンターカラムは何も変更されません。',
       'Object configuration must be an array containing a "class" element.' => 'オブジェクトコンフィギュレーションは "class" 要素を含む配列でなければいけません。',
    +  'Only SHA1 and MD5 hashing algorithms are supported when using PHP 5.1.1 or below.' => 'PHP 5.1.1 以下を使用している場合、ハッシュアルゴリズムとしては SHA1 と MD5 だけがサポートされています。',
       'Please fix the following input errors:' => '以下の入力エラーを修正してください:',
       'Powered by {yii}.' => '',
       'Property "{class}.{property}" is not defined.' => 'プロパティ "{class}.{property}" が定義されていません。',
    @@ -133,6 +139,7 @@
       'Relation "{name}" is not defined in active record class "{class}".' => 'アクティブレコードクラス "{class}" にリレーション "{name}" が定義されていません。',
       'Removing a primary key after table has been created is not supported by SQLite.' => 'SQLiteではテーブル作成後にプライマリキーを削除することはできません。',
       'Renaming a DB column is not supported by SQLite.' => 'SQLiteではデータベースカラムをリネームすることはできません。',
    +  'Script HTML options are not allowed for "CClientScript::POS_LOAD" and "CClientScript::POS_READY".' => 'スクリプトの HTML オプションは、"CClientScript::POS_LOAD" および "CClientScript::POS_READY" に対しては許可されていません。',
       'Stack data must be an array or an object implementing Traversable.' => 'スタックデータは配列かTraversableを実装したオブジェクトでなければいけません。',
       'Table "{table}" does not exist.' => 'テーブル"{table}"は存在しません。',
       'Table "{table}" does not have a column named "{column}".' => 'テーブル "{table}" には "{column}" というカラムは存在しません。',
    @@ -141,6 +148,7 @@
       'The "forceCopy" and "linkAssets" cannot be both true.' => '"foreceCopy" と "linkAssets" を両方とも true にすることは出来ません。',
       'The "pattern" property must be specified with a valid regular expression.' => '"pattern" プロパティには有効な正規表現を指定する必要があります。',
       'The "range" property must be specified with a list of values.' => '"range"プロパティは値のリストとして指定される必要があります。',
    +  'The $converter argument must be a valid callback or null.' => '引数 $converter は有効なコールバックまたは null でなければなりません。',
       'The CSRF token could not be verified.' => 'CSRFトークンを検証できませんでした。',
       'The DB query must contain the "from" portion.' => 'データベースクエリは"from"部を持つ必要があります。',
       'The STAT relation "{name}" cannot have child relations.' => 'STATリレーション"{name}"は子リレーションを持つことができません。',
    @@ -181,7 +189,6 @@
       'The pattern for week in month must be "W".' => 'ひと月の週のパターンは "W" です。',
       'The pattern for week in year must be "w".' => '一年の週のパターンは "w" です。',
       'The queue is empty.' => 'キューが空です。',
    -  '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.' => 'アクティブレコードクラス"{class}"のリレーション"{relation}"は正しく指定されていません。外部キーで与えられるジョインテーブル"{joinTable}"はデータベースに存在しません。',
       '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.' => 'アクティブレコードクラス "{class}" のリレーション "{relation}" は正しく指定されていません。外部キーで与えられるジョインテーブル "{joinTable}" がデータベース中に見つかりません。',
       'The relation "{relation}" in active record class "{class}" is specified with a foreign key "{key}" that does not point to the parent table "{table}".' => 'アクティブレコードクラス"{class}"のリレーション"{relation}"には外部キー"{key}"が指定されていますが、親テーブル"{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.' => 'アクティブレコードクラス "{class}" のリレーション "{relation}" には不完全な外部キーが指定されています。外部キーは両方のジョインテーブルを参照するカラムで構成しなければいけません。',
    @@ -202,6 +209,7 @@
       'Unable to change the item name. The name "{name}" is already used by another item.' => '項目の名前を変更できません。その名前 "{name}" は既に別の項目で使用されています。',
       'Unable to create application state file "{file}". Make sure the directory containing the file exists and is writable by the Web server process.' => 'アプリケーション状態ファイル "{file}" が作成できません。ファイルのディレクトリが存在してウェブサーバプロセスが書き込めるかを確認してください。',
       'Unable to find "{column}" in table "{table}".' => 'テーブル"{table}"中にカラム"{column}"が見つかりません。',
    +  'Unable to generate random string.' => 'ランダム文字列を生成できません。',
       'Unable to lock file "{file}" for reading.' => 'ファイル  "{file}" を読み込みロックできません。',
       'Unable to lock file "{file}" for writing.' => 'ファイル  "{file}" を書き込みロックできません。',
       'Unable to read file "{file}".' => 'ファイル  "{file}" が読み込めません。',
    @@ -213,6 +221,7 @@
       'Unknown type "{type}".' => '"{type}"は不明な型です。',
       'Unrecognized locale "{locale}".' => 'ロケール "{locale}" が認識できません。',
       'View file "{file}" does not exist.' => 'ビューファイル "{file}" が存在しません。',
    +  'Yes' => 'はい',
       'Yii application can only be created once.' => 'Yiiアプリケーションは一度しか作成できません。',
       'You are not authorized to perform this action.' => 'あなたはこのアクションを実行する権限がありません。',
       'Your request is invalid.' => '無効なリクエストです。',
    @@ -251,7 +260,11 @@
       '{class} does not support fetching all table names.' => '{class} はテーブル名を全て取り出す機能はサポートしません。',
       '{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => '{class} のバリデーションルールは間違っています。ルールには検証したい属性とバリデータ名を指定してください。',
       '{class} must specify "model" and "attribute" or "name" property values.' => '{class} には "model" と "attribute" 、または "name" プロパティに値を設定してください。',
    +  '{class} requires the Blowfish option of the PHP crypt() function. This system does not have it.' => '{class} は PHP crypt() 関数の Blowfish オプションを必要とします。このシステムには PHP crypt() 関数の Blowfish オプションがインストールされていません。',
    +  '{class} requires the PHP crypt() function. This system does not have it.' => '{class} は PHP crypt() 関数を必要とします。このシステムには PHP crypt() 関数がインストールされていません。',
       '{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => 'クッキーベースの認証を使用するには {class}.allowAutoLogin を設定してください。',
    +  '{class}::$cost must be a number.' => '{class}::$cost は数値でなければなりません。',
    +  '{class}::$cost must be between 4 and 31.' => '{class}::$cost は 4 以上 30 以下でなければなりません。',
       '{class}::authenticate() must be implemented.' => '{class}::authenticate() を実装してください。',
       '{controller} cannot find the requested view "{view}".' => '{controller} はリクエストされたビュー "{view}" を見つけられません。',
       '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => '{controller} にはビュー"{view}"の中に不適切にネストされたウィジェットタグがあります。{widget} ウィジェットには endWidget() 呼び出しがありません。',
    diff --git a/framework/messages/ja/zii.php b/framework/messages/ja/zii.php
    index 87adcdc74de..c9b6208f3a9 100644
    --- a/framework/messages/ja/zii.php
    +++ b/framework/messages/ja/zii.php
    @@ -37,5 +37,5 @@
       'Total 1 result.|Total {count} results.' => '合計{count}個',
       'Update' => '更新',
       'View' => '表示',
    -  '{class} must specify "model" and "attribute" or "name" property values.' => '{class}は"model"と"attribute"または"name"プロパティ値を指定しなければいけません。',
    +  '{class} must specify "model" and "{attribute}" or "{name}" property values.' => '{class}は"model"と"{attribute}"または"{name}"のプロパティ値を指定しなければいけません。',
     );
    diff --git a/framework/messages/kk/yii.php b/framework/messages/kk/yii.php
    index 0e7543b9818..f4a5c6fe16b 100644
    --- a/framework/messages/kk/yii.php
    +++ b/framework/messages/kk/yii.php
    @@ -17,12 +17,17 @@
      * NOTE, this file must be saved in UTF-8 encoding.
      */
     return array (
    -  'Adding a primary key after table has been created is not supported by SQLite.' => 'SQLite кесте жасалғаннан кейін біріншілік кілтті қосуды қолдамайды.',
    -  'CHttpSession.gcProbability "{value}" is invalid. It must be a float between 0 and 100.' => 'CHttpSession.gcProbability "{value}" мәні қате. Ол 0 мен 100 аралығына жататын қалқымалы нүктелі сан болуы тиіс.',
    -  'GD with FreeType or ImageMagick PHP extensions are required.' => 'GD мен PHP-дің FreeType не ImageMagick кеңейтулері керек.',
    -  'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'CFileValidator ұсынатын MIME түрлерін валидациялау үшін fileinfo PECL кеңейтуі орнатылған болуы тиіс.',
    -  'Removing a primary key after table has been created is not supported by SQLite.' => 'SQLite кесте жасалғаннан кейін біріншілік кілтті өшіруді қолдамайды.',
    -  'The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.' => '"{file}" файлын жүктеу мүмкін емес. Тек келесі MIME-түрлеріне ғана қолдау бар: {mimeTypes}.',
    +  'CDbConnection failed to open the DB connection.' => 'CDbConnection дерекқормен байланысты орната алмады.',
    +  'CDbConnection is unable to find PDO class "{className}". Make sure PDO is installed correctly.' => 'CDbConnection "{className}" PDO класын таба алмады. PDO дұрыс орнатылғанына көз жеткізіңіз.',
    +  'Cannot hash a password that is empty or not a string.' => 'Бос немесе жол емес парольдің хэшін жасау мүмкін емес.',
    +  'Internal error while generating hash.' => 'Хэшті жасау кезінде ішкі қате орын алды.',
    +  'Only SHA1 and MD5 hashing algorithms are supported when using PHP 5.1.1 or below.' => 'PHP 5.1.1 не одан да ескі нұсқасын қолдану кезінде тек SHA1 және MD5 хэштеу алгоритмдеріне қолдау бар.',
    +  'Script HTML options are not allowed for "CClientScript::POS_LOAD" and "CClientScript::POS_READY".' => 'Script HTML опциялары "CClientScript::POS_LOAD" және "CClientScript::POS_READY" үшін рұқсат етілмеген.',
    +  'The "forceCopy" and "linkAssets" cannot be both true.' => '"forceCopy" және "linkAssets" бір уақытта true болуы мүмкін емес.',
    +  '{class} requires the Blowfish option of the PHP crypt() function. This system does not have it.' => '{class} класы PHP crypt() функциясының Blowfish опциясын талап етеді. Бұл жүйеде ол жоқ.',
    +  '{class} requires the PHP crypt() function. This system does not have it.' => '{class} класы PHP crypt() функциясын талап етеді. Бұл жүйеде ол жоқ.',
    +  '{class}::$cost must be a number.' => '{class}::$cost сан болуы тиіс.',
    +  '{class}::$cost must be between 4 and 31.' => '{class}::$cost 4 және 31 арасындағы сан болуы тиіс.',
       '"{path}" is not a valid directory.' => '"{path}" жолы дұрыс бума емес.',
       '< Previous' => '< Алдыңғы',
       '<< First' => '<< Бірінші',
    @@ -31,6 +36,7 @@
       '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.' => 'Active record "{class}" класы "{relation}" қатысы үшін дұрыс бапталмаған. Ол қатысу түрі, байланыстағы active record класы мен сыртқы кілтті анықтау керек.',
       '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}" қате "{column}" бағанын таңдағысы кеп тұр. Қосымша: баған кесте ішінде болуы тиіс, немесе алиасы бар өрнек болуы тиіс.',
       'Adding a foreign key constraint to an existing table is not supported by SQLite.' => 'Бар болып тұрған кестеге сыртқы кілтті қосу SQLite қолдамайды.',
    +  'Adding a primary key after table has been created is not supported by SQLite.' => 'SQLite кесте жасалғаннан кейін біріншілік кілтті қосуды қолдамайды.',
       'Alias "{alias}" is invalid. Make sure it points to an existing PHP file and the file is readable.' => '"{alias}" алиасы қате. Ол бар болып тұрған PHP файлына сілтеп тұрғанына көз жеткізіңіз.',
       'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => '"{alias}" алиасы қате. Ол бар болып тұрған бума не файлға сілтеп тұрғанына көз жеткізіңіз.',
       'Alias "{alias}" is invalid. Make sure it points to an existing directory.' => '"{alias}" алиасы қате. Ол бар болып тұрған бумаға сілтеп тұрғанына көз жеткізіңіз.',
    @@ -73,6 +79,7 @@
       'CHttpRequest is unable to determine the path info of the request.' => 'CHttpRequest компоненті сұранымдағы жол туралы ақпаратты анықтай алмады.',
       'CHttpRequest is unable to determine the request URI.' => 'CHttpRequest компоненті сұранымның URI-ін анықтай алмады.',
       'CHttpSession.cookieMode can only be "none", "allow" or "only".' => 'CHttpSession.cookieMode параметрінің мәні тек "none", "allow" не "only" мәндерін қабылдай алады.',
    +  'CHttpSession.gcProbability "{value}" is invalid. It must be a float between 0 and 100.' => 'CHttpSession.gcProbability "{value}" мәні қате. Ол 0 мен 100 аралығына жататын қалқымалы нүктелі сан болуы тиіс.',
       'CHttpSession.savePath "{path}" is not a valid directory.' => 'CHttpSession.savePath "{path}" жолы дұрыс бума емес.',
       'CMemCache requires PHP {extension} extension to be loaded.' => 'CMemCache өз жұмысы үшін PHP {extension} жүктелуін талап етеді.',
       'CMemCache server configuration must be an array.' => 'CMemCache сервер конфигурациясы массив болуы тиіс.',
    @@ -109,8 +116,10 @@
       'Failed to write the uploaded file "{file}" to disk.' => 'Жүктелген "{file}" файлын дискіге жазу сәтсіз.',
       'File upload was stopped by extension.' => 'Файлды жүктеу үрдісін кеңейту тоқтатқан.',
       'Filter "{filter}" is invalid. Controller "{class}" does not have the filter method "filter{filter}".' => '"{filter}" сүзгісі қате. "{class}" контролерінде "filter{filter}" тәсілі жоқ.',
    +  'GD with FreeType or ImageMagick PHP extensions are required.' => 'GD мен PHP-дің FreeType не ImageMagick кеңейтулері керек.',
       'Get a new code' => 'Жаңа кодты алу',
       'Go to page: ' => 'Параққа өту: ',
    +  'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'CFileValidator ұсынатын MIME түрлерін валидациялау үшін fileinfo PECL кеңейтуі орнатылған болуы тиіс.',
       'Invalid MO file revision: {revision}.' => 'MO файлының қолдауы жоқ нұсқасы: {revision}.',
       'Invalid MO file: {file} (magic: {magic}).' => 'MO файлы қате: {file} (магиясы: {magic}).',
       'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => '"{value}" мәні қате берілген. Келесі мәндерге қолдау бар: ({enum}).',
    @@ -133,6 +142,7 @@
       'Property CMaskedTextField.mask cannot be empty.' => 'CMaskedTextField.mask бос болмауы тиіс.',
       'Queue data must be an array or an object implementing Traversable.' => 'Сұраным мәліметі Traversable интерфейсін іске асыратын массив не объект болуы тиіс.',
       'Relation "{name}" is not defined in active record class "{class}".' => '"{name}" қатысы "{class}" active record класында анықталмаған.',
    +  'Removing a primary key after table has been created is not supported by SQLite.' => 'SQLite кесте жасалғаннан кейін біріншілік кілтті өшіруді қолдамайды.',
       'Renaming a DB column is not supported by SQLite.' => 'Дерекқор бағанның атын ауыстыруды SQLite қолдамайды.',
       'Stack data must be an array or an object implementing Traversable.' => 'Стек мәліметі Traversable интерфейсін іске асыратын массив не объект болуы тиіс.',
       'Table "{table}" does not exist.' => '"{table}" кестесі жоқ болып тұр.',
    @@ -151,6 +161,7 @@
       'The asset "{asset}" to be published does not exist.' => 'Жарияланатын asset "{asset}" жоқ болып тұр.',
       'The command path "{path}" is not a valid directory.' => '"{path}" командалық жолы бума емес болып тұр.',
       'The controller path "{path}" is not a valid directory.' => 'Контролерлерге дейінгі "{path}" жолы бума емес болып тұр.',
    +  'The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.' => '"{file}" файлын жүктеу мүмкін емес. Тек келесі MIME-түрлеріне ғана қолдау бар: {mimeTypes}.',
       'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => '"{file}" файлын жүктеу мүмкін емес. Тек келесі кеңейтулері бар файлдарды жүктеуге болады: {extensions}.',
       'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => '"{file}" файлы тым үлкен. Оның өлшемі {limit} байттан аспауы тиіс.',
       'The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.' => '"{file}" файлы тым кіші. Оның өлшемі кем дегенде {limit} байт болуы тиіс.',
    diff --git a/framework/messages/ko_kr/yii.php b/framework/messages/ko_kr/yii.php
    index c4e52e77d76..1d3bbb57da0 100644
    --- a/framework/messages/ko_kr/yii.php
    +++ b/framework/messages/ko_kr/yii.php
    @@ -191,7 +191,7 @@
       'The verification code is incorrect.' => '검증 코드가 올바르지 않습니다.',
       'The view path "{path}" is not a valid directory.' => '뷰 패스 "{path}"는 올바른 디렉토리가 아닙니다.',
       'Theme directory "{directory}" does not exist.' => '테마 디렉터리 "{directory}"가 존재하지 않습니다.',
    -  'This content requires the Adobe Flash Player.' => '이 콘텐츠는  Adobe Flash Player 가 필요합니다.',
    +  'This content requires the Adobe Flash Player.' => '이 콘텐츠는  Adobe Flash Player 가 필요합니다.',
       'Unable to add an item whose name is the same as an existing item.' => '이미 있는 항목과 같은 이름의 항목을 추가할 수 없습니다.',
       'Unable to change the item name. The name "{name}" is already used by another item.' => '항목의 이름을 변경할 수 없습니다. 그 이름 "{name}"은 이미 다른 항목으로 사용되고 있습니다.',
       'Unable to create application state file "{file}". Make sure the directory containing the file exists and is writable by the Web server process.' => '응용 프로그램 상태 파일 "{file}"를 만들 수 없습니다. 파일 디렉토리가 있는지, 웹 서버 프로세스가 쓸 수 있는지를 확인하십시오.',
    diff --git a/framework/messages/nl/yii.php b/framework/messages/nl/yii.php
    index d2a390fb2e4..2188aa021ae 100644
    --- a/framework/messages/nl/yii.php
    +++ b/framework/messages/nl/yii.php
    @@ -17,8 +17,8 @@
      * NOTE, this file must be saved in UTF-8 encoding.
      */
     return array (
    -  'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'Om de door CFileValidator aangeboden MIME-type validatie te gebruiken moet de fileinfo PECL extensie geïnstalleerd zijn',
    -  'The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.' => 'Het bestand "{file}" kan niet worden geupload. Alleen bestanden van de volgende MIME-types zijn toegelaten: {mimeTypes}',
    +  'Only SHA1 and MD5 hashing algorithms are supported when using PHP 5.1.1 or below.' => 'Bij het gebruik van PHP 5.1.1 of lager zijn alleen de MD5 en SHA1 hashing algoritmes ondersteund.',
    +  'Script HTML options are not allowed for "CClientScript::POS_LOAD" and "CClientScript::POS_READY".' => 'Voor "CClientScript::POS_LOAD" en "CClientScript::POS_READY" zijn geen script HTML opties toegelaten.',
       '"{path}" is not a valid directory.' => '"{path}" is geen geldige map.',
       '< Previous' => '< Vorige',
       '<< First' => '<< Eerste',
    @@ -27,6 +27,7 @@
       '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.' => 'Active record "{class}" bevat een relatie "{relation}" met ongeldige instellingen. Het relatietype, de verwante active record class en de foreign key moeten opgegeven zijn.',
       '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.' => 'Active record "{class}" probeert de ongeldige kolom "{column}" te selecteren. De kolom moet deel uitmaken van de tabel of een uitdrukking met alias zijn.',
       'Adding a foreign key constraint to an existing table is not supported by SQLite.' => 'Een foreign key toevoegen aan een bestaande table wordt niet ondersteund door SQLite.',
    +  'Adding a primary key after table has been created is not supported by SQLite.' => 'SQLite kan geen primary key toevoegen nadat de tabel aangemaakt is.',
       'Alias "{alias}" is invalid. Make sure it points to an existing PHP file and the file is readable.' => 'Alias "{alias}" is ongeldig. Zorg ervoor dat er naar een bestaand PHP bestand verwezen wordt.',
       'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Alias "{alias}" is ongeldig. Zorg ervoor dat er naar een bestaande map of bestand verwezen wordt.',
       'Alias "{alias}" is invalid. Make sure it points to an existing directory.' => 'Alias "{alias}" is ongeldig. Zorg ervoor dat er naar een bestaande map verwezen wordt.',
    @@ -49,6 +50,8 @@
       'CDbCommand::execute() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::execute() fout: {error}. Het uitgevoerde SQL statement was: {sql}.',
       'CDbCommand::{method}() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::{method}() fout: {error}. Het uitgevoerde SQL statement was: {sql}.',
       'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection heeft geen ondersteunig voor het lezen van het schema van een {driver} database.',
    +  'CDbConnection failed to open the DB connection.' => 'CDbConnection kon geen verbinding maken met de database',
    +  'CDbConnection is unable to find PDO class "{className}". Make sure PDO is installed correctly.' => 'CDbConnection kon PDO class "{className}" niet vinden. Zorg ervoor dat PDO correct geïnstalleerd is.',
       'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader kan niet terugspoelen. Alleen voorwaartse acties zijn mogelijk.',
       'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" is ongeldig. Gelieve ervoor te zorgen dat het naar de ID van een CDbConnection applicatie-component wijst.',
       'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" wijst niet naar een geldige CDbConnection applicatie-component.',
    @@ -69,7 +72,7 @@
       'CHttpRequest is unable to determine the path info of the request.' => 'CHttpRequest kan de pad-informatie van het verzoek niet bepalen',
       'CHttpRequest is unable to determine the request URI.' => 'CHttpRequest kan de URI van het verzoek niet bepalen',
       'CHttpSession.cookieMode can only be "none", "allow" or "only".' => 'CHttpSession.cookieMode kan alleen "none", "allow" of "only" zijn.',
    -  'CHttpSession.gcProbability "{value}" is invalid. It must be an integer between 0 and 100.' => 'CHttpSession.gcProbability "{value}" is ongeldig. Het moet een geheel getal tussen 0 en 100 zijn.',
    +  'CHttpSession.gcProbability "{value}" is invalid. It must be a float between 0 and 100.' => 'CHttpSession.gcProbability "{value}" is ongeldig. Het moet een kommagetal tussen 0 en 100 zijn.',
       'CHttpSession.savePath "{path}" is not a valid directory.' => 'CHttpSession.savePath "{path}" is geen geldige map.',
       'CMemCache requires PHP {extension} extension to be loaded.' => 'CMemCache vereist dat de PHP {extension} extensie geladen is',
       'CMemCache server configuration must be an array.' => 'De configuratie voor de CMemCache server moet een array zijn.',
    @@ -90,6 +93,7 @@
       'Cannot add "{child}" as a child of "{parent}". A loop has been detected.' => 'Kan "{child}" niet toevoegen als kind van "{parent}". Er werd een lus ontdekt.',
       'Cannot add "{name}" as a child of itself.' => 'Kan "{child}" niet toevoegen aan zichzelf.',
       'Cannot add an item of type "{child}" to an item of type "{parent}".' => 'Kan een item van type "{child}" niet toevoegen aan een item van type "{parent}".',
    +  'Cannot hash a password that is empty or not a string.' => 'Van een paswoord dat leeg is of geen string kan geen has gegenereerd worden.',
       'Class name "{class}" does not match class file "{file}".' => 'De class-naam "{class}" komt niet overeen met het bestand "{file}".',
       'Column name must be either a string or an array.' => 'De kolomnaam moet een string of een array zijn.',
       'Dropping DB column is not supported by SQLite.' => 'Een DB kolom verwijderen wordt niet ondersteund door SQLite.',
    @@ -106,9 +110,11 @@
       'Failed to write the uploaded file "{file}" to disk.' => 'Kon het geuploade bestand "{file}" niet wegschrijven naar de schijf.',
       'File upload was stopped by extension.' => 'De bestandsupload werd gestopt door de extensie.',
       'Filter "{filter}" is invalid. Controller "{class}" does not have the filter method "filter{filter}".' => 'Filter "{filter}" is ongeldig. Controller "{class}" heeft geen "filter{filter}" functie.',
    -  'GD and FreeType PHP extensions are required.' => 'De GD en FreeType PHP extensies zijn vereist.',
    +  'GD with FreeType or ImageMagick PHP extensions are required.' => 'GD met de FreeType of de ImageMagick PHP extensie is vereist.',
       'Get a new code' => 'Nieuwe code opvragen',
       'Go to page: ' => 'Ga naar pagina: ',
    +  'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'Om de door CFileValidator aangeboden MIME-type validatie te gebruiken moet de fileinfo PECL extensie geïnstalleerd zijn',
    +  'Internal error while generating hash.' => 'Interne fout tijdens het genereren van de hash.',
       'Invalid MO file revision: {revision}.' => 'Ongeldige versie voor MO bestand: {revision}.',
       'Invalid MO file: {file} (magic: {magic}).' => 'Ongeldige MO bestand: {file} (magic: {magic}).',
       'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'Ongeldige waarde "{value}". Dit moet een van de waarden uit ({enum}) zijn.',
    @@ -131,24 +137,27 @@
       'Property CMaskedTextField.mask cannot be empty.' => 'Het attribuut CMaskedTextField.mask mag niet leeg zijn',
       'Queue data must be an array or an object implementing Traversable.' => 'Queue data moet een array zijn of een object dat Traversable implementeerd.',
       'Relation "{name}" is not defined in active record class "{class}".' => 'De relatie "{name}" is niet gedefinieerd in active record class "{class}".',
    +  'Removing a primary key after table has been created is not supported by SQLite.' => 'SQLite kan geen primary key verwijderen nadat de tabel aangemaakt is.',
       'Renaming a DB column is not supported by SQLite.' => 'Een kolom hernoemen wordt niet ondersteund door SQLite.',
       'Stack data must be an array or an object implementing Traversable.' => 'Stack data moet een array zijn of een object dat Traversable implementeerd.',
       'Table "{table}" does not exist.' => 'Tabel "{table}" bestaat niet.',
       'Table "{table}" does not have a column named "{column}".' => 'Tabel "{table}" heeft geen kolom "{column}".',
       'The "db" application component must be configured to be a CDbConnection object.' => 'De "db" applicatie-component moet een CDbConnection object zijn.',
       'The "filter" property must be specified with a valid callback.' => 'Het "filter" attribuut moet een geldige callback bevatten.',
    +  'The "forceCopy" and "linkAssets" cannot be both true.' => '"forceCopy" en "linkAssets" kunnen niet beide de waard true hebben.',
       'The "pattern" property must be specified with a valid regular expression.' => 'Het "pattern" attribuut moet een geldige reguliere expressie bevatten.',
       'The "range" property must be specified with a list of values.' => 'Het "range" attribuut moet een lijst van waarden bevatten.',
       'The CSRF token could not be verified.' => 'Het CSRF token kon niet geverifieerd worden.',
       'The DB query must contain the "from" portion.' => 'De DB query moet een "from"-gedeelte bevatten.',
       'The STAT relation "{name}" cannot have child relations.' => 'De STAT relatie "{name}" kan geen onderliggende relaties hebben.',
       'The URL pattern "{pattern}" for route "{route}" is not a valid regular expression.' => 'Het URL pattern "{pattern}" voor route "{route}" is geen geldige reguliere expressie.',
    -  'The active record cannot be deleted because it is new.' => 'Het active record is niet en kan dus niet verwijderd worden.',
    +  'The active record cannot be deleted because it is new.' => 'Het active record kan niet verwijderd worden want het is nieuw.',
       'The active record cannot be inserted to database because it is not new.' => 'Insert kan niet gebruikt worden want het active record is niet nieuw.',
       'The active record cannot be updated because it is new.' => 'Het active record kan niet geupdated worden want het is nieuw.',
       'The asset "{asset}" to be published does not exist.' => 'Het te publiceren asset "{asset}" bestaat niet',
       'The command path "{path}" is not a valid directory.' => 'De command map "{path}" is ongeldig.',
       'The controller path "{path}" is not a valid directory.' => 'De controller map "{path}" is ongeldig.',
    +  'The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.' => 'Het bestand "{file}" kan niet worden geupload. Alleen bestanden van de volgende MIME-types zijn toegelaten: {mimeTypes}',
       'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'Het bestand "{file}" kan niet geuploaded worden. Alleen de volgende extensies zijn toegestaan: {extensions}',
       'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'Het bestand "{file}" is te groot. Het kan niet groter zijn dan {limit} bytes.',
       'The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.' => 'Het bestand "{file}" is te klein. Het moet groter zijn dan {limit} bytes.',
    @@ -248,20 +257,24 @@
       '{class} does not support fetching all table names.' => '{class} heeft geen ondersteuning voor het opvragen van alle tabel-namen.',
       '{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => '{class} heeft een ongeldige validatie-regel. De regel moet attributen bevatten om de valideren en de naam van de validator.',
       '{class} must specify "model" and "attribute" or "name" property values.' => '{class} moet waarden bevatten voor de attributen "model" en "attribute" of "name".',
    +  '{class} requires the Blowfish option of the PHP crypt() function. This system does not have it.' => '{class} vereist de Blowfish optie van de PHP crypt() functie. Deze is niet aanwezig op het systeem.',
    +  '{class} requires the PHP crypt() function. This system does not have it.' => '{class} vereist de PHP crypt() functie. Deze is niet aanwezig op het systeem.',
       '{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => '{class}.allowAutoLogin moet aan staan om te kunnen aanmelden met cookies.',
    +  '{class}::$cost must be a number.' => '{class}::$cost moet een nummer zijn.',
    +  '{class}::$cost must be between 4 and 31.' => '{class}::$cost moet tussen 4 en 31 liggen.',
       '{class}::authenticate() must be implemented.' => '{class}::authenticate() moet geimplementeerd zijn.',
       '{controller} cannot find the requested view "{view}".' => '{controller} kan de opgevraagde view "{view}" niet vinden.',
       '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => '{controller} bevat ongeldig genestelde widget tags in z\'n view "{view}". De {widget} widget roept endWidget() niet aan.',
       '{controller} has an extra endWidget({id}) call in its view.' => '{controller} heeft een extra endWidget({id})-aanroep in z\'n view',
    -  '{n} B' => '',
    -  '{n} byte|{n} bytes' => '',
    -  '{n} GB' => '',
    -  '{n} gigabyte|{n} gigabytes' => '',
    -  '{n} KB' => '',
    -  '{n} kilobyte|{n} kilobytes' => '',
    -  '{n} MB' => '',
    -  '{n} megabyte|{n} megabytes' => '',
    -  '{n} TB' => '',
    -  '{n} terabyte|{n} terabytes' => '',
    +  '{n} B' => '{n} B',
    +  '{n} GB' => '{n} GB',
    +  '{n} KB' => '{n} KB',
    +  '{n} MB' => '{n} MB',
    +  '{n} TB' => '{n} TB',
    +  '{n} byte|{n} bytes' => '{n} byte|{n} bytes',
    +  '{n} gigabyte|{n} gigabytes' => '{n} gigabyte|{n} gigabytes',
    +  '{n} kilobyte|{n} kilobytes' => '{n} kilobyte|{n} kilobytes',
    +  '{n} megabyte|{n} megabytes' => '{n} megabyte|{n} megabytes',
    +  '{n} terabyte|{n} terabytes' => '{n} terabyte|{n} terabytes',
       '{widget} cannot find the view "{view}".' => '{widget} kan het viewbestand "{view}" niet vinden.',
     );
    diff --git a/framework/messages/nl/zii.php b/framework/messages/nl/zii.php
    index f3bd031318f..ef1a58b696b 100644
    --- a/framework/messages/nl/zii.php
    +++ b/framework/messages/nl/zii.php
    @@ -17,11 +17,11 @@
      * NOTE, this file must be saved in UTF-8 encoding.
      */
     return array (
    -  'The property updateSelector should be defined.' => 'Het updateSelector property moet gedefinieerd zijn.',
    +  'The property filterSelector should be defined.' => 'Het attribuut filterSelector moet gedefinieerd zijn.',
       'Are you sure you want to delete this item?' => 'Ben je zeker dat je dit item wil verwijderen?',
       'Delete' => 'Verwijderen',
       'Displaying {start}-{end} of 1 result.|Displaying {start}-{end} of {count} results.' => 'Getoond: {start}-{end} van 1 resultaat.|Getoond: {start}-{end} van {count} resultaten.',
    -  'Either "name" or "value" must be specified for CDataColumn.' => 'Ofwel "name" of "value" moet opgegeven worden voor CDataColumn',
    +  'Either "name" or "value" must be specified for CDataColumn.' => 'Voor CDataColumn moet ofwel "name" of "value" opgegeven.',
       'Home' => 'Thuis',
       'No results found.' => 'Geen resultaten gevonden.',
       'Not set' => 'Niet opgegeven',
    @@ -33,6 +33,7 @@
       'The button type "{type}" is not supported.' => 'Het button type "{type}" wordt niet ondersteund.',
       'The column must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.' => 'Het formaat van de kolom moet "Name:Type:Label" zijn, "Type" en "Label" zijn optioneel.',
       'The property "itemView" cannot be empty.' => 'Het "itemView" property mag niet leeg zijn.',
    +  'The property updateSelector should be defined.' => 'Het updateSelector property moet gedefinieerd zijn.',
       'Total 1 result.|Total {count} results.' => '1 resultaat in totaal.|{count} resultaten in totaal.',
       'Update' => 'Updaten',
       'View' => 'Bekijken',
    diff --git a/framework/messages/no/yii.php b/framework/messages/no/yii.php
    index deaab2d0b9f..81ac680ac61 100644
    --- a/framework/messages/no/yii.php
    +++ b/framework/messages/no/yii.php
    @@ -196,7 +196,7 @@
       '{attribute} is too short (minimum is {min} characters).' => '{attribute} er for kort (minimum er {min} tegn)',
       '{attribute} is too small (minimum is {min}).' => '{attribute} er for liten (minimum er {min}',
       '{attribute} must be a number.' => '{attribute} må være et tall.',
    -  '{attribute} must be an integer.' => '{attribute} må være et heltallr.',
    +  '{attribute} must be an integer.' => '{attribute} må være et heltall.',
       '{attribute} must be repeated exactly.' => '{attribute} må gjenntaes nøyaktig.',
       '{attribute} must be {type}.' => '{attribute} må være {type}.',
       '{className} does not support add() functionality.' => '{className} støtter ikke add()-funksjonalitet.',
    diff --git a/framework/messages/pl/yii.php b/framework/messages/pl/yii.php
    index 6647d0e5322..d7b04a514c3 100644
    --- a/framework/messages/pl/yii.php
    +++ b/framework/messages/pl/yii.php
    @@ -221,10 +221,10 @@
       '{attribute} is not a valid email address.' => 'Zawartość pola {attribute} nie jest poprawnym adresem e-mail.',
       '{attribute} is not in the list.' => '{attribute} nie występuje na tej liście.',
       '{attribute} is of the wrong length (should be {length} characters).' => 'Pole {attribute} posiada niepoprawną długość (powinno posiadać {length} znaków).',
    -  '{attribute} is too big (maximum is {max}).' => 'Wartość w polu {attribute} jest zbyt wielkia (maksimum stanowi {max}).',
    -  '{attribute} is too long (maximum is {max} characters).' => 'Pole {attribute} jest za długie (maksymalna ilość znaków to {max}).',
    -  '{attribute} is too short (minimum is {min} characters).' => 'Pole {attribute} jest za krótkie (minimalna ilość znaków to {min}).',
    -  '{attribute} is too small (minimum is {min}).' => 'Wartość w polu {attribute} jest zbyt krótka (minimum stanowi {min}).',
    +  '{attribute} is too big (maximum is {max}).' => 'Wartość w polu {attribute} jest za duża (maksimum stanowi {max}).',
    +  '{attribute} is too long (maximum is {max} characters).' => 'Wartość w polu {attribute} jest za długa (maksymalna ilość znaków to {max}).',
    +  '{attribute} is too short (minimum is {min} characters).' => 'Wartość w polu {attribute} jest za krótka (minimalna ilość znaków to {min}).',
    +  '{attribute} is too small (minimum is {min}).' => 'Wartość w polu {attribute} jest za mała (minimum stanowi {min}).',
       '{attribute} must be a number.' => 'Zawartość pola {attribute} musi być liczbą.',
       '{attribute} must be an integer.' => 'Zawartość pola {attribute} musi być liczbą całkowitą.',
       '{attribute} must be either {true} or {false}.' => 'Atrybut {attribute} musi posiadać wartość {true} lub {false}.',
    diff --git a/framework/messages/pt/yii.php b/framework/messages/pt/yii.php
    index e0c7ebc65ac..9d398317e23 100644
    --- a/framework/messages/pt/yii.php
    +++ b/framework/messages/pt/yii.php
    @@ -235,7 +235,7 @@
       'You are not authorized to perform this action.' => 'Você não está autorizado a realizar essa operação.',
       'Your request is invalid.' => 'Sua requisição é inválida.',
       'Your request is not valid.' => 'Sua solicitação não é válida.',
    -  '{attribute} "{value}" has already been taken.' => '{attribute} "{value}" já tem sido pego.',
    +  '{attribute} "{value}" has already been taken.' => '{attribute} "{value}" já existe.',
       '{attribute} "{value}" is invalid.' => '{attribute} "{value}" é inválido.',
       '{attribute} cannot accept more than {limit} files.' => '{attribute} não aceita mais que {limit} arquivo(s).',
       '{attribute} cannot be blank.' => '{attribute} não pode ser vazio.',
    diff --git a/framework/messages/ru/yii.php b/framework/messages/ru/yii.php
    index 605b9fa56b4..156cd038ff9 100644
    --- a/framework/messages/ru/yii.php
    +++ b/framework/messages/ru/yii.php
    @@ -17,12 +17,9 @@
      * NOTE, this file must be saved in UTF-8 encoding.
      */
     return array (
    -  'Adding a primary key after table has been created is not supported by SQLite.' => 'Добавление первичного ключа после создания таблицы не поддерживается SQLite.',
    -  'CHttpSession.gcProbability "{value}" is invalid. It must be a float between 0 and 100.' => 'Значение параметра CHttpSession.gcProbability "{value}" задано неверно. Необходимо указать число от 0 до 100.',
    -  'GD with FreeType or ImageMagick PHP extensions are required.' => 'Требуются расширения PHP GD с FreeType или ImageMagick.',
    -  'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'Для того, чтобы использовать валидацию CFileValidator по MIME-типу, установите PECL-расширение fileinfo.',
    -  'Removing a primary key after table has been created is not supported by SQLite.' => 'Удаление первичного ключа после создания таблицы не поддерживается SQLite.',
    -  'The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.' => 'Файл "{file}" не может быть загружен. Можно загружать только файлы со следующими MIME-типами: {mimeTypes}.',
    +  'A PHP extension stopped the file upload.' => 'PHP расширение прервало загрузку файла.',
    +  'CSecurityManager::generateRandomString() cannot generate random string in the current environment.' => 'CSecurityManager::generateRandomString() не может сгенерировать случайную строку в текущем окружении.',
    +  'Unable to generate random string.' => 'Невозможно сгенерировать случайную строку.',
       '"{path}" is not a valid directory.' => 'Путь "{path}" не является правильной директорией.',
       '< Previous' => '< Предыдущая',
       '<< First' => '<< Первая',
    @@ -31,6 +28,7 @@
       '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.' => 'Отношение "{relation}" класса Active record "{class}" сконфигурировано не верно. Вы должны указать тип отношения, связанный отношением класс active record и внешний ключ.',
       '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}" пытается выбрать недопустимый столбец "{column}". Примечание: столбец должен существовать в таблице или являться выражением с алиасом.',
       'Adding a foreign key constraint to an existing table is not supported by SQLite.' => 'Добавление внешнего ключа к существующей таблице не поддерживается SQLite.',
    +  'Adding a primary key after table has been created is not supported by SQLite.' => 'Добавление первичного ключа после создания таблицы не поддерживается SQLite.',
       'Alias "{alias}" is invalid. Make sure it points to an existing PHP file and the file is readable.' => 'Псевдоним "{alias}" неверен. Убедитесь, что он указывает на существующий PHP файл.',
       'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Неправильный алиас "{alias}". Убедитесь, что он указывает на существующую директорию или файл.',
       'Alias "{alias}" is invalid. Make sure it points to an existing directory.' => 'Неправильный псевдоним "{alias}". Убедитесь, что он указывает на существующую директорию.',
    @@ -53,6 +51,8 @@
       'CDbCommand::execute() failed: {error}. The SQL statement executed was: {sql}.' => 'Не удалось выполнить CDbCommand::execute(): {error}. Выполнявшийся SQL-запрос: {sql}.',
       'CDbCommand::{method}() failed: {error}. The SQL statement executed was: {sql}.' => 'Не удалось выполнить CDbCommand::{method}(): {error}. Выполнявшийся SQL-запрос: {sql}.',
       'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection не поддерживает чтения из базы данных {driver}.',
    +  'CDbConnection failed to open the DB connection.' => 'CDbConnection не удалось установить соединение с БД.',
    +  'CDbConnection is unable to find PDO class "{className}". Make sure PDO is installed correctly.' => 'CDbConnection не удалось найти класс PDO "{className}". Убедитесь, что PDO установлен и настроен.',
       'CDbDataReader cannot rewind. It is a forward-only reader.' => 'Компонент CDbDataReader не поддерживает обратное чтение. Этот компонент только для чтения в прямом направлении.',
       'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'Идентификатор CDbHttpSession.connectionID "{id}" задан неверно. Удостоверьтесь, что он соответствует идентификатору компонента CDbConnection вашего приложения.',
       'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'Идентификатор CDbLogRoute.connectionID "{id}" указывает на неверный компонент CDbConnection вашего приложения.',
    @@ -73,6 +73,7 @@
       'CHttpRequest is unable to determine the path info of the request.' => 'Компоненту CHttpRequest не удалось определить информацию о пути, содержащуюся в запросе.',
       'CHttpRequest is unable to determine the request URI.' => 'Компоненту CHttpRequest не удалось определить URI запроса.',
       'CHttpSession.cookieMode can only be "none", "allow" or "only".' => 'Параметр CHttpSession.cookieMode может принимать только значения "none", "allow" или "only".',
    +  'CHttpSession.gcProbability "{value}" is invalid. It must be a float between 0 and 100.' => 'Значение параметра CHttpSession.gcProbability "{value}" задано неверно. Необходимо указать число от 0 до 100.',
       'CHttpSession.savePath "{path}" is not a valid directory.' => 'Путь CHttpSession.savePath "{path}" не является директорией.',
       'CMemCache requires PHP {extension} extension to be loaded.' => 'CMemCache требуется загруженное расширение PHP {extension}.',
       'CMemCache server configuration must be an array.' => 'Конфигурация сервера CMemCache должна быть массивом.',
    @@ -93,6 +94,7 @@
       'Cannot add "{child}" as a child of "{parent}". A loop has been detected.' => 'Добавление элемента "{child}" в качестве потомка "{parent} невозможно, обнаружен бесконечный цикл.',
       'Cannot add "{name}" as a child of itself.' => 'Элемент "{name}" не может стать потомком для самого себя.',
       'Cannot add an item of type "{child}" to an item of type "{parent}".' => 'Нельзя добавить элемент типа "{child}" к элементу типа "{parent}".',
    +  'Cannot hash a password that is empty or not a string.' => 'Не удалось хешировать пароль, являющийся пустым или не являющийся строкой.',
       'Class name "{class}" does not match class file "{file}".' => 'Класс "{class}" не соответствует имени файла "{file}".',
       'Column name must be either a string or an array.' => 'Имя столбца должно быть строкой или массивом.',
       'Dropping DB column is not supported by SQLite.' => 'Удаление поля БД не поддерживается SQLite.',
    @@ -107,10 +109,12 @@
       'Failed to set unsafe attribute "{attribute}" of "{class}".' => 'Не удалось присвоить небезопасный атрибут "{attribute}" класса "{class}".',
       'Failed to start session.' => 'Не удалось запустить сессию.',
       'Failed to write the uploaded file "{file}" to disk.' => 'Не удалось записать загруженный файл "{file}" на диск.',
    -  'File upload was stopped by extension.' => 'Загрузка файла прервана расширением.',
       'Filter "{filter}" is invalid. Controller "{class}" does not have the filter method "filter{filter}".' => 'Фильтр "{filter}" неверный. Контроллер "{class}" не содержит метода "filter{filter}".',
    +  'GD with FreeType or ImageMagick PHP extensions are required.' => 'Требуются расширения PHP GD с FreeType или ImageMagick.',
       'Get a new code' => 'Получить новый код',
       'Go to page: ' => 'Перейти к странице: ',
    +  'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'Для того, чтобы использовать валидацию CFileValidator по MIME-типу, установите PECL-расширение fileinfo.',
    +  'Internal error while generating hash.' => 'Внутренняя ошибка при генерации хеша.',
       'Invalid MO file revision: {revision}.' => 'Не поддерживаемая версия MO файла: {revision}.',
       'Invalid MO file: {file} (magic: {magic}).' => 'Ошибка в MO файле: {file} (магия: {magic}).',
       'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'Неверно задано и значение "{value}". Поддерживаются следующие значение ({enum}).',
    @@ -121,11 +125,13 @@
       'List index "{index}" is out of bound.' => 'Индекс списка "{index}" выходит за его пределы.',
       'Login Required' => 'Необходима авторизация',
       'Map data must be an array or an object implementing Traversable.' => 'Карта должна быть представлена массивом или объектом, реализующим интерфейс Traversable.',
    -  'Missing the temporary folder to store the uploaded file "{file}".' => 'Не найдена временна директория для хранения загруженного файла "{file}".',
    +  'Missing the temporary folder to store the uploaded file "{file}".' => 'Не найдена временная директория для хранения загруженного файла "{file}".',
       'Next >' => 'Следующая >',
    +  'No' => 'Нет',
       'No columns are being updated for table "{table}".' => 'Нет столбцов подлежащих обновлению в таблице "{table}".',
       'No counter columns are being updated for table "{table}".' => 'Нет столбцов-счетчиков подлежащих обновлению в таблице "{table}".',
       'Object configuration must be an array containing a "class" element.' => 'Конфигурация объекта должна быть представлена массивом, содержащим элемент "class".',
    +  'Only SHA1 and MD5 hashing algorithms are supported when using PHP 5.1.1 or below.' => 'При использовании PHP 5.1.1 или ниже поддерживаемыми алгоритмами хеширования являются только SHA1 и MD5.',
       'Please fix the following input errors:' => 'Необходимо исправить следующие ошибки:',
       'Powered by {yii}.' => 'Создано на {yii}.',
       'Property "{class}.{property}" is not defined.' => 'Не определено свойство "{class}.{property}".',
    @@ -133,14 +139,18 @@
       'Property CMaskedTextField.mask cannot be empty.' => 'CMaskedTextField.mask не может быть пустым.',
       'Queue data must be an array or an object implementing Traversable.' => 'Запрос должен быть представлен массивом или объектом, реализующим интерфейс Traversable.',
       'Relation "{name}" is not defined in active record class "{class}".' => 'Отношение "{name}" не было определено в active record классе "{class}".',
    +  'Removing a primary key after table has been created is not supported by SQLite.' => 'Удаление первичного ключа после создания таблицы не поддерживается SQLite.',
       'Renaming a DB column is not supported by SQLite.' => 'Переименование поля БД не поддерживается SQLite.',
    +  'Script HTML options are not allowed for "CClientScript::POS_LOAD" and "CClientScript::POS_READY".' => 'HTML опции скриптов недопустимы для "CClientScript::POS_LOAD" и "CClientScript::POS_READY".',
       'Stack data must be an array or an object implementing Traversable.' => 'Стек должен быть представлен массивом или объектом, реализующим интерфейс Traversable.',
       'Table "{table}" does not exist.' => 'Таблица "{table}" не существует.',
       'Table "{table}" does not have a column named "{column}".' => 'Таблица "{table}" не содержит столбца "{column}".',
       'The "db" application component must be configured to be a CDbConnection object.' => 'Компонент приложения "db" должен быть объектом CDbConnection.',
       'The "filter" property must be specified with a valid callback.' => 'Свойство "filter" должно быть определено правильным обратным вызовом (callback).',
    +  'The "forceCopy" and "linkAssets" cannot be both true.' => '"forceCopy" и "linkAssets" не могут быть true одновременно.',
       'The "pattern" property must be specified with a valid regular expression.' => 'Свойство "pattern" должно быть определено правильным регулярным выражением.',
       'The "range" property must be specified with a list of values.' => 'Свойство "range" должно указываться со списком значений.',
    +  'The $converter argument must be a valid callback or null.' => 'Аргумент $converter должен быть либо callback либо null.',
       'The CSRF token could not be verified.' => 'Невозможно определить CSRF.',
       'The DB query must contain the "from" portion.' => 'Запрос к БД должен содержать "from".',
       'The STAT relation "{name}" cannot have child relations.' => 'Отношение STAT "{name}" не может содержать другие отношения.',
    @@ -151,6 +161,7 @@
       'The asset "{asset}" to be published does not exist.' => 'Необходимый для отображения asset "{asset}" не существует.',
       'The command path "{path}" is not a valid directory.' => 'Командный путь "{path}" не является директорией.',
       'The controller path "{path}" is not a valid directory.' => 'Путь к контроллерам "{path}" не является директорией.',
    +  'The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.' => 'Файл "{file}" не может быть загружен. Можно загружать только файлы со следующими MIME-типами: {mimeTypes}.',
       'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'Файл "{file}" не может быть загружен. Разрешена загрузка файлов только со следующими расширениями: {extensions}.',
       'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'Размер файла "{file}" слишком велик, он не должен превышать {limit} байт.',
       'The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.' => 'Размер файла "{file}" слишком мал, он не должен быть менее {limit} байт.',
    @@ -180,7 +191,6 @@
       'The pattern for week in month must be "W".' => 'Шаблон недели в месяце: "W".',
       'The pattern for week in year must be "w".' => 'Шаблон недели в году: "w".',
       'The queue is empty.' => 'Очередь пуста.',
    -  '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.' => 'Отношение "{relation}" AR модели "{class}" определено некорректно. Таблица "{joinTable}", указанная во внешнем ключе, не найдена в БД.',
       '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.' => 'Отношение "{relation}", определенное в записи active record класса "{class}" ошибочно: в базе данных нет включаемой таблицы "{joinTable}", упомянутой во внешнем ключе.',
       'The relation "{relation}" in active record class "{class}" is specified with a foreign key "{key}" that does not point to the parent table "{table}".' => 'Отношение "{relation}" AR модели "{class}" определено с использованием внешнего ключа "{key}", который не указывает на таблицу-родителя "{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.' => 'Отношение "{relation}", определенное в записи active record класса "{class}", определено неполным внешним ключом. Внешний ключ должен состоять из столбцов, относящихся к обоим объединяемым таблицам.',
    @@ -212,13 +222,14 @@
       'Unknown type "{type}".' => 'Неизвестный тип "{type}".',
       'Unrecognized locale "{locale}".' => 'Неизвестная локаль "{locale}".',
       'View file "{file}" does not exist.' => 'Файл представления "{file}" не существует.',
    +  'Yes' => 'Да',
       'Yii application can only be created once.' => 'Приложение Yii может быть создано только один раз.',
       'You are not authorized to perform this action.' => 'У вас недостаточно прав для выполнения указанного действия.',
       'Your request is invalid.' => 'Некорректный запрос.',
       '{attribute} "{value}" has already been taken.' => '{attribute} "{value}" уже занят.',
       '{attribute} "{value}" is invalid.' => '{attribute} "{value}" неверно.',
       '{attribute} cannot accept more than {limit} files.' => '{attribute} не может принять более {limit} файлов.',
    -  '{attribute} cannot be blank.' => 'Необходимо заполнить поле {attribute}.',
    +  '{attribute} cannot be blank.' => 'Необходимо заполнить поле «{attribute}».',
       '{attribute} is in the list.' => '{attribute} находится в списке.',
       '{attribute} is invalid.' => '{attribute} не верен.',
       '{attribute} is not a valid URL.' => '{attribute} не является правильным URL.',
    @@ -250,20 +261,24 @@
       '{class} does not support fetching all table names.' => '{class} не поддерживает выборку имён всех таблиц.',
       '{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => '{class} содержит неверное правило проверки. Правило должно иметь имя и включать элементы для проверки.',
       '{class} must specify "model" and "attribute" or "name" property values.' => 'В классе {class} должны быть определены значения свойств "model" и "attribute", либо "name".',
    +  '{class} requires the Blowfish option of the PHP crypt() function. This system does not have it.' => '{class} требует наличия отсутствующего в вашей системе Blowfish для функции PHP crypt().',
    +  '{class} requires the PHP crypt() function. This system does not have it.' => '{class} требует наличия отсутствуюей в вашей системе функции PHP crypt().',
       '{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => 'Для использования авторизации, построенной на cookie, свойство {class}.allowAutoLogin должно принять значение "true".',
    +  '{class}::$cost must be a number.' => '{class}::$cost должен быть числом.',
    +  '{class}::$cost must be between 4 and 31.' => '{class}::$cost должен быть от 4 до 31.',
       '{class}::authenticate() must be implemented.' => 'Требуется определить метод {class}::authenticate().',
       '{controller} cannot find the requested view "{view}".' => 'Контроллер {controller} не может найти представление "{view}".',
       '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => 'Контроллер {controller} содержит в своем представлении "{view}" тэги виджетов с неправильной вложенностью. В виджете {widget} не используется вызов endWidget().',
       '{controller} has an extra endWidget({id}) call in its view.' => 'В представлении контроллера {controller} обнаружен лишний вызов endWidget({id}).',
       '{n} B' => '{n} Б',
    -  '{n} byte|{n} bytes' => '{n} байт|{n} байта|{n} байтов|{n} байта',
       '{n} GB' => '{n} ГБ',
    -  '{n} gigabyte|{n} gigabytes' => '{n} гигабайт|{n} гигабайта|{n} гигабайтов|{n} гигабайта',
       '{n} KB' => '{n} КБ',
    -  '{n} kilobyte|{n} kilobytes' => '{n} килобайт|{n} килобайта|{n} килобайтов|{n} килобайта',
       '{n} MB' => '{n} МБ',
    -  '{n} megabyte|{n} megabytes' => '{n} мегабайт|{n} мегабайта|{n} мегабайтов|{n} мегабайта',
       '{n} TB' => '{n} ТБ',
    +  '{n} byte|{n} bytes' => '{n} байт|{n} байта|{n} байтов|{n} байта',
    +  '{n} gigabyte|{n} gigabytes' => '{n} гигабайт|{n} гигабайта|{n} гигабайтов|{n} гигабайта',
    +  '{n} kilobyte|{n} kilobytes' => '{n} килобайт|{n} килобайта|{n} килобайтов|{n} килобайта',
    +  '{n} megabyte|{n} megabytes' => '{n} мегабайт|{n} мегабайта|{n} мегабайтов|{n} мегабайта',
       '{n} terabyte|{n} terabytes' => '{n} терабайт|{n} терабайта|{n} терабайтов|{n} терабайта',
       '{widget} cannot find the view "{view}".' => 'Виджет {widget} не может найти представление "{view}".',
     );
    diff --git a/framework/messages/ru/zii.php b/framework/messages/ru/zii.php
    index 8304641e051..a35abac40bc 100644
    --- a/framework/messages/ru/zii.php
    +++ b/framework/messages/ru/zii.php
    @@ -37,5 +37,5 @@
       'Total 1 result.|Total {count} results.' => 'Всего {count} результат.|Всего {count} результата.|{count} результатов.|{count} результата.',
       'Update' => 'Редактировать',
       'View' => 'Просмотреть',
    -  '{class} must specify "model" and "attribute" or "name" property values.' => 'В классе {class} должны быть заданы значения свойств "model" и "attribute", либо значение "name".',
    +  '{class} must specify "model" and "{attribute}" or "{name}" property values.' => 'В классе {class} должны быть заданы значения свойств "model" и "{attribute}", либо значение "{name}".',
     );
    diff --git a/framework/messages/sk/yii.php b/framework/messages/sk/yii.php
    index daa18e56627..299df9b42ed 100644
    --- a/framework/messages/sk/yii.php
    +++ b/framework/messages/sk/yii.php
    @@ -17,8 +17,8 @@
      * NOTE, this file must be saved in UTF-8 encoding.
      */
     return array (
    -  'Adding a primary key after table has been created is not supported by SQLite.' => 'Pridanie primárneho kľúča po vytvorení tabuľky nie je podporované databázou SQLite.',
    -  'Removing a primary key after table has been created is not supported by SQLite.' => 'Odstránenie primárneho kľúča po vytvorení tabuľky nie je podporované databázou SQLite.',
    +  'CSecurityManager::generateRandomString() cannot generate random string in the current environment.' => 'CSecurityManager::generateRandomString() nemôže v súčasnom prostredí vygenerovať náhodný reťazec.',
    +  'Unable to generate random string.' => 'Nepodarilo sa vygenerovať náhodný reťazec.',
       '"{path}" is not a valid directory.' => '"{path}" nie je platný adresár.',
       '< Previous' => '< Predchádzajúca',
       '<< First' => '<< Prvá',
    @@ -27,6 +27,7 @@
       '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.' => 'Active record "{class}" má neplatnú konfiguráciu pre reláciu "{relation}". Konfigurácia musí špecifikovať typ relácie, Active record objekt a foreign key.',
       '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.' => 'Active record "{class}" sa pokúsila nájsť neplatný stĺpec "{column}". Pozor - hľadaný stĺpec musí existovať v databáze, alebo musí byť výrazom s aliasom.',
       'Adding a foreign key constraint to an existing table is not supported by SQLite.' => 'Pridanie foreign key do existujúcej tabuľky nie je v prípade databázy SQLite možné.',
    +  'Adding a primary key after table has been created is not supported by SQLite.' => 'Pridanie primárneho kľúča po vytvorení tabuľky nie je podporované databázou SQLite.',
       'Alias "{alias}" is invalid. Make sure it points to an existing PHP file and the file is readable.' => 'Alias "{alias}" je neplatný. Ubezpečte sa, že obsahuje cestu ku platnému PHP súboru.',
       'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Alias "{alias}" je neplatný. Ubezpečte sa, že ukazuje ku existujúcemu adresáru alebo súboru.',
       'Alias "{alias}" is invalid. Make sure it points to an existing directory.' => 'Alias "{alias}" je neplatný. Ubezpečte sa, že ukazuje ku existujúcemu adresáru.',
    @@ -49,6 +50,8 @@
       'CDbCommand::execute() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::execute() chyba: {error}. Vykonaný SQL výraz bol: {sql}.',
       'CDbCommand::{method}() failed: {error}. The SQL statement executed was: {sql}.' => 'CDbCommand::{method} chyba: {error}. Vykonaný SQL výraz bol: {sql}.',
       'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection nepodporuje načítanie schémy pre databázový driver {driver}.',
    +  'CDbConnection failed to open the DB connection.' => 'CDbConnection sa nepodarilo pripojiť na databázu.',
    +  'CDbConnection is unable to find PDO class "{className}". Make sure PDO is installed correctly.' => 'CDbConnection nenašlo PDO objekt "{className}". Ubezpečte sa, že PDO rozšírenie je inštalované korektne.',
       'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader nemôže načítať predošlé záznamy. Je možné čítať len nasledujúce záznamy.',
       'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" je neplatné. Ubezpečte sa, že odkazuje na ID aplikačného komponentu CDbConnection.',
       'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" neukazuje na platný aplikačný komponent CDbConnection.',
    @@ -90,6 +93,7 @@
       'Cannot add "{child}" as a child of "{parent}". A loop has been detected.' => 'Nie je možné pridať "{child}" ako potomka "{parent}". Bol identifikovaný nekonečný cyklus.',
       'Cannot add "{name}" as a child of itself.' => 'Nie je možné pridať "{name}" ako potomka seba samého.',
       'Cannot add an item of type "{child}" to an item of type "{parent}".' => 'Nie je možné pridať položku typu "{child}" ku položke typu "{parent}".',
    +  'Cannot hash a password that is empty or not a string.' => 'Nie je možné vypočítať hash pre heslo, ktoré je prázdne, alebo nie je reťazec.',
       'Class name "{class}" does not match class file "{file}".' => 'Názov objektu "{class}" nesúhlasí s názvom súboru "{file}".',
       'Column name must be either a string or an array.' => 'Názov stĺpca musí byť reťazec alebo pole.',
       'Dropping DB column is not supported by SQLite.' => 'Odstránenie DB stĺpca nie je v prípade SQLite podporované.',
    @@ -110,6 +114,7 @@
       'Get a new code' => 'Nový kód',
       'Go to page: ' => 'Prejsť na stránku: ',
       'In order to use MIME-type validation provided by CFileValidator fileinfo PECL extension should be installed.' => 'Pre využitie kontroly MIME-typ súboru v rámci validátora CFileValidator je potrebné mať inštalované PECL rozšírenie fileinfo.',
    +  'Internal error while generating hash.' => 'Počas generácie hash sa vyskytla interná chyba.',
       'Invalid MO file revision: {revision}.' => 'Neplatná revízia MO súboru: {revision}.',
       'Invalid MO file: {file} (magic: {magic}).' => 'Neplatný MO súbor: {file} (magic: {magic}).',
       'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'Neplatná spočítateľná hodnota "{value}". Ubezpečte sa, že hodnota je z výberu ({enum}).',
    @@ -122,9 +127,11 @@
       'Map data must be an array or an object implementing Traversable.' => 'Mapa musí obsahovať pole alebo objekt implementujúci Traversable.',
       'Missing the temporary folder to store the uploaded file "{file}".' => 'Nebol nájdený dočasný adresár pre uloženie nahrávaného súboru "{file}".',
       'Next >' => 'Nasledujúca >',
    +  'No' => 'Nie',
       'No columns are being updated for table "{table}".' => 'V tabuľke "{table}" nebudú aktualizované žiadne polia.',
       'No counter columns are being updated for table "{table}".' => 'V tabuľke "{table}" nebudú aktualizované žiadne polia pre počítadla.',
       'Object configuration must be an array containing a "class" element.' => 'Konfigurácia objektu musí byť pole obsahujúce element "class".',
    +  'Only SHA1 and MD5 hashing algorithms are supported when using PHP 5.1.1 or below.' => 'Pre verziu PHP 5.1.1 a nižšie sú podporované len hashovacie algoritmy SHA1 a MD5.',
       'Please fix the following input errors:' => 'Opravte prosím nasledujúce chyby vo vstupných údajoch:',
       'Powered by {yii}.' => 'Powered by {yii}.',
       'Property "{class}.{property}" is not defined.' => 'Vlastnosť "{class}.{property}" nie je definovaná.',
    @@ -132,14 +139,18 @@
       'Property CMaskedTextField.mask cannot be empty.' => 'Vlastnosť CMaskedTextField.mask nesmie byť prázdna.',
       'Queue data must be an array or an object implementing Traversable.' => 'Radené dáta (queue data) musia byť pole alebo objekt implementujúci Traversable.',
       'Relation "{name}" is not defined in active record class "{class}".' => 'Relácia "{name}" nie je definovaná v objekte aktívneho záznamu "{class}".',
    +  'Removing a primary key after table has been created is not supported by SQLite.' => 'Odstránenie primárneho kľúča po vytvorení tabuľky nie je podporované databázou SQLite.',
       'Renaming a DB column is not supported by SQLite.' => 'Premenovanie DB stĺpca nie je v prípade SQLite podporované.',
    +  'Script HTML options are not allowed for "CClientScript::POS_LOAD" and "CClientScript::POS_READY".' => 'Pre "CClientScript::POS_LOAD" and "CClientScript::POS_READY" nie sú povolené script HTML options.',
       'Stack data must be an array or an object implementing Traversable.' => 'Dáta v zásobníku musia byť pole alebo objekt implementujúci Traversable.',
       'Table "{table}" does not exist.' => 'Tabuľka "{table}" neexistuje.',
       'Table "{table}" does not have a column named "{column}".' => 'Tabuľka "{table}" neobsahuje stĺpec s názvom "{column}".',
       'The "db" application component must be configured to be a CDbConnection object.' => 'Komponent aplikácie "db" musí byť konfigurovaný ako objekt typu CDbConnection.',
       'The "filter" property must be specified with a valid callback.' => 'Vlastnosť "filter" musí byť špecifikovaná s platnou spätnou funkciou.',
    +  'The "forceCopy" and "linkAssets" cannot be both true.' => 'Nastavenia pre "forceCopy" and "linkAssets" nemôžu byť súčasne true.',
       'The "pattern" property must be specified with a valid regular expression.' => 'Vlastnosť "pattern" musí byť špecifikovaná s platným regulárnym výrazom.',
       'The "range" property must be specified with a list of values.' => 'Vlastnosť "range" musí mať špecifikovaný zoznam hodnôt.',
    +  'The $converter argument must be a valid callback or null.' => 'Argument pre $converter musí byť volateľná funkcia alebo null.',
       'The CSRF token could not be verified.' => 'CSFR token nemohol byť overený.',
       'The DB query must contain the "from" portion.' => 'Dopyt na databázu musí obsahovať časť pre "from".',
       'The STAT relation "{name}" cannot have child relations.' => 'STAT Relácia "{name}" nesmie mať žiadne potomkové relácie.',
    @@ -212,6 +223,7 @@
       'Unknown type "{type}".' => 'Neznámy typ "{type}".',
       'Unrecognized locale "{locale}".' => 'Neznáma jazyková mutácia "{locale}".',
       'View file "{file}" does not exist.' => 'Súbor pre šablónu "{file}" nebol nájdený.',
    +  'Yes' => 'Áno',
       'Yii application can only be created once.' => 'Yii aplikácia môže byť vytvorená len jeden raz.',
       'You are not authorized to perform this action.' => 'Nemáte oprávnenie na požadovanú akciu.',
       'Your request is invalid.' => 'Vaša požiadavka je neplatná.',
    @@ -250,7 +262,11 @@
       '{class} does not support fetching all table names.' => '{class} nepodporuje načítanie názvov všetkých tabuliek.',
       '{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => '{class} má nesprávne definované validačné pravidlo. Pravidlo musí špecifikovať atribúty, ktoré sa majú validovať ako aj meno validátora.',
       '{class} must specify "model" and "attribute" or "name" property values.' => '{class} musí definovať hodnotu pre vlastnosti "model" a "attribute" alebo "name".',
    +  '{class} requires the Blowfish option of the PHP crypt() function. This system does not have it.' => '{class} vyžaduje nastavenie Blowfish funkcie crypt(). Tento systém ju nemá.',
    +  '{class} requires the PHP crypt() function. This system does not have it.' => '{class} vyžaduje PHP funkciu crypt(). Tento systém ju nemá.',
       '{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => '{class}.allowAutoLogin musí byť nastavená na "true" pre zapnutie podpory autentifikácie cez cookies.',
    +  '{class}::$cost must be a number.' => '{class}::$cost musí byť číslo.',
    +  '{class}::$cost must be between 4 and 31.' => '{class}::$cost musí byť číslo medzi 4 a 31.',
       '{class}::authenticate() must be implemented.' => 'Je potrebné implementovať metódu {class}::authenticate().',
       '{controller} cannot find the requested view "{view}".' => '{controller} nenašiel požadovanú šablónu "{view}".',
       '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => '{controller} obsahuje nesprávne umiestnené Widget tagy v šablóne "{view}". Blok pre {widget} nemá korektne ukončený blok zavolaním metódy endWidget().',
    diff --git a/framework/messages/sk/zii.php b/framework/messages/sk/zii.php
    index a915ca6653d..72ea6a6bc30 100644
    --- a/framework/messages/sk/zii.php
    +++ b/framework/messages/sk/zii.php
    @@ -17,7 +17,7 @@
      * NOTE, this file must be saved in UTF-8 encoding.
      */
     return array (
    -  'The property filterSelector should be defined.' => 'Je potrebné definovať vlastnosť filterSelector.',
    +  '{class} must specify "model" and "{attribute}" or "{name}" property values.' => '{class} musí špecifikovať "model" a hodnotu pre "{attribute}" alebo "{name}".',
       'Are you sure you want to delete this item?' => 'Odstrániť záznam?',
       'Delete' => 'Odstrániť',
       'Displaying {start}-{end} of 1 result.|Displaying {start}-{end} of {count} results.' => 'Zobrazených {start}-{end} z 1 záznamu.|Zobrazených {start}-{end} z celkovo {count} záznamov.',
    @@ -33,9 +33,9 @@
       'The button type "{type}" is not supported.' => 'Tlačidlo typu "{type}" nie je podporované.',
       'The column must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.' => 'Stĺpec musí byť špecifikovaný v tvare "Name:Type:Label", pričom "Type" a "Label" sú nepovinné.',
       'The property "itemView" cannot be empty.' => 'Vlastnosť "itemView" nesmie byť prázdna.',
    +  'The property filterSelector should be defined.' => 'Je potrebné definovať vlastnosť filterSelector.',
       'The property updateSelector should be defined.' => 'Je potrebné definovať vlastnosť updateSelector.',
       'Total 1 result.|Total {count} results.' => 'Nájdený 1 záznam.|Nájdených {count} záznamov.',
       'Update' => 'Upraviť',
       'View' => 'Náhľad',
    -  '{class} must specify "model" and "attribute" or "name" property values.' => '{class} musí mať špecifikované vlastnosti pre "model" a "attribute" alebo "name".',
     );
    diff --git a/framework/test/CDbFixtureManager.php b/framework/test/CDbFixtureManager.php
    index fe2e88a21f9..57ef0a55e86 100644
    --- a/framework/test/CDbFixtureManager.php
    +++ b/framework/test/CDbFixtureManager.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -12,7 +12,7 @@
      * CDbFixtureManager manages database fixtures during tests.
      *
      * A fixture represents a list of rows for a specific table. For a test method,
    - * using a fixture means that at the begin of the method, the table has and only
    + * using a fixture means that at the beginning of the method, the table has and only
      * has the rows that are given in the fixture. Therefore, the table's state is
      * predictable.
      *
    @@ -89,6 +89,7 @@ public function init()
     
     	/**
     	 * Returns the database connection used to load fixtures.
    +	 * @throws CException if {@link connectionID} application component is invalid
     	 * @return CDbConnection the database connection
     	 */
     	public function getDbConnection()
    @@ -239,6 +240,7 @@ public function checkIntegrity($check)
     	 * You may need to call {@link checkIntegrity} to turn off integrity check temporarily
     	 * before you call this method.
     	 * @param string $tableName the table name
    +	 * @throws CException if given table does not exist
     	 */
     	public function truncateTable($tableName)
     	{
    diff --git a/framework/test/CDbTestCase.php b/framework/test/CDbTestCase.php
    index 564ca899501..e131eeebb20 100644
    --- a/framework/test/CDbTestCase.php
    +++ b/framework/test/CDbTestCase.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -31,7 +31,6 @@
      * corresponding to a fixture data row using $this->posts('first post').
      * Note, here 'first post' refers to a key to a row in the original fixture data.
      *
    - * @property CDbFixtureManager $fixtureManager The database fixture manager.
      *
      * @author Qiang Xue 
      * @package system.test
    @@ -52,6 +51,7 @@ abstract class CDbTestCase extends CTestCase
     	 * PHP magic method.
     	 * This method is overridden so that named fixture data can be accessed like a normal property.
     	 * @param string $name the property name
    +	 * @throws Exception if unknown property is used
     	 * @return mixed the property value
     	 */
     	public function __get($name)
    @@ -67,6 +67,7 @@ public function __get($name)
     	 * This method is overridden so that named fixture ActiveRecord instances can be accessed in terms of a method call.
     	 * @param string $name method name
     	 * @param string $params method parameters
    +	 * @throws Exception if unknown method is used
     	 * @return mixed the property value
     	 */
     	public function __call($name,$params)
    diff --git a/framework/test/CTestCase.php b/framework/test/CTestCase.php
    index 16b218fcb7d..5b1ce08ee8d 100644
    --- a/framework/test/CTestCase.php
    +++ b/framework/test/CTestCase.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -15,7 +15,7 @@
     require_once('PHPUnit/Autoload.php');
     spl_autoload_register(array('YiiBase','autoload')); // put yii's autoloader at the end
     
    -if (in_array('phpunit_autoload', spl_autoload_functions())) { // PHPUnit >= 3.7 'phpunit_alutoload' was obsoleted
    +if (in_array('phpunit_autoload', spl_autoload_functions())) { // PHPUnit >= 3.7 'phpunit_autoload' was obsoleted
         spl_autoload_unregister('phpunit_autoload');
         Yii::registerAutoloader('phpunit_autoload');
     }
    diff --git a/framework/test/CWebTestCase.php b/framework/test/CWebTestCase.php
    index 07324003092..19a8a3bd30e 100644
    --- a/framework/test/CWebTestCase.php
    +++ b/framework/test/CWebTestCase.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -38,6 +38,7 @@ abstract class CWebTestCase extends PHPUnit_Extensions_SeleniumTestCase
     	 * PHP magic method.
     	 * This method is overridden so that named fixture data can be accessed like a normal property.
     	 * @param string $name the property name
    +	 * @throws Exception if unknown property is used
     	 * @return mixed the property value
     	 */
     	public function __get($name)
    diff --git a/framework/utils/CDateTimeParser.php b/framework/utils/CDateTimeParser.php
    index 9d8565d97bb..e20a855af45 100644
    --- a/framework/utils/CDateTimeParser.php
    +++ b/framework/utils/CDateTimeParser.php
    @@ -6,7 +6,7 @@
      * @author Qiang Xue 
      * @author Tomasz Suchanek 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -207,7 +207,7 @@ public static function parse($value,$pattern='MM/dd/yyyy',$defaults=array())
     				}
     				default:
     				{
    -					$tn=strlen($token);
    +					$tn=self::$_mbstringAvailable ? mb_strlen($token,Yii::app()->charset) : strlen($token);
     					if($i>=$n || ($token{0}!='?' && (self::$_mbstringAvailable ? mb_substr($value,$i,$tn,Yii::app()->charset) : substr($value,$i,$tn))!==$token))
     						return false;
     					$i+=$tn;
    @@ -265,19 +265,22 @@ public static function parse($value,$pattern='MM/dd/yyyy',$defaults=array())
     	 */
     	private static function tokenize($pattern)
     	{
    -		if(!($n=strlen($pattern)))
    +		if(!($n=self::$_mbstringAvailable ? mb_strlen($pattern,Yii::app()->charset) : strlen($pattern)))
     			return array();
     		$tokens=array();
    -		for($c0=$pattern[0],$start=0,$i=1;$i<$n;++$i)
    +		$c0=self::$_mbstringAvailable ? mb_substr($pattern,0,1,Yii::app()->charset) : substr($pattern,0,1);
    +
    +		for($start=0,$i=1;$i<$n;++$i)
     		{
    -			if(($c=$pattern[$i])!==$c0)
    +			$c=self::$_mbstringAvailable ? mb_substr($pattern,$i,1,Yii::app()->charset) : substr($pattern,$i,1);
    +			if($c!==$c0)
     			{
    -				$tokens[]=substr($pattern,$start,$i-$start);
    +				$tokens[]=self::$_mbstringAvailable ? mb_substr($pattern,$start,$i-$start,Yii::app()->charset) : substr($pattern,$start,$i-$start);
     				$c0=$c;
     				$start=$i;
     			}
     		}
    -		$tokens[]=substr($pattern,$start,$n-$start);
    +		$tokens[]=self::$_mbstringAvailable ? mb_substr($pattern,$start,$n-$start,Yii::app()->charset) : substr($pattern,$start,$n-$start);
     		return $tokens;
     	}
     
    @@ -324,7 +327,7 @@ protected static function parseMonth($value,$offset,$width,&$monthName)
     		for($len=1; $offset+$len<=$valueLength; $len++)
     		{
     			$monthName=self::$_mbstringAvailable ? mb_substr($value,$offset,$len,Yii::app()->charset) : substr($value,$offset,$len);
    -			if(!preg_match('/^\p{L}+$/u',$monthName)) // unicode aware replacement for ctype_alpha($monthName)
    +			if(!preg_match('/^[\p{L}\p{M}]+$/u',$monthName)) // unicode aware replacement for ctype_alpha($monthName)
     			{
     				$monthName=self::$_mbstringAvailable ? mb_substr($monthName,0,-1,Yii::app()->charset) : substr($monthName,0,-1);
     				break;
    diff --git a/framework/utils/CFileHelper.php b/framework/utils/CFileHelper.php
    index 1267549c92f..16272339d87 100644
    --- a/framework/utils/CFileHelper.php
    +++ b/framework/utils/CFileHelper.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -63,6 +63,27 @@ public static function copyDirectory($src,$dst,$options=array())
     		self::copyDirectoryRecursive($src,$dst,'',$fileTypes,$exclude,$level,$options);
     	}
     
    +	/**
    +	 * Removes a directory recursively.
    +	 * @param string $directory to be deleted recursively.
    +	 * @since 1.1.14
    +	 */
    +	public static function removeDirectory($directory)
    +	{
    +		$items=glob($directory.DIRECTORY_SEPARATOR.'{,.}*',GLOB_MARK | GLOB_BRACE);
    +		foreach($items as $item)
    +		{
    +			if(basename($item)=='.' || basename($item)=='..')
    +				continue;
    +			if(substr($item,-1)==DIRECTORY_SEPARATOR)
    +				self::removeDirectory($item);
    +			else
    +				unlink($item);
    +		}
    +		if(is_dir($directory))
    +			rmdir($directory);
    +	}
    +
     	/**
     	 * Returns the files found under the specified directory and subdirectories.
     	 * @param string $dir the directory under which the files will be looked for
    @@ -130,7 +151,7 @@ protected static function copyDirectoryRecursive($src,$dst,$base,$fileTypes,$exc
     				{
     					copy($path,$dst.DIRECTORY_SEPARATOR.$file);
     					if(isset($options['newFileMode']))
    -						chmod($dst.DIRECTORY_SEPARATOR.$file,$options['newFileMode']);
    +						@chmod($dst.DIRECTORY_SEPARATOR.$file,$options['newFileMode']);
     				}
     				elseif($level)
     					self::copyDirectoryRecursive($path,$dst.DIRECTORY_SEPARATOR.$file,$base.'/'.$file,$fileTypes,$exclude,$level-1,$options);
    @@ -270,10 +291,9 @@ public static function getMimeTypeByExtension($file,$magicFile=null)
     	 * Shared environment safe version of mkdir. Supports recursive creation.
     	 * For avoidance of umask side-effects chmod is used.
     	 *
    -	 * @static
     	 * @param string $dst path to be created
    -	 * @param array $options newDirMode element used, must contain access bitmask.
    -	 * @param boolean $recursive
    +	 * @param array $options newDirMode element used, must contain access bitmask
    +	 * @param boolean $recursive whether to create directory structure recursive if parent dirs do not exist
     	 * @return boolean result of mkdir
     	 * @see mkdir
     	 */
    @@ -285,7 +305,7 @@ private static function mkdir($dst,array $options,$recursive)
     
     		$mode=isset($options['newDirMode']) ? $options['newDirMode'] : 0777;
     		$res=mkdir($dst, $mode);
    -		chmod($dst,$mode);
    +		@chmod($dst,$mode);
     		return $res;
     	}
     }
    diff --git a/framework/utils/CFormatter.php b/framework/utils/CFormatter.php
    index 0b66ccb19af..f072c366a75 100644
    --- a/framework/utils/CFormatter.php
    +++ b/framework/utils/CFormatter.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -24,7 +24,7 @@
      * 
      *
    • raw: the attribute value will not be changed at all.
    • *
    • text: the attribute value will be HTML-encoded when rendering.
    • - *
    • ntext: the {@link formatNtext} method will be called to format the attribute value as a HTML-encoded plain text with newlines converted as the HTML <br /> tags.
    • + *
    • ntext: the {@link formatNtext} method will be called to format the attribute value as a HTML-encoded plain text with newlines converted as the HTML <br /> or <p></p> tags.
    • *
    • html: the attribute value will be purified and then returned.
    • *
    • date: the {@link formatDate} method will be called to format the attribute value as a date.
    • *
    • time: the {@link formatTime} method will be called to format the attribute value as a time.
    • @@ -34,10 +34,13 @@ *
    • email: the {@link formatEmail} method will be called to format the attribute value as a mailto link.
    • *
    • image: the {@link formatImage} method will be called to format the attribute value as an image tag where the attribute value is the image URL.
    • *
    • url: the {@link formatUrl} method will be called to format the attribute value as a hyperlink where the attribute value is the URL.
    • + *
    • size: the {@link formatSize} method will be called to format the attribute value, interpreted as a number of bytes, as a size in human readable form.
    • *
    * * By default, {@link CApplication} registers {@link CFormatter} as an application component whose ID is 'format'. * Therefore, one may call Yii::app()->format->boolean(1). + * You might want to replace this component with {@link CLocalizedFormatter} to enable formatting based on the + * current locale settings. * * @property CHtmlPurifier $htmlPurifier The HTML purifier instance. * @@ -115,6 +118,7 @@ public function __call($name,$parameters) * @param mixed $value the value to be formatted * @param string $type the data type. This must correspond to a format method available in CFormatter. * For example, we can use 'text' here because there is method named {@link formatText}. + * @throws CException if given type is unknown * @return string the formatted data */ public function format($value,$type) @@ -148,13 +152,29 @@ public function formatText($value) } /** - * Formats the value as a HTML-encoded plain text and converts newlines with HTML br tags. + * Formats the value as a HTML-encoded plain text and converts newlines with HTML <br /> or + * <p></p> tags. * @param mixed $value the value to be formatted + * @param boolean $paragraphs whether newlines should be converted to HTML <p></p> tags, + * false by default meaning that HTML <br /> tags will be used + * @param boolean $removeEmptyParagraphs whether empty paragraphs should be removed, defaults to true; + * makes sense only when $paragraphs parameter is true * @return string the formatted result */ - public function formatNtext($value) + public function formatNtext($value,$paragraphs=false,$removeEmptyParagraphs=true) { - return nl2br(CHtml::encode($value)); + $value=CHtml::encode($value); + if($paragraphs) + { + $value='

    '.str_replace(array("\r\n", "\n", "\r"), '

    ',$value).'

    '; + if($removeEmptyParagraphs) + $value=preg_replace('/(<\/p>

    ){2,}/i','

    ',$value); + return $value; + } + else + { + return nl2br($value); + } } /** @@ -200,7 +220,12 @@ public function formatDatetime($value) return date($this->datetimeFormat,$this->normalizeDateValue($value)); } - private function normalizeDateValue($time) + /** + * Normalizes an expression as a timestamp. + * @param mixed $time the time expression to be normalized + * @return int the normalized result as a UNIX timestamp + */ + protected function normalizeDateValue($time) { if(is_string($time)) { diff --git a/framework/utils/CLocalizedFormatter.php b/framework/utils/CLocalizedFormatter.php new file mode 100644 index 00000000000..a2323f18042 --- /dev/null +++ b/framework/utils/CLocalizedFormatter.php @@ -0,0 +1,131 @@ + + * @link http://www.yiiframework.com/ + * @copyright 2008-2013 Yii Software LLC + * @license http://www.yiiframework.com/license/ + */ + +/** + * CLocalizedFormatter provides a set of commonly used data formatting methods based on the current locale settings. + * + * It provides the same functionality as {@link CFormatter}, but overrides all the settings for + * {@link booleanFormat}, {@link datetimeFormat} and {@link numberFormat} with the values for the + * current locale. Because of this you are not able to configure these properties for CLocalizedFormatter directly. + * Date and time format can be adjsuted by setting {@link dateFormat} and {@link timeFormat}. + * + * It uses {@link CApplication::locale} by default but you can set a custom locale by using {@link setLocale}-method. + * + * For a list of recognizable format types, and details on how to call the formatter methods, + * see {@link CFormatter} documentation. + * + * To replace the application component 'format', which is registered by {@link CApplication} by default, you can + * put this in your application 'components' config: + * + * 'format' => array( + * 'class' => 'CLocalizedFormatter', + * ), + * + * + * @author Carsten Brandt + * @package system.utils + * @since 1.1.14 + */ +class CLocalizedFormatter extends CFormatter +{ + private $_locale; + /** + * @var string the width of the date pattern. It can be 'full', 'long', 'medium' and 'short'. Defaults to 'medium'. + * @see CDateFormatter::formatDateTime() + */ + public $dateFormat='medium'; + /** + * @var string the width of the time pattern. It can be 'full', 'long', 'medium' and 'short'. Defaults to 'medium'. + * @see CDateFormatter::formatDateTime() + */ + public $timeFormat='medium'; + + /** + * Set the locale to use for formatting values. + * @param CLocale|string $locale an instance of CLocale or a locale ID + */ + public function setLocale($locale) + { + if(is_string($locale)) + $locale=CLocale::getInstance($locale); + $this->sizeFormat['decimalSeparator']=$locale->getNumberSymbol('decimal'); + $this->_locale=$locale; + } + + /** + * @return CLocale $locale the locale currently used for formatting values + */ + public function getLocale() + { + if($this->_locale === null) { + $this->setLocale(Yii::app()->locale); + } + return $this->_locale; + } + + /** + * Formats the value as a boolean. + * @param mixed $value the value to be formatted + * @return string the formatted result + * @see booleanFormat + */ + public function formatBoolean($value) + { + return $value ? Yii::t('yii','Yes') : Yii::t('yii','No'); + } + + /** + * Formats the value as a date using the {@link locale}s date formatter. + * @param mixed $value the value to be formatted + * @return string the formatted result + * @see dateFormat + * @see CLocale::getDateFormatter() + */ + public function formatDate($value) + { + return $this->getLocale()->dateFormatter->formatDateTime($this->normalizeDateValue($value), $this->dateFormat, null); + } + + /** + * Formats the value as a time using the {@link locale}s date formatter. + * @param mixed $value the value to be formatted + * @return string the formatted result + * @see timeFormat + * @see CLocale::getDateFormatter() + */ + public function formatTime($value) + { + return $this->getLocale()->dateFormatter->formatDateTime($this->normalizeDateValue($value), null, $this->timeFormat); + } + + /** + * Formats the value as a date and time using the {@link locale}s date formatter. + * @param mixed $value the value to be formatted + * @return string the formatted result + * @see dateFormat + * @see timeFormat + * @see CLocale::getDateFormatter() + */ + public function formatDatetime($value) + { + return $this->getLocale()->dateFormatter->formatDateTime($this->normalizeDateValue($value), $this->dateFormat, $this->timeFormat); + } + + /** + * Formats the value as a number using the {@link locale}s number formatter. + * @param mixed $value the value to be formatted + * @return string the formatted result + * @see CLocale::getNumberFormatter() + */ + public function formatNumber($value) + { + return $this->getLocale()->numberFormatter->formatDecimal($value); + } +} diff --git a/framework/utils/CMarkdownParser.php b/framework/utils/CMarkdownParser.php index 602fd627d26..b446224fbe6 100644 --- a/framework/utils/CMarkdownParser.php +++ b/framework/utils/CMarkdownParser.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/utils/CPasswordHelper.php b/framework/utils/CPasswordHelper.php new file mode 100644 index 00000000000..1949470d0b9 --- /dev/null +++ b/framework/utils/CPasswordHelper.php @@ -0,0 +1,193 @@ + + * @link http://www.yiiframework.com/ + * @copyright 2008-2013 Yii Software LLC + * @license http://www.yiiframework.com/license/ + */ + +/** + * CPasswordHelper provides a simple API for secure password hashing and verification. + * + * CPasswordHelper uses the Blowfish hash algorithm available in many PHP runtime + * environments through the PHP {@link http://php.net/manual/en/function.crypt.php crypt()} + * built-in function. As of Dec 2012 it is the strongest algorithm available in PHP + * and the only algorithm without some security concerns surrounding it. For this reason, + * CPasswordHelper fails to initialize when run in and environment that does not have + * crypt() and its Blowfish option. Systems with the option include: + * (1) Most *nix systems since PHP 4 (the algorithm is part of the library function crypt(3)); + * (2) All PHP systems since 5.3.0; (3) All PHP systems with the + * {@link http://www.hardened-php.net/suhosin/ Suhosin patch}. + * For more information about password hashing, crypt() and Blowfish, please read + * the Yii Wiki article + * {@link http://www.yiiframework.com/wiki/425/use-crypt-for-password-storage/ Use crypt() for password storage}. + * and the + * PHP RFC {@link http://wiki.php.net/rfc/password_hash Adding simple password hashing API}. + * + * CPasswordHelper throws an exception if the Blowfish hash algorithm is not + * available in the runtime PHP's crypt() function. It can be used as follows + * + * Generate a hash from a password: + *

    + * $hash = CPasswordHelper::hashPassword($password);
    + * 
    + * This hash can be stored in a database (e.g. CHAR(64) CHARACTER SET latin1). The + * hash is usually generated and saved to the database when the user enters a new password. + * But it can also be useful to generate and save a hash after validating a user's + * password in order to change the cost or refresh the salt. + * + * To verify a password, fetch the user's saved hash from the database (into $hash) and: + *
    + * if (CPasswordHelper::verifyPassword($password, $hash))
    + *     // password is good
    + * else
    + *     // password is bad
    + * 
    + * + * @author Tom Worster + * @package system.utils + * @since 1.1.14 + */ +class CPasswordHelper +{ + /** + * Check for availability of PHP crypt() with the Blowfish hash option. + * @throws CException if the runtime system does not have PHP crypt() or its Blowfish hash option. + */ + protected static function checkBlowfish() + { + if(!function_exists('crypt')) + throw new CException(Yii::t('yii','{class} requires the PHP crypt() function. This system does not have it.', + array('{class}'=>__CLASS__))); + + if(!defined('CRYPT_BLOWFISH') || !CRYPT_BLOWFISH) + throw new CException(Yii::t('yii', + '{class} requires the Blowfish option of the PHP crypt() function. This system does not have it.', + array('{class}'=>__CLASS__))); + } + + /** + * Generate a secure hash from a password and a random salt. + * + * Uses the + * PHP {@link http://php.net/manual/en/function.crypt.php crypt()} built-in function + * with the Blowfish hash option. + * + * @param string $password The password to be hashed. + * @param int $cost Cost parameter used by the Blowfish hash algorithm. + * The higher the value of cost, + * the longer it takes to generate the hash and to verify a password against it. Higher cost + * therefore slows down a brute-force attack. For best protection against brute for attacks, + * set it to the highest value that is tolerable on production servers. The time taken to + * compute the hash doubles for every increment by one of $cost. So, for example, if the + * hash takes 1 second to compute when $cost is 14 then then the compute time varies as + * 2^($cost - 14) seconds. + * @return string The password hash string, ASCII and not longer than 64 characters. + * @throws CException on bad password parameter or if crypt() with Blowfish hash is not available. + */ + public static function hashPassword($password,$cost=13) + { + self::checkBlowfish(); + $salt=self::generateSalt($cost); + $hash=crypt($password,$salt); + + if(!is_string($hash) || (function_exists('mb_strlen') ? mb_strlen($hash, '8bit') : strlen($hash))<32) + throw new CException(Yii::t('yii','Internal error while generating hash.')); + + return $hash; + } + + /** + * Verify a password against a hash. + * + * @param string $password The password to verify. If password is empty or not a string, method will return false. + * @param string $hash The hash to verify the password against. + * @return bool True if the password matches the hash. + * @throws CException on bad password or hash parameters or if crypt() with Blowfish hash is not available. + */ + public static function verifyPassword($password, $hash) + { + self::checkBlowfish(); + if(!is_string($password) || $password==='') + return false; + + if (!$password || !preg_match('{^\$2[axy]\$(\d\d)\$[\./0-9A-Za-z]{22}}',$hash,$matches) || + $matches[1]<4 || $matches[1]>31) + return false; + + $test=crypt($password,$hash); + if(!is_string($test) || strlen($test)<32) + return false; + + return self::same($test, $hash); + } + + /** + * Check for sameness of two strings using an algorithm with timing + * independent of the string values if the subject strings are of equal length. + * + * The function can be useful to prevent timing attacks. For example, if $a and $b + * are both hash values from the same algorithm, then the timing of this function + * does not reveal whether or not there is a match. + * + * NOTE: timing is affected if $a and $b are different lengths or either is not a + * string. For the purpose of checking password hash this does not reveal information + * useful to an attacker. + * + * @see http://blog.astrumfutura.com/2010/10/nanosecond-scale-remote-timing-attacks-on-php-applications-time-to-take-them-seriously/ + * @see http://codereview.stackexchange.com/questions/13512 + * @see https://github.com/ircmaxell/password_compat/blob/master/lib/password.php + * + * @param string $a First subject string to compare. + * @param string $b Second subject string to compare. + * @return bool true if the strings are the same, false if they are different or if + * either is not a string. + */ + public static function same($a,$b) + { + if(!is_string($a) || !is_string($b)) + return false; + + $mb=function_exists('mb_strlen'); + $length=$mb ? mb_strlen($a,'8bit') : strlen($a); + if($length!==($mb ? mb_strlen($b,'8bit') : strlen($b))) + return false; + + $check=0; + for($i=0;$i<$length;$i+=1) + $check|=(ord($a[$i])^ord($b[$i])); + + return $check===0; + } + + /** + * Generates a salt that can be used to generate a password hash. + * + * The PHP {@link http://php.net/manual/en/function.crypt.php crypt()} built-in function + * requires, for the Blowfish hash algorithm, a salt string in a specific format: + * "$2a$" (in which the "a" may be replaced by "x" or "y" see PHP manual for details), + * a two digit cost parameter, + * "$", + * 22 characters from the alphabet "./0-9A-Za-z". + * + * @param int $cost Cost parameter used by the Blowfish hash algorithm. + * @return string the random salt value. + * @throws CException in case of invalid cost number + */ + public static function generateSalt($cost=13) + { + if(!is_numeric($cost)) + throw new CException(Yii::t('yii','{class}::$cost must be a number.',array('{class}'=>__CLASS__))); + + $cost=(int)$cost; + if($cost<4 || $cost>31) + throw new CException(Yii::t('yii','{class}::$cost must be between 4 and 31.',array('{class}'=>__CLASS__))); + + if(($random=Yii::app()->getSecurityManager()->generateRandomString(22,true))===false) + if(($random=Yii::app()->getSecurityManager()->generateRandomString(22,false))===false) + throw new CException(Yii::t('yii','Unable to generate random string.')); + return sprintf('$2a$%02d$',$cost).strtr($random,array('_'=>'.','~'=>'/')); + } +} diff --git a/framework/utils/CPropertyValue.php b/framework/utils/CPropertyValue.php index 63f98263c38..385a58fdc29 100644 --- a/framework/utils/CPropertyValue.php +++ b/framework/utils/CPropertyValue.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/utils/CTimestamp.php b/framework/utils/CTimestamp.php index c38f5d0354a..621945b897a 100644 --- a/framework/utils/CTimestamp.php +++ b/framework/utils/CTimestamp.php @@ -4,7 +4,7 @@ * * @author Wei Zhuo * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/utils/CVarDumper.php b/framework/utils/CVarDumper.php index 32227cb627e..41820c2838c 100644 --- a/framework/utils/CVarDumper.php +++ b/framework/utils/CVarDumper.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/utils/mimeTypes.php b/framework/utils/mimeTypes.php index d08730b5684..25822fc3e1c 100644 --- a/framework/utils/mimeTypes.php +++ b/framework/utils/mimeTypes.php @@ -7,7 +7,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/validators/CBooleanValidator.php b/framework/validators/CBooleanValidator.php index 08928d9185b..d4eed1d9d8c 100644 --- a/framework/validators/CBooleanValidator.php +++ b/framework/validators/CBooleanValidator.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/validators/CCaptchaValidator.php b/framework/validators/CCaptchaValidator.php index 7cfc21aa393..d770712e95f 100644 --- a/framework/validators/CCaptchaValidator.php +++ b/framework/validators/CCaptchaValidator.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -47,7 +47,8 @@ protected function validateAttribute($object,$attribute) if($this->allowEmpty && $this->isEmpty($value)) return; $captcha=$this->getCaptchaAction(); - if(!$captcha->validate($value,$this->caseSensitive)) + // reason of array checking is explained here: https://github.com/yiisoft/yii/issues/1955 + if(is_array($value) || !$captcha->validate($value,$this->caseSensitive)) { $message=$this->message!==null?$this->message:Yii::t('yii','The verification code is incorrect.'); $this->addError($object,$attribute,$message); @@ -56,6 +57,7 @@ protected function validateAttribute($object,$attribute) /** * Returns the CAPTCHA action object. + * @throws CException if {@link action} is invalid * @return CCaptchaAction the action object * @since 1.1.7 */ diff --git a/framework/validators/CCompareValidator.php b/framework/validators/CCompareValidator.php index 1d95ff3d002..0f2df6bdf56 100644 --- a/framework/validators/CCompareValidator.php +++ b/framework/validators/CCompareValidator.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -29,7 +29,7 @@ * CCompareValidator allows for the following placeholders to be specified: *
      *
    • {compareValue}: replaced with the constant value being compared with ({@link compareValue}).
    • - *
    • {compareAttribute}: replaced with the label of the attribute beeing compared with ({@link compareAttribute}).
    • + *
    • {compareAttribute}: replaced with the label of the attribute being compared with ({@link compareAttribute}).
    • *
    * * @author Qiang Xue @@ -77,6 +77,7 @@ class CCompareValidator extends CValidator * If there is any error, the error message is added to the object. * @param CModel $object the object being validated * @param string $attribute the attribute being validated + * @throws CException if invalid operator is used */ protected function validateAttribute($object,$attribute) { @@ -130,6 +131,7 @@ protected function validateAttribute($object,$attribute) * Returns the JavaScript needed for performing client-side validation. * @param CModel $object the data object being validated * @param string $attribute the name of the attribute to be validated. + * @throws CException if invalid operator is used * @return string the client-side validation script. * @see CActiveForm::enableClientValidation * @since 1.1.7 diff --git a/framework/validators/CDateValidator.php b/framework/validators/CDateValidator.php index 74b921bcaaf..126e4920110 100644 --- a/framework/validators/CDateValidator.php +++ b/framework/validators/CDateValidator.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -52,17 +52,22 @@ protected function validateAttribute($object,$attribute) if($this->allowEmpty && $this->isEmpty($value)) return; - $formats=is_string($this->format) ? array($this->format) : $this->format; $valid=false; - foreach($formats as $format) + + // reason of array checking is explained here: https://github.com/yiisoft/yii/issues/1955 + if(!is_array($value)) { - $timestamp=CDateTimeParser::parse($value,$format,array('month'=>1,'day'=>1,'hour'=>0,'minute'=>0,'second'=>0)); - if($timestamp!==false) + $formats=is_string($this->format) ? array($this->format) : $this->format; + foreach($formats as $format) { - $valid=true; - if($this->timestampAttribute!==null) - $object->{$this->timestampAttribute}=$timestamp; - break; + $timestamp=CDateTimeParser::parse($value,$format,array('month'=>1,'day'=>1,'hour'=>0,'minute'=>0,'second'=>0)); + if($timestamp!==false) + { + $valid=true; + if($this->timestampAttribute!==null) + $object->{$this->timestampAttribute}=$timestamp; + break; + } } } diff --git a/framework/validators/CDefaultValueValidator.php b/framework/validators/CDefaultValueValidator.php index 196987c5617..4c457f53650 100644 --- a/framework/validators/CDefaultValueValidator.php +++ b/framework/validators/CDefaultValueValidator.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/validators/CEmailValidator.php b/framework/validators/CEmailValidator.php index 75f7a3e95af..62df8832e8f 100644 --- a/framework/validators/CEmailValidator.php +++ b/framework/validators/CEmailValidator.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -37,12 +37,14 @@ class CEmailValidator extends CValidator * @var boolean whether to check the MX record for the email address. * Defaults to false. To enable it, you need to make sure the PHP function 'checkdnsrr' * exists in your PHP installation. + * Please note that this check may fail due to temporary problems even if email is deliverable. */ public $checkMX=false; /** * @var boolean whether to check port 25 for the email address. * Defaults to false. To enable it, ensure that the PHP functions 'dns_get_record' and * 'fsockopen' are available in your PHP installation. + * Please note that this check may fail due to temporary problems even if email is deliverable. */ public $checkPort=false; /** @@ -85,7 +87,7 @@ protected function validateAttribute($object,$attribute) */ public function validateValue($value) { - if($this->validateIDN) + if(is_string($value) && $this->validateIDN) $value=$this->encodeIDN($value); // make sure string length is limited to avoid DOS attacks $valid=is_string($value) && strlen($value)<=254 && (preg_match($this->pattern,$value) || $this->allowName && preg_match($this->fullPattern,$value)); @@ -153,7 +155,7 @@ protected function checkMxPorts($domain) usort($records,array($this,'mxSort')); foreach($records as $record) { - $handle=fsockopen($record['target'],25); + $handle=@fsockopen($record['target'],25); if($handle!==false) { fclose($handle); @@ -180,14 +182,23 @@ protected function mxSort($a, $b) /** * Converts given IDN to the punycode. - * @param $value IDN to be converted. + * @param string $value IDN to be converted. * @return string resulting punycode. * @since 1.1.13 */ private function encodeIDN($value) { - require_once(Yii::getPathOfAlias('system.vendors.idna_convert').DIRECTORY_SEPARATOR.'idna_convert.class.php'); - $idnaConvert=new idna_convert(); - return $idnaConvert->encode($value); + if(preg_match_all('/^(.*)@(.*)$/',$value,$matches)) + { + if(function_exists('idn_to_ascii')) + $value=$matches[1][0].'@'.idn_to_ascii($matches[2][0]); + else + { + require_once(Yii::getPathOfAlias('system.vendors.Net_IDNA2.Net').DIRECTORY_SEPARATOR.'IDNA2.php'); + $idna=new Net_IDNA2(); + $value=$matches[1][0].'@'.@$idna->encode($matches[2][0]); + } + } + return $value; } } diff --git a/framework/validators/CExistValidator.php b/framework/validators/CExistValidator.php index 8d9e1119052..e8fad7987af 100644 --- a/framework/validators/CExistValidator.php +++ b/framework/validators/CExistValidator.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -65,6 +65,7 @@ class CExistValidator extends CValidator * If there is any error, the error message is added to the object. * @param CModel $object the object being validated * @param string $attribute the attribute being validated + * @throws CException if given table does not have specified column name */ protected function validateAttribute($object,$attribute) { @@ -72,9 +73,16 @@ protected function validateAttribute($object,$attribute) if($this->allowEmpty && $this->isEmpty($value)) return; + if(is_array($value)) + { + // https://github.com/yiisoft/yii/issues/1955 + $this->addError($object,$attribute,Yii::t('yii','{attribute} is invalid.')); + return; + } + $className=$this->className===null?get_class($object):Yii::import($this->className); $attributeName=$this->attributeName===null?$attribute:$this->attributeName; - $finder=CActiveRecord::model($className); + $finder=$this->getModel($className); $table=$finder->getTableSchema(); if(($column=$table->getColumn($attributeName))===null) throw new CException(Yii::t('yii','Table "{table}" does not have a column named "{column}".', @@ -95,5 +103,17 @@ protected function validateAttribute($object,$attribute) $this->addError($object,$attribute,$message,array('{value}'=>CHtml::encode($value))); } } -} + /** + * Given active record class name returns new model instance. + * + * @param string $className active record class name. + * @return CActiveRecord active record model instance. + * + * @since 1.1.14 + */ + protected function getModel($className) + { + return CActiveRecord::model($className); + } +} diff --git a/framework/validators/CFileValidator.php b/framework/validators/CFileValidator.php index 6efbe5eed9f..950f8d314b8 100644 --- a/framework/validators/CFileValidator.php +++ b/framework/validators/CFileValidator.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -26,6 +26,7 @@ * * When using CFileValidator with an active record, the following code is often used: *
    + *  $model->attribute = CUploadedFile::getInstance($model, "attribute");
      *  if($model->save())
      *  {
      *     // single upload
    @@ -178,6 +179,7 @@ protected function validateAttribute($object, $attribute)
     	 * @param CModel $object the object being validated
     	 * @param string $attribute the attribute being validated
     	 * @param CUploadedFile $file uploaded file passed to check against a set of rules
    +	 * @throws CException if failed to upload the file
     	 */
     	protected function validateFile($object, $attribute, $file)
     	{
    @@ -195,7 +197,7 @@ protected function validateFile($object, $attribute, $file)
     		elseif($error==UPLOAD_ERR_CANT_WRITE)
     			throw new CException(Yii::t('yii','Failed to write the uploaded file "{file}" to disk.',array('{file}'=>$file->getName())));
     		elseif(defined('UPLOAD_ERR_EXTENSION') && $error==UPLOAD_ERR_EXTENSION)  // available for PHP 5.2.0 or above
    -			throw new CException(Yii::t('yii','File upload was stopped by extension.'));
    +			throw new CException(Yii::t('yii','A PHP extension stopped the file upload.'));
     
     		if($this->minSize!==null && $file->getSize()<$this->minSize)
     		{
    diff --git a/framework/validators/CFilterValidator.php b/framework/validators/CFilterValidator.php
    index 9c20c7727d3..c2bdc773359 100644
    --- a/framework/validators/CFilterValidator.php
    +++ b/framework/validators/CFilterValidator.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -18,7 +18,7 @@
      * 
      * function foo($value) {...return $newValue; }
      * 
    - * Many PHP functions qualify this signature (e.g. trim). + * Many PHP 'built in' functions qualify this signature (e.g. trim). * * To specify the filter method, set {@link filter} property to be the function name. * @@ -38,6 +38,7 @@ class CFilterValidator extends CValidator * If there is any error, the error message is added to the object. * @param CModel $object the object being validated * @param string $attribute the attribute being validated + * @throws CException if given {@link filter} is not callable */ protected function validateAttribute($object,$attribute) { diff --git a/framework/validators/CInlineValidator.php b/framework/validators/CInlineValidator.php index 085861f8e66..e58566f75e0 100644 --- a/framework/validators/CInlineValidator.php +++ b/framework/validators/CInlineValidator.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -56,9 +56,11 @@ protected function validateAttribute($object,$attribute) * the method that returns the client validation code and can look like: *
     	 * 
    @@ -74,7 +76,7 @@ public function clientValidateAttribute($object,$attribute)
     		if($this->clientValidate!==null)
     		{
     			$method=$this->clientValidate;
    -			return $object->$method($attribute);
    +			return $object->$method($attribute,$this->params);
     		}
     	}
     }
    diff --git a/framework/validators/CNumberValidator.php b/framework/validators/CNumberValidator.php
    index 3e22a7e82a6..535178ca189 100644
    --- a/framework/validators/CNumberValidator.php
    +++ b/framework/validators/CNumberValidator.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -78,6 +78,14 @@ protected function validateAttribute($object,$attribute)
     		$value=$object->$attribute;
     		if($this->allowEmpty && $this->isEmpty($value))
     			return;
    +		if(!is_numeric($value))
    +		{
    +			// https://github.com/yiisoft/yii/issues/1955
    +			// https://github.com/yiisoft/yii/issues/1669
    +			$message=$this->message!==null?$this->message:Yii::t('yii','{attribute} must be a number.');
    +			$this->addError($object,$attribute,$message);
    +			return;
    +		}
     		if($this->integerOnly)
     		{
     			if(!preg_match($this->integerPattern,"$value"))
    diff --git a/framework/validators/CRangeValidator.php b/framework/validators/CRangeValidator.php
    index 5a9d09fac2d..e9123d403d0 100644
    --- a/framework/validators/CRangeValidator.php
    +++ b/framework/validators/CRangeValidator.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -43,6 +43,7 @@ class CRangeValidator extends CValidator
     	 * If there is any error, the error message is added to the object.
     	 * @param CModel $object the object being validated
     	 * @param string $attribute the attribute being validated
    +	 * @throws CException if given {@link range} is not an array
     	 */
     	protected function validateAttribute($object,$attribute)
     	{
    @@ -51,12 +52,24 @@ protected function validateAttribute($object,$attribute)
     			return;
     		if(!is_array($this->range))
     			throw new CException(Yii::t('yii','The "range" property must be specified with a list of values.'));
    -		if(!$this->not && !in_array($value,$this->range,$this->strict))
    +		$result = false;
    +		if($this->strict)
    +			$result=in_array($value,$this->range,true);
    +		else
    +		{
    +			foreach($this->range as $r)
    +			{
    +				$result=(strcmp($r,$value)===0);
    +				if($result)
    +					break;
    +			}
    +		}
    +		if(!$this->not && !$result)
     		{
     			$message=$this->message!==null?$this->message:Yii::t('yii','{attribute} is not in the list.');
     			$this->addError($object,$attribute,$message);
     		}
    -		elseif($this->not && in_array($value,$this->range,$this->strict))
    +		elseif($this->not && $result)
     		{
     			$message=$this->message!==null?$this->message:Yii::t('yii','{attribute} is in the list.');
     			$this->addError($object,$attribute,$message);
    @@ -67,6 +80,7 @@ protected function validateAttribute($object,$attribute)
     	 * Returns the JavaScript needed for performing client-side validation.
     	 * @param CModel $object the data object being validated
     	 * @param string $attribute the name of the attribute to be validated.
    +	 * @throws CException if given {@link range} is not an array
     	 * @return string the client-side validation script.
     	 * @see CActiveForm::enableClientValidation
     	 * @since 1.1.7
    diff --git a/framework/validators/CRegularExpressionValidator.php b/framework/validators/CRegularExpressionValidator.php
    index bfbae9c1ce7..048254c7b19 100644
    --- a/framework/validators/CRegularExpressionValidator.php
    +++ b/framework/validators/CRegularExpressionValidator.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -39,6 +39,7 @@ class CRegularExpressionValidator extends CValidator
     	 * If there is any error, the error message is added to the object.
     	 * @param CModel $object the object being validated
     	 * @param string $attribute the attribute being validated
    +	 * @throws CException if given {@link pattern} is empty
     	 */
     	protected function validateAttribute($object,$attribute)
     	{
    @@ -47,7 +48,10 @@ protected function validateAttribute($object,$attribute)
     			return;
     		if($this->pattern===null)
     			throw new CException(Yii::t('yii','The "pattern" property must be specified with a valid regular expression.'));
    -		if((!$this->not && !preg_match($this->pattern,$value)) || ($this->not && preg_match($this->pattern,$value)))
    +		// reason of array checking explained here: https://github.com/yiisoft/yii/issues/1955
    +		if(is_array($value) ||
    +			(!$this->not && !preg_match($this->pattern,$value)) ||
    +			($this->not && preg_match($this->pattern,$value)))
     		{
     			$message=$this->message!==null?$this->message:Yii::t('yii','{attribute} is invalid.');
     			$this->addError($object,$attribute,$message);
    @@ -58,6 +62,7 @@ protected function validateAttribute($object,$attribute)
     	 * Returns the JavaScript needed for performing client-side validation.
     	 * @param CModel $object the data object being validated
     	 * @param string $attribute the name of the attribute to be validated.
    +	 * @throws CException if given {@link pattern} is empty
     	 * @return string the client-side validation script.
     	 * @see CActiveForm::enableClientValidation
     	 * @since 1.1.7
    diff --git a/framework/validators/CRequiredValidator.php b/framework/validators/CRequiredValidator.php
    index cbabe5f1af0..26e94c991b4 100644
    --- a/framework/validators/CRequiredValidator.php
    +++ b/framework/validators/CRequiredValidator.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -40,6 +40,13 @@ class CRequiredValidator extends CValidator
     	 * This property is only used when {@link requiredValue} is not null.
     	 */
     	public $strict=false;
    +	/**
    +	 * @var boolean whether the value should be trimmed with php trim() function when comparing strings.
    +	 * When set to false, the attribute value is not considered empty when it contains spaces.
    +	 * Defaults to true, meaning the value will be trimmed.
    +	 * @since 1.1.14
    +	 */
    +	public $trim=true;
     	/**
     	 * Validates the attribute of the object.
     	 * If there is any error, the error message is added to the object.
    @@ -58,7 +65,7 @@ protected function validateAttribute($object,$attribute)
     				$this->addError($object,$attribute,$message);
     			}
     		}
    -		elseif($this->isEmpty($value,true))
    +		elseif($this->isEmpty($value,$this->trim))
     		{
     			$message=$this->message!==null?$this->message:Yii::t('yii','{attribute} cannot be blank.');
     			$this->addError($object,$attribute,$message);
    @@ -97,8 +104,12 @@ public function clientValidateAttribute($object,$attribute)
     			$message=strtr($message, array(
     				'{attribute}'=>$object->getAttributeLabel($attribute),
     			));
    +			if($this->trim)
    +				$emptyCondition = "jQuery.trim(value)==''";
    +			else
    +				$emptyCondition = "value==''";
     			return "
    -if(jQuery.trim(value)=='') {
    +if({$emptyCondition}) {
     	messages.push(".CJSON::encode($message).");
     }
     ";
    diff --git a/framework/validators/CSafeValidator.php b/framework/validators/CSafeValidator.php
    index 1312cc2d64c..6ed1e01d491 100644
    --- a/framework/validators/CSafeValidator.php
    +++ b/framework/validators/CSafeValidator.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/validators/CStringValidator.php b/framework/validators/CStringValidator.php
    index 893ffd3bd7e..181b795427c 100644
    --- a/framework/validators/CStringValidator.php
    +++ b/framework/validators/CStringValidator.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -80,6 +80,13 @@ protected function validateAttribute($object,$attribute)
     		if($this->allowEmpty && $this->isEmpty($value))
     			return;
     
    +		if(is_array($value))
    +		{
    +			// https://github.com/yiisoft/yii/issues/1955
    +			$this->addError($object,$attribute,Yii::t('yii','{attribute} is invalid.'));
    +			return;
    +		}
    +
     		if(function_exists('mb_strlen') && $this->encoding!==false)
     			$length=mb_strlen($value, $this->encoding ? $this->encoding : Yii::app()->charset);
     		else
    diff --git a/framework/validators/CTypeValidator.php b/framework/validators/CTypeValidator.php
    index 3cf8a5a0d62..67102cdae10 100644
    --- a/framework/validators/CTypeValidator.php
    +++ b/framework/validators/CTypeValidator.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/validators/CUniqueValidator.php b/framework/validators/CUniqueValidator.php
    index 63d0fee338e..2bfc9984555 100644
    --- a/framework/validators/CUniqueValidator.php
    +++ b/framework/validators/CUniqueValidator.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -75,6 +75,7 @@ class CUniqueValidator extends CValidator
     	 * If there is any error, the error message is added to the object.
     	 * @param CModel $object the object being validated
     	 * @param string $attribute the attribute being validated
    +	 * @throws CException if given table does not have specified column name
     	 */
     	protected function validateAttribute($object,$attribute)
     	{
    @@ -82,9 +83,16 @@ protected function validateAttribute($object,$attribute)
     		if($this->allowEmpty && $this->isEmpty($value))
     			return;
     
    +		if(is_array($value))
    +		{
    +			// https://github.com/yiisoft/yii/issues/1955
    +			$this->addError($object,$attribute,Yii::t('yii','{attribute} is invalid.'));
    +			return;
    +		}
    +
     		$className=$this->className===null?get_class($object):Yii::import($this->className);
     		$attributeName=$this->attributeName===null?$attribute:$this->attributeName;
    -		$finder=CActiveRecord::model($className);
    +		$finder=$this->getModel($className);
     		$table=$finder->getTableSchema();
     		if(($column=$table->getColumn($attributeName))===null)
     			throw new CException(Yii::t('yii','Table "{table}" does not have a column named "{column}".',
    @@ -126,5 +134,18 @@ protected function validateAttribute($object,$attribute)
     			$this->addError($object,$attribute,$message,array('{value}'=>CHtml::encode($value)));
     		}
     	}
    +	
    +	/**
    +	 * Given active record class name returns new model instance.
    +	 *
    +	 * @param string $className active record class name.
    +	 * @return CActiveRecord active record model instance.
    +	 *
    +	 * @since 1.1.14
    +	 */
    +	protected function getModel($className)
    +	{
    +		return CActiveRecord::model($className);
    +	}
     }
     
    diff --git a/framework/validators/CUnsafeValidator.php b/framework/validators/CUnsafeValidator.php
    index f92dff74ebd..9f8f637f124 100644
    --- a/framework/validators/CUnsafeValidator.php
    +++ b/framework/validators/CUnsafeValidator.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -25,7 +25,8 @@ class CUnsafeValidator extends CValidator
     	public $safe=false;
     	/**
     	 * Validates the attribute of the object.
    -	 * If there is any error, the error message is added to the object.
    +	 * This validator does not do any validation as it is meant
    +	 * to only mark attributes as unsafe.
     	 * @param CModel $object the object being validated
     	 * @param string $attribute the attribute being validated
     	 */
    diff --git a/framework/validators/CUrlValidator.php b/framework/validators/CUrlValidator.php
    index 9e3e85159bf..e3cb98639e3 100644
    --- a/framework/validators/CUrlValidator.php
    +++ b/framework/validators/CUrlValidator.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -72,7 +72,7 @@ protected function validateAttribute($object,$attribute)
     	 * Validates a static value to see if it is a valid URL.
     	 * Note that this method does not respect {@link allowEmpty} property.
     	 * This method is provided so that you can call it directly without going through the model validation rule mechanism.
    -	 * @param mixed $value the value to be validated
    +	 * @param string $value the value to be validated
     	 * @return mixed false if the the value is not a valid URL, otherwise the possibly modified value ({@see defaultScheme})
     	 * @since 1.1.1
     	 */
    @@ -80,12 +80,12 @@ public function validateValue($value)
     	{
     		if(is_string($value) && strlen($value)<2000)  // make sure the length is limited to avoid DOS attacks
     		{
    -			if($this->validateIDN)
    -				$value=$this->encodeIDN($value);
    -
     			if($this->defaultScheme!==null && strpos($value,'://')===false)
     				$value=$this->defaultScheme.'://'.$value;
     
    +			if($this->validateIDN)
    +				$value=$this->encodeIDN($value);
    +
     			if(strpos($this->pattern,'{schemes}')!==false)
     				$pattern=str_replace('{schemes}','('.implode('|',$this->validSchemes).')',$this->pattern);
     			else
    @@ -160,27 +160,45 @@ public function clientValidateAttribute($object,$attribute)
     
     	/**
     	 * Converts given IDN to the punycode.
    -	 * @param $value IDN to be converted.
    +	 * @param string $value IDN to be converted.
     	 * @return string resulting punycode.
     	 * @since 1.1.13
     	 */
     	private function encodeIDN($value)
     	{
    -		require_once(Yii::getPathOfAlias('system.vendors.idna_convert').DIRECTORY_SEPARATOR.'idna_convert.class.php');
    -		$idnaConvert=new idna_convert();
    -		return $idnaConvert->encode($value);
    +		if(preg_match_all('/^(.*):\/\/([^\/]+)(.*)$/',$value,$matches))
    +		{
    +			if(function_exists('idn_to_ascii'))
    +				$value=$matches[1][0].'://'.idn_to_ascii($matches[2][0]).$matches[3][0];
    +			else
    +			{
    +				require_once(Yii::getPathOfAlias('system.vendors.Net_IDNA2.Net').DIRECTORY_SEPARATOR.'IDNA2.php');
    +				$idna=new Net_IDNA2();
    +				$value=$matches[1][0].'://'.@$idna->encode($matches[2][0]).$matches[3][0];
    +			}
    +		}
    +		return $value;
     	}
     
     	/**
     	 * Converts given punycode to the IDN.
    -	 * @param $value punycode to be converted.
    +	 * @param string $value punycode to be converted.
     	 * @return string resulting IDN.
     	 * @since 1.1.13
     	 */
     	private function decodeIDN($value)
     	{
    -		require_once(Yii::getPathOfAlias('system.vendors.idna_convert').DIRECTORY_SEPARATOR.'idna_convert.class.php');
    -		$idnaConvert=new idna_convert();
    -		return $idnaConvert->decode($value);
    +		if(preg_match_all('/^(.*):\/\/([^\/]+)(.*)$/',$value,$matches))
    +		{
    +			if(function_exists('idn_to_utf8'))
    +				$value=$matches[1][0].'://'.idn_to_utf8($matches[2][0]).$matches[3][0];
    +			else
    +			{
    +				require_once(Yii::getPathOfAlias('system.vendors.Net_IDNA2.Net').DIRECTORY_SEPARATOR.'IDNA2.php');
    +				$idna=new Net_IDNA2();
    +				$value=$matches[1][0].'://'.@$idna->decode($matches[2][0]).$matches[3][0];
    +			}
    +		}
    +		return $value;
     	}
     }
    diff --git a/framework/validators/CValidator.php b/framework/validators/CValidator.php
    index e404bf5f944..84ae6431f38 100644
    --- a/framework/validators/CValidator.php
    +++ b/framework/validators/CValidator.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/vendors/Net_IDNA2/LICENSE.txt b/framework/vendors/Net_IDNA2/LICENSE.txt
    new file mode 100644
    index 00000000000..65c5ca88a67
    --- /dev/null
    +++ b/framework/vendors/Net_IDNA2/LICENSE.txt
    @@ -0,0 +1,165 @@
    +                   GNU LESSER GENERAL PUBLIC LICENSE
    +                       Version 3, 29 June 2007
    +
    + Copyright (C) 2007 Free Software Foundation, Inc. 
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +
    +  This version of the GNU Lesser General Public License incorporates
    +the terms and conditions of version 3 of the GNU General Public
    +License, supplemented by the additional permissions listed below.
    +
    +  0. Additional Definitions.
    +
    +  As used herein, "this License" refers to version 3 of the GNU Lesser
    +General Public License, and the "GNU GPL" refers to version 3 of the GNU
    +General Public License.
    +
    +  "The Library" refers to a covered work governed by this License,
    +other than an Application or a Combined Work as defined below.
    +
    +  An "Application" is any work that makes use of an interface provided
    +by the Library, but which is not otherwise based on the Library.
    +Defining a subclass of a class defined by the Library is deemed a mode
    +of using an interface provided by the Library.
    +
    +  A "Combined Work" is a work produced by combining or linking an
    +Application with the Library.  The particular version of the Library
    +with which the Combined Work was made is also called the "Linked
    +Version".
    +
    +  The "Minimal Corresponding Source" for a Combined Work means the
    +Corresponding Source for the Combined Work, excluding any source code
    +for portions of the Combined Work that, considered in isolation, are
    +based on the Application, and not on the Linked Version.
    +
    +  The "Corresponding Application Code" for a Combined Work means the
    +object code and/or source code for the Application, including any data
    +and utility programs needed for reproducing the Combined Work from the
    +Application, but excluding the System Libraries of the Combined Work.
    +
    +  1. Exception to Section 3 of the GNU GPL.
    +
    +  You may convey a covered work under sections 3 and 4 of this License
    +without being bound by section 3 of the GNU GPL.
    +
    +  2. Conveying Modified Versions.
    +
    +  If you modify a copy of the Library, and, in your modifications, a
    +facility refers to a function or data to be supplied by an Application
    +that uses the facility (other than as an argument passed when the
    +facility is invoked), then you may convey a copy of the modified
    +version:
    +
    +   a) under this License, provided that you make a good faith effort to
    +   ensure that, in the event an Application does not supply the
    +   function or data, the facility still operates, and performs
    +   whatever part of its purpose remains meaningful, or
    +
    +   b) under the GNU GPL, with none of the additional permissions of
    +   this License applicable to that copy.
    +
    +  3. Object Code Incorporating Material from Library Header Files.
    +
    +  The object code form of an Application may incorporate material from
    +a header file that is part of the Library.  You may convey such object
    +code under terms of your choice, provided that, if the incorporated
    +material is not limited to numerical parameters, data structure
    +layouts and accessors, or small macros, inline functions and templates
    +(ten or fewer lines in length), you do both of the following:
    +
    +   a) Give prominent notice with each copy of the object code that the
    +   Library is used in it and that the Library and its use are
    +   covered by this License.
    +
    +   b) Accompany the object code with a copy of the GNU GPL and this license
    +   document.
    +
    +  4. Combined Works.
    +
    +  You may convey a Combined Work under terms of your choice that,
    +taken together, effectively do not restrict modification of the
    +portions of the Library contained in the Combined Work and reverse
    +engineering for debugging such modifications, if you also do each of
    +the following:
    +
    +   a) Give prominent notice with each copy of the Combined Work that
    +   the Library is used in it and that the Library and its use are
    +   covered by this License.
    +
    +   b) Accompany the Combined Work with a copy of the GNU GPL and this license
    +   document.
    +
    +   c) For a Combined Work that displays copyright notices during
    +   execution, include the copyright notice for the Library among
    +   these notices, as well as a reference directing the user to the
    +   copies of the GNU GPL and this license document.
    +
    +   d) Do one of the following:
    +
    +       0) Convey the Minimal Corresponding Source under the terms of this
    +       License, and the Corresponding Application Code in a form
    +       suitable for, and under terms that permit, the user to
    +       recombine or relink the Application with a modified version of
    +       the Linked Version to produce a modified Combined Work, in the
    +       manner specified by section 6 of the GNU GPL for conveying
    +       Corresponding Source.
    +
    +       1) Use a suitable shared library mechanism for linking with the
    +       Library.  A suitable mechanism is one that (a) uses at run time
    +       a copy of the Library already present on the user's computer
    +       system, and (b) will operate properly with a modified version
    +       of the Library that is interface-compatible with the Linked
    +       Version.
    +
    +   e) Provide Installation Information, but only if you would otherwise
    +   be required to provide such information under section 6 of the
    +   GNU GPL, and only to the extent that such information is
    +   necessary to install and execute a modified version of the
    +   Combined Work produced by recombining or relinking the
    +   Application with a modified version of the Linked Version. (If
    +   you use option 4d0, the Installation Information must accompany
    +   the Minimal Corresponding Source and Corresponding Application
    +   Code. If you use option 4d1, you must provide the Installation
    +   Information in the manner specified by section 6 of the GNU GPL
    +   for conveying Corresponding Source.)
    +
    +  5. Combined Libraries.
    +
    +  You may place library facilities that are a work based on the
    +Library side by side in a single library together with other library
    +facilities that are not Applications and are not covered by this
    +License, and convey such a combined library under terms of your
    +choice, if you do both of the following:
    +
    +   a) Accompany the combined library with a copy of the same work based
    +   on the Library, uncombined with any other library facilities,
    +   conveyed under the terms of this License.
    +
    +   b) Give prominent notice with the combined library that part of it
    +   is a work based on the Library, and explaining where to find the
    +   accompanying uncombined form of the same work.
    +
    +  6. Revised Versions of the GNU Lesser General Public License.
    +
    +  The Free Software Foundation may publish revised and/or new versions
    +of the GNU Lesser General Public License from time to time. Such new
    +versions will be similar in spirit to the present version, but may
    +differ in detail to address new problems or concerns.
    +
    +  Each version is given a distinguishing version number. If the
    +Library as you received it specifies that a certain numbered version
    +of the GNU Lesser General Public License "or any later version"
    +applies to it, you have the option of following the terms and
    +conditions either of that published version or of any later version
    +published by the Free Software Foundation. If the Library as you
    +received it does not specify a version number of the GNU Lesser
    +General Public License, you may choose any version of the GNU Lesser
    +General Public License ever published by the Free Software Foundation.
    +
    +  If the Library as you received it specifies that a proxy can decide
    +whether future versions of the GNU Lesser General Public License shall
    +apply, that proxy's public statement of acceptance of any version is
    +permanent authorization for you to choose that version for the
    +Library.
    diff --git a/framework/vendors/Net_IDNA2/Net/IDNA2.php b/framework/vendors/Net_IDNA2/Net/IDNA2.php
    new file mode 100644
    index 00000000000..b8daee146c6
    --- /dev/null
    +++ b/framework/vendors/Net_IDNA2/Net/IDNA2.php
    @@ -0,0 +1,3402 @@
    +
    + * @author  Matthias Sommerfeld 
    + * @author  Stefan Neufeind 
    + * @version $Id: IDNA2.php 305344 2010-11-14 23:52:42Z neufeind $
    + */
    +class Net_IDNA2
    +{
    +    // {{{ npdata
    +    /**
    +     * These Unicode codepoints are
    +     * mapped to nothing, See RFC3454 for details
    +     *
    +     * @static
    +     * @var array
    +     * @access private
    +     */
    +    private static $_np_map_nothing = array(
    +        0xAD,
    +        0x34F,
    +        0x1806,
    +        0x180B,
    +        0x180C,
    +        0x180D,
    +        0x200B,
    +        0x200C,
    +        0x200D,
    +        0x2060,
    +        0xFE00,
    +        0xFE01,
    +        0xFE02,
    +        0xFE03,
    +        0xFE04,
    +        0xFE05,
    +        0xFE06,
    +        0xFE07,
    +        0xFE08,
    +        0xFE09,
    +        0xFE0A,
    +        0xFE0B,
    +        0xFE0C,
    +        0xFE0D,
    +        0xFE0E,
    +        0xFE0F,
    +        0xFEFF
    +    );
    +
    +    /**
    +     * Prohibited codepints
    +     *
    +     * @static
    +     * @var array
    +     * @access private
    +     */
    +    private static $_general_prohibited = array(
    +        0,
    +        1,
    +        2,
    +        3,
    +        4,
    +        5,
    +        6,
    +        7,
    +        8,
    +        9,
    +        0xA,
    +        0xB,
    +        0xC,
    +        0xD,
    +        0xE,
    +        0xF,
    +        0x10,
    +        0x11,
    +        0x12,
    +        0x13,
    +        0x14,
    +        0x15,
    +        0x16,
    +        0x17,
    +        0x18,
    +        0x19,
    +        0x1A,
    +        0x1B,
    +        0x1C,
    +        0x1D,
    +        0x1E,
    +        0x1F,
    +        0x20,
    +        0x21,
    +        0x22,
    +        0x23,
    +        0x24,
    +        0x25,
    +        0x26,
    +        0x27,
    +        0x28,
    +        0x29,
    +        0x2A,
    +        0x2B,
    +        0x2C,
    +        0x2F,
    +        0x3B,
    +        0x3C,
    +        0x3D,
    +        0x3E,
    +        0x3F,
    +        0x40,
    +        0x5B,
    +        0x5C,
    +        0x5D,
    +        0x5E,
    +        0x5F,
    +        0x60,
    +        0x7B,
    +        0x7C,
    +        0x7D,
    +        0x7E,
    +        0x7F,
    +        0x3002
    +    );
    +
    +    /**
    +     * Codepints prohibited by Nameprep
    +     * @static
    +     * @var array
    +     * @access private
    +     */
    +    private static $_np_prohibit = array(
    +        0xA0,
    +        0x1680,
    +        0x2000,
    +        0x2001,
    +        0x2002,
    +        0x2003,
    +        0x2004,
    +        0x2005,
    +        0x2006,
    +        0x2007,
    +        0x2008,
    +        0x2009,
    +        0x200A,
    +        0x200B,
    +        0x202F,
    +        0x205F,
    +        0x3000,
    +        0x6DD,
    +        0x70F,
    +        0x180E,
    +        0x200C,
    +        0x200D,
    +        0x2028,
    +        0x2029,
    +        0xFEFF,
    +        0xFFF9,
    +        0xFFFA,
    +        0xFFFB,
    +        0xFFFC,
    +        0xFFFE,
    +        0xFFFF,
    +        0x1FFFE,
    +        0x1FFFF,
    +        0x2FFFE,
    +        0x2FFFF,
    +        0x3FFFE,
    +        0x3FFFF,
    +        0x4FFFE,
    +        0x4FFFF,
    +        0x5FFFE,
    +        0x5FFFF,
    +        0x6FFFE,
    +        0x6FFFF,
    +        0x7FFFE,
    +        0x7FFFF,
    +        0x8FFFE,
    +        0x8FFFF,
    +        0x9FFFE,
    +        0x9FFFF,
    +        0xAFFFE,
    +        0xAFFFF,
    +        0xBFFFE,
    +        0xBFFFF,
    +        0xCFFFE,
    +        0xCFFFF,
    +        0xDFFFE,
    +        0xDFFFF,
    +        0xEFFFE,
    +        0xEFFFF,
    +        0xFFFFE,
    +        0xFFFFF,
    +        0x10FFFE,
    +        0x10FFFF,
    +        0xFFF9,
    +        0xFFFA,
    +        0xFFFB,
    +        0xFFFC,
    +        0xFFFD,
    +        0x340,
    +        0x341,
    +        0x200E,
    +        0x200F,
    +        0x202A,
    +        0x202B,
    +        0x202C,
    +        0x202D,
    +        0x202E,
    +        0x206A,
    +        0x206B,
    +        0x206C,
    +        0x206D,
    +        0x206E,
    +        0x206F,
    +        0xE0001
    +    );
    +
    +    /**
    +     * Codepoint ranges prohibited by nameprep
    +     *
    +     * @static
    +     * @var array
    +     * @access private
    +     */
    +    private static $_np_prohibit_ranges = array(
    +        array(0x80,     0x9F    ),
    +        array(0x2060,   0x206F  ),
    +        array(0x1D173,  0x1D17A ),
    +        array(0xE000,   0xF8FF  ),
    +        array(0xF0000,  0xFFFFD ),
    +        array(0x100000, 0x10FFFD),
    +        array(0xFDD0,   0xFDEF  ),
    +        array(0xD800,   0xDFFF  ),
    +        array(0x2FF0,   0x2FFB  ),
    +        array(0xE0020,  0xE007F )
    +    );
    +
    +    /**
    +     * Replacement mappings (casemapping, replacement sequences, ...)
    +     *
    +     * @static
    +     * @var array
    +     * @access private
    +     */
    +    private static $_np_replacemaps = array(
    +        0x41    => array(0x61),
    +        0x42    => array(0x62),
    +        0x43    => array(0x63),
    +        0x44    => array(0x64),
    +        0x45    => array(0x65),
    +        0x46    => array(0x66),
    +        0x47    => array(0x67),
    +        0x48    => array(0x68),
    +        0x49    => array(0x69),
    +        0x4A    => array(0x6A),
    +        0x4B    => array(0x6B),
    +        0x4C    => array(0x6C),
    +        0x4D    => array(0x6D),
    +        0x4E    => array(0x6E),
    +        0x4F    => array(0x6F),
    +        0x50    => array(0x70),
    +        0x51    => array(0x71),
    +        0x52    => array(0x72),
    +        0x53    => array(0x73),
    +        0x54    => array(0x74),
    +        0x55    => array(0x75),
    +        0x56    => array(0x76),
    +        0x57    => array(0x77),
    +        0x58    => array(0x78),
    +        0x59    => array(0x79),
    +        0x5A    => array(0x7A),
    +        0xB5    => array(0x3BC),
    +        0xC0    => array(0xE0),
    +        0xC1    => array(0xE1),
    +        0xC2    => array(0xE2),
    +        0xC3    => array(0xE3),
    +        0xC4    => array(0xE4),
    +        0xC5    => array(0xE5),
    +        0xC6    => array(0xE6),
    +        0xC7    => array(0xE7),
    +        0xC8    => array(0xE8),
    +        0xC9    => array(0xE9),
    +        0xCA    => array(0xEA),
    +        0xCB    => array(0xEB),
    +        0xCC    => array(0xEC),
    +        0xCD    => array(0xED),
    +        0xCE    => array(0xEE),
    +        0xCF    => array(0xEF),
    +        0xD0    => array(0xF0),
    +        0xD1    => array(0xF1),
    +        0xD2    => array(0xF2),
    +        0xD3    => array(0xF3),
    +        0xD4    => array(0xF4),
    +        0xD5    => array(0xF5),
    +        0xD6    => array(0xF6),
    +        0xD8    => array(0xF8),
    +        0xD9    => array(0xF9),
    +        0xDA    => array(0xFA),
    +        0xDB    => array(0xFB),
    +        0xDC    => array(0xFC),
    +        0xDD    => array(0xFD),
    +        0xDE    => array(0xFE),
    +        0xDF    => array(0x73, 0x73),
    +        0x100   => array(0x101),
    +        0x102   => array(0x103),
    +        0x104   => array(0x105),
    +        0x106   => array(0x107),
    +        0x108   => array(0x109),
    +        0x10A   => array(0x10B),
    +        0x10C   => array(0x10D),
    +        0x10E   => array(0x10F),
    +        0x110   => array(0x111),
    +        0x112   => array(0x113),
    +        0x114   => array(0x115),
    +        0x116   => array(0x117),
    +        0x118   => array(0x119),
    +        0x11A   => array(0x11B),
    +        0x11C   => array(0x11D),
    +        0x11E   => array(0x11F),
    +        0x120   => array(0x121),
    +        0x122   => array(0x123),
    +        0x124   => array(0x125),
    +        0x126   => array(0x127),
    +        0x128   => array(0x129),
    +        0x12A   => array(0x12B),
    +        0x12C   => array(0x12D),
    +        0x12E   => array(0x12F),
    +        0x130   => array(0x69, 0x307),
    +        0x132   => array(0x133),
    +        0x134   => array(0x135),
    +        0x136   => array(0x137),
    +        0x139   => array(0x13A),
    +        0x13B   => array(0x13C),
    +        0x13D   => array(0x13E),
    +        0x13F   => array(0x140),
    +        0x141   => array(0x142),
    +        0x143   => array(0x144),
    +        0x145   => array(0x146),
    +        0x147   => array(0x148),
    +        0x149   => array(0x2BC, 0x6E),
    +        0x14A   => array(0x14B),
    +        0x14C   => array(0x14D),
    +        0x14E   => array(0x14F),
    +        0x150   => array(0x151),
    +        0x152   => array(0x153),
    +        0x154   => array(0x155),
    +        0x156   => array(0x157),
    +        0x158   => array(0x159),
    +        0x15A   => array(0x15B),
    +        0x15C   => array(0x15D),
    +        0x15E   => array(0x15F),
    +        0x160   => array(0x161),
    +        0x162   => array(0x163),
    +        0x164   => array(0x165),
    +        0x166   => array(0x167),
    +        0x168   => array(0x169),
    +        0x16A   => array(0x16B),
    +        0x16C   => array(0x16D),
    +        0x16E   => array(0x16F),
    +        0x170   => array(0x171),
    +        0x172   => array(0x173),
    +        0x174   => array(0x175),
    +        0x176   => array(0x177),
    +        0x178   => array(0xFF),
    +        0x179   => array(0x17A),
    +        0x17B   => array(0x17C),
    +        0x17D   => array(0x17E),
    +        0x17F   => array(0x73),
    +        0x181   => array(0x253),
    +        0x182   => array(0x183),
    +        0x184   => array(0x185),
    +        0x186   => array(0x254),
    +        0x187   => array(0x188),
    +        0x189   => array(0x256),
    +        0x18A   => array(0x257),
    +        0x18B   => array(0x18C),
    +        0x18E   => array(0x1DD),
    +        0x18F   => array(0x259),
    +        0x190   => array(0x25B),
    +        0x191   => array(0x192),
    +        0x193   => array(0x260),
    +        0x194   => array(0x263),
    +        0x196   => array(0x269),
    +        0x197   => array(0x268),
    +        0x198   => array(0x199),
    +        0x19C   => array(0x26F),
    +        0x19D   => array(0x272),
    +        0x19F   => array(0x275),
    +        0x1A0   => array(0x1A1),
    +        0x1A2   => array(0x1A3),
    +        0x1A4   => array(0x1A5),
    +        0x1A6   => array(0x280),
    +        0x1A7   => array(0x1A8),
    +        0x1A9   => array(0x283),
    +        0x1AC   => array(0x1AD),
    +        0x1AE   => array(0x288),
    +        0x1AF   => array(0x1B0),
    +        0x1B1   => array(0x28A),
    +        0x1B2   => array(0x28B),
    +        0x1B3   => array(0x1B4),
    +        0x1B5   => array(0x1B6),
    +        0x1B7   => array(0x292),
    +        0x1B8   => array(0x1B9),
    +        0x1BC   => array(0x1BD),
    +        0x1C4   => array(0x1C6),
    +        0x1C5   => array(0x1C6),
    +        0x1C7   => array(0x1C9),
    +        0x1C8   => array(0x1C9),
    +        0x1CA   => array(0x1CC),
    +        0x1CB   => array(0x1CC),
    +        0x1CD   => array(0x1CE),
    +        0x1CF   => array(0x1D0),
    +        0x1D1   => array(0x1D2),
    +        0x1D3   => array(0x1D4),
    +        0x1D5   => array(0x1D6),
    +        0x1D7   => array(0x1D8),
    +        0x1D9   => array(0x1DA),
    +        0x1DB   => array(0x1DC),
    +        0x1DE   => array(0x1DF),
    +        0x1E0   => array(0x1E1),
    +        0x1E2   => array(0x1E3),
    +        0x1E4   => array(0x1E5),
    +        0x1E6   => array(0x1E7),
    +        0x1E8   => array(0x1E9),
    +        0x1EA   => array(0x1EB),
    +        0x1EC   => array(0x1ED),
    +        0x1EE   => array(0x1EF),
    +        0x1F0   => array(0x6A, 0x30C),
    +        0x1F1   => array(0x1F3),
    +        0x1F2   => array(0x1F3),
    +        0x1F4   => array(0x1F5),
    +        0x1F6   => array(0x195),
    +        0x1F7   => array(0x1BF),
    +        0x1F8   => array(0x1F9),
    +        0x1FA   => array(0x1FB),
    +        0x1FC   => array(0x1FD),
    +        0x1FE   => array(0x1FF),
    +        0x200   => array(0x201),
    +        0x202   => array(0x203),
    +        0x204   => array(0x205),
    +        0x206   => array(0x207),
    +        0x208   => array(0x209),
    +        0x20A   => array(0x20B),
    +        0x20C   => array(0x20D),
    +        0x20E   => array(0x20F),
    +        0x210   => array(0x211),
    +        0x212   => array(0x213),
    +        0x214   => array(0x215),
    +        0x216   => array(0x217),
    +        0x218   => array(0x219),
    +        0x21A   => array(0x21B),
    +        0x21C   => array(0x21D),
    +        0x21E   => array(0x21F),
    +        0x220   => array(0x19E),
    +        0x222   => array(0x223),
    +        0x224   => array(0x225),
    +        0x226   => array(0x227),
    +        0x228   => array(0x229),
    +        0x22A   => array(0x22B),
    +        0x22C   => array(0x22D),
    +        0x22E   => array(0x22F),
    +        0x230   => array(0x231),
    +        0x232   => array(0x233),
    +        0x345   => array(0x3B9),
    +        0x37A   => array(0x20, 0x3B9),
    +        0x386   => array(0x3AC),
    +        0x388   => array(0x3AD),
    +        0x389   => array(0x3AE),
    +        0x38A   => array(0x3AF),
    +        0x38C   => array(0x3CC),
    +        0x38E   => array(0x3CD),
    +        0x38F   => array(0x3CE),
    +        0x390   => array(0x3B9, 0x308, 0x301),
    +        0x391   => array(0x3B1),
    +        0x392   => array(0x3B2),
    +        0x393   => array(0x3B3),
    +        0x394   => array(0x3B4),
    +        0x395   => array(0x3B5),
    +        0x396   => array(0x3B6),
    +        0x397   => array(0x3B7),
    +        0x398   => array(0x3B8),
    +        0x399   => array(0x3B9),
    +        0x39A   => array(0x3BA),
    +        0x39B   => array(0x3BB),
    +        0x39C   => array(0x3BC),
    +        0x39D   => array(0x3BD),
    +        0x39E   => array(0x3BE),
    +        0x39F   => array(0x3BF),
    +        0x3A0   => array(0x3C0),
    +        0x3A1   => array(0x3C1),
    +        0x3A3   => array(0x3C3),
    +        0x3A4   => array(0x3C4),
    +        0x3A5   => array(0x3C5),
    +        0x3A6   => array(0x3C6),
    +        0x3A7   => array(0x3C7),
    +        0x3A8   => array(0x3C8),
    +        0x3A9   => array(0x3C9),
    +        0x3AA   => array(0x3CA),
    +        0x3AB   => array(0x3CB),
    +        0x3B0   => array(0x3C5, 0x308, 0x301),
    +        0x3C2   => array(0x3C3),
    +        0x3D0   => array(0x3B2),
    +        0x3D1   => array(0x3B8),
    +        0x3D2   => array(0x3C5),
    +        0x3D3   => array(0x3CD),
    +        0x3D4   => array(0x3CB),
    +        0x3D5   => array(0x3C6),
    +        0x3D6   => array(0x3C0),
    +        0x3D8   => array(0x3D9),
    +        0x3DA   => array(0x3DB),
    +        0x3DC   => array(0x3DD),
    +        0x3DE   => array(0x3DF),
    +        0x3E0   => array(0x3E1),
    +        0x3E2   => array(0x3E3),
    +        0x3E4   => array(0x3E5),
    +        0x3E6   => array(0x3E7),
    +        0x3E8   => array(0x3E9),
    +        0x3EA   => array(0x3EB),
    +        0x3EC   => array(0x3ED),
    +        0x3EE   => array(0x3EF),
    +        0x3F0   => array(0x3BA),
    +        0x3F1   => array(0x3C1),
    +        0x3F2   => array(0x3C3),
    +        0x3F4   => array(0x3B8),
    +        0x3F5   => array(0x3B5),
    +        0x400   => array(0x450),
    +        0x401   => array(0x451),
    +        0x402   => array(0x452),
    +        0x403   => array(0x453),
    +        0x404   => array(0x454),
    +        0x405   => array(0x455),
    +        0x406   => array(0x456),
    +        0x407   => array(0x457),
    +        0x408   => array(0x458),
    +        0x409   => array(0x459),
    +        0x40A   => array(0x45A),
    +        0x40B   => array(0x45B),
    +        0x40C   => array(0x45C),
    +        0x40D   => array(0x45D),
    +        0x40E   => array(0x45E),
    +        0x40F   => array(0x45F),
    +        0x410   => array(0x430),
    +        0x411   => array(0x431),
    +        0x412   => array(0x432),
    +        0x413   => array(0x433),
    +        0x414   => array(0x434),
    +        0x415   => array(0x435),
    +        0x416   => array(0x436),
    +        0x417   => array(0x437),
    +        0x418   => array(0x438),
    +        0x419   => array(0x439),
    +        0x41A   => array(0x43A),
    +        0x41B   => array(0x43B),
    +        0x41C   => array(0x43C),
    +        0x41D   => array(0x43D),
    +        0x41E   => array(0x43E),
    +        0x41F   => array(0x43F),
    +        0x420   => array(0x440),
    +        0x421   => array(0x441),
    +        0x422   => array(0x442),
    +        0x423   => array(0x443),
    +        0x424   => array(0x444),
    +        0x425   => array(0x445),
    +        0x426   => array(0x446),
    +        0x427   => array(0x447),
    +        0x428   => array(0x448),
    +        0x429   => array(0x449),
    +        0x42A   => array(0x44A),
    +        0x42B   => array(0x44B),
    +        0x42C   => array(0x44C),
    +        0x42D   => array(0x44D),
    +        0x42E   => array(0x44E),
    +        0x42F   => array(0x44F),
    +        0x460   => array(0x461),
    +        0x462   => array(0x463),
    +        0x464   => array(0x465),
    +        0x466   => array(0x467),
    +        0x468   => array(0x469),
    +        0x46A   => array(0x46B),
    +        0x46C   => array(0x46D),
    +        0x46E   => array(0x46F),
    +        0x470   => array(0x471),
    +        0x472   => array(0x473),
    +        0x474   => array(0x475),
    +        0x476   => array(0x477),
    +        0x478   => array(0x479),
    +        0x47A   => array(0x47B),
    +        0x47C   => array(0x47D),
    +        0x47E   => array(0x47F),
    +        0x480   => array(0x481),
    +        0x48A   => array(0x48B),
    +        0x48C   => array(0x48D),
    +        0x48E   => array(0x48F),
    +        0x490   => array(0x491),
    +        0x492   => array(0x493),
    +        0x494   => array(0x495),
    +        0x496   => array(0x497),
    +        0x498   => array(0x499),
    +        0x49A   => array(0x49B),
    +        0x49C   => array(0x49D),
    +        0x49E   => array(0x49F),
    +        0x4A0   => array(0x4A1),
    +        0x4A2   => array(0x4A3),
    +        0x4A4   => array(0x4A5),
    +        0x4A6   => array(0x4A7),
    +        0x4A8   => array(0x4A9),
    +        0x4AA   => array(0x4AB),
    +        0x4AC   => array(0x4AD),
    +        0x4AE   => array(0x4AF),
    +        0x4B0   => array(0x4B1),
    +        0x4B2   => array(0x4B3),
    +        0x4B4   => array(0x4B5),
    +        0x4B6   => array(0x4B7),
    +        0x4B8   => array(0x4B9),
    +        0x4BA   => array(0x4BB),
    +        0x4BC   => array(0x4BD),
    +        0x4BE   => array(0x4BF),
    +        0x4C1   => array(0x4C2),
    +        0x4C3   => array(0x4C4),
    +        0x4C5   => array(0x4C6),
    +        0x4C7   => array(0x4C8),
    +        0x4C9   => array(0x4CA),
    +        0x4CB   => array(0x4CC),
    +        0x4CD   => array(0x4CE),
    +        0x4D0   => array(0x4D1),
    +        0x4D2   => array(0x4D3),
    +        0x4D4   => array(0x4D5),
    +        0x4D6   => array(0x4D7),
    +        0x4D8   => array(0x4D9),
    +        0x4DA   => array(0x4DB),
    +        0x4DC   => array(0x4DD),
    +        0x4DE   => array(0x4DF),
    +        0x4E0   => array(0x4E1),
    +        0x4E2   => array(0x4E3),
    +        0x4E4   => array(0x4E5),
    +        0x4E6   => array(0x4E7),
    +        0x4E8   => array(0x4E9),
    +        0x4EA   => array(0x4EB),
    +        0x4EC   => array(0x4ED),
    +        0x4EE   => array(0x4EF),
    +        0x4F0   => array(0x4F1),
    +        0x4F2   => array(0x4F3),
    +        0x4F4   => array(0x4F5),
    +        0x4F8   => array(0x4F9),
    +        0x500   => array(0x501),
    +        0x502   => array(0x503),
    +        0x504   => array(0x505),
    +        0x506   => array(0x507),
    +        0x508   => array(0x509),
    +        0x50A   => array(0x50B),
    +        0x50C   => array(0x50D),
    +        0x50E   => array(0x50F),
    +        0x531   => array(0x561),
    +        0x532   => array(0x562),
    +        0x533   => array(0x563),
    +        0x534   => array(0x564),
    +        0x535   => array(0x565),
    +        0x536   => array(0x566),
    +        0x537   => array(0x567),
    +        0x538   => array(0x568),
    +        0x539   => array(0x569),
    +        0x53A   => array(0x56A),
    +        0x53B   => array(0x56B),
    +        0x53C   => array(0x56C),
    +        0x53D   => array(0x56D),
    +        0x53E   => array(0x56E),
    +        0x53F   => array(0x56F),
    +        0x540   => array(0x570),
    +        0x541   => array(0x571),
    +        0x542   => array(0x572),
    +        0x543   => array(0x573),
    +        0x544   => array(0x574),
    +        0x545   => array(0x575),
    +        0x546   => array(0x576),
    +        0x547   => array(0x577),
    +        0x548   => array(0x578),
    +        0x549   => array(0x579),
    +        0x54A   => array(0x57A),
    +        0x54B   => array(0x57B),
    +        0x54C   => array(0x57C),
    +        0x54D   => array(0x57D),
    +        0x54E   => array(0x57E),
    +        0x54F   => array(0x57F),
    +        0x550   => array(0x580),
    +        0x551   => array(0x581),
    +        0x552   => array(0x582),
    +        0x553   => array(0x583),
    +        0x554   => array(0x584),
    +        0x555   => array(0x585),
    +        0x556   => array(0x586),
    +        0x587   => array(0x565, 0x582),
    +        0x1E00  => array(0x1E01),
    +        0x1E02  => array(0x1E03),
    +        0x1E04  => array(0x1E05),
    +        0x1E06  => array(0x1E07),
    +        0x1E08  => array(0x1E09),
    +        0x1E0A  => array(0x1E0B),
    +        0x1E0C  => array(0x1E0D),
    +        0x1E0E  => array(0x1E0F),
    +        0x1E10  => array(0x1E11),
    +        0x1E12  => array(0x1E13),
    +        0x1E14  => array(0x1E15),
    +        0x1E16  => array(0x1E17),
    +        0x1E18  => array(0x1E19),
    +        0x1E1A  => array(0x1E1B),
    +        0x1E1C  => array(0x1E1D),
    +        0x1E1E  => array(0x1E1F),
    +        0x1E20  => array(0x1E21),
    +        0x1E22  => array(0x1E23),
    +        0x1E24  => array(0x1E25),
    +        0x1E26  => array(0x1E27),
    +        0x1E28  => array(0x1E29),
    +        0x1E2A  => array(0x1E2B),
    +        0x1E2C  => array(0x1E2D),
    +        0x1E2E  => array(0x1E2F),
    +        0x1E30  => array(0x1E31),
    +        0x1E32  => array(0x1E33),
    +        0x1E34  => array(0x1E35),
    +        0x1E36  => array(0x1E37),
    +        0x1E38  => array(0x1E39),
    +        0x1E3A  => array(0x1E3B),
    +        0x1E3C  => array(0x1E3D),
    +        0x1E3E  => array(0x1E3F),
    +        0x1E40  => array(0x1E41),
    +        0x1E42  => array(0x1E43),
    +        0x1E44  => array(0x1E45),
    +        0x1E46  => array(0x1E47),
    +        0x1E48  => array(0x1E49),
    +        0x1E4A  => array(0x1E4B),
    +        0x1E4C  => array(0x1E4D),
    +        0x1E4E  => array(0x1E4F),
    +        0x1E50  => array(0x1E51),
    +        0x1E52  => array(0x1E53),
    +        0x1E54  => array(0x1E55),
    +        0x1E56  => array(0x1E57),
    +        0x1E58  => array(0x1E59),
    +        0x1E5A  => array(0x1E5B),
    +        0x1E5C  => array(0x1E5D),
    +        0x1E5E  => array(0x1E5F),
    +        0x1E60  => array(0x1E61),
    +        0x1E62  => array(0x1E63),
    +        0x1E64  => array(0x1E65),
    +        0x1E66  => array(0x1E67),
    +        0x1E68  => array(0x1E69),
    +        0x1E6A  => array(0x1E6B),
    +        0x1E6C  => array(0x1E6D),
    +        0x1E6E  => array(0x1E6F),
    +        0x1E70  => array(0x1E71),
    +        0x1E72  => array(0x1E73),
    +        0x1E74  => array(0x1E75),
    +        0x1E76  => array(0x1E77),
    +        0x1E78  => array(0x1E79),
    +        0x1E7A  => array(0x1E7B),
    +        0x1E7C  => array(0x1E7D),
    +        0x1E7E  => array(0x1E7F),
    +        0x1E80  => array(0x1E81),
    +        0x1E82  => array(0x1E83),
    +        0x1E84  => array(0x1E85),
    +        0x1E86  => array(0x1E87),
    +        0x1E88  => array(0x1E89),
    +        0x1E8A  => array(0x1E8B),
    +        0x1E8C  => array(0x1E8D),
    +        0x1E8E  => array(0x1E8F),
    +        0x1E90  => array(0x1E91),
    +        0x1E92  => array(0x1E93),
    +        0x1E94  => array(0x1E95),
    +        0x1E96  => array(0x68, 0x331),
    +        0x1E97  => array(0x74, 0x308),
    +        0x1E98  => array(0x77, 0x30A),
    +        0x1E99  => array(0x79, 0x30A),
    +        0x1E9A  => array(0x61, 0x2BE),
    +        0x1E9B  => array(0x1E61),
    +        0x1EA0  => array(0x1EA1),
    +        0x1EA2  => array(0x1EA3),
    +        0x1EA4  => array(0x1EA5),
    +        0x1EA6  => array(0x1EA7),
    +        0x1EA8  => array(0x1EA9),
    +        0x1EAA  => array(0x1EAB),
    +        0x1EAC  => array(0x1EAD),
    +        0x1EAE  => array(0x1EAF),
    +        0x1EB0  => array(0x1EB1),
    +        0x1EB2  => array(0x1EB3),
    +        0x1EB4  => array(0x1EB5),
    +        0x1EB6  => array(0x1EB7),
    +        0x1EB8  => array(0x1EB9),
    +        0x1EBA  => array(0x1EBB),
    +        0x1EBC  => array(0x1EBD),
    +        0x1EBE  => array(0x1EBF),
    +        0x1EC0  => array(0x1EC1),
    +        0x1EC2  => array(0x1EC3),
    +        0x1EC4  => array(0x1EC5),
    +        0x1EC6  => array(0x1EC7),
    +        0x1EC8  => array(0x1EC9),
    +        0x1ECA  => array(0x1ECB),
    +        0x1ECC  => array(0x1ECD),
    +        0x1ECE  => array(0x1ECF),
    +        0x1ED0  => array(0x1ED1),
    +        0x1ED2  => array(0x1ED3),
    +        0x1ED4  => array(0x1ED5),
    +        0x1ED6  => array(0x1ED7),
    +        0x1ED8  => array(0x1ED9),
    +        0x1EDA  => array(0x1EDB),
    +        0x1EDC  => array(0x1EDD),
    +        0x1EDE  => array(0x1EDF),
    +        0x1EE0  => array(0x1EE1),
    +        0x1EE2  => array(0x1EE3),
    +        0x1EE4  => array(0x1EE5),
    +        0x1EE6  => array(0x1EE7),
    +        0x1EE8  => array(0x1EE9),
    +        0x1EEA  => array(0x1EEB),
    +        0x1EEC  => array(0x1EED),
    +        0x1EEE  => array(0x1EEF),
    +        0x1EF0  => array(0x1EF1),
    +        0x1EF2  => array(0x1EF3),
    +        0x1EF4  => array(0x1EF5),
    +        0x1EF6  => array(0x1EF7),
    +        0x1EF8  => array(0x1EF9),
    +        0x1F08  => array(0x1F00),
    +        0x1F09  => array(0x1F01),
    +        0x1F0A  => array(0x1F02),
    +        0x1F0B  => array(0x1F03),
    +        0x1F0C  => array(0x1F04),
    +        0x1F0D  => array(0x1F05),
    +        0x1F0E  => array(0x1F06),
    +        0x1F0F  => array(0x1F07),
    +        0x1F18  => array(0x1F10),
    +        0x1F19  => array(0x1F11),
    +        0x1F1A  => array(0x1F12),
    +        0x1F1B  => array(0x1F13),
    +        0x1F1C  => array(0x1F14),
    +        0x1F1D  => array(0x1F15),
    +        0x1F28  => array(0x1F20),
    +        0x1F29  => array(0x1F21),
    +        0x1F2A  => array(0x1F22),
    +        0x1F2B  => array(0x1F23),
    +        0x1F2C  => array(0x1F24),
    +        0x1F2D  => array(0x1F25),
    +        0x1F2E  => array(0x1F26),
    +        0x1F2F  => array(0x1F27),
    +        0x1F38  => array(0x1F30),
    +        0x1F39  => array(0x1F31),
    +        0x1F3A  => array(0x1F32),
    +        0x1F3B  => array(0x1F33),
    +        0x1F3C  => array(0x1F34),
    +        0x1F3D  => array(0x1F35),
    +        0x1F3E  => array(0x1F36),
    +        0x1F3F  => array(0x1F37),
    +        0x1F48  => array(0x1F40),
    +        0x1F49  => array(0x1F41),
    +        0x1F4A  => array(0x1F42),
    +        0x1F4B  => array(0x1F43),
    +        0x1F4C  => array(0x1F44),
    +        0x1F4D  => array(0x1F45),
    +        0x1F50  => array(0x3C5, 0x313),
    +        0x1F52  => array(0x3C5, 0x313, 0x300),
    +        0x1F54  => array(0x3C5, 0x313, 0x301),
    +        0x1F56  => array(0x3C5, 0x313, 0x342),
    +        0x1F59  => array(0x1F51),
    +        0x1F5B  => array(0x1F53),
    +        0x1F5D  => array(0x1F55),
    +        0x1F5F  => array(0x1F57),
    +        0x1F68  => array(0x1F60),
    +        0x1F69  => array(0x1F61),
    +        0x1F6A  => array(0x1F62),
    +        0x1F6B  => array(0x1F63),
    +        0x1F6C  => array(0x1F64),
    +        0x1F6D  => array(0x1F65),
    +        0x1F6E  => array(0x1F66),
    +        0x1F6F  => array(0x1F67),
    +        0x1F80  => array(0x1F00, 0x3B9),
    +        0x1F81  => array(0x1F01, 0x3B9),
    +        0x1F82  => array(0x1F02, 0x3B9),
    +        0x1F83  => array(0x1F03, 0x3B9),
    +        0x1F84  => array(0x1F04, 0x3B9),
    +        0x1F85  => array(0x1F05, 0x3B9),
    +        0x1F86  => array(0x1F06, 0x3B9),
    +        0x1F87  => array(0x1F07, 0x3B9),
    +        0x1F88  => array(0x1F00, 0x3B9),
    +        0x1F89  => array(0x1F01, 0x3B9),
    +        0x1F8A  => array(0x1F02, 0x3B9),
    +        0x1F8B  => array(0x1F03, 0x3B9),
    +        0x1F8C  => array(0x1F04, 0x3B9),
    +        0x1F8D  => array(0x1F05, 0x3B9),
    +        0x1F8E  => array(0x1F06, 0x3B9),
    +        0x1F8F  => array(0x1F07, 0x3B9),
    +        0x1F90  => array(0x1F20, 0x3B9),
    +        0x1F91  => array(0x1F21, 0x3B9),
    +        0x1F92  => array(0x1F22, 0x3B9),
    +        0x1F93  => array(0x1F23, 0x3B9),
    +        0x1F94  => array(0x1F24, 0x3B9),
    +        0x1F95  => array(0x1F25, 0x3B9),
    +        0x1F96  => array(0x1F26, 0x3B9),
    +        0x1F97  => array(0x1F27, 0x3B9),
    +        0x1F98  => array(0x1F20, 0x3B9),
    +        0x1F99  => array(0x1F21, 0x3B9),
    +        0x1F9A  => array(0x1F22, 0x3B9),
    +        0x1F9B  => array(0x1F23, 0x3B9),
    +        0x1F9C  => array(0x1F24, 0x3B9),
    +        0x1F9D  => array(0x1F25, 0x3B9),
    +        0x1F9E  => array(0x1F26, 0x3B9),
    +        0x1F9F  => array(0x1F27, 0x3B9),
    +        0x1FA0  => array(0x1F60, 0x3B9),
    +        0x1FA1  => array(0x1F61, 0x3B9),
    +        0x1FA2  => array(0x1F62, 0x3B9),
    +        0x1FA3  => array(0x1F63, 0x3B9),
    +        0x1FA4  => array(0x1F64, 0x3B9),
    +        0x1FA5  => array(0x1F65, 0x3B9),
    +        0x1FA6  => array(0x1F66, 0x3B9),
    +        0x1FA7  => array(0x1F67, 0x3B9),
    +        0x1FA8  => array(0x1F60, 0x3B9),
    +        0x1FA9  => array(0x1F61, 0x3B9),
    +        0x1FAA  => array(0x1F62, 0x3B9),
    +        0x1FAB  => array(0x1F63, 0x3B9),
    +        0x1FAC  => array(0x1F64, 0x3B9),
    +        0x1FAD  => array(0x1F65, 0x3B9),
    +        0x1FAE  => array(0x1F66, 0x3B9),
    +        0x1FAF  => array(0x1F67, 0x3B9),
    +        0x1FB2  => array(0x1F70, 0x3B9),
    +        0x1FB3  => array(0x3B1, 0x3B9),
    +        0x1FB4  => array(0x3AC, 0x3B9),
    +        0x1FB6  => array(0x3B1, 0x342),
    +        0x1FB7  => array(0x3B1, 0x342, 0x3B9),
    +        0x1FB8  => array(0x1FB0),
    +        0x1FB9  => array(0x1FB1),
    +        0x1FBA  => array(0x1F70),
    +        0x1FBB  => array(0x1F71),
    +        0x1FBC  => array(0x3B1, 0x3B9),
    +        0x1FBE  => array(0x3B9),
    +        0x1FC2  => array(0x1F74, 0x3B9),
    +        0x1FC3  => array(0x3B7, 0x3B9),
    +        0x1FC4  => array(0x3AE, 0x3B9),
    +        0x1FC6  => array(0x3B7, 0x342),
    +        0x1FC7  => array(0x3B7, 0x342, 0x3B9),
    +        0x1FC8  => array(0x1F72),
    +        0x1FC9  => array(0x1F73),
    +        0x1FCA  => array(0x1F74),
    +        0x1FCB  => array(0x1F75),
    +        0x1FCC  => array(0x3B7, 0x3B9),
    +        0x1FD2  => array(0x3B9, 0x308, 0x300),
    +        0x1FD3  => array(0x3B9, 0x308, 0x301),
    +        0x1FD6  => array(0x3B9, 0x342),
    +        0x1FD7  => array(0x3B9, 0x308, 0x342),
    +        0x1FD8  => array(0x1FD0),
    +        0x1FD9  => array(0x1FD1),
    +        0x1FDA  => array(0x1F76),
    +        0x1FDB  => array(0x1F77),
    +        0x1FE2  => array(0x3C5, 0x308, 0x300),
    +        0x1FE3  => array(0x3C5, 0x308, 0x301),
    +        0x1FE4  => array(0x3C1, 0x313),
    +        0x1FE6  => array(0x3C5, 0x342),
    +        0x1FE7  => array(0x3C5, 0x308, 0x342),
    +        0x1FE8  => array(0x1FE0),
    +        0x1FE9  => array(0x1FE1),
    +        0x1FEA  => array(0x1F7A),
    +        0x1FEB  => array(0x1F7B),
    +        0x1FEC  => array(0x1FE5),
    +        0x1FF2  => array(0x1F7C, 0x3B9),
    +        0x1FF3  => array(0x3C9, 0x3B9),
    +        0x1FF4  => array(0x3CE, 0x3B9),
    +        0x1FF6  => array(0x3C9, 0x342),
    +        0x1FF7  => array(0x3C9, 0x342, 0x3B9),
    +        0x1FF8  => array(0x1F78),
    +        0x1FF9  => array(0x1F79),
    +        0x1FFA  => array(0x1F7C),
    +        0x1FFB  => array(0x1F7D),
    +        0x1FFC  => array(0x3C9, 0x3B9),
    +        0x20A8  => array(0x72, 0x73),
    +        0x2102  => array(0x63),
    +        0x2103  => array(0xB0, 0x63),
    +        0x2107  => array(0x25B),
    +        0x2109  => array(0xB0, 0x66),
    +        0x210B  => array(0x68),
    +        0x210C  => array(0x68),
    +        0x210D  => array(0x68),
    +        0x2110  => array(0x69),
    +        0x2111  => array(0x69),
    +        0x2112  => array(0x6C),
    +        0x2115  => array(0x6E),
    +        0x2116  => array(0x6E, 0x6F),
    +        0x2119  => array(0x70),
    +        0x211A  => array(0x71),
    +        0x211B  => array(0x72),
    +        0x211C  => array(0x72),
    +        0x211D  => array(0x72),
    +        0x2120  => array(0x73, 0x6D),
    +        0x2121  => array(0x74, 0x65, 0x6C),
    +        0x2122  => array(0x74, 0x6D),
    +        0x2124  => array(0x7A),
    +        0x2126  => array(0x3C9),
    +        0x2128  => array(0x7A),
    +        0x212A  => array(0x6B),
    +        0x212B  => array(0xE5),
    +        0x212C  => array(0x62),
    +        0x212D  => array(0x63),
    +        0x2130  => array(0x65),
    +        0x2131  => array(0x66),
    +        0x2133  => array(0x6D),
    +        0x213E  => array(0x3B3),
    +        0x213F  => array(0x3C0),
    +        0x2145  => array(0x64),
    +        0x2160  => array(0x2170),
    +        0x2161  => array(0x2171),
    +        0x2162  => array(0x2172),
    +        0x2163  => array(0x2173),
    +        0x2164  => array(0x2174),
    +        0x2165  => array(0x2175),
    +        0x2166  => array(0x2176),
    +        0x2167  => array(0x2177),
    +        0x2168  => array(0x2178),
    +        0x2169  => array(0x2179),
    +        0x216A  => array(0x217A),
    +        0x216B  => array(0x217B),
    +        0x216C  => array(0x217C),
    +        0x216D  => array(0x217D),
    +        0x216E  => array(0x217E),
    +        0x216F  => array(0x217F),
    +        0x24B6  => array(0x24D0),
    +        0x24B7  => array(0x24D1),
    +        0x24B8  => array(0x24D2),
    +        0x24B9  => array(0x24D3),
    +        0x24BA  => array(0x24D4),
    +        0x24BB  => array(0x24D5),
    +        0x24BC  => array(0x24D6),
    +        0x24BD  => array(0x24D7),
    +        0x24BE  => array(0x24D8),
    +        0x24BF  => array(0x24D9),
    +        0x24C0  => array(0x24DA),
    +        0x24C1  => array(0x24DB),
    +        0x24C2  => array(0x24DC),
    +        0x24C3  => array(0x24DD),
    +        0x24C4  => array(0x24DE),
    +        0x24C5  => array(0x24DF),
    +        0x24C6  => array(0x24E0),
    +        0x24C7  => array(0x24E1),
    +        0x24C8  => array(0x24E2),
    +        0x24C9  => array(0x24E3),
    +        0x24CA  => array(0x24E4),
    +        0x24CB  => array(0x24E5),
    +        0x24CC  => array(0x24E6),
    +        0x24CD  => array(0x24E7),
    +        0x24CE  => array(0x24E8),
    +        0x24CF  => array(0x24E9),
    +        0x3371  => array(0x68, 0x70, 0x61),
    +        0x3373  => array(0x61, 0x75),
    +        0x3375  => array(0x6F, 0x76),
    +        0x3380  => array(0x70, 0x61),
    +        0x3381  => array(0x6E, 0x61),
    +        0x3382  => array(0x3BC, 0x61),
    +        0x3383  => array(0x6D, 0x61),
    +        0x3384  => array(0x6B, 0x61),
    +        0x3385  => array(0x6B, 0x62),
    +        0x3386  => array(0x6D, 0x62),
    +        0x3387  => array(0x67, 0x62),
    +        0x338A  => array(0x70, 0x66),
    +        0x338B  => array(0x6E, 0x66),
    +        0x338C  => array(0x3BC, 0x66),
    +        0x3390  => array(0x68, 0x7A),
    +        0x3391  => array(0x6B, 0x68, 0x7A),
    +        0x3392  => array(0x6D, 0x68, 0x7A),
    +        0x3393  => array(0x67, 0x68, 0x7A),
    +        0x3394  => array(0x74, 0x68, 0x7A),
    +        0x33A9  => array(0x70, 0x61),
    +        0x33AA  => array(0x6B, 0x70, 0x61),
    +        0x33AB  => array(0x6D, 0x70, 0x61),
    +        0x33AC  => array(0x67, 0x70, 0x61),
    +        0x33B4  => array(0x70, 0x76),
    +        0x33B5  => array(0x6E, 0x76),
    +        0x33B6  => array(0x3BC, 0x76),
    +        0x33B7  => array(0x6D, 0x76),
    +        0x33B8  => array(0x6B, 0x76),
    +        0x33B9  => array(0x6D, 0x76),
    +        0x33BA  => array(0x70, 0x77),
    +        0x33BB  => array(0x6E, 0x77),
    +        0x33BC  => array(0x3BC, 0x77),
    +        0x33BD  => array(0x6D, 0x77),
    +        0x33BE  => array(0x6B, 0x77),
    +        0x33BF  => array(0x6D, 0x77),
    +        0x33C0  => array(0x6B, 0x3C9),
    +        0x33C1  => array(0x6D, 0x3C9),
    +        /* 0x33C2  => array(0x61, 0x2E, 0x6D, 0x2E), */
    +        0x33C3  => array(0x62, 0x71),
    +        0x33C6  => array(0x63, 0x2215, 0x6B, 0x67),
    +        0x33C7  => array(0x63, 0x6F, 0x2E),
    +        0x33C8  => array(0x64, 0x62),
    +        0x33C9  => array(0x67, 0x79),
    +        0x33CB  => array(0x68, 0x70),
    +        0x33CD  => array(0x6B, 0x6B),
    +        0x33CE  => array(0x6B, 0x6D),
    +        0x33D7  => array(0x70, 0x68),
    +        0x33D9  => array(0x70, 0x70, 0x6D),
    +        0x33DA  => array(0x70, 0x72),
    +        0x33DC  => array(0x73, 0x76),
    +        0x33DD  => array(0x77, 0x62),
    +        0xFB00  => array(0x66, 0x66),
    +        0xFB01  => array(0x66, 0x69),
    +        0xFB02  => array(0x66, 0x6C),
    +        0xFB03  => array(0x66, 0x66, 0x69),
    +        0xFB04  => array(0x66, 0x66, 0x6C),
    +        0xFB05  => array(0x73, 0x74),
    +        0xFB06  => array(0x73, 0x74),
    +        0xFB13  => array(0x574, 0x576),
    +        0xFB14  => array(0x574, 0x565),
    +        0xFB15  => array(0x574, 0x56B),
    +        0xFB16  => array(0x57E, 0x576),
    +        0xFB17  => array(0x574, 0x56D),
    +        0xFF21  => array(0xFF41),
    +        0xFF22  => array(0xFF42),
    +        0xFF23  => array(0xFF43),
    +        0xFF24  => array(0xFF44),
    +        0xFF25  => array(0xFF45),
    +        0xFF26  => array(0xFF46),
    +        0xFF27  => array(0xFF47),
    +        0xFF28  => array(0xFF48),
    +        0xFF29  => array(0xFF49),
    +        0xFF2A  => array(0xFF4A),
    +        0xFF2B  => array(0xFF4B),
    +        0xFF2C  => array(0xFF4C),
    +        0xFF2D  => array(0xFF4D),
    +        0xFF2E  => array(0xFF4E),
    +        0xFF2F  => array(0xFF4F),
    +        0xFF30  => array(0xFF50),
    +        0xFF31  => array(0xFF51),
    +        0xFF32  => array(0xFF52),
    +        0xFF33  => array(0xFF53),
    +        0xFF34  => array(0xFF54),
    +        0xFF35  => array(0xFF55),
    +        0xFF36  => array(0xFF56),
    +        0xFF37  => array(0xFF57),
    +        0xFF38  => array(0xFF58),
    +        0xFF39  => array(0xFF59),
    +        0xFF3A  => array(0xFF5A),
    +        0x10400 => array(0x10428),
    +        0x10401 => array(0x10429),
    +        0x10402 => array(0x1042A),
    +        0x10403 => array(0x1042B),
    +        0x10404 => array(0x1042C),
    +        0x10405 => array(0x1042D),
    +        0x10406 => array(0x1042E),
    +        0x10407 => array(0x1042F),
    +        0x10408 => array(0x10430),
    +        0x10409 => array(0x10431),
    +        0x1040A => array(0x10432),
    +        0x1040B => array(0x10433),
    +        0x1040C => array(0x10434),
    +        0x1040D => array(0x10435),
    +        0x1040E => array(0x10436),
    +        0x1040F => array(0x10437),
    +        0x10410 => array(0x10438),
    +        0x10411 => array(0x10439),
    +        0x10412 => array(0x1043A),
    +        0x10413 => array(0x1043B),
    +        0x10414 => array(0x1043C),
    +        0x10415 => array(0x1043D),
    +        0x10416 => array(0x1043E),
    +        0x10417 => array(0x1043F),
    +        0x10418 => array(0x10440),
    +        0x10419 => array(0x10441),
    +        0x1041A => array(0x10442),
    +        0x1041B => array(0x10443),
    +        0x1041C => array(0x10444),
    +        0x1041D => array(0x10445),
    +        0x1041E => array(0x10446),
    +        0x1041F => array(0x10447),
    +        0x10420 => array(0x10448),
    +        0x10421 => array(0x10449),
    +        0x10422 => array(0x1044A),
    +        0x10423 => array(0x1044B),
    +        0x10424 => array(0x1044C),
    +        0x10425 => array(0x1044D),
    +        0x1D400 => array(0x61),
    +        0x1D401 => array(0x62),
    +        0x1D402 => array(0x63),
    +        0x1D403 => array(0x64),
    +        0x1D404 => array(0x65),
    +        0x1D405 => array(0x66),
    +        0x1D406 => array(0x67),
    +        0x1D407 => array(0x68),
    +        0x1D408 => array(0x69),
    +        0x1D409 => array(0x6A),
    +        0x1D40A => array(0x6B),
    +        0x1D40B => array(0x6C),
    +        0x1D40C => array(0x6D),
    +        0x1D40D => array(0x6E),
    +        0x1D40E => array(0x6F),
    +        0x1D40F => array(0x70),
    +        0x1D410 => array(0x71),
    +        0x1D411 => array(0x72),
    +        0x1D412 => array(0x73),
    +        0x1D413 => array(0x74),
    +        0x1D414 => array(0x75),
    +        0x1D415 => array(0x76),
    +        0x1D416 => array(0x77),
    +        0x1D417 => array(0x78),
    +        0x1D418 => array(0x79),
    +        0x1D419 => array(0x7A),
    +        0x1D434 => array(0x61),
    +        0x1D435 => array(0x62),
    +        0x1D436 => array(0x63),
    +        0x1D437 => array(0x64),
    +        0x1D438 => array(0x65),
    +        0x1D439 => array(0x66),
    +        0x1D43A => array(0x67),
    +        0x1D43B => array(0x68),
    +        0x1D43C => array(0x69),
    +        0x1D43D => array(0x6A),
    +        0x1D43E => array(0x6B),
    +        0x1D43F => array(0x6C),
    +        0x1D440 => array(0x6D),
    +        0x1D441 => array(0x6E),
    +        0x1D442 => array(0x6F),
    +        0x1D443 => array(0x70),
    +        0x1D444 => array(0x71),
    +        0x1D445 => array(0x72),
    +        0x1D446 => array(0x73),
    +        0x1D447 => array(0x74),
    +        0x1D448 => array(0x75),
    +        0x1D449 => array(0x76),
    +        0x1D44A => array(0x77),
    +        0x1D44B => array(0x78),
    +        0x1D44C => array(0x79),
    +        0x1D44D => array(0x7A),
    +        0x1D468 => array(0x61),
    +        0x1D469 => array(0x62),
    +        0x1D46A => array(0x63),
    +        0x1D46B => array(0x64),
    +        0x1D46C => array(0x65),
    +        0x1D46D => array(0x66),
    +        0x1D46E => array(0x67),
    +        0x1D46F => array(0x68),
    +        0x1D470 => array(0x69),
    +        0x1D471 => array(0x6A),
    +        0x1D472 => array(0x6B),
    +        0x1D473 => array(0x6C),
    +        0x1D474 => array(0x6D),
    +        0x1D475 => array(0x6E),
    +        0x1D476 => array(0x6F),
    +        0x1D477 => array(0x70),
    +        0x1D478 => array(0x71),
    +        0x1D479 => array(0x72),
    +        0x1D47A => array(0x73),
    +        0x1D47B => array(0x74),
    +        0x1D47C => array(0x75),
    +        0x1D47D => array(0x76),
    +        0x1D47E => array(0x77),
    +        0x1D47F => array(0x78),
    +        0x1D480 => array(0x79),
    +        0x1D481 => array(0x7A),
    +        0x1D49C => array(0x61),
    +        0x1D49E => array(0x63),
    +        0x1D49F => array(0x64),
    +        0x1D4A2 => array(0x67),
    +        0x1D4A5 => array(0x6A),
    +        0x1D4A6 => array(0x6B),
    +        0x1D4A9 => array(0x6E),
    +        0x1D4AA => array(0x6F),
    +        0x1D4AB => array(0x70),
    +        0x1D4AC => array(0x71),
    +        0x1D4AE => array(0x73),
    +        0x1D4AF => array(0x74),
    +        0x1D4B0 => array(0x75),
    +        0x1D4B1 => array(0x76),
    +        0x1D4B2 => array(0x77),
    +        0x1D4B3 => array(0x78),
    +        0x1D4B4 => array(0x79),
    +        0x1D4B5 => array(0x7A),
    +        0x1D4D0 => array(0x61),
    +        0x1D4D1 => array(0x62),
    +        0x1D4D2 => array(0x63),
    +        0x1D4D3 => array(0x64),
    +        0x1D4D4 => array(0x65),
    +        0x1D4D5 => array(0x66),
    +        0x1D4D6 => array(0x67),
    +        0x1D4D7 => array(0x68),
    +        0x1D4D8 => array(0x69),
    +        0x1D4D9 => array(0x6A),
    +        0x1D4DA => array(0x6B),
    +        0x1D4DB => array(0x6C),
    +        0x1D4DC => array(0x6D),
    +        0x1D4DD => array(0x6E),
    +        0x1D4DE => array(0x6F),
    +        0x1D4DF => array(0x70),
    +        0x1D4E0 => array(0x71),
    +        0x1D4E1 => array(0x72),
    +        0x1D4E2 => array(0x73),
    +        0x1D4E3 => array(0x74),
    +        0x1D4E4 => array(0x75),
    +        0x1D4E5 => array(0x76),
    +        0x1D4E6 => array(0x77),
    +        0x1D4E7 => array(0x78),
    +        0x1D4E8 => array(0x79),
    +        0x1D4E9 => array(0x7A),
    +        0x1D504 => array(0x61),
    +        0x1D505 => array(0x62),
    +        0x1D507 => array(0x64),
    +        0x1D508 => array(0x65),
    +        0x1D509 => array(0x66),
    +        0x1D50A => array(0x67),
    +        0x1D50D => array(0x6A),
    +        0x1D50E => array(0x6B),
    +        0x1D50F => array(0x6C),
    +        0x1D510 => array(0x6D),
    +        0x1D511 => array(0x6E),
    +        0x1D512 => array(0x6F),
    +        0x1D513 => array(0x70),
    +        0x1D514 => array(0x71),
    +        0x1D516 => array(0x73),
    +        0x1D517 => array(0x74),
    +        0x1D518 => array(0x75),
    +        0x1D519 => array(0x76),
    +        0x1D51A => array(0x77),
    +        0x1D51B => array(0x78),
    +        0x1D51C => array(0x79),
    +        0x1D538 => array(0x61),
    +        0x1D539 => array(0x62),
    +        0x1D53B => array(0x64),
    +        0x1D53C => array(0x65),
    +        0x1D53D => array(0x66),
    +        0x1D53E => array(0x67),
    +        0x1D540 => array(0x69),
    +        0x1D541 => array(0x6A),
    +        0x1D542 => array(0x6B),
    +        0x1D543 => array(0x6C),
    +        0x1D544 => array(0x6D),
    +        0x1D546 => array(0x6F),
    +        0x1D54A => array(0x73),
    +        0x1D54B => array(0x74),
    +        0x1D54C => array(0x75),
    +        0x1D54D => array(0x76),
    +        0x1D54E => array(0x77),
    +        0x1D54F => array(0x78),
    +        0x1D550 => array(0x79),
    +        0x1D56C => array(0x61),
    +        0x1D56D => array(0x62),
    +        0x1D56E => array(0x63),
    +        0x1D56F => array(0x64),
    +        0x1D570 => array(0x65),
    +        0x1D571 => array(0x66),
    +        0x1D572 => array(0x67),
    +        0x1D573 => array(0x68),
    +        0x1D574 => array(0x69),
    +        0x1D575 => array(0x6A),
    +        0x1D576 => array(0x6B),
    +        0x1D577 => array(0x6C),
    +        0x1D578 => array(0x6D),
    +        0x1D579 => array(0x6E),
    +        0x1D57A => array(0x6F),
    +        0x1D57B => array(0x70),
    +        0x1D57C => array(0x71),
    +        0x1D57D => array(0x72),
    +        0x1D57E => array(0x73),
    +        0x1D57F => array(0x74),
    +        0x1D580 => array(0x75),
    +        0x1D581 => array(0x76),
    +        0x1D582 => array(0x77),
    +        0x1D583 => array(0x78),
    +        0x1D584 => array(0x79),
    +        0x1D585 => array(0x7A),
    +        0x1D5A0 => array(0x61),
    +        0x1D5A1 => array(0x62),
    +        0x1D5A2 => array(0x63),
    +        0x1D5A3 => array(0x64),
    +        0x1D5A4 => array(0x65),
    +        0x1D5A5 => array(0x66),
    +        0x1D5A6 => array(0x67),
    +        0x1D5A7 => array(0x68),
    +        0x1D5A8 => array(0x69),
    +        0x1D5A9 => array(0x6A),
    +        0x1D5AA => array(0x6B),
    +        0x1D5AB => array(0x6C),
    +        0x1D5AC => array(0x6D),
    +        0x1D5AD => array(0x6E),
    +        0x1D5AE => array(0x6F),
    +        0x1D5AF => array(0x70),
    +        0x1D5B0 => array(0x71),
    +        0x1D5B1 => array(0x72),
    +        0x1D5B2 => array(0x73),
    +        0x1D5B3 => array(0x74),
    +        0x1D5B4 => array(0x75),
    +        0x1D5B5 => array(0x76),
    +        0x1D5B6 => array(0x77),
    +        0x1D5B7 => array(0x78),
    +        0x1D5B8 => array(0x79),
    +        0x1D5B9 => array(0x7A),
    +        0x1D5D4 => array(0x61),
    +        0x1D5D5 => array(0x62),
    +        0x1D5D6 => array(0x63),
    +        0x1D5D7 => array(0x64),
    +        0x1D5D8 => array(0x65),
    +        0x1D5D9 => array(0x66),
    +        0x1D5DA => array(0x67),
    +        0x1D5DB => array(0x68),
    +        0x1D5DC => array(0x69),
    +        0x1D5DD => array(0x6A),
    +        0x1D5DE => array(0x6B),
    +        0x1D5DF => array(0x6C),
    +        0x1D5E0 => array(0x6D),
    +        0x1D5E1 => array(0x6E),
    +        0x1D5E2 => array(0x6F),
    +        0x1D5E3 => array(0x70),
    +        0x1D5E4 => array(0x71),
    +        0x1D5E5 => array(0x72),
    +        0x1D5E6 => array(0x73),
    +        0x1D5E7 => array(0x74),
    +        0x1D5E8 => array(0x75),
    +        0x1D5E9 => array(0x76),
    +        0x1D5EA => array(0x77),
    +        0x1D5EB => array(0x78),
    +        0x1D5EC => array(0x79),
    +        0x1D5ED => array(0x7A),
    +        0x1D608 => array(0x61),
    +        0x1D609 => array(0x62),
    +        0x1D60A => array(0x63),
    +        0x1D60B => array(0x64),
    +        0x1D60C => array(0x65),
    +        0x1D60D => array(0x66),
    +        0x1D60E => array(0x67),
    +        0x1D60F => array(0x68),
    +        0x1D610 => array(0x69),
    +        0x1D611 => array(0x6A),
    +        0x1D612 => array(0x6B),
    +        0x1D613 => array(0x6C),
    +        0x1D614 => array(0x6D),
    +        0x1D615 => array(0x6E),
    +        0x1D616 => array(0x6F),
    +        0x1D617 => array(0x70),
    +        0x1D618 => array(0x71),
    +        0x1D619 => array(0x72),
    +        0x1D61A => array(0x73),
    +        0x1D61B => array(0x74),
    +        0x1D61C => array(0x75),
    +        0x1D61D => array(0x76),
    +        0x1D61E => array(0x77),
    +        0x1D61F => array(0x78),
    +        0x1D620 => array(0x79),
    +        0x1D621 => array(0x7A),
    +        0x1D63C => array(0x61),
    +        0x1D63D => array(0x62),
    +        0x1D63E => array(0x63),
    +        0x1D63F => array(0x64),
    +        0x1D640 => array(0x65),
    +        0x1D641 => array(0x66),
    +        0x1D642 => array(0x67),
    +        0x1D643 => array(0x68),
    +        0x1D644 => array(0x69),
    +        0x1D645 => array(0x6A),
    +        0x1D646 => array(0x6B),
    +        0x1D647 => array(0x6C),
    +        0x1D648 => array(0x6D),
    +        0x1D649 => array(0x6E),
    +        0x1D64A => array(0x6F),
    +        0x1D64B => array(0x70),
    +        0x1D64C => array(0x71),
    +        0x1D64D => array(0x72),
    +        0x1D64E => array(0x73),
    +        0x1D64F => array(0x74),
    +        0x1D650 => array(0x75),
    +        0x1D651 => array(0x76),
    +        0x1D652 => array(0x77),
    +        0x1D653 => array(0x78),
    +        0x1D654 => array(0x79),
    +        0x1D655 => array(0x7A),
    +        0x1D670 => array(0x61),
    +        0x1D671 => array(0x62),
    +        0x1D672 => array(0x63),
    +        0x1D673 => array(0x64),
    +        0x1D674 => array(0x65),
    +        0x1D675 => array(0x66),
    +        0x1D676 => array(0x67),
    +        0x1D677 => array(0x68),
    +        0x1D678 => array(0x69),
    +        0x1D679 => array(0x6A),
    +        0x1D67A => array(0x6B),
    +        0x1D67B => array(0x6C),
    +        0x1D67C => array(0x6D),
    +        0x1D67D => array(0x6E),
    +        0x1D67E => array(0x6F),
    +        0x1D67F => array(0x70),
    +        0x1D680 => array(0x71),
    +        0x1D681 => array(0x72),
    +        0x1D682 => array(0x73),
    +        0x1D683 => array(0x74),
    +        0x1D684 => array(0x75),
    +        0x1D685 => array(0x76),
    +        0x1D686 => array(0x77),
    +        0x1D687 => array(0x78),
    +        0x1D688 => array(0x79),
    +        0x1D689 => array(0x7A),
    +        0x1D6A8 => array(0x3B1),
    +        0x1D6A9 => array(0x3B2),
    +        0x1D6AA => array(0x3B3),
    +        0x1D6AB => array(0x3B4),
    +        0x1D6AC => array(0x3B5),
    +        0x1D6AD => array(0x3B6),
    +        0x1D6AE => array(0x3B7),
    +        0x1D6AF => array(0x3B8),
    +        0x1D6B0 => array(0x3B9),
    +        0x1D6B1 => array(0x3BA),
    +        0x1D6B2 => array(0x3BB),
    +        0x1D6B3 => array(0x3BC),
    +        0x1D6B4 => array(0x3BD),
    +        0x1D6B5 => array(0x3BE),
    +        0x1D6B6 => array(0x3BF),
    +        0x1D6B7 => array(0x3C0),
    +        0x1D6B8 => array(0x3C1),
    +        0x1D6B9 => array(0x3B8),
    +        0x1D6BA => array(0x3C3),
    +        0x1D6BB => array(0x3C4),
    +        0x1D6BC => array(0x3C5),
    +        0x1D6BD => array(0x3C6),
    +        0x1D6BE => array(0x3C7),
    +        0x1D6BF => array(0x3C8),
    +        0x1D6C0 => array(0x3C9),
    +        0x1D6D3 => array(0x3C3),
    +        0x1D6E2 => array(0x3B1),
    +        0x1D6E3 => array(0x3B2),
    +        0x1D6E4 => array(0x3B3),
    +        0x1D6E5 => array(0x3B4),
    +        0x1D6E6 => array(0x3B5),
    +        0x1D6E7 => array(0x3B6),
    +        0x1D6E8 => array(0x3B7),
    +        0x1D6E9 => array(0x3B8),
    +        0x1D6EA => array(0x3B9),
    +        0x1D6EB => array(0x3BA),
    +        0x1D6EC => array(0x3BB),
    +        0x1D6ED => array(0x3BC),
    +        0x1D6EE => array(0x3BD),
    +        0x1D6EF => array(0x3BE),
    +        0x1D6F0 => array(0x3BF),
    +        0x1D6F1 => array(0x3C0),
    +        0x1D6F2 => array(0x3C1),
    +        0x1D6F3 => array(0x3B8),
    +        0x1D6F4 => array(0x3C3),
    +        0x1D6F5 => array(0x3C4),
    +        0x1D6F6 => array(0x3C5),
    +        0x1D6F7 => array(0x3C6),
    +        0x1D6F8 => array(0x3C7),
    +        0x1D6F9 => array(0x3C8),
    +        0x1D6FA => array(0x3C9),
    +        0x1D70D => array(0x3C3),
    +        0x1D71C => array(0x3B1),
    +        0x1D71D => array(0x3B2),
    +        0x1D71E => array(0x3B3),
    +        0x1D71F => array(0x3B4),
    +        0x1D720 => array(0x3B5),
    +        0x1D721 => array(0x3B6),
    +        0x1D722 => array(0x3B7),
    +        0x1D723 => array(0x3B8),
    +        0x1D724 => array(0x3B9),
    +        0x1D725 => array(0x3BA),
    +        0x1D726 => array(0x3BB),
    +        0x1D727 => array(0x3BC),
    +        0x1D728 => array(0x3BD),
    +        0x1D729 => array(0x3BE),
    +        0x1D72A => array(0x3BF),
    +        0x1D72B => array(0x3C0),
    +        0x1D72C => array(0x3C1),
    +        0x1D72D => array(0x3B8),
    +        0x1D72E => array(0x3C3),
    +        0x1D72F => array(0x3C4),
    +        0x1D730 => array(0x3C5),
    +        0x1D731 => array(0x3C6),
    +        0x1D732 => array(0x3C7),
    +        0x1D733 => array(0x3C8),
    +        0x1D734 => array(0x3C9),
    +        0x1D747 => array(0x3C3),
    +        0x1D756 => array(0x3B1),
    +        0x1D757 => array(0x3B2),
    +        0x1D758 => array(0x3B3),
    +        0x1D759 => array(0x3B4),
    +        0x1D75A => array(0x3B5),
    +        0x1D75B => array(0x3B6),
    +        0x1D75C => array(0x3B7),
    +        0x1D75D => array(0x3B8),
    +        0x1D75E => array(0x3B9),
    +        0x1D75F => array(0x3BA),
    +        0x1D760 => array(0x3BB),
    +        0x1D761 => array(0x3BC),
    +        0x1D762 => array(0x3BD),
    +        0x1D763 => array(0x3BE),
    +        0x1D764 => array(0x3BF),
    +        0x1D765 => array(0x3C0),
    +        0x1D766 => array(0x3C1),
    +        0x1D767 => array(0x3B8),
    +        0x1D768 => array(0x3C3),
    +        0x1D769 => array(0x3C4),
    +        0x1D76A => array(0x3C5),
    +        0x1D76B => array(0x3C6),
    +        0x1D76C => array(0x3C7),
    +        0x1D76D => array(0x3C8),
    +        0x1D76E => array(0x3C9),
    +        0x1D781 => array(0x3C3),
    +        0x1D790 => array(0x3B1),
    +        0x1D791 => array(0x3B2),
    +        0x1D792 => array(0x3B3),
    +        0x1D793 => array(0x3B4),
    +        0x1D794 => array(0x3B5),
    +        0x1D795 => array(0x3B6),
    +        0x1D796 => array(0x3B7),
    +        0x1D797 => array(0x3B8),
    +        0x1D798 => array(0x3B9),
    +        0x1D799 => array(0x3BA),
    +        0x1D79A => array(0x3BB),
    +        0x1D79B => array(0x3BC),
    +        0x1D79C => array(0x3BD),
    +        0x1D79D => array(0x3BE),
    +        0x1D79E => array(0x3BF),
    +        0x1D79F => array(0x3C0),
    +        0x1D7A0 => array(0x3C1),
    +        0x1D7A1 => array(0x3B8),
    +        0x1D7A2 => array(0x3C3),
    +        0x1D7A3 => array(0x3C4),
    +        0x1D7A4 => array(0x3C5),
    +        0x1D7A5 => array(0x3C6),
    +        0x1D7A6 => array(0x3C7),
    +        0x1D7A7 => array(0x3C8),
    +        0x1D7A8 => array(0x3C9),
    +        0x1D7BB => array(0x3C3),
    +        0x3F9   => array(0x3C3),
    +        0x1D2C  => array(0x61),
    +        0x1D2D  => array(0xE6),
    +        0x1D2E  => array(0x62),
    +        0x1D30  => array(0x64),
    +        0x1D31  => array(0x65),
    +        0x1D32  => array(0x1DD),
    +        0x1D33  => array(0x67),
    +        0x1D34  => array(0x68),
    +        0x1D35  => array(0x69),
    +        0x1D36  => array(0x6A),
    +        0x1D37  => array(0x6B),
    +        0x1D38  => array(0x6C),
    +        0x1D39  => array(0x6D),
    +        0x1D3A  => array(0x6E),
    +        0x1D3C  => array(0x6F),
    +        0x1D3D  => array(0x223),
    +        0x1D3E  => array(0x70),
    +        0x1D3F  => array(0x72),
    +        0x1D40  => array(0x74),
    +        0x1D41  => array(0x75),
    +        0x1D42  => array(0x77),
    +        0x213B  => array(0x66, 0x61, 0x78),
    +        0x3250  => array(0x70, 0x74, 0x65),
    +        0x32CC  => array(0x68, 0x67),
    +        0x32CE  => array(0x65, 0x76),
    +        0x32CF  => array(0x6C, 0x74, 0x64),
    +        0x337A  => array(0x69, 0x75),
    +        0x33DE  => array(0x76, 0x2215, 0x6D),
    +        0x33DF  => array(0x61, 0x2215, 0x6D)
    +    );
    +
    +    /**
    +     * Normalization Combining Classes; Code Points not listed
    +     * got Combining Class 0.
    +     *
    +     * @static
    +     * @var array
    +     * @access private
    +     */
    +    private static $_np_norm_combcls = array(
    +        0x334   => 1,
    +        0x335   => 1,
    +        0x336   => 1,
    +        0x337   => 1,
    +        0x338   => 1,
    +        0x93C   => 7,
    +        0x9BC   => 7,
    +        0xA3C   => 7,
    +        0xABC   => 7,
    +        0xB3C   => 7,
    +        0xCBC   => 7,
    +        0x1037  => 7,
    +        0x3099  => 8,
    +        0x309A  => 8,
    +        0x94D   => 9,
    +        0x9CD   => 9,
    +        0xA4D   => 9,
    +        0xACD   => 9,
    +        0xB4D   => 9,
    +        0xBCD   => 9,
    +        0xC4D   => 9,
    +        0xCCD   => 9,
    +        0xD4D   => 9,
    +        0xDCA   => 9,
    +        0xE3A   => 9,
    +        0xF84   => 9,
    +        0x1039  => 9,
    +        0x1714  => 9,
    +        0x1734  => 9,
    +        0x17D2  => 9,
    +        0x5B0   => 10,
    +        0x5B1   => 11,
    +        0x5B2   => 12,
    +        0x5B3   => 13,
    +        0x5B4   => 14,
    +        0x5B5   => 15,
    +        0x5B6   => 16,
    +        0x5B7   => 17,
    +        0x5B8   => 18,
    +        0x5B9   => 19,
    +        0x5BB   => 20,
    +        0x5Bc   => 21,
    +        0x5BD   => 22,
    +        0x5BF   => 23,
    +        0x5C1   => 24,
    +        0x5C2   => 25,
    +        0xFB1E  => 26,
    +        0x64B   => 27,
    +        0x64C   => 28,
    +        0x64D   => 29,
    +        0x64E   => 30,
    +        0x64F   => 31,
    +        0x650   => 32,
    +        0x651   => 33,
    +        0x652   => 34,
    +        0x670   => 35,
    +        0x711   => 36,
    +        0xC55   => 84,
    +        0xC56   => 91,
    +        0xE38   => 103,
    +        0xE39   => 103,
    +        0xE48   => 107,
    +        0xE49   => 107,
    +        0xE4A   => 107,
    +        0xE4B   => 107,
    +        0xEB8   => 118,
    +        0xEB9   => 118,
    +        0xEC8   => 122,
    +        0xEC9   => 122,
    +        0xECA   => 122,
    +        0xECB   => 122,
    +        0xF71   => 129,
    +        0xF72   => 130,
    +        0xF7A   => 130,
    +        0xF7B   => 130,
    +        0xF7C   => 130,
    +        0xF7D   => 130,
    +        0xF80   => 130,
    +        0xF74   => 132,
    +        0x321   => 202,
    +        0x322   => 202,
    +        0x327   => 202,
    +        0x328   => 202,
    +        0x31B   => 216,
    +        0xF39   => 216,
    +        0x1D165 => 216,
    +        0x1D166 => 216,
    +        0x1D16E => 216,
    +        0x1D16F => 216,
    +        0x1D170 => 216,
    +        0x1D171 => 216,
    +        0x1D172 => 216,
    +        0x302A  => 218,
    +        0x316   => 220,
    +        0x317   => 220,
    +        0x318   => 220,
    +        0x319   => 220,
    +        0x31C   => 220,
    +        0x31D   => 220,
    +        0x31E   => 220,
    +        0x31F   => 220,
    +        0x320   => 220,
    +        0x323   => 220,
    +        0x324   => 220,
    +        0x325   => 220,
    +        0x326   => 220,
    +        0x329   => 220,
    +        0x32A   => 220,
    +        0x32B   => 220,
    +        0x32C   => 220,
    +        0x32D   => 220,
    +        0x32E   => 220,
    +        0x32F   => 220,
    +        0x330   => 220,
    +        0x331   => 220,
    +        0x332   => 220,
    +        0x333   => 220,
    +        0x339   => 220,
    +        0x33A   => 220,
    +        0x33B   => 220,
    +        0x33C   => 220,
    +        0x347   => 220,
    +        0x348   => 220,
    +        0x349   => 220,
    +        0x34D   => 220,
    +        0x34E   => 220,
    +        0x353   => 220,
    +        0x354   => 220,
    +        0x355   => 220,
    +        0x356   => 220,
    +        0x591   => 220,
    +        0x596   => 220,
    +        0x59B   => 220,
    +        0x5A3   => 220,
    +        0x5A4   => 220,
    +        0x5A5   => 220,
    +        0x5A6   => 220,
    +        0x5A7   => 220,
    +        0x5AA   => 220,
    +        0x655   => 220,
    +        0x656   => 220,
    +        0x6E3   => 220,
    +        0x6EA   => 220,
    +        0x6ED   => 220,
    +        0x731   => 220,
    +        0x734   => 220,
    +        0x737   => 220,
    +        0x738   => 220,
    +        0x739   => 220,
    +        0x73B   => 220,
    +        0x73C   => 220,
    +        0x73E   => 220,
    +        0x742   => 220,
    +        0x744   => 220,
    +        0x746   => 220,
    +        0x748   => 220,
    +        0x952   => 220,
    +        0xF18   => 220,
    +        0xF19   => 220,
    +        0xF35   => 220,
    +        0xF37   => 220,
    +        0xFC6   => 220,
    +        0x193B  => 220,
    +        0x20E8  => 220,
    +        0x1D17B => 220,
    +        0x1D17C => 220,
    +        0x1D17D => 220,
    +        0x1D17E => 220,
    +        0x1D17F => 220,
    +        0x1D180 => 220,
    +        0x1D181 => 220,
    +        0x1D182 => 220,
    +        0x1D18A => 220,
    +        0x1D18B => 220,
    +        0x59A   => 222,
    +        0x5AD   => 222,
    +        0x1929  => 222,
    +        0x302D  => 222,
    +        0x302E  => 224,
    +        0x302F  => 224,
    +        0x1D16D => 226,
    +        0x5AE   => 228,
    +        0x18A9  => 228,
    +        0x302B  => 228,
    +        0x300   => 230,
    +        0x301   => 230,
    +        0x302   => 230,
    +        0x303   => 230,
    +        0x304   => 230,
    +        0x305   => 230,
    +        0x306   => 230,
    +        0x307   => 230,
    +        0x308   => 230,
    +        0x309   => 230,
    +        0x30A   => 230,
    +        0x30B   => 230,
    +        0x30C   => 230,
    +        0x30D   => 230,
    +        0x30E   => 230,
    +        0x30F   => 230,
    +        0x310   => 230,
    +        0x311   => 230,
    +        0x312   => 230,
    +        0x313   => 230,
    +        0x314   => 230,
    +        0x33D   => 230,
    +        0x33E   => 230,
    +        0x33F   => 230,
    +        0x340   => 230,
    +        0x341   => 230,
    +        0x342   => 230,
    +        0x343   => 230,
    +        0x344   => 230,
    +        0x346   => 230,
    +        0x34A   => 230,
    +        0x34B   => 230,
    +        0x34C   => 230,
    +        0x350   => 230,
    +        0x351   => 230,
    +        0x352   => 230,
    +        0x357   => 230,
    +        0x363   => 230,
    +        0x364   => 230,
    +        0x365   => 230,
    +        0x366   => 230,
    +        0x367   => 230,
    +        0x368   => 230,
    +        0x369   => 230,
    +        0x36A   => 230,
    +        0x36B   => 230,
    +        0x36C   => 230,
    +        0x36D   => 230,
    +        0x36E   => 230,
    +        0x36F   => 230,
    +        0x483   => 230,
    +        0x484   => 230,
    +        0x485   => 230,
    +        0x486   => 230,
    +        0x592   => 230,
    +        0x593   => 230,
    +        0x594   => 230,
    +        0x595   => 230,
    +        0x597   => 230,
    +        0x598   => 230,
    +        0x599   => 230,
    +        0x59C   => 230,
    +        0x59D   => 230,
    +        0x59E   => 230,
    +        0x59F   => 230,
    +        0x5A0   => 230,
    +        0x5A1   => 230,
    +        0x5A8   => 230,
    +        0x5A9   => 230,
    +        0x5AB   => 230,
    +        0x5AC   => 230,
    +        0x5AF   => 230,
    +        0x5C4   => 230,
    +        0x610   => 230,
    +        0x611   => 230,
    +        0x612   => 230,
    +        0x613   => 230,
    +        0x614   => 230,
    +        0x615   => 230,
    +        0x653   => 230,
    +        0x654   => 230,
    +        0x657   => 230,
    +        0x658   => 230,
    +        0x6D6   => 230,
    +        0x6D7   => 230,
    +        0x6D8   => 230,
    +        0x6D9   => 230,
    +        0x6DA   => 230,
    +        0x6DB   => 230,
    +        0x6DC   => 230,
    +        0x6DF   => 230,
    +        0x6E0   => 230,
    +        0x6E1   => 230,
    +        0x6E2   => 230,
    +        0x6E4   => 230,
    +        0x6E7   => 230,
    +        0x6E8   => 230,
    +        0x6EB   => 230,
    +        0x6EC   => 230,
    +        0x730   => 230,
    +        0x732   => 230,
    +        0x733   => 230,
    +        0x735   => 230,
    +        0x736   => 230,
    +        0x73A   => 230,
    +        0x73D   => 230,
    +        0x73F   => 230,
    +        0x740   => 230,
    +        0x741   => 230,
    +        0x743   => 230,
    +        0x745   => 230,
    +        0x747   => 230,
    +        0x749   => 230,
    +        0x74A   => 230,
    +        0x951   => 230,
    +        0x953   => 230,
    +        0x954   => 230,
    +        0xF82   => 230,
    +        0xF83   => 230,
    +        0xF86   => 230,
    +        0xF87   => 230,
    +        0x170D  => 230,
    +        0x193A  => 230,
    +        0x20D0  => 230,
    +        0x20D1  => 230,
    +        0x20D4  => 230,
    +        0x20D5  => 230,
    +        0x20D6  => 230,
    +        0x20D7  => 230,
    +        0x20DB  => 230,
    +        0x20DC  => 230,
    +        0x20E1  => 230,
    +        0x20E7  => 230,
    +        0x20E9  => 230,
    +        0xFE20  => 230,
    +        0xFE21  => 230,
    +        0xFE22  => 230,
    +        0xFE23  => 230,
    +        0x1D185 => 230,
    +        0x1D186 => 230,
    +        0x1D187 => 230,
    +        0x1D189 => 230,
    +        0x1D188 => 230,
    +        0x1D1AA => 230,
    +        0x1D1AB => 230,
    +        0x1D1AC => 230,
    +        0x1D1AD => 230,
    +        0x315   => 232,
    +        0x31A   => 232,
    +        0x302C  => 232,
    +        0x35F   => 233,
    +        0x362   => 233,
    +        0x35D   => 234,
    +        0x35E   => 234,
    +        0x360   => 234,
    +        0x361   => 234,
    +        0x345   => 240
    +    );
    +    // }}}
    +
    +    // {{{ properties
    +    /**
    +     * @var string
    +     * @access private
    +     */
    +    private $_punycode_prefix = 'xn--';
    +
    +    /**
    +     * @access private
    +     */
    +    private $_invalid_ucs = 0x80000000;
    +
    +    /**
    +     * @access private
    +     */
    +    private $_max_ucs = 0x10FFFF;
    +
    +    /**
    +     * @var int
    +     * @access private
    +     */
    +    private $_base = 36;
    +
    +    /**
    +     * @var int
    +     * @access private
    +     */
    +    private $_tmin = 1;
    +
    +    /**
    +     * @var int
    +     * @access private
    +     */
    +    private $_tmax = 26;
    +
    +    /**
    +     * @var int
    +     * @access private
    +     */
    +    private $_skew = 38;
    +
    +    /**
    +     * @var int
    +     * @access private
    +     */
    +    private $_damp = 700;
    +
    +    /**
    +     * @var int
    +     * @access private
    +     */
    +    private $_initial_bias = 72;
    +
    +    /**
    +     * @var int
    +     * @access private
    +     */
    +    private $_initial_n = 0x80;
    +
    +    /**
    +     * @var int
    +     * @access private
    +     */
    +    private $_slast;
    +
    +    /**
    +     * @access private
    +     */
    +    private $_sbase = 0xAC00;
    +
    +    /**
    +     * @access private
    +     */
    +    private $_lbase = 0x1100;
    +
    +    /**
    +     * @access private
    +     */
    +    private $_vbase = 0x1161;
    +
    +    /**
    +     * @access private
    +     */
    +    private $_tbase = 0x11a7;
    +
    +    /**
    +     * @var int
    +     * @access private
    +     */
    +    private $_lcount = 19;
    +
    +    /**
    +     * @var int
    +     * @access private
    +     */
    +    private $_vcount = 21;
    +
    +    /**
    +     * @var int
    +     * @access private
    +     */
    +    private $_tcount = 28;
    +
    +    /**
    +     * vcount * tcount
    +     *
    +     * @var int
    +     * @access private
    +     */
    +    private $_ncount = 588;
    +
    +    /**
    +     * lcount * tcount * vcount
    +     *
    +     * @var int
    +     * @access private
    +     */
    +    private $_scount = 11172;
    +
    +    /**
    +     * Default encoding for encode()'s input and decode()'s output is UTF-8;
    +     * Other possible encodings are ucs4_string and ucs4_array
    +     * See {@link setParams()} for how to select these
    +     *
    +     * @var bool
    +     * @access private
    +     */
    +    private $_api_encoding = 'utf8';
    +
    +    /**
    +     * Overlong UTF-8 encodings are forbidden
    +     *
    +     * @var bool
    +     * @access private
    +     */
    +    private $_allow_overlong = false;
    +
    +    /**
    +     * Behave strict or not
    +     *
    +     * @var bool
    +     * @access private
    +     */
    +    private $_strict_mode = false;
    +
    +    /**
    +     * IDNA-version to use
    +     *
    +     * Values are "2003" and "2008".
    +     * Defaults to "2003", since that was the original version and for
    +     * compatibility with previous versions of this library.
    +     * If you need to encode "new" characters like the German "Eszett",
    +     * please switch to 2008 first before encoding.
    +     *
    +     * @var bool
    +     * @access private
    +     */
    +    private $_version = '2003';
    +
    +    /**
    +     * Cached value indicating whether or not mbstring function overloading is
    +     * on for strlen
    +     *
    +     * This is cached for optimal performance.
    +     *
    +     * @var boolean
    +     * @see Net_IDNA2::_byteLength()
    +     */
    +    private static $_mb_string_overload = null;
    +    // }}}
    +
    +
    +    // {{{ constructor
    +    /**
    +     * Constructor
    +     *
    +     * @param array $options Options to initialise the object with
    +     *
    +     * @access public
    +     * @see    setParams()
    +     */
    +    public function __construct($options = null)
    +    {
    +        $this->_slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount;
    +
    +        if (is_array($options)) {
    +            $this->setParams($options);
    +        }
    +
    +        // populate mbstring overloading cache if not set
    +        if (self::$_mb_string_overload === null) {
    +            self::$_mb_string_overload = (extension_loaded('mbstring')
    +                && (ini_get('mbstring.func_overload') & 0x02) === 0x02);
    +        }
    +    }
    +    // }}}
    +
    +
    +    /**
    +     * Sets a new option value. Available options and values:
    +     *
    +     * [utf8 -     Use either UTF-8 or ISO-8859-1 as input (true for UTF-8, false
    +     *             otherwise); The output is always UTF-8]
    +     * [overlong - Unicode does not allow unnecessarily long encodings of chars,
    +     *             to allow this, set this parameter to true, else to false;
    +     *             default is false.]
    +     * [strict -   true: strict mode, good for registration purposes - Causes errors
    +     *             on failures; false: loose mode, ideal for "wildlife" applications
    +     *             by silently ignoring errors and returning the original input instead]
    +     *
    +     * @param mixed  $option Parameter to set (string: single parameter; array of Parameter => Value pairs)
    +     * @param string $value  Value to use (if parameter 1 is a string)
    +     *
    +     * @return boolean       true on success, false otherwise
    +     * @access public
    +     */
    +    public function setParams($option, $value = false)
    +    {
    +        if (!is_array($option)) {
    +            $option = array($option => $value);
    +        }
    +
    +        foreach ($option as $k => $v) {
    +            switch ($k) {
    +            case 'encoding':
    +                switch ($v) {
    +                case 'utf8':
    +                case 'ucs4_string':
    +                case 'ucs4_array':
    +                    $this->_api_encoding = $v;
    +                    break;
    +
    +                default:
    +                    throw new InvalidArgumentException('Set Parameter: Unknown parameter '.$v.' for option '.$k);
    +                }
    +
    +                break;
    +
    +            case 'overlong':
    +                $this->_allow_overlong = ($v) ? true : false;
    +                break;
    +
    +            case 'strict':
    +                $this->_strict_mode = ($v) ? true : false;
    +                break;
    +
    +            case 'version':
    +                if (in_array($v, array('2003', '2008'))) {
    +                    $this->_version = $v;
    +                } else {
    +                    throw new InvalidArgumentException('Set Parameter: Invalid parameter '.$v.' for option '.$k);
    +                }
    +                break;
    +
    +            default:
    +                return false;
    +            }
    +        }
    +
    +        return true;
    +    }
    +
    +    /**
    +     * Encode a given UTF-8 domain name.
    +     *
    +     * @param string $decoded           Domain name (UTF-8 or UCS-4)
    +     * @param string $one_time_encoding Desired input encoding, see {@link set_parameter}
    +     *                                  If not given will use default-encoding
    +     *
    +     * @return string Encoded Domain name (ACE string)
    +     * @return mixed  processed string
    +     * @throws Exception
    +     * @access public
    +     */
    +    public function encode($decoded, $one_time_encoding = false)
    +    {
    +        // Forcing conversion of input to UCS4 array
    +        // If one time encoding is given, use this, else the objects property
    +        switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
    +        case 'utf8':
    +            $decoded = $this->_utf8_to_ucs4($decoded);
    +            break;
    +        case 'ucs4_string':
    +            $decoded = $this->_ucs4_string_to_ucs4($decoded);
    +        case 'ucs4_array': // No break; before this line. Catch case, but do nothing
    +            break;
    +        default:
    +            throw new InvalidArgumentException('Unsupported input format');
    +        }
    +
    +        // No input, no output, what else did you expect?
    +        if (empty($decoded)) return '';
    +
    +        // Anchors for iteration
    +        $last_begin = 0;
    +        // Output string
    +        $output = '';
    +
    +        foreach ($decoded as $k => $v) {
    +            // Make sure to use just the plain dot
    +            switch($v) {
    +            case 0x3002:
    +            case 0xFF0E:
    +            case 0xFF61:
    +                $decoded[$k] = 0x2E;
    +                // It's right, no break here
    +                // The codepoints above have to be converted to dots anyway
    +
    +            // Stumbling across an anchoring character
    +            case 0x2E:
    +            case 0x2F:
    +            case 0x3A:
    +            case 0x3F:
    +            case 0x40:
    +                // Neither email addresses nor URLs allowed in strict mode
    +                if ($this->_strict_mode) {
    +                    throw new InvalidArgumentException('Neither email addresses nor URLs are allowed in strict mode.');
    +                }
    +                // Skip first char
    +                if ($k) {
    +                    $encoded = '';
    +                    $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin)));
    +                    if ($encoded) {
    +                        $output .= $encoded;
    +                    } else {
    +                        $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin)));
    +                    }
    +                    $output .= chr($decoded[$k]);
    +                }
    +                $last_begin = $k + 1;
    +            }
    +        }
    +        // Catch the rest of the string
    +        if ($last_begin) {
    +            $inp_len = sizeof($decoded);
    +            $encoded = '';
    +            $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
    +            if ($encoded) {
    +                $output .= $encoded;
    +            } else {
    +                $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
    +            }
    +            return $output;
    +        }
    +
    +        if ($output = $this->_encode($decoded)) {
    +            return $output;
    +        }
    +
    +        return $this->_ucs4_to_utf8($decoded);
    +    }
    +
    +    /**
    +     * Decode a given ACE domain name.
    +     *
    +     * @param string $input             Domain name (ACE string)
    +     * @param string $one_time_encoding Desired output encoding, see {@link set_parameter}
    +     *
    +     * @return string                   Decoded Domain name (UTF-8 or UCS-4)
    +     * @throws Exception
    +     * @access public
    +     */
    +    public function decode($input, $one_time_encoding = false)
    +    {
    +        // Optionally set
    +        if ($one_time_encoding) {
    +            switch ($one_time_encoding) {
    +            case 'utf8':
    +            case 'ucs4_string':
    +            case 'ucs4_array':
    +                break;
    +            default:
    +                throw new InvalidArgumentException('Unknown encoding '.$one_time_encoding);
    +            }
    +        }
    +        // Make sure to drop any newline characters around
    +        $input = trim($input);
    +
    +        // Negotiate input and try to determine, wether it is a plain string,
    +        // an email address or something like a complete URL
    +        if (strpos($input, '@')) { // Maybe it is an email address
    +            // No no in strict mode
    +            if ($this->_strict_mode) {
    +                throw new InvalidArgumentException('Only simple domain name parts can be handled in strict mode');
    +            }
    +            list($email_pref, $input) = explode('@', $input, 2);
    +            $arr = explode('.', $input);
    +            foreach ($arr as $k => $v) {
    +                $conv = $this->_decode($v);
    +                if ($conv) $arr[$k] = $conv;
    +            }
    +            $return = $email_pref . '@' . join('.', $arr);
    +        } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters)
    +            // No no in strict mode
    +            if ($this->_strict_mode) {
    +                throw new InvalidArgumentException('Only simple domain name parts can be handled in strict mode');
    +            }
    +
    +            $parsed = parse_url($input);
    +            if (isset($parsed['host'])) {
    +                $arr = explode('.', $parsed['host']);
    +                foreach ($arr as $k => $v) {
    +                    $conv = $this->_decode($v);
    +                    if ($conv) $arr[$k] = $conv;
    +                }
    +                $parsed['host'] = join('.', $arr);
    +                if (isset($parsed['scheme'])) {
    +                    $parsed['scheme'] .= (strtolower($parsed['scheme']) == 'mailto') ? ':' : '://';
    +                }
    +                $return = $this->_unparse_url($parsed);
    +            } else { // parse_url seems to have failed, try without it
    +                $arr = explode('.', $input);
    +                foreach ($arr as $k => $v) {
    +                    $conv = $this->_decode($v);
    +                    if ($conv) $arr[$k] = $conv;
    +                }
    +                $return = join('.', $arr);
    +            }
    +        } else { // Otherwise we consider it being a pure domain name string
    +            $return = $this->_decode($input);
    +        }
    +        // The output is UTF-8 by default, other output formats need conversion here
    +        // If one time encoding is given, use this, else the objects property
    +        switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
    +        case 'utf8':
    +            return $return;
    +            break;
    +        case 'ucs4_string':
    +            return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));
    +            break;
    +        case 'ucs4_array':
    +            return $this->_utf8_to_ucs4($return);
    +            break;
    +        default:
    +            throw new InvalidArgumentException('Unsupported output format');
    +        }
    +    }
    +
    +
    +    // {{{ private
    +    /**
    +     * Opposite function to parse_url()
    +     *
    +     * Inspired by code from comments of php.net-documentation for parse_url()
    +     *
    +     * @param array $parts_arr parts (strings) as returned by parse_url()
    +     *
    +     * @return string
    +     * @access private
    +     */
    +    private function _unparse_url($parts_arr)
    +    {
    +        if (!empty($parts_arr['scheme'])) {
    +            $ret_url = $parts_arr['scheme'];
    +        }
    +        if (!empty($parts_arr['user'])) {
    +            $ret_url .= $parts_arr['user'];
    +            if (!empty($parts_arr['pass'])) {
    +                $ret_url .= ':' . $parts_arr['pass'];
    +            }
    +            $ret_url .= '@';
    +        }
    +        $ret_url .= $parts_arr['host'];
    +        if (!empty($parts_arr['port'])) {
    +            $ret_url .= ':' . $parts_arr['port'];
    +        }
    +        $ret_url .= $parts_arr['path'];
    +        if (!empty($parts_arr['query'])) {
    +            $ret_url .= '?' . $parts_arr['query'];
    +        }
    +        if (!empty($parts_arr['fragment'])) {
    +            $ret_url .= '#' . $parts_arr['fragment'];
    +        }
    +        return $ret_url;
    +    }
    +
    +    /**
    +     * The actual encoding algorithm.
    +     *
    +     * @param string $decoded Decoded string which should be encoded
    +     *
    +     * @return string         Encoded string
    +     * @throws Exception
    +     * @access private
    +     */
    +    private function _encode($decoded)
    +    {
    +        // We cannot encode a domain name containing the Punycode prefix
    +        $extract = self::_byteLength($this->_punycode_prefix);
    +        $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix);
    +        $check_deco = array_slice($decoded, 0, $extract);
    +
    +        if ($check_pref == $check_deco) {
    +            throw new InvalidArgumentException('This is already a punycode string');
    +        }
    +
    +        // We will not try to encode strings consisting of basic code points only
    +        $encodable = false;
    +        foreach ($decoded as $k => $v) {
    +            if ($v > 0x7a) {
    +                $encodable = true;
    +                break;
    +            }
    +        }
    +        if (!$encodable) {
    +            if ($this->_strict_mode) {
    +                throw new InvalidArgumentException('The given string does not contain encodable chars');
    +            }
    +
    +            return false;
    +        }
    +
    +        // Do NAMEPREP
    +        $decoded = $this->_nameprep($decoded);
    +
    +        $deco_len = count($decoded);
    +
    +        // Empty array
    +        if (!$deco_len) {
    +            return false;
    +        }
    +
    +        // How many chars have been consumed
    +        $codecount = 0;
    +
    +        // Start with the prefix; copy it to output
    +        $encoded = $this->_punycode_prefix;
    +
    +        $encoded = '';
    +        // Copy all basic code points to output
    +        for ($i = 0; $i < $deco_len; ++$i) {
    +            $test = $decoded[$i];
    +            // Will match [0-9a-zA-Z-]
    +            if ((0x2F < $test && $test < 0x40)
    +                || (0x40 < $test && $test < 0x5B)
    +                || (0x60 < $test && $test <= 0x7B)
    +                || (0x2D == $test)
    +            ) {
    +                $encoded .= chr($decoded[$i]);
    +                $codecount++;
    +            }
    +        }
    +
    +        // All codepoints were basic ones
    +        if ($codecount == $deco_len) {
    +            return $encoded;
    +        }
    +
    +        // Start with the prefix; copy it to output
    +        $encoded = $this->_punycode_prefix . $encoded;
    +
    +        // If we have basic code points in output, add an hyphen to the end
    +        if ($codecount) {
    +            $encoded .= '-';
    +        }
    +
    +        // Now find and encode all non-basic code points
    +        $is_first  = true;
    +        $cur_code  = $this->_initial_n;
    +        $bias      = $this->_initial_bias;
    +        $delta     = 0;
    +
    +        while ($codecount < $deco_len) {
    +            // Find the smallest code point >= the current code point and
    +            // remember the last ouccrence of it in the input
    +            for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) {
    +                if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) {
    +                    $next_code = $decoded[$i];
    +                }
    +            }
    +
    +            $delta += ($next_code - $cur_code) * ($codecount + 1);
    +            $cur_code = $next_code;
    +
    +            // Scan input again and encode all characters whose code point is $cur_code
    +            for ($i = 0; $i < $deco_len; $i++) {
    +                if ($decoded[$i] < $cur_code) {
    +                    $delta++;
    +                } else if ($decoded[$i] == $cur_code) {
    +                    for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) {
    +                        $t = ($k <= $bias)?
    +                            $this->_tmin :
    +                            (($k >= $bias + $this->_tmax)? $this->_tmax : $k - $bias);
    +
    +                        if ($q < $t) {
    +                            break;
    +                        }
    +
    +                        $encoded .= $this->_encodeDigit(ceil($t + (($q - $t) % ($this->_base - $t))));
    +                        $q = ($q - $t) / ($this->_base - $t);
    +                    }
    +
    +                    $encoded .= $this->_encodeDigit($q);
    +                    $bias = $this->_adapt($delta, $codecount + 1, $is_first);
    +                    $codecount++;
    +                    $delta = 0;
    +                    $is_first = false;
    +                }
    +            }
    +
    +            $delta++;
    +            $cur_code++;
    +        }
    +
    +        return $encoded;
    +    }
    +
    +    /**
    +     * The actual decoding algorithm.
    +     *
    +     * @param string $encoded Encoded string which should be decoded
    +     *
    +     * @return string         Decoded string
    +     * @throws Exception
    +     * @access private
    +     */
    +    private function _decode($encoded)
    +    {
    +        // We do need to find the Punycode prefix
    +        if (!preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $encoded)) {
    +            return false;
    +        }
    +
    +        $encode_test = preg_replace('!^' . preg_quote($this->_punycode_prefix, '!') . '!', '', $encoded);
    +
    +        // If nothing left after removing the prefix, it is hopeless
    +        if (!$encode_test) {
    +            return false;
    +        }
    +
    +        // Find last occurence of the delimiter
    +        $delim_pos = strrpos($encoded, '-');
    +
    +        if ($delim_pos > self::_byteLength($this->_punycode_prefix)) {
    +            for ($k = self::_byteLength($this->_punycode_prefix); $k < $delim_pos; ++$k) {
    +                $decoded[] = ord($encoded{$k});
    +            }
    +        } else {
    +            $decoded = array();
    +        }
    +
    +        $deco_len = count($decoded);
    +        $enco_len = self::_byteLength($encoded);
    +
    +        // Wandering through the strings; init
    +        $is_first = true;
    +        $bias     = $this->_initial_bias;
    +        $idx      = 0;
    +        $char     = $this->_initial_n;
    +
    +        for ($enco_idx = ($delim_pos)? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) {
    +            for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) {
    +                $digit = $this->_decodeDigit($encoded{$enco_idx++});
    +                $idx += $digit * $w;
    +
    +                $t = ($k <= $bias) ?
    +                    $this->_tmin :
    +                    (($k >= $bias + $this->_tmax)? $this->_tmax : ($k - $bias));
    +
    +                if ($digit < $t) {
    +                    break;
    +                }
    +
    +                $w = (int)($w * ($this->_base - $t));
    +            }
    +
    +            $bias      = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first);
    +            $is_first  = false;
    +            $char     += (int) ($idx / ($deco_len + 1));
    +            $idx      %= ($deco_len + 1);
    +
    +            if ($deco_len > 0) {
    +                // Make room for the decoded char
    +                for ($i = $deco_len; $i > $idx; $i--) {
    +                    $decoded[$i] = $decoded[($i - 1)];
    +                }
    +            }
    +
    +            $decoded[$idx++] = $char;
    +        }
    +
    +        return $this->_ucs4_to_utf8($decoded);
    +    }
    +
    +    /**
    +     * Adapt the bias according to the current code point and position.
    +     *
    +     * @param int     $delta    ...
    +     * @param int     $npoints  ...
    +     * @param boolean $is_first ...
    +     *
    +     * @return int
    +     * @access private
    +     */
    +    private function _adapt($delta, $npoints, $is_first)
    +    {
    +        $delta = (int) ($is_first ? ($delta / $this->_damp) : ($delta / 2));
    +        $delta += (int) ($delta / $npoints);
    +
    +        for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) {
    +            $delta = (int) ($delta / ($this->_base - $this->_tmin));
    +        }
    +
    +        return (int) ($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew));
    +    }
    +
    +    /**
    +     * Encoding a certain digit.
    +     *
    +     * @param int $d One digit to encode
    +     *
    +     * @return char  Encoded digit
    +     * @access private
    +     */
    +    private function _encodeDigit($d)
    +    {
    +        return chr($d + 22 + 75 * ($d < 26));
    +    }
    +
    +    /**
    +     * Decode a certain digit.
    +     *
    +     * @param char $cp One digit (character) to decode
    +     *
    +     * @return int     Decoded digit
    +     * @access private
    +     */
    +    private function _decodeDigit($cp)
    +    {
    +        $cp = ord($cp);
    +        return ($cp - 48 < 10)? $cp - 22 : (($cp - 65 < 26)? $cp - 65 : (($cp - 97 < 26)? $cp - 97 : $this->_base));
    +    }
    +
    +    /**
    +     * Do Nameprep according to RFC3491 and RFC3454.
    +     *
    +     * @param array $input Unicode Characters
    +     *
    +     * @return string      Unicode Characters, Nameprep'd
    +     * @throws Exception
    +     * @access private
    +     */
    +    private function _nameprep($input)
    +    {
    +        $output = array();
    +
    +        // Walking through the input array, performing the required steps on each of
    +        // the input chars and putting the result into the output array
    +        // While mapping required chars we apply the cannonical ordering
    +
    +        foreach ($input as $v) {
    +            // Map to nothing == skip that code point
    +            if (in_array($v, self::$_np_map_nothing)) {
    +                continue;
    +            }
    +
    +            // Try to find prohibited input
    +            if (in_array($v, self::$_np_prohibit) || in_array($v, self::$_general_prohibited)) {
    +                throw new Net_IDNA2_Exception_Nameprep('Prohibited input U+' . sprintf('%08X', $v));
    +            }
    +
    +            foreach (self::$_np_prohibit_ranges as $range) {
    +                if ($range[0] <= $v && $v <= $range[1]) {
    +                    throw new Net_IDNA2_Exception_Nameprep('Prohibited input U+' . sprintf('%08X', $v));
    +                }
    +            }
    +
    +            // Hangul syllable decomposition
    +            if (0xAC00 <= $v && $v <= 0xD7AF) {
    +                foreach ($this->_hangulDecompose($v) as $out) {
    +                    $output[] = $out;
    +                }
    +            } else if (($this->_version == '2003') && isset(self::$_np_replacemaps[$v])) {
    +                // There's a decomposition mapping for that code point
    +                // Decompositions only in version 2003 (original) of IDNA
    +                foreach ($this->_applyCannonicalOrdering(self::$_np_replacemaps[$v]) as $out) {
    +                    $output[] = $out;
    +                }
    +            } else {
    +                $output[] = $v;
    +            }
    +        }
    +
    +        // Combine code points
    +
    +        $last_class   = 0;
    +        $last_starter = 0;
    +        $out_len      = count($output);
    +
    +        for ($i = 0; $i < $out_len; ++$i) {
    +            $class = $this->_getCombiningClass($output[$i]);
    +
    +            if ((!$last_class || $last_class != $class) && $class) {
    +                // Try to match
    +                $seq_len = $i - $last_starter;
    +                $out = $this->_combine(array_slice($output, $last_starter, $seq_len));
    +
    +                // On match: Replace the last starter with the composed character and remove
    +                // the now redundant non-starter(s)
    +                if ($out) {
    +                    $output[$last_starter] = $out;
    +
    +                    if (count($out) != $seq_len) {
    +                        for ($j = $i + 1; $j < $out_len; ++$j) {
    +                            $output[$j - 1] = $output[$j];
    +                        }
    +
    +                        unset($output[$out_len]);
    +                    }
    +
    +                    // Rewind the for loop by one, since there can be more possible compositions
    +                    $i--;
    +                    $out_len--;
    +                    $last_class = ($i == $last_starter)? 0 : $this->_getCombiningClass($output[$i - 1]);
    +
    +                    continue;
    +                }
    +            }
    +
    +            // The current class is 0
    +            if (!$class) {
    +                $last_starter = $i;
    +            }
    +
    +            $last_class = $class;
    +        }
    +
    +        return $output;
    +    }
    +
    +    /**
    +     * Decomposes a Hangul syllable
    +     * (see http://www.unicode.org/unicode/reports/tr15/#Hangul).
    +     *
    +     * @param integer $char 32bit UCS4 code point
    +     *
    +     * @return array        Either Hangul Syllable decomposed or original 32bit
    +     *                      value as one value array
    +     * @access private
    +     */
    +    private function _hangulDecompose($char)
    +    {
    +        $sindex = $char - $this->_sbase;
    +
    +        if ($sindex < 0 || $sindex >= $this->_scount) {
    +            return array($char);
    +        }
    +
    +        $result   = array();
    +        $T        = $this->_tbase + $sindex % $this->_tcount;
    +        $result[] = (int)($this->_lbase +  $sindex / $this->_ncount);
    +        $result[] = (int)($this->_vbase + ($sindex % $this->_ncount) / $this->_tcount);
    +
    +        if ($T != $this->_tbase) {
    +            $result[] = $T;
    +        }
    +
    +        return $result;
    +    }
    +
    +    /**
    +     * Ccomposes a Hangul syllable
    +     * (see http://www.unicode.org/unicode/reports/tr15/#Hangul).
    +     *
    +     * @param array $input Decomposed UCS4 sequence
    +     *
    +     * @return array       UCS4 sequence with syllables composed
    +     * @access private
    +     */
    +    private function _hangulCompose($input)
    +    {
    +        $inp_len = count($input);
    +
    +        if (!$inp_len) {
    +            return array();
    +        }
    +
    +        $result   = array();
    +        $last     = $input[0];
    +        $result[] = $last; // copy first char from input to output
    +
    +        for ($i = 1; $i < $inp_len; ++$i) {
    +            $char = $input[$i];
    +
    +            // Find out, wether two current characters from L and V
    +            $lindex = $last - $this->_lbase;
    +
    +            if (0 <= $lindex && $lindex < $this->_lcount) {
    +                $vindex = $char - $this->_vbase;
    +
    +                if (0 <= $vindex && $vindex < $this->_vcount) {
    +                    // create syllable of form LV
    +                    $last    = ($this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount);
    +                    $out_off = count($result) - 1;
    +                    $result[$out_off] = $last; // reset last
    +
    +                    // discard char
    +                    continue;
    +                }
    +            }
    +
    +            // Find out, wether two current characters are LV and T
    +            $sindex = $last - $this->_sbase;
    +
    +            if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount) == 0) {
    +                $tindex = $char - $this->_tbase;
    +
    +                if (0 <= $tindex && $tindex <= $this->_tcount) {
    +                    // create syllable of form LVT
    +                    $last += $tindex;
    +                    $out_off = count($result) - 1;
    +                    $result[$out_off] = $last; // reset last
    +
    +                    // discard char
    +                    continue;
    +                }
    +            }
    +
    +            // if neither case was true, just add the character
    +            $last = $char;
    +            $result[] = $char;
    +        }
    +
    +        return $result;
    +    }
    +
    +    /**
    +     * Returns the combining class of a certain wide char.
    +     *
    +     * @param integer $char Wide char to check (32bit integer)
    +     *
    +     * @return integer      Combining class if found, else 0
    +     * @access private
    +     */
    +    private function _getCombiningClass($char)
    +    {
    +        return isset(self::$_np_norm_combcls[$char])? self::$_np_norm_combcls[$char] : 0;
    +    }
    +
    +    /**
    +     * Apllies the cannonical ordering of a decomposed UCS4 sequence.
    +     *
    +     * @param array $input Decomposed UCS4 sequence
    +     *
    +     * @return array       Ordered USC4 sequence
    +     * @access private
    +     */
    +    private function _applyCannonicalOrdering($input)
    +    {
    +        $swap = true;
    +        $size = count($input);
    +
    +        while ($swap) {
    +            $swap = false;
    +            $last = $this->_getCombiningClass($input[0]);
    +
    +            for ($i = 0; $i < $size - 1; ++$i) {
    +                $next = $this->_getCombiningClass($input[$i + 1]);
    +
    +                if ($next != 0 && $last > $next) {
    +                    // Move item leftward until it fits
    +                    for ($j = $i + 1; $j > 0; --$j) {
    +                        if ($this->_getCombiningClass($input[$j - 1]) <= $next) {
    +                            break;
    +                        }
    +
    +                        $t = $input[$j];
    +                        $input[$j] = $input[$j - 1];
    +                        $input[$j - 1] = $t;
    +                        $swap = 1;
    +                    }
    +
    +                    // Reentering the loop looking at the old character again
    +                    $next = $last;
    +                }
    +
    +                $last = $next;
    +            }
    +        }
    +
    +        return $input;
    +    }
    +
    +    /**
    +     * Do composition of a sequence of starter and non-starter.
    +     *
    +     * @param array $input UCS4 Decomposed sequence
    +     *
    +     * @return array       Ordered USC4 sequence
    +     * @access private
    +     */
    +    private function _combine($input)
    +    {
    +        $inp_len = count($input);
    +
    +        // Is it a Hangul syllable?
    +        if (1 != $inp_len) {
    +            $hangul = $this->_hangulCompose($input);
    +
    +            // This place is probably wrong
    +            if (count($hangul) != $inp_len) {
    +                return $hangul;
    +            }
    +        }
    +
    +        foreach (self::$_np_replacemaps as $np_src => $np_target) {
    +            if ($np_target[0] != $input[0]) {
    +                continue;
    +            }
    +
    +            if (count($np_target) != $inp_len) {
    +                continue;
    +            }
    +
    +            $hit = false;
    +
    +            foreach ($input as $k2 => $v2) {
    +                if ($v2 == $np_target[$k2]) {
    +                    $hit = true;
    +                } else {
    +                    $hit = false;
    +                    break;
    +                }
    +            }
    +
    +            if ($hit) {
    +                return $np_src;
    +            }
    +        }
    +
    +        return false;
    +    }
    +
    +    /**
    +     * This converts an UTF-8 encoded string to its UCS-4 (array) representation
    +     * By talking about UCS-4 we mean arrays of 32bit integers representing
    +     * each of the "chars". This is due to PHP not being able to handle strings with
    +     * bit depth different from 8. This applies to the reverse method _ucs4_to_utf8(), too.
    +     * The following UTF-8 encodings are supported:
    +     *
    +     * bytes bits  representation
    +     * 1        7  0xxxxxxx
    +     * 2       11  110xxxxx 10xxxxxx
    +     * 3       16  1110xxxx 10xxxxxx 10xxxxxx
    +     * 4       21  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    +     * 5       26  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    +     * 6       31  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    +     *
    +     * Each x represents a bit that can be used to store character data.
    +     *
    +     * @param string $input utf8-encoded string
    +     *
    +     * @return array        ucs4-encoded array
    +     * @throws Exception
    +     * @access private
    +     */
    +    private function _utf8_to_ucs4($input)
    +    {
    +        $output = array();
    +        $out_len = 0;
    +        $inp_len = self::_byteLength($input, '8bit');
    +        $mode = 'next';
    +        $test = 'none';
    +        for ($k = 0; $k < $inp_len; ++$k) {
    +            $v = ord($input{$k}); // Extract byte from input string
    +
    +            if ($v < 128) { // We found an ASCII char - put into stirng as is
    +                $output[$out_len] = $v;
    +                ++$out_len;
    +                if ('add' == $mode) {
    +                    throw new UnexpectedValueException('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
    +                }
    +                continue;
    +            }
    +            if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char
    +                $start_byte = $v;
    +                $mode = 'add';
    +                $test = 'range';
    +                if ($v >> 5 == 6) { // &110xxxxx 10xxxxx
    +                    $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left
    +                    $v = ($v - 192) << 6;
    +                } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx
    +                    $next_byte = 1;
    +                    $v = ($v - 224) << 12;
    +                } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    +                    $next_byte = 2;
    +                    $v = ($v - 240) << 18;
    +                } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    +                    $next_byte = 3;
    +                    $v = ($v - 248) << 24;
    +                } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    +                    $next_byte = 4;
    +                    $v = ($v - 252) << 30;
    +                } else {
    +                    throw new UnexpectedValueException('This might be UTF-8, but I don\'t understand it at byte '.$k);
    +                }
    +                if ('add' == $mode) {
    +                    $output[$out_len] = (int) $v;
    +                    ++$out_len;
    +                    continue;
    +                }
    +            }
    +            if ('add' == $mode) {
    +                if (!$this->_allow_overlong && $test == 'range') {
    +                    $test = 'none';
    +                    if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) {
    +                        throw new OutOfRangeException('Bogus UTF-8 character detected (out of legal range) at byte '.$k);
    +                    }
    +                }
    +                if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx
    +                    $v = ($v - 128) << ($next_byte * 6);
    +                    $output[($out_len - 1)] += $v;
    +                    --$next_byte;
    +                } else {
    +                    throw new UnexpectedValueException('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
    +                }
    +                if ($next_byte < 0) {
    +                    $mode = 'next';
    +                }
    +            }
    +        } // for
    +        return $output;
    +    }
    +
    +    /**
    +     * Convert UCS-4 array into UTF-8 string
    +     *
    +     * @param array $input ucs4-encoded array
    +     *
    +     * @return string      utf8-encoded string
    +     * @throws Exception
    +     * @access private
    +     */
    +    private function _ucs4_to_utf8($input)
    +    {
    +        $output = '';
    +
    +        foreach ($input as $v) {
    +            // $v = ord($v);
    +
    +            if ($v < 128) {
    +                // 7bit are transferred literally
    +                $output .= chr($v);
    +            } else if ($v < 1 << 11) {
    +                // 2 bytes
    +                $output .= chr(192 + ($v >> 6))
    +                    . chr(128 + ($v & 63));
    +            } else if ($v < 1 << 16) {
    +                // 3 bytes
    +                $output .= chr(224 + ($v >> 12))
    +                    . chr(128 + (($v >> 6) & 63))
    +                    . chr(128 + ($v & 63));
    +            } else if ($v < 1 << 21) {
    +                // 4 bytes
    +                $output .= chr(240 + ($v >> 18))
    +                    . chr(128 + (($v >> 12) & 63))
    +                    . chr(128 + (($v >>  6) & 63))
    +                    . chr(128 + ($v & 63));
    +            } else if ($v < 1 << 26) {
    +                // 5 bytes
    +                $output .= chr(248 + ($v >> 24))
    +                    . chr(128 + (($v >> 18) & 63))
    +                    . chr(128 + (($v >> 12) & 63))
    +                    . chr(128 + (($v >>  6) & 63))
    +                    . chr(128 + ($v & 63));
    +            } else if ($v < 1 << 31) {
    +                // 6 bytes
    +                $output .= chr(252 + ($v >> 30))
    +                    . chr(128 + (($v >> 24) & 63))
    +                    . chr(128 + (($v >> 18) & 63))
    +                    . chr(128 + (($v >> 12) & 63))
    +                    . chr(128 + (($v >>  6) & 63))
    +                    . chr(128 + ($v & 63));
    +            } else {
    +                throw new UnexpectedValueException('Conversion from UCS-4 to UTF-8 failed: malformed input');
    +            }
    +        }
    +
    +        return $output;
    +    }
    +
    +    /**
    +     * Convert UCS-4 array into UCS-4 string
    +     *
    +     * @param array $input ucs4-encoded array
    +     *
    +     * @return string      ucs4-encoded string
    +     * @throws Exception
    +     * @access private
    +     */
    +    private function _ucs4_to_ucs4_string($input)
    +    {
    +        $output = '';
    +        // Take array values and split output to 4 bytes per value
    +        // The bit mask is 255, which reads &11111111
    +        foreach ($input as $v) {
    +            $output .= ($v & (255 << 24) >> 24) . ($v & (255 << 16) >> 16) . ($v & (255 << 8) >> 8) . ($v & 255);
    +        }
    +        return $output;
    +    }
    +
    +    /**
    +     * Convert UCS-4 string into UCS-4 array
    +     *
    +     * @param string $input ucs4-encoded string
    +     *
    +     * @return array        ucs4-encoded array
    +     * @throws InvalidArgumentException
    +     * @access private
    +     */
    +    private function _ucs4_string_to_ucs4($input)
    +    {
    +        $output = array();
    +
    +        $inp_len = self::_byteLength($input);
    +        // Input length must be dividable by 4
    +        if ($inp_len % 4) {
    +            throw new InvalidArgumentException('Input UCS4 string is broken');
    +        }
    +
    +        // Empty input - return empty output
    +        if (!$inp_len) {
    +            return $output;
    +        }
    +
    +        for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) {
    +            // Increment output position every 4 input bytes
    +            if (!$i % 4) {
    +                $out_len++;
    +                $output[$out_len] = 0;
    +            }
    +            $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) );
    +        }
    +        return $output;
    +    }
    +
    +    /**
    +     * Echo hex representation of UCS4 sequence.
    +     *
    +     * @param array   $input       UCS4 sequence
    +     * @param boolean $include_bit Include bitmask in output
    +     *
    +     * @return void
    +     * @static
    +     * @access private
    +     */
    +    private static function _showHex($input, $include_bit = false)
    +    {
    +        foreach ($input as $k => $v) {
    +            echo '[', $k, '] => ', sprintf('%X', $v);
    +
    +            if ($include_bit) {
    +                echo ' (', Net_IDNA2::_showBitmask($v), ')';
    +            }
    +
    +            echo "\n";
    +        }
    +    }
    +
    +    /**
    +     * Gives you a bit representation of given Byte (8 bits), Word (16 bits) or DWord (32 bits)
    +     * Output width is automagically determined
    +     *
    +     * @param int $octet ...
    +     *
    +     * @return string    Bitmask-representation
    +     * @static
    +     * @access private
    +     */
    +    private static function _showBitmask($octet)
    +    {
    +        if ($octet >= (1 << 16)) {
    +            $w = 31;
    +        } else if ($octet >= (1 << 8)) {
    +            $w = 15;
    +        } else {
    +            $w = 7;
    +        }
    +
    +        $return = '';
    +
    +        for ($i = $w; $i > -1; $i--) {
    +            $return .= ($octet & (1 << $i))? '1' : '0';
    +        }
    +
    +        return $return;
    +    }
    +
    +    /**
    +     * Gets the length of a string in bytes even if mbstring function
    +     * overloading is turned on
    +     *
    +     * @param string $string the string for which to get the length.
    +     *
    +     * @return integer the length of the string in bytes.
    +     *
    +     * @see Net_IDNA2::$_mb_string_overload
    +     */
    +    private static function _byteLength($string)
    +    {
    +        if (self::$_mb_string_overload) {
    +            return mb_strlen($string, '8bit');
    +        }
    +        return strlen((binary)$string);
    +    }
    +
    +    // }}}}
    +
    +    // {{{ factory
    +    /**
    +     * Attempts to return a concrete IDNA instance for either php4 or php5.
    +     *
    +     * @param array $params Set of paramaters
    +     *
    +     * @return Net_IDNA2
    +     * @access public
    +     */
    +    function getInstance($params = array())
    +    {
    +        return new Net_IDNA2($params);
    +    }
    +    // }}}
    +
    +    // {{{ singleton
    +    /**
    +     * Attempts to return a concrete IDNA instance for either php4 or php5,
    +     * only creating a new instance if no IDNA instance with the same
    +     * parameters currently exists.
    +     *
    +     * @param array $params Set of paramaters
    +     *
    +     * @return object Net_IDNA2
    +     * @access public
    +     */
    +    function singleton($params = array())
    +    {
    +        static $instances;
    +        if (!isset($instances)) {
    +            $instances = array();
    +        }
    +
    +        $signature = serialize($params);
    +        if (!isset($instances[$signature])) {
    +            $instances[$signature] = Net_IDNA2::getInstance($params);
    +        }
    +
    +        return $instances[$signature];
    +    }
    +    // }}}
    +}
    +
    +?>
    diff --git a/framework/vendors/Net_IDNA2/Net/IDNA2/Exception.php b/framework/vendors/Net_IDNA2/Net/IDNA2/Exception.php
    new file mode 100644
    index 00000000000..72cb1ae754c
    --- /dev/null
    +++ b/framework/vendors/Net_IDNA2/Net/IDNA2/Exception.php
    @@ -0,0 +1,4 @@
    +Third-Party Library List
       the widgets under zii/widgets/jui
     
     
    -  jQuery BBQ Plugin 1.2.1
    +  jQuery BBQ Plugin 1.4pre
       MIT
       CGridView and CListView widgets
     
    @@ -39,7 +39,7 @@ 

    Third-Party Library List

    CHtml::autoComplete() - jQuery Masked Input 1.3 + jQuery Masked Input 1.3.1 MIT CMaskedTextField @@ -54,7 +54,7 @@

    Third-Party Library List

    CTreeView - jQuery Star Rating 3.13 + jQuery Star Rating 4.11 MIT CStarRating @@ -84,7 +84,7 @@

    Third-Party Library List

    CGettextMoFile - HTML Purifier (v4.4.0) + HTML Purifier (v4.5.0) LGPL CHtmlPurifier @@ -99,15 +99,20 @@

    Third-Party Library List

    CGridView, CListView - Net_IDNA - IDNA Converter in PHP (Version 0.8.0 from 2011-03-11) - LGPL + Net_IDNA2 - Punycode encoding and decoding (0.1.1 (beta) was released on 2010-12-09) + LGPL CUrlValidator, CEmailValidator - Punycode.js (v1.1.1) - June 27 2012 + Punycode.js (v1.2.0) - October 10 2012 MIT, GPL CUrlValidator, CEmailValidator + + Console Normalizer (git commit: 36556c695e) - December 7 2012 + MIT + CWebLogRoute + diff --git a/framework/vendors/console-normalizer/README.md b/framework/vendors/console-normalizer/README.md new file mode 100644 index 00000000000..72aa8314469 --- /dev/null +++ b/framework/vendors/console-normalizer/README.md @@ -0,0 +1,86 @@ +Console Normalizer +================== + +IE, oh IE, how we fight... this utility fixes issues with IE's console object so you can use it just like a real console. + +Usage +----- + +```html + + +``` + +What it fixes +------------- + +IE 8 & 9's console objects are a bit... well, it's IE, our favorite stepchild. To be fair, Chrome has a few similar issues which are fixed by this utility as well. Here's a quick summary, with details below: + + * window.console available in IE, even if it is closed + * console.log/info/warn/error.apply work in IE and Chrome + * console.time and console.timeEnd supported + * console.group and console.groupEnd supported + * Function.prototype.bind added if it doesn't exist (for IE 8) + +### console is null or not an object + +The `window.console` object is only availble in IE 8/9 when it is opened; this is also true in Chrome. + +### console.group and console.groupEnd + +Implements compatible functions for `group` and `groupEnd` + +### console.time and console.timeEnd + +Implements compatible functions for `time` and `timeEnd` + +### Function.prototype.apply + +Calling `apply` on any of the logging methods (i.e. `console.log.apply(console, arguments)`) breaks with "Object doesn't support this property or method" in IE8 and a Method Invocation Error in IE 9. This is [because it is a "host object" and does not extend Object](http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9). + +### Function.prototype.bind in IE 8 + +As a side effect, this utility also implements a compatible version of Function.prototype.bind for IE 8. + +Compatibility +------------- + +Compatible with everything after IE 5.5 + +Contributing +------------ + +Clone, modify, and submit pull requests via [GitHub](https://github.com/katowulf/console-normalizer). + +To create the minimized file, use [Dean Edward's packer](http://dean.edwards.name/packer/). + +License +------- +(The MIT License) + +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. + +Support +------- + +https://github.com/katowulf/console-normalizer \ No newline at end of file diff --git a/framework/vendors/console-normalizer/normalizeconsole.min.js b/framework/vendors/console-normalizer/normalizeconsole.min.js new file mode 100644 index 00000000000..37021622fe9 --- /dev/null +++ b/framework/vendors/console-normalizer/normalizeconsole.min.js @@ -0,0 +1 @@ +(function(f){f||(f=window.console={log:function(a,b,c,d,e){},info:function(a,b,c,d,e){},warn:function(a,b,c,d,e){},error:function(a,b,c,d,e){}});if(!Function.prototype.bind){Function.prototype.bind=function(a){var b=this,args=Array.prototype.slice.call(arguments,1);return function(){return b.apply(a,Array.prototype.concat.apply(args,arguments))}}}if(typeof(f.log)==='object'){f.log=Function.prototype.call.bind(f.log,f);f.info=Function.prototype.call.bind(f.info,f);f.warn=Function.prototype.call.bind(f.warn,f);f.error=Function.prototype.call.bind(f.error,f)}('group'in f)||(f.group=function(a){f.info("\n------------\n"+a+"\n------------")});('groupEnd'in f)||(f.groupEnd=function(){});('time'in f)||(function(){var c={};f.time=function(a){c[a]=new Date().getTime()};f.timeEnd=function(a){var b=new Date().getTime(),time=(a in c)?b-c[a]:0;f.info(a+': '+time+'ms')}}())})(window.console); \ No newline at end of file diff --git a/framework/vendors/htmlpurifier/HTMLPurifier.standalone.php b/framework/vendors/htmlpurifier/HTMLPurifier.standalone.php index bcbe580705b..f440202b4b4 100644 --- a/framework/vendors/htmlpurifier/HTMLPurifier.standalone.php +++ b/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.4.0 + * @version 4.5.0 * * @warning * You must *not* include any other HTML Purifier files before this file, @@ -39,7 +39,7 @@ */ /* - HTML Purifier 4.4.0 - Standards Compliant HTML Filtering + HTML Purifier 4.5.0 - Standards Compliant HTML Filtering Copyright (C) 2006-2008 Edward Z. Yang This library is free software; you can redistribute it and/or @@ -75,10 +75,10 @@ class HTMLPurifier { /** Version of HTML Purifier */ - public $version = '4.4.0'; + public $version = '4.5.0'; /** Constant with version of HTML Purifier */ - const VERSION = '4.4.0'; + const VERSION = '4.5.0'; /** Global configuration object */ public $config; @@ -894,32 +894,37 @@ public static function registerAutoload() { if ( ($funcs = spl_autoload_functions()) === false ) { spl_autoload_register($autoload); } elseif (function_exists('spl_autoload_unregister')) { - $buggy = version_compare(PHP_VERSION, '5.2.11', '<'); - $compat = version_compare(PHP_VERSION, '5.1.2', '<=') && - version_compare(PHP_VERSION, '5.1.0', '>='); - foreach ($funcs as $func) { - if ($buggy && is_array($func)) { - // :TRICKY: There are some compatibility issues and some - // places where we need to error out - $reflector = new ReflectionMethod($func[0], $func[1]); - if (!$reflector->isStatic()) { - throw new Exception(' - HTML Purifier autoloader registrar is not compatible - with non-static object methods due to PHP Bug #44144; - Please do not use HTMLPurifier.autoload.php (or any - file that includes this file); instead, place the code: - spl_autoload_register(array(\'HTMLPurifier_Bootstrap\', \'autoload\')) - after your own autoloaders. - '); + if (version_compare(PHP_VERSION, '5.3.0', '>=')) { + // prepend flag exists, no need for shenanigans + spl_autoload_register($autoload, true, true); + } else { + $buggy = version_compare(PHP_VERSION, '5.2.11', '<'); + $compat = version_compare(PHP_VERSION, '5.1.2', '<=') && + version_compare(PHP_VERSION, '5.1.0', '>='); + foreach ($funcs as $func) { + if ($buggy && is_array($func)) { + // :TRICKY: There are some compatibility issues and some + // places where we need to error out + $reflector = new ReflectionMethod($func[0], $func[1]); + if (!$reflector->isStatic()) { + throw new Exception(' + HTML Purifier autoloader registrar is not compatible + with non-static object methods due to PHP Bug #44144; + Please do not use HTMLPurifier.autoload.php (or any + file that includes this file); instead, place the code: + spl_autoload_register(array(\'HTMLPurifier_Bootstrap\', \'autoload\')) + after your own autoloaders. + '); + } + // Suprisingly, spl_autoload_register supports the + // Class::staticMethod callback format, although call_user_func doesn't + if ($compat) $func = implode('::', $func); } - // Suprisingly, spl_autoload_register supports the - // Class::staticMethod callback format, although call_user_func doesn't - if ($compat) $func = implode('::', $func); + spl_autoload_unregister($func); } - spl_autoload_unregister($func); + spl_autoload_register($autoload); + foreach ($funcs as $func) spl_autoload_register($func); } - spl_autoload_register($autoload); - foreach ($funcs as $func) spl_autoload_register($func); } } @@ -1188,8 +1193,9 @@ protected function doSetup($config) { $this->info['border-spacing'] = new HTMLPurifier_AttrDef_CSS_Multiple(new HTMLPurifier_AttrDef_CSS_Length(), 2); - // partial support - $this->info['white-space'] = new HTMLPurifier_AttrDef_Enum(array('nowrap')); + // These CSS properties don't work on many browsers, but we live + // in THE FUTURE! + $this->info['white-space'] = new HTMLPurifier_AttrDef_Enum(array('nowrap', 'normal', 'pre', 'pre-wrap', 'pre-line')); if ($config->get('CSS.Proprietary')) { $this->doSetupProprietary($config); @@ -1229,12 +1235,17 @@ protected function doSetupProprietary($config) { // only opacity, for now $this->info['filter'] = new HTMLPurifier_AttrDef_CSS_Filter(); + // more CSS3 + $this->info['page-break-after'] = + $this->info['page-break-before'] = new HTMLPurifier_AttrDef_Enum(array('auto','always','avoid','left','right')); + $this->info['page-break-inside'] = new HTMLPurifier_AttrDef_Enum(array('auto','avoid')); + } protected function doSetupTricky($config) { $this->info['display'] = new HTMLPurifier_AttrDef_Enum(array( 'inline', 'block', 'list-item', 'run-in', 'compact', - 'marker', 'table', 'inline-table', 'table-row-group', + 'marker', 'table', 'inline-block', 'inline-table', 'table-row-group', 'table-header-group', 'table-footer-group', 'table-row', 'table-column-group', 'table-column', 'table-cell', 'table-caption', 'none' )); @@ -1372,7 +1383,7 @@ class HTMLPurifier_Config /** * HTML Purifier's version */ - public $version = '4.4.0'; + public $version = '4.5.0'; /** * Bool indicator whether or not to automatically finalize @@ -1541,7 +1552,7 @@ public function getBatch($namespace) { } /** - * Returns a md5 signature of a segment of the configuration object + * Returns a SHA-1 signature of a segment of the configuration object * that uniquely identifies that particular configuration * @note Revision is handled specially and is removed from the batch * before processing! @@ -1551,18 +1562,18 @@ public function getBatchSerial($namespace) { if (empty($this->serials[$namespace])) { $batch = $this->getBatch($namespace); unset($batch['DefinitionRev']); - $this->serials[$namespace] = md5(serialize($batch)); + $this->serials[$namespace] = sha1(serialize($batch)); } return $this->serials[$namespace]; } /** - * Returns a md5 signature for the entire configuration object + * Returns a SHA-1 signature for the entire configuration object * that uniquely identifies that particular configuration */ public function getSerial() { if (empty($this->serial)) { - $this->serial = md5(serialize($this->getAll())); + $this->serial = sha1(serialize($this->getAll())); } return $this->serial; } @@ -2034,6 +2045,7 @@ protected function triggerError($msg, $no) { $trace = debug_backtrace(); // zip(tail(trace), trace) -- but PHP is not Haskell har har for ($i = 0, $c = count($trace); $i < $c - 1; $i++) { + // XXX this is not correct on some versions of HTML Purifier if ($trace[$i + 1]['class'] === 'HTMLPurifier_Config') { continue; } @@ -2862,13 +2874,25 @@ class HTMLPurifier_ElementDef */ public $attr = array(); + // XXX: Design note: currently, it's not possible to override + // previously defined AttrTransforms without messing around with + // the final generated config. This is by design; a previous version + // used an associated list of attr_transform, but it was extremely + // easy to accidentally override other attribute transforms by + // forgetting to specify an index (and just using 0.) While we + // could check this by checking the index number and complaining, + // there is a second problem which is that it is not at all easy to + // tell when something is getting overridden. Combine this with a + // codebase where this isn't really being used, and it's perfect for + // nuking. + /** - * Indexed list of tag's HTMLPurifier_AttrTransform to be done before validation + * List of tags HTMLPurifier_AttrTransform to be done before validation */ public $attr_transform_pre = array(); /** - * Indexed list of tag's HTMLPurifier_AttrTransform to be done after validation + * List of tags HTMLPurifier_AttrTransform to be done after validation */ public $attr_transform_post = array(); @@ -2976,9 +3000,9 @@ public function mergeIn($def) { } $this->attr[$k] = $v; } - $this->_mergeAssocArray($this->attr_transform_pre, $def->attr_transform_pre); - $this->_mergeAssocArray($this->attr_transform_post, $def->attr_transform_post); $this->_mergeAssocArray($this->excludes, $def->excludes); + $this->attr_transform_pre = array_merge($this->attr_transform_pre, $def->attr_transform_pre); + $this->attr_transform_post = array_merge($this->attr_transform_post, $def->attr_transform_post); if(!empty($def->content_model)) { $this->content_model = @@ -3371,7 +3395,12 @@ public static function convertToUTF8($str, $config, $context) { $str = utf8_encode($str); return $str; } - trigger_error('Encoding not supported, please install iconv', E_USER_ERROR); + $bug = HTMLPurifier_Encoder::testIconvTruncateBug(); + if ($bug == self::ICONV_OK) { + trigger_error('Encoding not supported, please install iconv', E_USER_ERROR); + } else { + trigger_error('You have a buggy version of iconv, see https://bugs.php.net/bug.php?id=48147 and http://sourceware.org/bugzilla/show_bug.cgi?id=13541', E_USER_ERROR); + } } /** @@ -5232,6 +5261,9 @@ public function setup($config) { if ($config->get('HTML.SafeEmbed')) { $modules[] = 'SafeEmbed'; } + if ($config->get('HTML.SafeScripting') !== array()) { + $modules[] = 'SafeScripting'; + } if ($config->get('HTML.Nofollow')) { $modules[] = 'Nofollow'; } @@ -7376,6 +7408,7 @@ class HTMLPurifier_URIDefinition extends HTMLPurifier_Definition public function __construct() { $this->registerFilter(new HTMLPurifier_URIFilter_DisableExternal()); $this->registerFilter(new HTMLPurifier_URIFilter_DisableExternalResources()); + $this->registerFilter(new HTMLPurifier_URIFilter_DisableResources()); $this->registerFilter(new HTMLPurifier_URIFilter_HostBlacklist()); $this->registerFilter(new HTMLPurifier_URIFilter_SafeIframe()); $this->registerFilter(new HTMLPurifier_URIFilter_MakeAbsolute()); @@ -8763,7 +8796,7 @@ public function validate($string, $config, $context) { $string = $this->mungeRgb($string); // assumes URI doesn't have spaces in it - $bits = explode(' ', strtolower($string)); // bits to process + $bits = explode(' ', $string); // bits to process $caught = array(); $caught['color'] = false; @@ -9358,7 +9391,7 @@ class HTMLPurifier_AttrDef_CSS_FontFamily extends HTMLPurifier_AttrDef protected $mask = null; public function __construct() { - $this->mask = '- '; + $this->mask = '_- '; for ($c = 'a'; $c <= 'z'; $c++) $this->mask .= $c; for ($c = 'A'; $c <= 'Z'; $c++) $this->mask .= $c; for ($c = '0'; $c <= '9'; $c++) $this->mask .= $c; // cast-y, but should be fine @@ -9514,7 +9547,7 @@ public function validate($string, $config, $context) { // extensive research, we may feel comfortable with dropping // it down to edgy. - // Edgy: alphanumeric, spaces, dashes and Unicode. Use of + // Edgy: alphanumeric, spaces, dashes, underscores and Unicode. Use of // str(c)spn assumes that the string was already well formed // Unicode (which of course it is). if (strspn($font, $this->mask) !== strlen($font)) { @@ -10072,7 +10105,8 @@ public function validate($string, $config, $context) { $string = trim($string); if (empty($string)) return false; - if (isset($colors[strtolower($string)])) return $colors[$string]; + $lower = strtolower($string); + if (isset($colors[$lower])) return $colors[$lower]; if ($string[0] === '#') $hex = substr($string, 1); else $hex = $string; @@ -11109,7 +11143,7 @@ public function transform($attr, $config, $context) { if ($scheme->browsable && !$url->isLocal($config, $context)) { if (isset($attr['rel'])) { - $rels = explode(' ', $attr); + $rels = explode(' ', $attr['rel']); if (!in_array('nofollow', $rels)) { $rels[] = 'nofollow'; } @@ -11270,7 +11304,7 @@ public function transform($attr, $config, $context) { $scheme = $url->getSchemeObj($config, $context); if ($scheme->browsable && !$url->isBenign($config, $context)) { - $attr['target'] = 'blank'; + $attr['target'] = '_blank'; } return $attr; @@ -12453,7 +12487,7 @@ public function setup($config) { // inclusions wrong for bdo: bdo allows Lang ) ); - $bdo->attr_transform_post['required-dir'] = new HTMLPurifier_AttrTransform_BdoDir(); + $bdo->attr_transform_post[] = new HTMLPurifier_AttrTransform_BdoDir(); $this->attr_collections['I18N']['dir'] = 'Enum#ltr,rtl'; } @@ -12977,7 +13011,7 @@ public function setup($config) { $element = $this->addBlankElement($name); $element->attr['name'] = 'CDATA'; if (!$config->get('HTML.Attr.Name.UseCDATA')) { - $element->attr_transform_post['NameSync'] = new HTMLPurifier_AttrTransform_NameSync(); + $element->attr_transform_post[] = new HTMLPurifier_AttrTransform_NameSync(); } } } @@ -13258,6 +13292,44 @@ public function setup($config) { +/** + * A "safe" script module. No inline JS is allowed, and pointed to JS + * files must match whitelist. + */ +class HTMLPurifier_HTMLModule_SafeScripting extends HTMLPurifier_HTMLModule +{ + + public $name = 'SafeScripting'; + + public function setup($config) { + + // These definitions are not intrinsically safe: the attribute transforms + // are a vital part of ensuring safety. + + $allowed = $config->get('HTML.SafeScripting'); + $script = $this->addElement( + 'script', + 'Inline', + 'Empty', + null, + array( + // While technically not required by the spec, we're forcing + // it to this value. + 'type' => 'Enum#text/javascript', + 'src*' => new HTMLPurifier_AttrDef_Enum(array_keys($allowed)) + ) + ); + $script->attr_transform_pre[] = + $script->attr_transform_post[] = new HTMLPurifier_AttrTransform_ScriptRequired(); + + } + +} + + + + + /* WARNING: THIS MODULE IS EXTREMELY DANGEROUS AS IT ENABLES INLINE SCRIPTING @@ -13303,8 +13375,8 @@ public function setup($config) { ); $this->info['script']->content_model = '#PCDATA'; $this->info['script']->content_model_type = 'optional'; - $this->info['script']->attr_transform_pre['type'] = - $this->info['script']->attr_transform_post['type'] = + $this->info['script']->attr_transform_pre[] = + $this->info['script']->attr_transform_post[] = new HTMLPurifier_AttrTransform_ScriptRequired(); } } @@ -14480,6 +14552,9 @@ class HTMLPurifier_Injector_RemoveEmpty extends HTMLPurifier_Injector private $context, $config, $attrValidator, $removeNbsp, $removeNbspExceptions; + // TODO: make me configurable + private $_exclude = array('colgroup' => 1, 'th' => 1, 'td' => 1, 'iframe' => 1); + public function prepare($config, $context) { parent::prepare($config, $context); $this->config = $config; @@ -14505,7 +14580,7 @@ public function handleElement(&$token) { break; } if (!$next || ($next instanceof HTMLPurifier_Token_End && $next->name == $token->name)) { - if ($token->name == 'colgroup') return; + if (isset($this->_exclude[$token->name])) return; $this->attrValidator->validateToken($token, $this->config, $this->context); $token->armor['ValidateAttributes'] = true; if (isset($token->attr['id']) || isset($token->attr['name'])) return; @@ -15484,6 +15559,22 @@ public function __construct() { * translated into text depends on the child definitions. * * @todo Enable nodes to be bubbled out of the structure. + * + * @warning This algorithm (though it may be hard to see) proceeds from + * a top-down fashion. Thus, parents are processed before + * children. This is easy to implement and has a nice effiency + * benefit, in that if a node is removed, we never waste any + * time processing it, but it also means that if a child + * changes in a non-encapsulated way (e.g. it is removed), we + * need to go back and reprocess the parent to see if those + * changes resulted in problems for the parent. See + * [BACKTRACK] for an example of this. In the current + * implementation, this backtracking can only be triggered when + * a node is removed and if that node was the sole node, the + * parent would need to be removed. As such, it is easy to see + * that backtracking only incurs constant overhead. If more + * sophisticated backtracking is implemented, care must be + * taken to avoid nontermination or exponential blowup. */ class HTMLPurifier_Strategy_FixNesting extends HTMLPurifier_Strategy @@ -15496,6 +15587,8 @@ public function execute($tokens, $config, $context) { // get a copy of the HTML definition $definition = $config->getHTMLDefinition(); + $excludes_enabled = !$config->get('Core.DisableExcludes'); + // insert implicit "parent" node, will be removed at end. // DEFINITION CALL $parent_name = $definition->info_parent; @@ -15605,7 +15698,7 @@ public function execute($tokens, $config, $context) { // parent exclusions. The array should not be very large, two // elements at most. $excluded = false; - if (!empty($exclude_stack)) { + if (!empty($exclude_stack) && $excludes_enabled) { foreach ($exclude_stack as $lookup) { if (isset($lookup[$tokens[$i]->name])) { $excluded = true; @@ -15693,7 +15786,7 @@ public function execute($tokens, $config, $context) { // our current implementation claims that that case would // not allow empty, even if it did if (!$parent_def->child->allow_empty) { - // we need to do a double-check + // we need to do a double-check [BACKTRACK] $i = $parent_index; array_pop($stack); } @@ -17187,10 +17280,12 @@ public function doValidate(&$uri, $config, $context) { file_put_contents($file, $raw_data); if (function_exists('exif_imagetype')) { $image_code = exif_imagetype($file); + unlink($file); } elseif (function_exists('getimagesize')) { set_error_handler(array($this, 'muteErrorHandler')); $info = getimagesize($file); restore_error_handler(); + unlink($file); if ($info == false) return false; $image_code = $info[2]; } else { diff --git a/framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema.ser b/framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema.ser index b106bcf798a893df8b98c41068b5fc014d4af770..fa0bacb9476cab9e69889141969c6fefd2b4419c 100644 GIT binary patch delta 235 zcmaD + This directive disables SGML-style exclusions, e.g. the exclusion of + <object> in any descendant of a + <pre> tag. Disabling excludes will allow some + invalid documents to pass through HTML Purifier, but HTML Purifier + will also be less likely to accidentally remove large documents during + processing. +

    +--# vim: et sw=4 sts=4 diff --git a/framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt b/framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt new file mode 100644 index 00000000000..5ebc7a19d54 --- /dev/null +++ b/framework/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt @@ -0,0 +1,10 @@ +HTML.SafeScripting +TYPE: lookup +VERSION: 4.5.0 +DEFAULT: array() +--DESCRIPTION-- +

    + Whether or not to permit script tags to external scripts in documents. + Inline scripting is not allowed, and the script must match an explicit whitelist. +

    +--# vim: et sw=4 sts=4 diff --git a/framework/vendors/htmlpurifier/standalone/HTMLPurifier/Filter/ExtractStyleBlocks.php b/framework/vendors/htmlpurifier/standalone/HTMLPurifier/Filter/ExtractStyleBlocks.php index 6e5f1203707..aeb25df7ebd 100644 --- a/framework/vendors/htmlpurifier/standalone/HTMLPurifier/Filter/ExtractStyleBlocks.php +++ b/framework/vendors/htmlpurifier/standalone/HTMLPurifier/Filter/ExtractStyleBlocks.php @@ -33,6 +33,7 @@ class HTMLPurifier_Filter_ExtractStyleBlocks extends HTMLPurifier_Filter public function __construct() { $this->_tidy = new csstidy(); + $this->_tidy->set_cfg('lowercase_s', false); $this->_id_attrdef = new HTMLPurifier_AttrDef_HTML_ID(true); $this->_class_attrdef = new HTMLPurifier_AttrDef_CSS_Ident(); $this->_enum_attrdef = new HTMLPurifier_AttrDef_Enum(array('first-child', 'link', 'visited', 'active', 'hover', 'focus')); diff --git a/framework/vendors/htmlpurifier/standalone/HTMLPurifier/Lexer/PEARSax3.php b/framework/vendors/htmlpurifier/standalone/HTMLPurifier/Lexer/PEARSax3.php deleted file mode 100644 index 1d358c7b6be..00000000000 --- a/framework/vendors/htmlpurifier/standalone/HTMLPurifier/Lexer/PEARSax3.php +++ /dev/null @@ -1,139 +0,0 @@ -tokens = array(); - $this->last_token_was_empty = false; - - $string = $this->normalize($string, $config, $context); - - $this->parent_handler = set_error_handler(array($this, 'muteStrictErrorHandler')); - - $parser = new XML_HTMLSax3(); - $parser->set_object($this); - $parser->set_element_handler('openHandler','closeHandler'); - $parser->set_data_handler('dataHandler'); - $parser->set_escape_handler('escapeHandler'); - - // doesn't seem to work correctly for attributes - $parser->set_option('XML_OPTION_ENTITIES_PARSED', 1); - - $parser->parse($string); - - restore_error_handler(); - - return $this->tokens; - - } - - /** - * Open tag event handler, interface is defined by PEAR package. - */ - public function openHandler(&$parser, $name, $attrs, $closed) { - // entities are not resolved in attrs - foreach ($attrs as $key => $attr) { - $attrs[$key] = $this->parseData($attr); - } - if ($closed) { - $this->tokens[] = new HTMLPurifier_Token_Empty($name, $attrs); - $this->last_token_was_empty = true; - } else { - $this->tokens[] = new HTMLPurifier_Token_Start($name, $attrs); - } - $this->stack[] = $name; - return true; - } - - /** - * Close tag event handler, interface is defined by PEAR package. - */ - public function closeHandler(&$parser, $name) { - // HTMLSax3 seems to always send empty tags an extra close tag - // check and ignore if you see it: - // [TESTME] to make sure it doesn't overreach - if ($this->last_token_was_empty) { - $this->last_token_was_empty = false; - return true; - } - $this->tokens[] = new HTMLPurifier_Token_End($name); - if (!empty($this->stack)) array_pop($this->stack); - return true; - } - - /** - * Data event handler, interface is defined by PEAR package. - */ - public function dataHandler(&$parser, $data) { - $this->last_token_was_empty = false; - $this->tokens[] = new HTMLPurifier_Token_Text($data); - return true; - } - - /** - * Escaped text handler, interface is defined by PEAR package. - */ - public function escapeHandler(&$parser, $data) { - if (strpos($data, '--') === 0) { - // remove trailing and leading double-dashes - $data = substr($data, 2); - if (strlen($data) >= 2 && substr($data, -2) == "--") { - $data = substr($data, 0, -2); - } - if (isset($this->stack[sizeof($this->stack) - 1]) && - $this->stack[sizeof($this->stack) - 1] == "style") { - $this->tokens[] = new HTMLPurifier_Token_Text($data); - } else { - $this->tokens[] = new HTMLPurifier_Token_Comment($data); - } - $this->last_token_was_empty = false; - } - // CDATA is handled elsewhere, but if it was handled here: - //if (strpos($data, '[CDATA[') === 0) { - // $this->tokens[] = new HTMLPurifier_Token_Text( - // substr($data, 7, strlen($data) - 9) ); - //} - return true; - } - - /** - * An error handler that mutes strict errors - */ - public function muteStrictErrorHandler($errno, $errstr, $errfile=null, $errline=null, $errcontext=null) { - if ($errno == E_STRICT) return; - return call_user_func($this->parent_handler, $errno, $errstr, $errfile, $errline, $errcontext); - } - -} - -// vim: et sw=4 sts=4 diff --git a/framework/vendors/idna_convert/LICENCE b/framework/vendors/idna_convert/LICENCE deleted file mode 100644 index 25a1d22dfeb..00000000000 --- a/framework/vendors/idna_convert/LICENCE +++ /dev/null @@ -1,502 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/framework/vendors/idna_convert/idna_convert.class.php b/framework/vendors/idna_convert/idna_convert.class.php deleted file mode 100644 index 23f4405538e..00000000000 --- a/framework/vendors/idna_convert/idna_convert.class.php +++ /dev/null @@ -1,1605 +0,0 @@ - - * @copyright 2004-2011 phlyLabs Berlin, http://phlylabs.de - * @version 0.8.0 2011-03-11 - */ -class idna_convert -{ - // NP See below - - // Internal settings, do not mess with them - protected $_punycode_prefix = 'xn--'; - protected $_invalid_ucs = 0x80000000; - protected $_max_ucs = 0x10FFFF; - protected $_base = 36; - protected $_tmin = 1; - protected $_tmax = 26; - protected $_skew = 38; - protected $_damp = 700; - protected $_initial_bias = 72; - protected $_initial_n = 0x80; - protected $_sbase = 0xAC00; - protected $_lbase = 0x1100; - protected $_vbase = 0x1161; - protected $_tbase = 0x11A7; - protected $_lcount = 19; - protected $_vcount = 21; - protected $_tcount = 28; - protected $_ncount = 588; // _vcount * _tcount - protected $_scount = 11172; // _lcount * _tcount * _vcount - protected $_error = false; - - protected static $_mb_string_overload = null; - - // See {@link set_paramter()} for details of how to change the following - // settings from within your script / application - protected $_api_encoding = 'utf8'; // Default input charset is UTF-8 - protected $_allow_overlong = false; // Overlong UTF-8 encodings are forbidden - protected $_strict_mode = false; // Behave strict or not - protected $_idn_version = 2003; // Can be either 2003 (old, default) or 2008 - - /** - * the constructor - * - * @param array $options - * @return boolean - * @since 0.5.2 - */ - public function __construct($options = false) - { - $this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount; - // If parameters are given, pass these to the respective method - if (is_array($options)) { - $this->set_parameter($options); - } - - // populate mbstring overloading cache if not set - if (self::$_mb_string_overload === null) { - self::$_mb_string_overload = (extension_loaded('mbstring') - && (ini_get('mbstring.func_overload') & 0x02) === 0x02); - } - } - - /** - * Sets a new option value. Available options and values: - * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8, - * 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8] - * [overlong - Unicode does not allow unnecessarily long encodings of chars, - * to allow this, set this parameter to true, else to false; - * default is false.] - * [strict - true: strict mode, good for registration purposes - Causes errors - * on failures; false: loose mode, ideal for "wildlife" applications - * by silently ignoring errors and returning the original input instead - * - * @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs) - * @param string Value to use (if parameter 1 is a string) - * @return boolean true on success, false otherwise - */ - public function set_parameter($option, $value = false) - { - if (!is_array($option)) { - $option = array($option => $value); - } - foreach ($option as $k => $v) { - switch ($k) { - case 'encoding': - switch ($v) { - case 'utf8': - case 'ucs4_string': - case 'ucs4_array': - $this->_api_encoding = $v; - break; - default: - $this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k); - return false; - } - break; - case 'overlong': - $this->_allow_overlong = ($v) ? true : false; - break; - case 'strict': - $this->_strict_mode = ($v) ? true : false; - break; - case 'idn_version': - if (in_array($v, array('2003', '2008'))) { - $this->_idn_version = $v; - } else { - $this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k); - } - break; - case 'encode_german_sz': // Deprecated - if (!$v) { - self::$NP['replacemaps'][0xDF] = array(0x73, 0x73); - } else { - unset(self::$NP['replacemaps'][0xDF]); - } - break; - default: - $this->_error('Set Parameter: Unknown option '.$k); - return false; - } - } - return true; - } - - /** - * Decode a given ACE domain name - * @param string Domain name (ACE string) - * [@param string Desired output encoding, see {@link set_parameter}] - * @return string Decoded Domain name (UTF-8 or UCS-4) - */ - public function decode($input, $one_time_encoding = false) - { - // Optionally set - if ($one_time_encoding) { - switch ($one_time_encoding) { - case 'utf8': - case 'ucs4_string': - case 'ucs4_array': - break; - default: - $this->_error('Unknown encoding '.$one_time_encoding); - return false; - } - } - // Make sure to drop any newline characters around - $input = trim($input); - - // Negotiate input and try to determine, whether it is a plain string, - // an email address or something like a complete URL - if (strpos($input, '@')) { // Maybe it is an email address - // No no in strict mode - if ($this->_strict_mode) { - $this->_error('Only simple domain name parts can be handled in strict mode'); - return false; - } - list ($email_pref, $input) = explode('@', $input, 2); - $arr = explode('.', $input); - foreach ($arr as $k => $v) { - if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) { - $conv = $this->_decode($v); - if ($conv) $arr[$k] = $conv; - } - } - $input = join('.', $arr); - $arr = explode('.', $email_pref); - foreach ($arr as $k => $v) { - if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) { - $conv = $this->_decode($v); - if ($conv) $arr[$k] = $conv; - } - } - $email_pref = join('.', $arr); - $return = $email_pref . '@' . $input; - } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters) - // No no in strict mode - if ($this->_strict_mode) { - $this->_error('Only simple domain name parts can be handled in strict mode'); - return false; - } - $parsed = parse_url($input); - if (isset($parsed['host'])) { - $arr = explode('.', $parsed['host']); - foreach ($arr as $k => $v) { - $conv = $this->_decode($v); - if ($conv) $arr[$k] = $conv; - } - $parsed['host'] = join('.', $arr); - $return = - (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')) - .(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@') - .$parsed['host'] - .(empty($parsed['port']) ? '' : ':'.$parsed['port']) - .(empty($parsed['path']) ? '' : $parsed['path']) - .(empty($parsed['query']) ? '' : '?'.$parsed['query']) - .(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']); - } else { // parse_url seems to have failed, try without it - $arr = explode('.', $input); - foreach ($arr as $k => $v) { - $conv = $this->_decode($v); - $arr[$k] = ($conv) ? $conv : $v; - } - $return = join('.', $arr); - } - } else { // Otherwise we consider it being a pure domain name string - $return = $this->_decode($input); - if (!$return) $return = $input; - } - // The output is UTF-8 by default, other output formats need conversion here - // If one time encoding is given, use this, else the objects property - switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) { - case 'utf8': - return $return; - break; - case 'ucs4_string': - return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return)); - break; - case 'ucs4_array': - return $this->_utf8_to_ucs4($return); - break; - default: - $this->_error('Unsupported output format'); - return false; - } - } - - /** - * Encode a given UTF-8 domain name - * @param string Domain name (UTF-8 or UCS-4) - * [@param string Desired input encoding, see {@link set_parameter}] - * @return string Encoded Domain name (ACE string) - */ - public function encode($decoded, $one_time_encoding = false) - { - // Forcing conversion of input to UCS4 array - // If one time encoding is given, use this, else the objects property - switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) { - case 'utf8': - $decoded = $this->_utf8_to_ucs4($decoded); - break; - case 'ucs4_string': - $decoded = $this->_ucs4_string_to_ucs4($decoded); - case 'ucs4_array': - break; - default: - $this->_error('Unsupported input format: '.($one_time_encoding ? $one_time_encoding : $this->_api_encoding)); - return false; - } - - // No input, no output, what else did you expect? - if (empty($decoded)) return ''; - - // Anchors for iteration - $last_begin = 0; - // Output string - $output = ''; - foreach ($decoded as $k => $v) { - // Make sure to use just the plain dot - switch($v) { - case 0x3002: - case 0xFF0E: - case 0xFF61: - $decoded[$k] = 0x2E; - // Right, no break here, the above are converted to dots anyway - // Stumbling across an anchoring character - case 0x2E: - case 0x2F: - case 0x3A: - case 0x3F: - case 0x40: - // Neither email addresses nor URLs allowed in strict mode - if ($this->_strict_mode) { - $this->_error('Neither email addresses nor URLs are allowed in strict mode.'); - return false; - } else { - // Skip first char - if ($k) { - $encoded = ''; - $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin))); - if ($encoded) { - $output .= $encoded; - } else { - $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin))); - } - $output .= chr($decoded[$k]); - } - $last_begin = $k + 1; - } - } - } - // Catch the rest of the string - if ($last_begin) { - $inp_len = sizeof($decoded); - $encoded = ''; - $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); - if ($encoded) { - $output .= $encoded; - } else { - $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); - } - return $output; - } else { - if ($output = $this->_encode($decoded)) { - return $output; - } else { - return $this->_ucs4_to_utf8($decoded); - } - } - } - - /** - * Removes a weakness of encode(), which cannot properly handle URIs but instead encodes their - * path or query components, too. - * @param string $uri Expects the URI as a UTF-8 (or ASCII) string - * @return string The URI encoded to Punycode, everything but the host component is left alone - * @since 0.6.4 - */ - public function encode_uri($uri) - { - $parsed = parse_url($uri); - if (!isset($parsed['host'])) { - $this->_error('The given string does not look like a URI'); - return false; - } - $arr = explode('.', $parsed['host']); - foreach ($arr as $k => $v) { - $conv = $this->encode($v, 'utf8'); - if ($conv) $arr[$k] = $conv; - } - $parsed['host'] = join('.', $arr); - $return = - (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')) - .(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@') - .$parsed['host'] - .(empty($parsed['port']) ? '' : ':'.$parsed['port']) - .(empty($parsed['path']) ? '' : $parsed['path']) - .(empty($parsed['query']) ? '' : '?'.$parsed['query']) - .(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']); - return $return; - } - - /** - * Use this method to get the last error ocurred - * @param void - * @return string The last error, that occured - */ - public function get_last_error() - { - return $this->_error; - } - - /** - * The actual decoding algorithm - * @param string - * @return mixed - */ - protected function _decode($encoded) - { - $decoded = array(); - // find the Punycode prefix - if (!preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $encoded)) { - $this->_error('This is not a punycode string'); - return false; - } - $encode_test = preg_replace('!^'.preg_quote($this->_punycode_prefix, '!').'!', '', $encoded); - // If nothing left after removing the prefix, it is hopeless - if (!$encode_test) { - $this->_error('The given encoded string was empty'); - return false; - } - // Find last occurence of the delimiter - $delim_pos = strrpos($encoded, '-'); - if ($delim_pos > self::byteLength($this->_punycode_prefix)) { - for ($k = self::byteLength($this->_punycode_prefix); $k < $delim_pos; ++$k) { - $decoded[] = ord($encoded{$k}); - } - } - $deco_len = count($decoded); - $enco_len = self::byteLength($encoded); - - // Wandering through the strings; init - $is_first = true; - $bias = $this->_initial_bias; - $idx = 0; - $char = $this->_initial_n; - - for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) { - for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) { - $digit = $this->_decode_digit($encoded{$enco_idx++}); - $idx += $digit * $w; - $t = ($k <= $bias) ? $this->_tmin : - (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias)); - if ($digit < $t) break; - $w = (int) ($w * ($this->_base - $t)); - } - $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first); - $is_first = false; - $char += (int) ($idx / ($deco_len + 1)); - $idx %= ($deco_len + 1); - if ($deco_len > 0) { - // Make room for the decoded char - for ($i = $deco_len; $i > $idx; $i--) $decoded[$i] = $decoded[($i - 1)]; - } - $decoded[$idx++] = $char; - } - return $this->_ucs4_to_utf8($decoded); - } - - /** - * The actual encoding algorithm - * @param string - * @return mixed - */ - protected function _encode($decoded) - { - // We cannot encode a domain name containing the Punycode prefix - $extract = self::byteLength($this->_punycode_prefix); - $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix); - $check_deco = array_slice($decoded, 0, $extract); - - if ($check_pref == $check_deco) { - $this->_error('This is already a punycode string'); - return false; - } - // We will not try to encode strings consisting of basic code points only - $encodable = false; - foreach ($decoded as $k => $v) { - if ($v > 0x7a) { - $encodable = true; - break; - } - } - if (!$encodable) { - $this->_error('The given string does not contain encodable chars'); - return false; - } - // Do NAMEPREP - $decoded = $this->_nameprep($decoded); - if (!$decoded || !is_array($decoded)) return false; // NAMEPREP failed - $deco_len = count($decoded); - if (!$deco_len) return false; // Empty array - $codecount = 0; // How many chars have been consumed - $encoded = ''; - // Copy all basic code points to output - for ($i = 0; $i < $deco_len; ++$i) { - $test = $decoded[$i]; - // Will match [-0-9a-zA-Z] - if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B) - || (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) { - $encoded .= chr($decoded[$i]); - $codecount++; - } - } - if ($codecount == $deco_len) return $encoded; // All codepoints were basic ones - - // Start with the prefix; copy it to output - $encoded = $this->_punycode_prefix.$encoded; - // If we have basic code points in output, add an hyphen to the end - if ($codecount) $encoded .= '-'; - // Now find and encode all non-basic code points - $is_first = true; - $cur_code = $this->_initial_n; - $bias = $this->_initial_bias; - $delta = 0; - while ($codecount < $deco_len) { - // Find the smallest code point >= the current code point and - // remember the last ouccrence of it in the input - for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) { - if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) { - $next_code = $decoded[$i]; - } - } - $delta += ($next_code - $cur_code) * ($codecount + 1); - $cur_code = $next_code; - - // Scan input again and encode all characters whose code point is $cur_code - for ($i = 0; $i < $deco_len; $i++) { - if ($decoded[$i] < $cur_code) { - $delta++; - } elseif ($decoded[$i] == $cur_code) { - for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) { - $t = ($k <= $bias) ? $this->_tmin : - (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias); - if ($q < $t) break; - $encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval() - $q = (int) (($q - $t) / ($this->_base - $t)); - } - $encoded .= $this->_encode_digit($q); - $bias = $this->_adapt($delta, $codecount+1, $is_first); - $codecount++; - $delta = 0; - $is_first = false; - } - } - $delta++; - $cur_code++; - } - return $encoded; - } - - /** - * Adapt the bias according to the current code point and position - * @param int $delta - * @param int $npoints - * @param int $is_first - * @return int - */ - protected function _adapt($delta, $npoints, $is_first) - { - $delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2)); - $delta += intval($delta / $npoints); - for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) { - $delta = intval($delta / ($this->_base - $this->_tmin)); - } - return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew)); - } - - /** - * Encoding a certain digit - * @param int $d - * @return string - */ - protected function _encode_digit($d) - { - return chr($d + 22 + 75 * ($d < 26)); - } - - /** - * Decode a certain digit - * @param int $cp - * @return int - */ - protected function _decode_digit($cp) - { - $cp = ord($cp); - return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base)); - } - - /** - * Internal error handling method - * @param string $error - */ - protected function _error($error = '') - { - $this->_error = $error; - } - - /** - * Do Nameprep according to RFC3491 and RFC3454 - * @param array Unicode Characters - * @return string Unicode Characters, Nameprep'd - */ - protected function _nameprep($input) - { - $output = array(); - $error = false; - // - // Mapping - // Walking through the input array, performing the required steps on each of - // the input chars and putting the result into the output array - // While mapping required chars we apply the cannonical ordering - foreach ($input as $v) { - // Map to nothing == skip that code point - if (in_array($v, self::$NP['map_nothing'])) continue; - // Try to find prohibited input - if (in_array($v, self::$NP['prohibit']) || in_array($v, self::$NP['general_prohibited'])) { - $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v)); - return false; - } - foreach (self::$NP['prohibit_ranges'] as $range) { - if ($range[0] <= $v && $v <= $range[1]) { - $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v)); - return false; - } - } - - if (0xAC00 <= $v && $v <= 0xD7AF) { - // Hangul syllable decomposition - foreach ($this->_hangul_decompose($v) as $out) { - $output[] = (int) $out; - } - } elseif (($this->_idn_version == '2003') && isset(self::$NP['replacemaps'][$v])) { - // There's a decomposition mapping for that code point - // Decompositions only in version 2003 (original) of IDNA - foreach ($this->_apply_cannonical_ordering(self::$NP['replacemaps'][$v]) as $out) { - $output[] = (int) $out; - } - } else { - $output[] = (int) $v; - } - } - // Before applying any Combining, try to rearrange any Hangul syllables - $output = $this->_hangul_compose($output); - // - // Combine code points - // - $last_class = 0; - $last_starter = 0; - $out_len = count($output); - for ($i = 0; $i < $out_len; ++$i) { - $class = $this->_get_combining_class($output[$i]); - if ((!$last_class || $last_class > $class) && $class) { - // Try to match - $seq_len = $i - $last_starter; - $out = $this->_combine(array_slice($output, $last_starter, $seq_len)); - // On match: Replace the last starter with the composed character and remove - // the now redundant non-starter(s) - if ($out) { - $output[$last_starter] = $out; - if (count($out) != $seq_len) { - for ($j = $i+1; $j < $out_len; ++$j) $output[$j-1] = $output[$j]; - unset($output[$out_len]); - } - // Rewind the for loop by one, since there can be more possible compositions - $i--; - $out_len--; - $last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i-1]); - continue; - } - } - // The current class is 0 - if (!$class) $last_starter = $i; - $last_class = $class; - } - return $output; - } - - /** - * Decomposes a Hangul syllable - * (see http://www.unicode.org/unicode/reports/tr15/#Hangul - * @param integer 32bit UCS4 code point - * @return array Either Hangul Syllable decomposed or original 32bit value as one value array - */ - protected function _hangul_decompose($char) - { - $sindex = (int) $char - $this->_sbase; - if ($sindex < 0 || $sindex >= $this->_scount) return array($char); - $result = array(); - $result[] = (int) $this->_lbase + $sindex / $this->_ncount; - $result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount; - $T = intval($this->_tbase + $sindex % $this->_tcount); - if ($T != $this->_tbase) $result[] = $T; - return $result; - } - /** - * Ccomposes a Hangul syllable - * (see http://www.unicode.org/unicode/reports/tr15/#Hangul - * @param array Decomposed UCS4 sequence - * @return array UCS4 sequence with syllables composed - */ - protected function _hangul_compose($input) - { - $inp_len = count($input); - if (!$inp_len) return array(); - $result = array(); - $last = (int) $input[0]; - $result[] = $last; // copy first char from input to output - - for ($i = 1; $i < $inp_len; ++$i) { - $char = (int) $input[$i]; - $sindex = $last - $this->_sbase; - $lindex = $last - $this->_lbase; - $vindex = $char - $this->_vbase; - $tindex = $char - $this->_tbase; - // Find out, whether two current characters are LV and T - if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0) - && 0 <= $tindex && $tindex <= $this->_tcount) { - // create syllable of form LVT - $last += $tindex; - $result[(count($result) - 1)] = $last; // reset last - continue; // discard char - } - // Find out, whether two current characters form L and V - if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) { - // create syllable of form LV - $last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount; - $result[(count($result) - 1)] = $last; // reset last - continue; // discard char - } - // if neither case was true, just add the character - $last = $char; - $result[] = $char; - } - return $result; - } - - /** - * Returns the combining class of a certain wide char - * @param integer Wide char to check (32bit integer) - * @return integer Combining class if found, else 0 - */ - protected function _get_combining_class($char) - { - return isset(self::$NP['norm_combcls'][$char]) ? self::$NP['norm_combcls'][$char] : 0; - } - - /** - * Applies the cannonical ordering of a decomposed UCS4 sequence - * @param array Decomposed UCS4 sequence - * @return array Ordered USC4 sequence - */ - protected function _apply_cannonical_ordering($input) - { - $swap = true; - $size = count($input); - while ($swap) { - $swap = false; - $last = $this->_get_combining_class(intval($input[0])); - for ($i = 0; $i < $size-1; ++$i) { - $next = $this->_get_combining_class(intval($input[$i+1])); - if ($next != 0 && $last > $next) { - // Move item leftward until it fits - for ($j = $i + 1; $j > 0; --$j) { - if ($this->_get_combining_class(intval($input[$j-1])) <= $next) break; - $t = intval($input[$j]); - $input[$j] = intval($input[$j-1]); - $input[$j-1] = $t; - $swap = true; - } - // Reentering the loop looking at the old character again - $next = $last; - } - $last = $next; - } - } - return $input; - } - - /** - * Do composition of a sequence of starter and non-starter - * @param array UCS4 Decomposed sequence - * @return array Ordered USC4 sequence - */ - protected function _combine($input) - { - $inp_len = count($input); - foreach (self::$NP['replacemaps'] as $np_src => $np_target) { - if ($np_target[0] != $input[0]) continue; - if (count($np_target) != $inp_len) continue; - $hit = false; - foreach ($input as $k2 => $v2) { - if ($v2 == $np_target[$k2]) { - $hit = true; - } else { - $hit = false; - break; - } - } - if ($hit) return $np_src; - } - return false; - } - - /** - * This converts an UTF-8 encoded string to its UCS-4 representation - * By talking about UCS-4 "strings" we mean arrays of 32bit integers representing - * each of the "chars". This is due to PHP not being able to handle strings with - * bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too. - * The following UTF-8 encodings are supported: - * bytes bits representation - * 1 7 0xxxxxxx - * 2 11 110xxxxx 10xxxxxx - * 3 16 1110xxxx 10xxxxxx 10xxxxxx - * 4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - * 5 26 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - * 6 31 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - * Each x represents a bit that can be used to store character data. - * The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000 - * @param string $input - * @return string - */ - protected function _utf8_to_ucs4($input) - { - $output = array(); - $out_len = 0; - $inp_len = self::byteLength($input); - $mode = 'next'; - $test = 'none'; - for ($k = 0; $k < $inp_len; ++$k) { - $v = ord($input{$k}); // Extract byte from input string - if ($v < 128) { // We found an ASCII char - put into stirng as is - $output[$out_len] = $v; - ++$out_len; - if ('add' == $mode) { - $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); - return false; - } - continue; - } - if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char - $start_byte = $v; - $mode = 'add'; - $test = 'range'; - if ($v >> 5 == 6) { // &110xxxxx 10xxxxx - $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left - $v = ($v - 192) << 6; - } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx - $next_byte = 1; - $v = ($v - 224) << 12; - } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - $next_byte = 2; - $v = ($v - 240) << 18; - } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - $next_byte = 3; - $v = ($v - 248) << 24; - } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - $next_byte = 4; - $v = ($v - 252) << 30; - } else { - $this->_error('This might be UTF-8, but I don\'t understand it at byte '.$k); - return false; - } - if ('add' == $mode) { - $output[$out_len] = (int) $v; - ++$out_len; - continue; - } - } - if ('add' == $mode) { - if (!$this->_allow_overlong && $test == 'range') { - $test = 'none'; - if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) { - $this->_error('Bogus UTF-8 character detected (out of legal range) at byte '.$k); - return false; - } - } - if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx - $v = ($v - 128) << ($next_byte * 6); - $output[($out_len - 1)] += $v; - --$next_byte; - } else { - $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); - return false; - } - if ($next_byte < 0) { - $mode = 'next'; - } - } - } // for - return $output; - } - - /** - * Convert UCS-4 string into UTF-8 string - * See _utf8_to_ucs4() for details - * @param string $input - * @return string - */ - protected function _ucs4_to_utf8($input) - { - $output = ''; - foreach ($input as $k => $v) { - if ($v < 128) { // 7bit are transferred literally - $output .= chr($v); - } elseif ($v < (1 << 11)) { // 2 bytes - $output .= chr(192+($v >> 6)).chr(128+($v & 63)); - } elseif ($v < (1 << 16)) { // 3 bytes - $output .= chr(224+($v >> 12)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63)); - } elseif ($v < (1 << 21)) { // 4 bytes - $output .= chr(240+($v >> 18)).chr(128+(($v >> 12) & 63)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63)); - } elseif (self::$safe_mode) { - $output .= self::$safe_char; - } else { - $this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte '.$k); - return false; - } - } - return $output; - } - - /** - * Convert UCS-4 array into UCS-4 string - * - * @param array $input - * @return string - */ - protected function _ucs4_to_ucs4_string($input) - { - $output = ''; - // Take array values and split output to 4 bytes per value - // The bit mask is 255, which reads &11111111 - foreach ($input as $v) { - $output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255); - } - return $output; - } - - /** - * Convert UCS-4 strin into UCS-4 garray - * - * @param string $input - * @return array - */ - protected function _ucs4_string_to_ucs4($input) - { - $output = array(); - $inp_len = self::byteLength($input); - // Input length must be dividable by 4 - if ($inp_len % 4) { - $this->_error('Input UCS4 string is broken'); - return false; - } - // Empty input - return empty output - if (!$inp_len) return $output; - for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) { - // Increment output position every 4 input bytes - if (!($i % 4)) { - $out_len++; - $output[$out_len] = 0; - } - $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) ); - } - return $output; - } - - /** - * Gets the length of a string in bytes even if mbstring function - * overloading is turned on - * - * @param string $string the string for which to get the length. - * @return integer the length of the string in bytes. - */ - protected static function byteLength($string) - { - if (self::$_mb_string_overload) { - return mb_strlen($string, '8bit'); - } - return strlen((binary) $string); - } - - /** - * Attempts to return a concrete IDNA instance. - * - * @param array $params Set of paramaters - * @return idna_convert - * @access public - */ - public function getInstance($params = array()) - { - return new idna_convert($params); - } - - /** - * Attempts to return a concrete IDNA instance for either php4 or php5, - * only creating a new instance if no IDNA instance with the same - * parameters currently exists. - * - * @param array $params Set of paramaters - * - * @return object idna_convert - * @access public - */ - public function singleton($params = array()) - { - static $instances; - if (!isset($instances)) { - $instances = array(); - } - $signature = serialize($params); - if (!isset($instances[$signature])) { - $instances[$signature] = idna_convert::getInstance($params); - } - return $instances[$signature]; - } - - /** - * Holds all relevant mapping tables - * See RFC3454 for details - * - * @private array - * @since 0.5.2 - */ - protected static $NP = array - ('map_nothing' => array(0xAD, 0x34F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B, 0x200C - ,0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05, 0xFE06, 0xFE07 - ,0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E, 0xFE0F, 0xFEFF - ) - ,'general_prohibited' => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 - ,20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 ,33, 34, 35, 36, 37, 38, 39, 40, 41, 42 - ,43, 44, 47, 59, 60, 61, 62, 63, 64, 91, 92, 93, 94, 95, 96, 123, 124, 125, 126, 127, 0x3002 - ) - ,'prohibit' => array(0xA0, 0x340, 0x341, 0x6DD, 0x70F, 0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003 - ,0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x200B, 0x200C, 0x200D, 0x200E, 0x200F - ,0x2028, 0x2029, 0x202A, 0x202B, 0x202C, 0x202D, 0x202E, 0x202F, 0x205F, 0x206A, 0x206B, 0x206C - ,0x206D, 0x206E, 0x206F, 0x3000, 0xFEFF, 0xFFF9, 0xFFFA, 0xFFFB, 0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF - ,0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, 0x6FFFE - ,0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, 0xBFFFF - ,0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xE0001, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF - ) - ,'prohibit_ranges' => array(array(0x80, 0x9F), array(0x2060, 0x206F), array(0x1D173, 0x1D17A) - ,array(0xE000, 0xF8FF) ,array(0xF0000, 0xFFFFD), array(0x100000, 0x10FFFD) - ,array(0xFDD0, 0xFDEF), array(0xD800, 0xDFFF), array(0x2FF0, 0x2FFB), array(0xE0020, 0xE007F) - ) - ,'replacemaps' => array(0x41 => array(0x61), 0x42 => array(0x62), 0x43 => array(0x63) - ,0x44 => array(0x64), 0x45 => array(0x65), 0x46 => array(0x66), 0x47 => array(0x67) - ,0x48 => array(0x68), 0x49 => array(0x69), 0x4A => array(0x6A), 0x4B => array(0x6B) - ,0x4C => array(0x6C), 0x4D => array(0x6D), 0x4E => array(0x6E), 0x4F => array(0x6F) - ,0x50 => array(0x70), 0x51 => array(0x71), 0x52 => array(0x72), 0x53 => array(0x73) - ,0x54 => array(0x74), 0x55 => array(0x75), 0x56 => array(0x76), 0x57 => array(0x77) - ,0x58 => array(0x78), 0x59 => array(0x79), 0x5A => array(0x7A), 0xB5 => array(0x3BC) - ,0xC0 => array(0xE0), 0xC1 => array(0xE1), 0xC2 => array(0xE2), 0xC3 => array(0xE3) - ,0xC4 => array(0xE4), 0xC5 => array(0xE5), 0xC6 => array(0xE6), 0xC7 => array(0xE7) - ,0xC8 => array(0xE8), 0xC9 => array(0xE9), 0xCA => array(0xEA), 0xCB => array(0xEB) - ,0xCC => array(0xEC), 0xCD => array(0xED), 0xCE => array(0xEE), 0xCF => array(0xEF) - ,0xD0 => array(0xF0), 0xD1 => array(0xF1), 0xD2 => array(0xF2), 0xD3 => array(0xF3) - ,0xD4 => array(0xF4), 0xD5 => array(0xF5), 0xD6 => array(0xF6), 0xD8 => array(0xF8) - ,0xD9 => array(0xF9), 0xDA => array(0xFA), 0xDB => array(0xFB), 0xDC => array(0xFC) - ,0xDD => array(0xFD), 0xDE => array(0xFE), 0xDF => array(0x73, 0x73) - ,0x100 => array(0x101), 0x102 => array(0x103), 0x104 => array(0x105) - ,0x106 => array(0x107), 0x108 => array(0x109), 0x10A => array(0x10B) - ,0x10C => array(0x10D), 0x10E => array(0x10F), 0x110 => array(0x111) - ,0x112 => array(0x113), 0x114 => array(0x115), 0x116 => array(0x117) - ,0x118 => array(0x119), 0x11A => array(0x11B), 0x11C => array(0x11D) - ,0x11E => array(0x11F), 0x120 => array(0x121), 0x122 => array(0x123) - ,0x124 => array(0x125), 0x126 => array(0x127), 0x128 => array(0x129) - ,0x12A => array(0x12B), 0x12C => array(0x12D), 0x12E => array(0x12F) - ,0x130 => array(0x69, 0x307), 0x132 => array(0x133), 0x134 => array(0x135) - ,0x136 => array(0x137), 0x139 => array(0x13A), 0x13B => array(0x13C) - ,0x13D => array(0x13E), 0x13F => array(0x140), 0x141 => array(0x142) - ,0x143 => array(0x144), 0x145 => array(0x146), 0x147 => array(0x148) - ,0x149 => array(0x2BC, 0x6E), 0x14A => array(0x14B), 0x14C => array(0x14D) - ,0x14E => array(0x14F), 0x150 => array(0x151), 0x152 => array(0x153) - ,0x154 => array(0x155), 0x156 => array(0x157), 0x158 => array(0x159) - ,0x15A => array(0x15B), 0x15C => array(0x15D), 0x15E => array(0x15F) - ,0x160 => array(0x161), 0x162 => array(0x163), 0x164 => array(0x165) - ,0x166 => array(0x167), 0x168 => array(0x169), 0x16A => array(0x16B) - ,0x16C => array(0x16D), 0x16E => array(0x16F), 0x170 => array(0x171) - ,0x172 => array(0x173), 0x174 => array(0x175), 0x176 => array(0x177) - ,0x178 => array(0xFF), 0x179 => array(0x17A), 0x17B => array(0x17C) - ,0x17D => array(0x17E), 0x17F => array(0x73), 0x181 => array(0x253) - ,0x182 => array(0x183), 0x184 => array(0x185), 0x186 => array(0x254) - ,0x187 => array(0x188), 0x189 => array(0x256), 0x18A => array(0x257) - ,0x18B => array(0x18C), 0x18E => array(0x1DD), 0x18F => array(0x259) - ,0x190 => array(0x25B), 0x191 => array(0x192), 0x193 => array(0x260) - ,0x194 => array(0x263), 0x196 => array(0x269), 0x197 => array(0x268) - ,0x198 => array(0x199), 0x19C => array(0x26F), 0x19D => array(0x272) - ,0x19F => array(0x275), 0x1A0 => array(0x1A1), 0x1A2 => array(0x1A3) - ,0x1A4 => array(0x1A5), 0x1A6 => array(0x280), 0x1A7 => array(0x1A8) - ,0x1A9 => array(0x283), 0x1AC => array(0x1AD), 0x1AE => array(0x288) - ,0x1AF => array(0x1B0), 0x1B1 => array(0x28A), 0x1B2 => array(0x28B) - ,0x1B3 => array(0x1B4), 0x1B5 => array(0x1B6), 0x1B7 => array(0x292) - ,0x1B8 => array(0x1B9), 0x1BC => array(0x1BD), 0x1C4 => array(0x1C6) - ,0x1C5 => array(0x1C6), 0x1C7 => array(0x1C9), 0x1C8 => array(0x1C9) - ,0x1CA => array(0x1CC), 0x1CB => array(0x1CC), 0x1CD => array(0x1CE) - ,0x1CF => array(0x1D0), 0x1D1 => array(0x1D2), 0x1D3 => array(0x1D4) - ,0x1D5 => array(0x1D6), 0x1D7 => array(0x1D8), 0x1D9 => array(0x1DA) - ,0x1DB => array(0x1DC), 0x1DE => array(0x1DF), 0x1E0 => array(0x1E1) - ,0x1E2 => array(0x1E3), 0x1E4 => array(0x1E5), 0x1E6 => array(0x1E7) - ,0x1E8 => array(0x1E9), 0x1EA => array(0x1EB), 0x1EC => array(0x1ED) - ,0x1EE => array(0x1EF), 0x1F0 => array(0x6A, 0x30C), 0x1F1 => array(0x1F3) - ,0x1F2 => array(0x1F3), 0x1F4 => array(0x1F5), 0x1F6 => array(0x195) - ,0x1F7 => array(0x1BF), 0x1F8 => array(0x1F9), 0x1FA => array(0x1FB) - ,0x1FC => array(0x1FD), 0x1FE => array(0x1FF), 0x200 => array(0x201) - ,0x202 => array(0x203), 0x204 => array(0x205), 0x206 => array(0x207) - ,0x208 => array(0x209), 0x20A => array(0x20B), 0x20C => array(0x20D) - ,0x20E => array(0x20F), 0x210 => array(0x211), 0x212 => array(0x213) - ,0x214 => array(0x215), 0x216 => array(0x217), 0x218 => array(0x219) - ,0x21A => array(0x21B), 0x21C => array(0x21D), 0x21E => array(0x21F) - ,0x220 => array(0x19E), 0x222 => array(0x223), 0x224 => array(0x225) - ,0x226 => array(0x227), 0x228 => array(0x229), 0x22A => array(0x22B) - ,0x22C => array(0x22D), 0x22E => array(0x22F), 0x230 => array(0x231) - ,0x232 => array(0x233), 0x345 => array(0x3B9), 0x37A => array(0x20, 0x3B9) - ,0x386 => array(0x3AC), 0x388 => array(0x3AD), 0x389 => array(0x3AE) - ,0x38A => array(0x3AF), 0x38C => array(0x3CC), 0x38E => array(0x3CD) - ,0x38F => array(0x3CE), 0x390 => array(0x3B9, 0x308, 0x301) - ,0x391 => array(0x3B1), 0x392 => array(0x3B2), 0x393 => array(0x3B3) - ,0x394 => array(0x3B4), 0x395 => array(0x3B5), 0x396 => array(0x3B6) - ,0x397 => array(0x3B7), 0x398 => array(0x3B8), 0x399 => array(0x3B9) - ,0x39A => array(0x3BA), 0x39B => array(0x3BB), 0x39C => array(0x3BC) - ,0x39D => array(0x3BD), 0x39E => array(0x3BE), 0x39F => array(0x3BF) - ,0x3A0 => array(0x3C0), 0x3A1 => array(0x3C1), 0x3A3 => array(0x3C3) - ,0x3A4 => array(0x3C4), 0x3A5 => array(0x3C5), 0x3A6 => array(0x3C6) - ,0x3A7 => array(0x3C7), 0x3A8 => array(0x3C8), 0x3A9 => array(0x3C9) - ,0x3AA => array(0x3CA), 0x3AB => array(0x3CB), 0x3B0 => array(0x3C5, 0x308, 0x301) - ,0x3C2 => array(0x3C3), 0x3D0 => array(0x3B2), 0x3D1 => array(0x3B8) - ,0x3D2 => array(0x3C5), 0x3D3 => array(0x3CD), 0x3D4 => array(0x3CB) - ,0x3D5 => array(0x3C6), 0x3D6 => array(0x3C0), 0x3D8 => array(0x3D9) - ,0x3DA => array(0x3DB), 0x3DC => array(0x3DD), 0x3DE => array(0x3DF) - ,0x3E0 => array(0x3E1), 0x3E2 => array(0x3E3), 0x3E4 => array(0x3E5) - ,0x3E6 => array(0x3E7), 0x3E8 => array(0x3E9), 0x3EA => array(0x3EB) - ,0x3EC => array(0x3ED), 0x3EE => array(0x3EF), 0x3F0 => array(0x3BA) - ,0x3F1 => array(0x3C1), 0x3F2 => array(0x3C3), 0x3F4 => array(0x3B8) - ,0x3F5 => array(0x3B5), 0x400 => array(0x450), 0x401 => array(0x451) - ,0x402 => array(0x452), 0x403 => array(0x453), 0x404 => array(0x454) - ,0x405 => array(0x455), 0x406 => array(0x456), 0x407 => array(0x457) - ,0x408 => array(0x458), 0x409 => array(0x459), 0x40A => array(0x45A) - ,0x40B => array(0x45B), 0x40C => array(0x45C), 0x40D => array(0x45D) - ,0x40E => array(0x45E), 0x40F => array(0x45F), 0x410 => array(0x430) - ,0x411 => array(0x431), 0x412 => array(0x432), 0x413 => array(0x433) - ,0x414 => array(0x434), 0x415 => array(0x435), 0x416 => array(0x436) - ,0x417 => array(0x437), 0x418 => array(0x438), 0x419 => array(0x439) - ,0x41A => array(0x43A), 0x41B => array(0x43B), 0x41C => array(0x43C) - ,0x41D => array(0x43D), 0x41E => array(0x43E), 0x41F => array(0x43F) - ,0x420 => array(0x440), 0x421 => array(0x441), 0x422 => array(0x442) - ,0x423 => array(0x443), 0x424 => array(0x444), 0x425 => array(0x445) - ,0x426 => array(0x446), 0x427 => array(0x447), 0x428 => array(0x448) - ,0x429 => array(0x449), 0x42A => array(0x44A), 0x42B => array(0x44B) - ,0x42C => array(0x44C), 0x42D => array(0x44D), 0x42E => array(0x44E) - ,0x42F => array(0x44F), 0x460 => array(0x461), 0x462 => array(0x463) - ,0x464 => array(0x465), 0x466 => array(0x467), 0x468 => array(0x469) - ,0x46A => array(0x46B), 0x46C => array(0x46D), 0x46E => array(0x46F) - ,0x470 => array(0x471), 0x472 => array(0x473), 0x474 => array(0x475) - ,0x476 => array(0x477), 0x478 => array(0x479), 0x47A => array(0x47B) - ,0x47C => array(0x47D), 0x47E => array(0x47F), 0x480 => array(0x481) - ,0x48A => array(0x48B), 0x48C => array(0x48D), 0x48E => array(0x48F) - ,0x490 => array(0x491), 0x492 => array(0x493), 0x494 => array(0x495) - ,0x496 => array(0x497), 0x498 => array(0x499), 0x49A => array(0x49B) - ,0x49C => array(0x49D), 0x49E => array(0x49F), 0x4A0 => array(0x4A1) - ,0x4A2 => array(0x4A3), 0x4A4 => array(0x4A5), 0x4A6 => array(0x4A7) - ,0x4A8 => array(0x4A9), 0x4AA => array(0x4AB), 0x4AC => array(0x4AD) - ,0x4AE => array(0x4AF), 0x4B0 => array(0x4B1), 0x4B2 => array(0x4B3) - ,0x4B4 => array(0x4B5), 0x4B6 => array(0x4B7), 0x4B8 => array(0x4B9) - ,0x4BA => array(0x4BB), 0x4BC => array(0x4BD), 0x4BE => array(0x4BF) - ,0x4C1 => array(0x4C2), 0x4C3 => array(0x4C4), 0x4C5 => array(0x4C6) - ,0x4C7 => array(0x4C8), 0x4C9 => array(0x4CA), 0x4CB => array(0x4CC) - ,0x4CD => array(0x4CE), 0x4D0 => array(0x4D1), 0x4D2 => array(0x4D3) - ,0x4D4 => array(0x4D5), 0x4D6 => array(0x4D7), 0x4D8 => array(0x4D9) - ,0x4DA => array(0x4DB), 0x4DC => array(0x4DD), 0x4DE => array(0x4DF) - ,0x4E0 => array(0x4E1), 0x4E2 => array(0x4E3), 0x4E4 => array(0x4E5) - ,0x4E6 => array(0x4E7), 0x4E8 => array(0x4E9), 0x4EA => array(0x4EB) - ,0x4EC => array(0x4ED), 0x4EE => array(0x4EF), 0x4F0 => array(0x4F1) - ,0x4F2 => array(0x4F3), 0x4F4 => array(0x4F5), 0x4F8 => array(0x4F9) - ,0x500 => array(0x501), 0x502 => array(0x503), 0x504 => array(0x505) - ,0x506 => array(0x507), 0x508 => array(0x509), 0x50A => array(0x50B) - ,0x50C => array(0x50D), 0x50E => array(0x50F), 0x531 => array(0x561) - ,0x532 => array(0x562), 0x533 => array(0x563), 0x534 => array(0x564) - ,0x535 => array(0x565), 0x536 => array(0x566), 0x537 => array(0x567) - ,0x538 => array(0x568), 0x539 => array(0x569), 0x53A => array(0x56A) - ,0x53B => array(0x56B), 0x53C => array(0x56C), 0x53D => array(0x56D) - ,0x53E => array(0x56E), 0x53F => array(0x56F), 0x540 => array(0x570) - ,0x541 => array(0x571), 0x542 => array(0x572), 0x543 => array(0x573) - ,0x544 => array(0x574), 0x545 => array(0x575), 0x546 => array(0x576) - ,0x547 => array(0x577), 0x548 => array(0x578), 0x549 => array(0x579) - ,0x54A => array(0x57A), 0x54B => array(0x57B), 0x54C => array(0x57C) - ,0x54D => array(0x57D), 0x54E => array(0x57E), 0x54F => array(0x57F) - ,0x550 => array(0x580), 0x551 => array(0x581), 0x552 => array(0x582) - ,0x553 => array(0x583), 0x554 => array(0x584), 0x555 => array(0x585) - ,0x556 => array(0x586), 0x587 => array(0x565, 0x582), 0xE33 => array(0xE4D, 0xE32) - ,0x1E00 => array(0x1E01), 0x1E02 => array(0x1E03), 0x1E04 => array(0x1E05) - ,0x1E06 => array(0x1E07), 0x1E08 => array(0x1E09), 0x1E0A => array(0x1E0B) - ,0x1E0C => array(0x1E0D), 0x1E0E => array(0x1E0F), 0x1E10 => array(0x1E11) - ,0x1E12 => array(0x1E13), 0x1E14 => array(0x1E15), 0x1E16 => array(0x1E17) - ,0x1E18 => array(0x1E19), 0x1E1A => array(0x1E1B), 0x1E1C => array(0x1E1D) - ,0x1E1E => array(0x1E1F), 0x1E20 => array(0x1E21), 0x1E22 => array(0x1E23) - ,0x1E24 => array(0x1E25), 0x1E26 => array(0x1E27), 0x1E28 => array(0x1E29) - ,0x1E2A => array(0x1E2B), 0x1E2C => array(0x1E2D), 0x1E2E => array(0x1E2F) - ,0x1E30 => array(0x1E31), 0x1E32 => array(0x1E33), 0x1E34 => array(0x1E35) - ,0x1E36 => array(0x1E37), 0x1E38 => array(0x1E39), 0x1E3A => array(0x1E3B) - ,0x1E3C => array(0x1E3D), 0x1E3E => array(0x1E3F), 0x1E40 => array(0x1E41) - ,0x1E42 => array(0x1E43), 0x1E44 => array(0x1E45), 0x1E46 => array(0x1E47) - ,0x1E48 => array(0x1E49), 0x1E4A => array(0x1E4B), 0x1E4C => array(0x1E4D) - ,0x1E4E => array(0x1E4F), 0x1E50 => array(0x1E51), 0x1E52 => array(0x1E53) - ,0x1E54 => array(0x1E55), 0x1E56 => array(0x1E57), 0x1E58 => array(0x1E59) - ,0x1E5A => array(0x1E5B), 0x1E5C => array(0x1E5D), 0x1E5E => array(0x1E5F) - ,0x1E60 => array(0x1E61), 0x1E62 => array(0x1E63), 0x1E64 => array(0x1E65) - ,0x1E66 => array(0x1E67), 0x1E68 => array(0x1E69), 0x1E6A => array(0x1E6B) - ,0x1E6C => array(0x1E6D), 0x1E6E => array(0x1E6F), 0x1E70 => array(0x1E71) - ,0x1E72 => array(0x1E73), 0x1E74 => array(0x1E75), 0x1E76 => array(0x1E77) - ,0x1E78 => array(0x1E79), 0x1E7A => array(0x1E7B), 0x1E7C => array(0x1E7D) - ,0x1E7E => array(0x1E7F), 0x1E80 => array(0x1E81), 0x1E82 => array(0x1E83) - ,0x1E84 => array(0x1E85), 0x1E86 => array(0x1E87), 0x1E88 => array(0x1E89) - ,0x1E8A => array(0x1E8B), 0x1E8C => array(0x1E8D), 0x1E8E => array(0x1E8F) - ,0x1E90 => array(0x1E91), 0x1E92 => array(0x1E93), 0x1E94 => array(0x1E95) - ,0x1E96 => array(0x68, 0x331), 0x1E97 => array(0x74, 0x308), 0x1E98 => array(0x77, 0x30A) - ,0x1E99 => array(0x79, 0x30A), 0x1E9A => array(0x61, 0x2BE), 0x1E9B => array(0x1E61) - ,0x1EA0 => array(0x1EA1), 0x1EA2 => array(0x1EA3), 0x1EA4 => array(0x1EA5) - ,0x1EA6 => array(0x1EA7), 0x1EA8 => array(0x1EA9), 0x1EAA => array(0x1EAB) - ,0x1EAC => array(0x1EAD), 0x1EAE => array(0x1EAF), 0x1EB0 => array(0x1EB1) - ,0x1EB2 => array(0x1EB3), 0x1EB4 => array(0x1EB5), 0x1EB6 => array(0x1EB7) - ,0x1EB8 => array(0x1EB9), 0x1EBA => array(0x1EBB), 0x1EBC => array(0x1EBD) - ,0x1EBE => array(0x1EBF), 0x1EC0 => array(0x1EC1), 0x1EC2 => array(0x1EC3) - ,0x1EC4 => array(0x1EC5), 0x1EC6 => array(0x1EC7), 0x1EC8 => array(0x1EC9) - ,0x1ECA => array(0x1ECB), 0x1ECC => array(0x1ECD), 0x1ECE => array(0x1ECF) - ,0x1ED0 => array(0x1ED1), 0x1ED2 => array(0x1ED3), 0x1ED4 => array(0x1ED5) - ,0x1ED6 => array(0x1ED7), 0x1ED8 => array(0x1ED9), 0x1EDA => array(0x1EDB) - ,0x1EDC => array(0x1EDD), 0x1EDE => array(0x1EDF), 0x1EE0 => array(0x1EE1) - ,0x1EE2 => array(0x1EE3), 0x1EE4 => array(0x1EE5), 0x1EE6 => array(0x1EE7) - ,0x1EE8 => array(0x1EE9), 0x1EEA => array(0x1EEB), 0x1EEC => array(0x1EED) - ,0x1EEE => array(0x1EEF), 0x1EF0 => array(0x1EF1), 0x1EF2 => array(0x1EF3) - ,0x1EF4 => array(0x1EF5), 0x1EF6 => array(0x1EF7), 0x1EF8 => array(0x1EF9) - ,0x1F08 => array(0x1F00), 0x1F09 => array(0x1F01), 0x1F0A => array(0x1F02) - ,0x1F0B => array(0x1F03), 0x1F0C => array(0x1F04), 0x1F0D => array(0x1F05) - ,0x1F0E => array(0x1F06), 0x1F0F => array(0x1F07), 0x1F18 => array(0x1F10) - ,0x1F19 => array(0x1F11), 0x1F1A => array(0x1F12), 0x1F1B => array(0x1F13) - ,0x1F1C => array(0x1F14), 0x1F1D => array(0x1F15), 0x1F28 => array(0x1F20) - ,0x1F29 => array(0x1F21), 0x1F2A => array(0x1F22), 0x1F2B => array(0x1F23) - ,0x1F2C => array(0x1F24), 0x1F2D => array(0x1F25), 0x1F2E => array(0x1F26) - ,0x1F2F => array(0x1F27), 0x1F38 => array(0x1F30), 0x1F39 => array(0x1F31) - ,0x1F3A => array(0x1F32), 0x1F3B => array(0x1F33), 0x1F3C => array(0x1F34) - ,0x1F3D => array(0x1F35), 0x1F3E => array(0x1F36), 0x1F3F => array(0x1F37) - ,0x1F48 => array(0x1F40), 0x1F49 => array(0x1F41), 0x1F4A => array(0x1F42) - ,0x1F4B => array(0x1F43), 0x1F4C => array(0x1F44), 0x1F4D => array(0x1F45) - ,0x1F50 => array(0x3C5, 0x313), 0x1F52 => array(0x3C5, 0x313, 0x300) - ,0x1F54 => array(0x3C5, 0x313, 0x301), 0x1F56 => array(0x3C5, 0x313, 0x342) - ,0x1F59 => array(0x1F51), 0x1F5B => array(0x1F53), 0x1F5D => array(0x1F55) - ,0x1F5F => array(0x1F57), 0x1F68 => array(0x1F60), 0x1F69 => array(0x1F61) - ,0x1F6A => array(0x1F62), 0x1F6B => array(0x1F63), 0x1F6C => array(0x1F64) - ,0x1F6D => array(0x1F65), 0x1F6E => array(0x1F66), 0x1F6F => array(0x1F67) - ,0x1F80 => array(0x1F00, 0x3B9), 0x1F81 => array(0x1F01, 0x3B9) - ,0x1F82 => array(0x1F02, 0x3B9), 0x1F83 => array(0x1F03, 0x3B9) - ,0x1F84 => array(0x1F04, 0x3B9), 0x1F85 => array(0x1F05, 0x3B9) - ,0x1F86 => array(0x1F06, 0x3B9), 0x1F87 => array(0x1F07, 0x3B9) - ,0x1F88 => array(0x1F00, 0x3B9), 0x1F89 => array(0x1F01, 0x3B9) - ,0x1F8A => array(0x1F02, 0x3B9), 0x1F8B => array(0x1F03, 0x3B9) - ,0x1F8C => array(0x1F04, 0x3B9), 0x1F8D => array(0x1F05, 0x3B9) - ,0x1F8E => array(0x1F06, 0x3B9), 0x1F8F => array(0x1F07, 0x3B9) - ,0x1F90 => array(0x1F20, 0x3B9), 0x1F91 => array(0x1F21, 0x3B9) - ,0x1F92 => array(0x1F22, 0x3B9), 0x1F93 => array(0x1F23, 0x3B9) - ,0x1F94 => array(0x1F24, 0x3B9), 0x1F95 => array(0x1F25, 0x3B9) - ,0x1F96 => array(0x1F26, 0x3B9), 0x1F97 => array(0x1F27, 0x3B9) - ,0x1F98 => array(0x1F20, 0x3B9), 0x1F99 => array(0x1F21, 0x3B9) - ,0x1F9A => array(0x1F22, 0x3B9), 0x1F9B => array(0x1F23, 0x3B9) - ,0x1F9C => array(0x1F24, 0x3B9), 0x1F9D => array(0x1F25, 0x3B9) - ,0x1F9E => array(0x1F26, 0x3B9), 0x1F9F => array(0x1F27, 0x3B9) - ,0x1FA0 => array(0x1F60, 0x3B9), 0x1FA1 => array(0x1F61, 0x3B9) - ,0x1FA2 => array(0x1F62, 0x3B9), 0x1FA3 => array(0x1F63, 0x3B9) - ,0x1FA4 => array(0x1F64, 0x3B9), 0x1FA5 => array(0x1F65, 0x3B9) - ,0x1FA6 => array(0x1F66, 0x3B9), 0x1FA7 => array(0x1F67, 0x3B9) - ,0x1FA8 => array(0x1F60, 0x3B9), 0x1FA9 => array(0x1F61, 0x3B9) - ,0x1FAA => array(0x1F62, 0x3B9), 0x1FAB => array(0x1F63, 0x3B9) - ,0x1FAC => array(0x1F64, 0x3B9), 0x1FAD => array(0x1F65, 0x3B9) - ,0x1FAE => array(0x1F66, 0x3B9), 0x1FAF => array(0x1F67, 0x3B9) - ,0x1FB2 => array(0x1F70, 0x3B9), 0x1FB3 => array(0x3B1, 0x3B9) - ,0x1FB4 => array(0x3AC, 0x3B9), 0x1FB6 => array(0x3B1, 0x342) - ,0x1FB7 => array(0x3B1, 0x342, 0x3B9), 0x1FB8 => array(0x1FB0) - ,0x1FB9 => array(0x1FB1), 0x1FBA => array(0x1F70), 0x1FBB => array(0x1F71) - ,0x1FBC => array(0x3B1, 0x3B9), 0x1FBE => array(0x3B9) - ,0x1FC2 => array(0x1F74, 0x3B9), 0x1FC3 => array(0x3B7, 0x3B9) - ,0x1FC4 => array(0x3AE, 0x3B9), 0x1FC6 => array(0x3B7, 0x342) - ,0x1FC7 => array(0x3B7, 0x342, 0x3B9), 0x1FC8 => array(0x1F72) - ,0x1FC9 => array(0x1F73), 0x1FCA => array(0x1F74), 0x1FCB => array(0x1F75) - ,0x1FCC => array(0x3B7, 0x3B9), 0x1FD2 => array(0x3B9, 0x308, 0x300) - ,0x1FD3 => array(0x3B9, 0x308, 0x301), 0x1FD6 => array(0x3B9, 0x342) - ,0x1FD7 => array(0x3B9, 0x308, 0x342), 0x1FD8 => array(0x1FD0) - ,0x1FD9 => array(0x1FD1), 0x1FDA => array(0x1F76) - ,0x1FDB => array(0x1F77), 0x1FE2 => array(0x3C5, 0x308, 0x300) - ,0x1FE3 => array(0x3C5, 0x308, 0x301), 0x1FE4 => array(0x3C1, 0x313) - ,0x1FE6 => array(0x3C5, 0x342), 0x1FE7 => array(0x3C5, 0x308, 0x342) - ,0x1FE8 => array(0x1FE0), 0x1FE9 => array(0x1FE1) - ,0x1FEA => array(0x1F7A), 0x1FEB => array(0x1F7B) - ,0x1FEC => array(0x1FE5), 0x1FF2 => array(0x1F7C, 0x3B9) - ,0x1FF3 => array(0x3C9, 0x3B9), 0x1FF4 => array(0x3CE, 0x3B9) - ,0x1FF6 => array(0x3C9, 0x342), 0x1FF7 => array(0x3C9, 0x342, 0x3B9) - ,0x1FF8 => array(0x1F78), 0x1FF9 => array(0x1F79), 0x1FFA => array(0x1F7C) - ,0x1FFB => array(0x1F7D), 0x1FFC => array(0x3C9, 0x3B9) - ,0x20A8 => array(0x72, 0x73), 0x2102 => array(0x63), 0x2103 => array(0xB0, 0x63) - ,0x2107 => array(0x25B), 0x2109 => array(0xB0, 0x66), 0x210B => array(0x68) - ,0x210C => array(0x68), 0x210D => array(0x68), 0x2110 => array(0x69) - ,0x2111 => array(0x69), 0x2112 => array(0x6C), 0x2115 => array(0x6E) - ,0x2116 => array(0x6E, 0x6F), 0x2119 => array(0x70), 0x211A => array(0x71) - ,0x211B => array(0x72), 0x211C => array(0x72), 0x211D => array(0x72) - ,0x2120 => array(0x73, 0x6D), 0x2121 => array(0x74, 0x65, 0x6C) - ,0x2122 => array(0x74, 0x6D), 0x2124 => array(0x7A), 0x2126 => array(0x3C9) - ,0x2128 => array(0x7A), 0x212A => array(0x6B), 0x212B => array(0xE5) - ,0x212C => array(0x62), 0x212D => array(0x63), 0x2130 => array(0x65) - ,0x2131 => array(0x66), 0x2133 => array(0x6D), 0x213E => array(0x3B3) - ,0x213F => array(0x3C0), 0x2145 => array(0x64) ,0x2160 => array(0x2170) - ,0x2161 => array(0x2171), 0x2162 => array(0x2172), 0x2163 => array(0x2173) - ,0x2164 => array(0x2174), 0x2165 => array(0x2175), 0x2166 => array(0x2176) - ,0x2167 => array(0x2177), 0x2168 => array(0x2178), 0x2169 => array(0x2179) - ,0x216A => array(0x217A), 0x216B => array(0x217B), 0x216C => array(0x217C) - ,0x216D => array(0x217D), 0x216E => array(0x217E), 0x216F => array(0x217F) - ,0x24B6 => array(0x24D0), 0x24B7 => array(0x24D1), 0x24B8 => array(0x24D2) - ,0x24B9 => array(0x24D3), 0x24BA => array(0x24D4), 0x24BB => array(0x24D5) - ,0x24BC => array(0x24D6), 0x24BD => array(0x24D7), 0x24BE => array(0x24D8) - ,0x24BF => array(0x24D9), 0x24C0 => array(0x24DA), 0x24C1 => array(0x24DB) - ,0x24C2 => array(0x24DC), 0x24C3 => array(0x24DD), 0x24C4 => array(0x24DE) - ,0x24C5 => array(0x24DF), 0x24C6 => array(0x24E0), 0x24C7 => array(0x24E1) - ,0x24C8 => array(0x24E2), 0x24C9 => array(0x24E3), 0x24CA => array(0x24E4) - ,0x24CB => array(0x24E5), 0x24CC => array(0x24E6), 0x24CD => array(0x24E7) - ,0x24CE => array(0x24E8), 0x24CF => array(0x24E9), 0x3371 => array(0x68, 0x70, 0x61) - ,0x3373 => array(0x61, 0x75), 0x3375 => array(0x6F, 0x76) - ,0x3380 => array(0x70, 0x61), 0x3381 => array(0x6E, 0x61) - ,0x3382 => array(0x3BC, 0x61), 0x3383 => array(0x6D, 0x61) - ,0x3384 => array(0x6B, 0x61), 0x3385 => array(0x6B, 0x62) - ,0x3386 => array(0x6D, 0x62), 0x3387 => array(0x67, 0x62) - ,0x338A => array(0x70, 0x66), 0x338B => array(0x6E, 0x66) - ,0x338C => array(0x3BC, 0x66), 0x3390 => array(0x68, 0x7A) - ,0x3391 => array(0x6B, 0x68, 0x7A), 0x3392 => array(0x6D, 0x68, 0x7A) - ,0x3393 => array(0x67, 0x68, 0x7A), 0x3394 => array(0x74, 0x68, 0x7A) - ,0x33A9 => array(0x70, 0x61), 0x33AA => array(0x6B, 0x70, 0x61) - ,0x33AB => array(0x6D, 0x70, 0x61), 0x33AC => array(0x67, 0x70, 0x61) - ,0x33B4 => array(0x70, 0x76), 0x33B5 => array(0x6E, 0x76) - ,0x33B6 => array(0x3BC, 0x76), 0x33B7 => array(0x6D, 0x76) - ,0x33B8 => array(0x6B, 0x76), 0x33B9 => array(0x6D, 0x76) - ,0x33BA => array(0x70, 0x77), 0x33BB => array(0x6E, 0x77) - ,0x33BC => array(0x3BC, 0x77), 0x33BD => array(0x6D, 0x77) - ,0x33BE => array(0x6B, 0x77), 0x33BF => array(0x6D, 0x77) - ,0x33C0 => array(0x6B, 0x3C9), 0x33C1 => array(0x6D, 0x3C9) /* - ,0x33C2 => array(0x61, 0x2E, 0x6D, 0x2E) */ - ,0x33C3 => array(0x62, 0x71), 0x33C6 => array(0x63, 0x2215, 0x6B, 0x67) - ,0x33C7 => array(0x63, 0x6F, 0x2E), 0x33C8 => array(0x64, 0x62) - ,0x33C9 => array(0x67, 0x79), 0x33CB => array(0x68, 0x70) - ,0x33CD => array(0x6B, 0x6B), 0x33CE => array(0x6B, 0x6D) - ,0x33D7 => array(0x70, 0x68), 0x33D9 => array(0x70, 0x70, 0x6D) - ,0x33DA => array(0x70, 0x72), 0x33DC => array(0x73, 0x76) - ,0x33DD => array(0x77, 0x62), 0xFB00 => array(0x66, 0x66) - ,0xFB01 => array(0x66, 0x69), 0xFB02 => array(0x66, 0x6C) - ,0xFB03 => array(0x66, 0x66, 0x69), 0xFB04 => array(0x66, 0x66, 0x6C) - ,0xFB05 => array(0x73, 0x74), 0xFB06 => array(0x73, 0x74) - ,0xFB13 => array(0x574, 0x576), 0xFB14 => array(0x574, 0x565) - ,0xFB15 => array(0x574, 0x56B), 0xFB16 => array(0x57E, 0x576) - ,0xFB17 => array(0x574, 0x56D), 0xFF21 => array(0xFF41) - ,0xFF22 => array(0xFF42), 0xFF23 => array(0xFF43), 0xFF24 => array(0xFF44) - ,0xFF25 => array(0xFF45), 0xFF26 => array(0xFF46), 0xFF27 => array(0xFF47) - ,0xFF28 => array(0xFF48), 0xFF29 => array(0xFF49), 0xFF2A => array(0xFF4A) - ,0xFF2B => array(0xFF4B), 0xFF2C => array(0xFF4C), 0xFF2D => array(0xFF4D) - ,0xFF2E => array(0xFF4E), 0xFF2F => array(0xFF4F), 0xFF30 => array(0xFF50) - ,0xFF31 => array(0xFF51), 0xFF32 => array(0xFF52), 0xFF33 => array(0xFF53) - ,0xFF34 => array(0xFF54), 0xFF35 => array(0xFF55), 0xFF36 => array(0xFF56) - ,0xFF37 => array(0xFF57), 0xFF38 => array(0xFF58), 0xFF39 => array(0xFF59) - ,0xFF3A => array(0xFF5A), 0x10400 => array(0x10428), 0x10401 => array(0x10429) - ,0x10402 => array(0x1042A), 0x10403 => array(0x1042B), 0x10404 => array(0x1042C) - ,0x10405 => array(0x1042D), 0x10406 => array(0x1042E), 0x10407 => array(0x1042F) - ,0x10408 => array(0x10430), 0x10409 => array(0x10431), 0x1040A => array(0x10432) - ,0x1040B => array(0x10433), 0x1040C => array(0x10434), 0x1040D => array(0x10435) - ,0x1040E => array(0x10436), 0x1040F => array(0x10437), 0x10410 => array(0x10438) - ,0x10411 => array(0x10439), 0x10412 => array(0x1043A), 0x10413 => array(0x1043B) - ,0x10414 => array(0x1043C), 0x10415 => array(0x1043D), 0x10416 => array(0x1043E) - ,0x10417 => array(0x1043F), 0x10418 => array(0x10440), 0x10419 => array(0x10441) - ,0x1041A => array(0x10442), 0x1041B => array(0x10443), 0x1041C => array(0x10444) - ,0x1041D => array(0x10445), 0x1041E => array(0x10446), 0x1041F => array(0x10447) - ,0x10420 => array(0x10448), 0x10421 => array(0x10449), 0x10422 => array(0x1044A) - ,0x10423 => array(0x1044B), 0x10424 => array(0x1044C), 0x10425 => array(0x1044D) - ,0x1D400 => array(0x61), 0x1D401 => array(0x62), 0x1D402 => array(0x63) - ,0x1D403 => array(0x64), 0x1D404 => array(0x65), 0x1D405 => array(0x66) - ,0x1D406 => array(0x67), 0x1D407 => array(0x68), 0x1D408 => array(0x69) - ,0x1D409 => array(0x6A), 0x1D40A => array(0x6B), 0x1D40B => array(0x6C) - ,0x1D40C => array(0x6D), 0x1D40D => array(0x6E), 0x1D40E => array(0x6F) - ,0x1D40F => array(0x70), 0x1D410 => array(0x71), 0x1D411 => array(0x72) - ,0x1D412 => array(0x73), 0x1D413 => array(0x74), 0x1D414 => array(0x75) - ,0x1D415 => array(0x76), 0x1D416 => array(0x77), 0x1D417 => array(0x78) - ,0x1D418 => array(0x79), 0x1D419 => array(0x7A), 0x1D434 => array(0x61) - ,0x1D435 => array(0x62), 0x1D436 => array(0x63), 0x1D437 => array(0x64) - ,0x1D438 => array(0x65), 0x1D439 => array(0x66), 0x1D43A => array(0x67) - ,0x1D43B => array(0x68), 0x1D43C => array(0x69), 0x1D43D => array(0x6A) - ,0x1D43E => array(0x6B), 0x1D43F => array(0x6C), 0x1D440 => array(0x6D) - ,0x1D441 => array(0x6E), 0x1D442 => array(0x6F), 0x1D443 => array(0x70) - ,0x1D444 => array(0x71), 0x1D445 => array(0x72), 0x1D446 => array(0x73) - ,0x1D447 => array(0x74), 0x1D448 => array(0x75), 0x1D449 => array(0x76) - ,0x1D44A => array(0x77), 0x1D44B => array(0x78), 0x1D44C => array(0x79) - ,0x1D44D => array(0x7A), 0x1D468 => array(0x61), 0x1D469 => array(0x62) - ,0x1D46A => array(0x63), 0x1D46B => array(0x64), 0x1D46C => array(0x65) - ,0x1D46D => array(0x66), 0x1D46E => array(0x67), 0x1D46F => array(0x68) - ,0x1D470 => array(0x69), 0x1D471 => array(0x6A), 0x1D472 => array(0x6B) - ,0x1D473 => array(0x6C), 0x1D474 => array(0x6D), 0x1D475 => array(0x6E) - ,0x1D476 => array(0x6F), 0x1D477 => array(0x70), 0x1D478 => array(0x71) - ,0x1D479 => array(0x72), 0x1D47A => array(0x73), 0x1D47B => array(0x74) - ,0x1D47C => array(0x75), 0x1D47D => array(0x76), 0x1D47E => array(0x77) - ,0x1D47F => array(0x78), 0x1D480 => array(0x79), 0x1D481 => array(0x7A) - ,0x1D49C => array(0x61), 0x1D49E => array(0x63), 0x1D49F => array(0x64) - ,0x1D4A2 => array(0x67), 0x1D4A5 => array(0x6A), 0x1D4A6 => array(0x6B) - ,0x1D4A9 => array(0x6E), 0x1D4AA => array(0x6F), 0x1D4AB => array(0x70) - ,0x1D4AC => array(0x71), 0x1D4AE => array(0x73), 0x1D4AF => array(0x74) - ,0x1D4B0 => array(0x75), 0x1D4B1 => array(0x76), 0x1D4B2 => array(0x77) - ,0x1D4B3 => array(0x78), 0x1D4B4 => array(0x79), 0x1D4B5 => array(0x7A) - ,0x1D4D0 => array(0x61), 0x1D4D1 => array(0x62), 0x1D4D2 => array(0x63) - ,0x1D4D3 => array(0x64), 0x1D4D4 => array(0x65), 0x1D4D5 => array(0x66) - ,0x1D4D6 => array(0x67), 0x1D4D7 => array(0x68), 0x1D4D8 => array(0x69) - ,0x1D4D9 => array(0x6A), 0x1D4DA => array(0x6B), 0x1D4DB => array(0x6C) - ,0x1D4DC => array(0x6D), 0x1D4DD => array(0x6E), 0x1D4DE => array(0x6F) - ,0x1D4DF => array(0x70), 0x1D4E0 => array(0x71), 0x1D4E1 => array(0x72) - ,0x1D4E2 => array(0x73), 0x1D4E3 => array(0x74), 0x1D4E4 => array(0x75) - ,0x1D4E5 => array(0x76), 0x1D4E6 => array(0x77), 0x1D4E7 => array(0x78) - ,0x1D4E8 => array(0x79), 0x1D4E9 => array(0x7A), 0x1D504 => array(0x61) - ,0x1D505 => array(0x62), 0x1D507 => array(0x64), 0x1D508 => array(0x65) - ,0x1D509 => array(0x66), 0x1D50A => array(0x67), 0x1D50D => array(0x6A) - ,0x1D50E => array(0x6B), 0x1D50F => array(0x6C), 0x1D510 => array(0x6D) - ,0x1D511 => array(0x6E), 0x1D512 => array(0x6F), 0x1D513 => array(0x70) - ,0x1D514 => array(0x71), 0x1D516 => array(0x73), 0x1D517 => array(0x74) - ,0x1D518 => array(0x75), 0x1D519 => array(0x76), 0x1D51A => array(0x77) - ,0x1D51B => array(0x78), 0x1D51C => array(0x79), 0x1D538 => array(0x61) - ,0x1D539 => array(0x62), 0x1D53B => array(0x64), 0x1D53C => array(0x65) - ,0x1D53D => array(0x66), 0x1D53E => array(0x67), 0x1D540 => array(0x69) - ,0x1D541 => array(0x6A), 0x1D542 => array(0x6B), 0x1D543 => array(0x6C) - ,0x1D544 => array(0x6D), 0x1D546 => array(0x6F), 0x1D54A => array(0x73) - ,0x1D54B => array(0x74), 0x1D54C => array(0x75), 0x1D54D => array(0x76) - ,0x1D54E => array(0x77), 0x1D54F => array(0x78), 0x1D550 => array(0x79) - ,0x1D56C => array(0x61), 0x1D56D => array(0x62), 0x1D56E => array(0x63) - ,0x1D56F => array(0x64), 0x1D570 => array(0x65), 0x1D571 => array(0x66) - ,0x1D572 => array(0x67), 0x1D573 => array(0x68), 0x1D574 => array(0x69) - ,0x1D575 => array(0x6A), 0x1D576 => array(0x6B), 0x1D577 => array(0x6C) - ,0x1D578 => array(0x6D), 0x1D579 => array(0x6E), 0x1D57A => array(0x6F) - ,0x1D57B => array(0x70), 0x1D57C => array(0x71), 0x1D57D => array(0x72) - ,0x1D57E => array(0x73), 0x1D57F => array(0x74), 0x1D580 => array(0x75) - ,0x1D581 => array(0x76), 0x1D582 => array(0x77), 0x1D583 => array(0x78) - ,0x1D584 => array(0x79), 0x1D585 => array(0x7A), 0x1D5A0 => array(0x61) - ,0x1D5A1 => array(0x62), 0x1D5A2 => array(0x63), 0x1D5A3 => array(0x64) - ,0x1D5A4 => array(0x65), 0x1D5A5 => array(0x66), 0x1D5A6 => array(0x67) - ,0x1D5A7 => array(0x68), 0x1D5A8 => array(0x69), 0x1D5A9 => array(0x6A) - ,0x1D5AA => array(0x6B), 0x1D5AB => array(0x6C), 0x1D5AC => array(0x6D) - ,0x1D5AD => array(0x6E), 0x1D5AE => array(0x6F), 0x1D5AF => array(0x70) - ,0x1D5B0 => array(0x71), 0x1D5B1 => array(0x72), 0x1D5B2 => array(0x73) - ,0x1D5B3 => array(0x74), 0x1D5B4 => array(0x75), 0x1D5B5 => array(0x76) - ,0x1D5B6 => array(0x77), 0x1D5B7 => array(0x78), 0x1D5B8 => array(0x79) - ,0x1D5B9 => array(0x7A), 0x1D5D4 => array(0x61), 0x1D5D5 => array(0x62) - ,0x1D5D6 => array(0x63), 0x1D5D7 => array(0x64), 0x1D5D8 => array(0x65) - ,0x1D5D9 => array(0x66), 0x1D5DA => array(0x67), 0x1D5DB => array(0x68) - ,0x1D5DC => array(0x69), 0x1D5DD => array(0x6A), 0x1D5DE => array(0x6B) - ,0x1D5DF => array(0x6C), 0x1D5E0 => array(0x6D), 0x1D5E1 => array(0x6E) - ,0x1D5E2 => array(0x6F), 0x1D5E3 => array(0x70), 0x1D5E4 => array(0x71) - ,0x1D5E5 => array(0x72), 0x1D5E6 => array(0x73), 0x1D5E7 => array(0x74) - ,0x1D5E8 => array(0x75), 0x1D5E9 => array(0x76), 0x1D5EA => array(0x77) - ,0x1D5EB => array(0x78), 0x1D5EC => array(0x79), 0x1D5ED => array(0x7A) - ,0x1D608 => array(0x61), 0x1D609 => array(0x62) ,0x1D60A => array(0x63) - ,0x1D60B => array(0x64), 0x1D60C => array(0x65), 0x1D60D => array(0x66) - ,0x1D60E => array(0x67), 0x1D60F => array(0x68), 0x1D610 => array(0x69) - ,0x1D611 => array(0x6A), 0x1D612 => array(0x6B), 0x1D613 => array(0x6C) - ,0x1D614 => array(0x6D), 0x1D615 => array(0x6E), 0x1D616 => array(0x6F) - ,0x1D617 => array(0x70), 0x1D618 => array(0x71), 0x1D619 => array(0x72) - ,0x1D61A => array(0x73), 0x1D61B => array(0x74), 0x1D61C => array(0x75) - ,0x1D61D => array(0x76), 0x1D61E => array(0x77), 0x1D61F => array(0x78) - ,0x1D620 => array(0x79), 0x1D621 => array(0x7A), 0x1D63C => array(0x61) - ,0x1D63D => array(0x62), 0x1D63E => array(0x63), 0x1D63F => array(0x64) - ,0x1D640 => array(0x65), 0x1D641 => array(0x66), 0x1D642 => array(0x67) - ,0x1D643 => array(0x68), 0x1D644 => array(0x69), 0x1D645 => array(0x6A) - ,0x1D646 => array(0x6B), 0x1D647 => array(0x6C), 0x1D648 => array(0x6D) - ,0x1D649 => array(0x6E), 0x1D64A => array(0x6F), 0x1D64B => array(0x70) - ,0x1D64C => array(0x71), 0x1D64D => array(0x72), 0x1D64E => array(0x73) - ,0x1D64F => array(0x74), 0x1D650 => array(0x75), 0x1D651 => array(0x76) - ,0x1D652 => array(0x77), 0x1D653 => array(0x78), 0x1D654 => array(0x79) - ,0x1D655 => array(0x7A), 0x1D670 => array(0x61), 0x1D671 => array(0x62) - ,0x1D672 => array(0x63), 0x1D673 => array(0x64), 0x1D674 => array(0x65) - ,0x1D675 => array(0x66), 0x1D676 => array(0x67), 0x1D677 => array(0x68) - ,0x1D678 => array(0x69), 0x1D679 => array(0x6A), 0x1D67A => array(0x6B) - ,0x1D67B => array(0x6C), 0x1D67C => array(0x6D), 0x1D67D => array(0x6E) - ,0x1D67E => array(0x6F), 0x1D67F => array(0x70), 0x1D680 => array(0x71) - ,0x1D681 => array(0x72), 0x1D682 => array(0x73), 0x1D683 => array(0x74) - ,0x1D684 => array(0x75), 0x1D685 => array(0x76), 0x1D686 => array(0x77) - ,0x1D687 => array(0x78), 0x1D688 => array(0x79), 0x1D689 => array(0x7A) - ,0x1D6A8 => array(0x3B1), 0x1D6A9 => array(0x3B2), 0x1D6AA => array(0x3B3) - ,0x1D6AB => array(0x3B4), 0x1D6AC => array(0x3B5), 0x1D6AD => array(0x3B6) - ,0x1D6AE => array(0x3B7), 0x1D6AF => array(0x3B8), 0x1D6B0 => array(0x3B9) - ,0x1D6B1 => array(0x3BA), 0x1D6B2 => array(0x3BB), 0x1D6B3 => array(0x3BC) - ,0x1D6B4 => array(0x3BD), 0x1D6B5 => array(0x3BE), 0x1D6B6 => array(0x3BF) - ,0x1D6B7 => array(0x3C0), 0x1D6B8 => array(0x3C1), 0x1D6B9 => array(0x3B8) - ,0x1D6BA => array(0x3C3), 0x1D6BB => array(0x3C4), 0x1D6BC => array(0x3C5) - ,0x1D6BD => array(0x3C6), 0x1D6BE => array(0x3C7), 0x1D6BF => array(0x3C8) - ,0x1D6C0 => array(0x3C9), 0x1D6D3 => array(0x3C3), 0x1D6E2 => array(0x3B1) - ,0x1D6E3 => array(0x3B2), 0x1D6E4 => array(0x3B3), 0x1D6E5 => array(0x3B4) - ,0x1D6E6 => array(0x3B5), 0x1D6E7 => array(0x3B6), 0x1D6E8 => array(0x3B7) - ,0x1D6E9 => array(0x3B8), 0x1D6EA => array(0x3B9), 0x1D6EB => array(0x3BA) - ,0x1D6EC => array(0x3BB), 0x1D6ED => array(0x3BC), 0x1D6EE => array(0x3BD) - ,0x1D6EF => array(0x3BE), 0x1D6F0 => array(0x3BF), 0x1D6F1 => array(0x3C0) - ,0x1D6F2 => array(0x3C1), 0x1D6F3 => array(0x3B8) ,0x1D6F4 => array(0x3C3) - ,0x1D6F5 => array(0x3C4), 0x1D6F6 => array(0x3C5), 0x1D6F7 => array(0x3C6) - ,0x1D6F8 => array(0x3C7), 0x1D6F9 => array(0x3C8) ,0x1D6FA => array(0x3C9) - ,0x1D70D => array(0x3C3), 0x1D71C => array(0x3B1), 0x1D71D => array(0x3B2) - ,0x1D71E => array(0x3B3), 0x1D71F => array(0x3B4), 0x1D720 => array(0x3B5) - ,0x1D721 => array(0x3B6), 0x1D722 => array(0x3B7), 0x1D723 => array(0x3B8) - ,0x1D724 => array(0x3B9), 0x1D725 => array(0x3BA), 0x1D726 => array(0x3BB) - ,0x1D727 => array(0x3BC), 0x1D728 => array(0x3BD), 0x1D729 => array(0x3BE) - ,0x1D72A => array(0x3BF), 0x1D72B => array(0x3C0), 0x1D72C => array(0x3C1) - ,0x1D72D => array(0x3B8), 0x1D72E => array(0x3C3), 0x1D72F => array(0x3C4) - ,0x1D730 => array(0x3C5), 0x1D731 => array(0x3C6), 0x1D732 => array(0x3C7) - ,0x1D733 => array(0x3C8), 0x1D734 => array(0x3C9), 0x1D747 => array(0x3C3) - ,0x1D756 => array(0x3B1), 0x1D757 => array(0x3B2), 0x1D758 => array(0x3B3) - ,0x1D759 => array(0x3B4), 0x1D75A => array(0x3B5), 0x1D75B => array(0x3B6) - ,0x1D75C => array(0x3B7), 0x1D75D => array(0x3B8), 0x1D75E => array(0x3B9) - ,0x1D75F => array(0x3BA), 0x1D760 => array(0x3BB), 0x1D761 => array(0x3BC) - ,0x1D762 => array(0x3BD), 0x1D763 => array(0x3BE), 0x1D764 => array(0x3BF) - ,0x1D765 => array(0x3C0), 0x1D766 => array(0x3C1), 0x1D767 => array(0x3B8) - ,0x1D768 => array(0x3C3), 0x1D769 => array(0x3C4), 0x1D76A => array(0x3C5) - ,0x1D76B => array(0x3C6), 0x1D76C => array(0x3C7), 0x1D76D => array(0x3C8) - ,0x1D76E => array(0x3C9), 0x1D781 => array(0x3C3), 0x1D790 => array(0x3B1) - ,0x1D791 => array(0x3B2), 0x1D792 => array(0x3B3), 0x1D793 => array(0x3B4) - ,0x1D794 => array(0x3B5), 0x1D795 => array(0x3B6), 0x1D796 => array(0x3B7) - ,0x1D797 => array(0x3B8), 0x1D798 => array(0x3B9), 0x1D799 => array(0x3BA) - ,0x1D79A => array(0x3BB), 0x1D79B => array(0x3BC), 0x1D79C => array(0x3BD) - ,0x1D79D => array(0x3BE), 0x1D79E => array(0x3BF), 0x1D79F => array(0x3C0) - ,0x1D7A0 => array(0x3C1), 0x1D7A1 => array(0x3B8), 0x1D7A2 => array(0x3C3) - ,0x1D7A3 => array(0x3C4), 0x1D7A4 => array(0x3C5), 0x1D7A5 => array(0x3C6) - ,0x1D7A6 => array(0x3C7), 0x1D7A7 => array(0x3C8), 0x1D7A8 => array(0x3C9) - ,0x1D7BB => array(0x3C3), 0x3F9 => array(0x3C3), 0x1D2C => array(0x61) - ,0x1D2D => array(0xE6), 0x1D2E => array(0x62), 0x1D30 => array(0x64) - ,0x1D31 => array(0x65), 0x1D32 => array(0x1DD), 0x1D33 => array(0x67) - ,0x1D34 => array(0x68), 0x1D35 => array(0x69), 0x1D36 => array(0x6A) - ,0x1D37 => array(0x6B), 0x1D38 => array(0x6C), 0x1D39 => array(0x6D) - ,0x1D3A => array(0x6E), 0x1D3C => array(0x6F), 0x1D3D => array(0x223) - ,0x1D3E => array(0x70), 0x1D3F => array(0x72), 0x1D40 => array(0x74) - ,0x1D41 => array(0x75), 0x1D42 => array(0x77), 0x213B => array(0x66, 0x61, 0x78) - ,0x3250 => array(0x70, 0x74, 0x65), 0x32CC => array(0x68, 0x67) - ,0x32CE => array(0x65, 0x76), 0x32CF => array(0x6C, 0x74, 0x64) - ,0x337A => array(0x69, 0x75), 0x33DE => array(0x76, 0x2215, 0x6D) - ,0x33DF => array(0x61, 0x2215, 0x6D) - ) - ,'norm_combcls' => array(0x334 => 1, 0x335 => 1, 0x336 => 1, 0x337 => 1 - ,0x338 => 1, 0x93C => 7, 0x9BC => 7, 0xA3C => 7, 0xABC => 7 - ,0xB3C => 7, 0xCBC => 7, 0x1037 => 7, 0x3099 => 8, 0x309A => 8 - ,0x94D => 9, 0x9CD => 9, 0xA4D => 9, 0xACD => 9, 0xB4D => 9 - ,0xBCD => 9, 0xC4D => 9, 0xCCD => 9, 0xD4D => 9, 0xDCA => 9 - ,0xE3A => 9, 0xF84 => 9, 0x1039 => 9, 0x1714 => 9, 0x1734 => 9 - ,0x17D2 => 9, 0x5B0 => 10, 0x5B1 => 11, 0x5B2 => 12, 0x5B3 => 13 - ,0x5B4 => 14, 0x5B5 => 15, 0x5B6 => 16, 0x5B7 => 17, 0x5B8 => 18 - ,0x5B9 => 19, 0x5BB => 20, 0x5Bc => 21, 0x5BD => 22, 0x5BF => 23 - ,0x5C1 => 24, 0x5C2 => 25, 0xFB1E => 26, 0x64B => 27, 0x64C => 28 - ,0x64D => 29, 0x64E => 30, 0x64F => 31, 0x650 => 32, 0x651 => 33 - ,0x652 => 34, 0x670 => 35, 0x711 => 36, 0xC55 => 84, 0xC56 => 91 - ,0xE38 => 103, 0xE39 => 103, 0xE48 => 107, 0xE49 => 107, 0xE4A => 107 - ,0xE4B => 107, 0xEB8 => 118, 0xEB9 => 118, 0xEC8 => 122, 0xEC9 => 122 - ,0xECA => 122, 0xECB => 122, 0xF71 => 129, 0xF72 => 130, 0xF7A => 130 - ,0xF7B => 130, 0xF7C => 130, 0xF7D => 130, 0xF80 => 130, 0xF74 => 132 - ,0x321 => 202, 0x322 => 202, 0x327 => 202, 0x328 => 202, 0x31B => 216 - ,0xF39 => 216, 0x1D165 => 216, 0x1D166 => 216, 0x1D16E => 216, 0x1D16F => 216 - ,0x1D170 => 216, 0x1D171 => 216, 0x1D172 => 216, 0x302A => 218, 0x316 => 220 - ,0x317 => 220, 0x318 => 220, 0x319 => 220, 0x31C => 220, 0x31D => 220 - ,0x31E => 220, 0x31F => 220, 0x320 => 220, 0x323 => 220, 0x324 => 220 - ,0x325 => 220, 0x326 => 220, 0x329 => 220, 0x32A => 220, 0x32B => 220 - ,0x32C => 220, 0x32D => 220, 0x32E => 220, 0x32F => 220, 0x330 => 220 - ,0x331 => 220, 0x332 => 220, 0x333 => 220, 0x339 => 220, 0x33A => 220 - ,0x33B => 220, 0x33C => 220, 0x347 => 220, 0x348 => 220, 0x349 => 220 - ,0x34D => 220, 0x34E => 220, 0x353 => 220, 0x354 => 220, 0x355 => 220 - ,0x356 => 220, 0x591 => 220, 0x596 => 220, 0x59B => 220, 0x5A3 => 220 - ,0x5A4 => 220, 0x5A5 => 220, 0x5A6 => 220, 0x5A7 => 220, 0x5AA => 220 - ,0x655 => 220, 0x656 => 220, 0x6E3 => 220, 0x6EA => 220, 0x6ED => 220 - ,0x731 => 220, 0x734 => 220, 0x737 => 220, 0x738 => 220, 0x739 => 220 - ,0x73B => 220, 0x73C => 220, 0x73E => 220, 0x742 => 220, 0x744 => 220 - ,0x746 => 220, 0x748 => 220, 0x952 => 220, 0xF18 => 220, 0xF19 => 220 - ,0xF35 => 220, 0xF37 => 220, 0xFC6 => 220, 0x193B => 220, 0x20E8 => 220 - ,0x1D17B => 220, 0x1D17C => 220, 0x1D17D => 220, 0x1D17E => 220, 0x1D17F => 220 - ,0x1D180 => 220, 0x1D181 => 220, 0x1D182 => 220, 0x1D18A => 220, 0x1D18B => 220 - ,0x59A => 222, 0x5AD => 222, 0x1929 => 222, 0x302D => 222, 0x302E => 224 - ,0x302F => 224, 0x1D16D => 226, 0x5AE => 228, 0x18A9 => 228, 0x302B => 228 - ,0x300 => 230, 0x301 => 230, 0x302 => 230, 0x303 => 230, 0x304 => 230 - ,0x305 => 230, 0x306 => 230, 0x307 => 230, 0x308 => 230, 0x309 => 230 - ,0x30A => 230, 0x30B => 230, 0x30C => 230, 0x30D => 230, 0x30E => 230 - ,0x30F => 230, 0x310 => 230, 0x311 => 230, 0x312 => 230, 0x313 => 230 - ,0x314 => 230, 0x33D => 230, 0x33E => 230, 0x33F => 230, 0x340 => 230 - ,0x341 => 230, 0x342 => 230, 0x343 => 230, 0x344 => 230, 0x346 => 230 - ,0x34A => 230, 0x34B => 230, 0x34C => 230, 0x350 => 230, 0x351 => 230 - ,0x352 => 230, 0x357 => 230, 0x363 => 230, 0x364 => 230, 0x365 => 230 - ,0x366 => 230, 0x367 => 230, 0x368 => 230, 0x369 => 230, 0x36A => 230 - ,0x36B => 230, 0x36C => 230, 0x36D => 230, 0x36E => 230, 0x36F => 230 - ,0x483 => 230, 0x484 => 230, 0x485 => 230, 0x486 => 230, 0x592 => 230 - ,0x593 => 230, 0x594 => 230, 0x595 => 230, 0x597 => 230, 0x598 => 230 - ,0x599 => 230, 0x59C => 230, 0x59D => 230, 0x59E => 230, 0x59F => 230 - ,0x5A0 => 230, 0x5A1 => 230, 0x5A8 => 230, 0x5A9 => 230, 0x5AB => 230 - ,0x5AC => 230, 0x5AF => 230, 0x5C4 => 230, 0x610 => 230, 0x611 => 230 - ,0x612 => 230, 0x613 => 230, 0x614 => 230, 0x615 => 230, 0x653 => 230 - ,0x654 => 230, 0x657 => 230, 0x658 => 230, 0x6D6 => 230, 0x6D7 => 230 - ,0x6D8 => 230, 0x6D9 => 230, 0x6DA => 230, 0x6DB => 230, 0x6DC => 230 - ,0x6DF => 230, 0x6E0 => 230, 0x6E1 => 230, 0x6E2 => 230, 0x6E4 => 230 - ,0x6E7 => 230, 0x6E8 => 230, 0x6EB => 230, 0x6EC => 230, 0x730 => 230 - ,0x732 => 230, 0x733 => 230, 0x735 => 230, 0x736 => 230, 0x73A => 230 - ,0x73D => 230, 0x73F => 230, 0x740 => 230, 0x741 => 230, 0x743 => 230 - ,0x745 => 230, 0x747 => 230, 0x749 => 230, 0x74A => 230, 0x951 => 230 - ,0x953 => 230, 0x954 => 230, 0xF82 => 230, 0xF83 => 230, 0xF86 => 230 - ,0xF87 => 230, 0x170D => 230, 0x193A => 230, 0x20D0 => 230, 0x20D1 => 230 - ,0x20D4 => 230, 0x20D5 => 230, 0x20D6 => 230, 0x20D7 => 230, 0x20DB => 230 - ,0x20DC => 230, 0x20E1 => 230, 0x20E7 => 230, 0x20E9 => 230, 0xFE20 => 230 - ,0xFE21 => 230, 0xFE22 => 230, 0xFE23 => 230, 0x1D185 => 230, 0x1D186 => 230 - ,0x1D187 => 230, 0x1D189 => 230, 0x1D188 => 230, 0x1D1AA => 230, 0x1D1AB => 230 - ,0x1D1AC => 230, 0x1D1AD => 230, 0x315 => 232, 0x31A => 232, 0x302C => 232 - ,0x35F => 233, 0x362 => 233, 0x35D => 234, 0x35E => 234, 0x360 => 234 - ,0x361 => 234, 0x345 => 240 - ) - ); -} -?> \ No newline at end of file diff --git a/framework/views/ca/error.php b/framework/views/ca/error.php new file mode 100644 index 00000000000..4371696f739 --- /dev/null +++ b/framework/views/ca/error.php @@ -0,0 +1,37 @@ + + + + +Error <?php echo $data['code']; ?> + + + + + +

    Error

    +

    +

    +Un error intern ha ocorregut mentre el Servidor Web processava la vostra solcitiud. +

    +

    +Si creu que aquest error és del servidor, si us plau contacti amb . +

    +

    +Gràcies. +

    +
    + +
    + + \ No newline at end of file diff --git a/framework/views/ca/error400.php b/framework/views/ca/error400.php new file mode 100644 index 00000000000..130234d37f9 --- /dev/null +++ b/framework/views/ca/error400.php @@ -0,0 +1,33 @@ + + + + +Sol·licitud Incorrecta + + + +

    Sol·licitud incorrecta

    +

    +

    +El servidor no ha pogut entendre la sol·licitud per un error de sintaxis. +Si us plau, no intenti realitzar aquesta sol·licitud sense realitzar modificacions. +

    +

    +Si creu que aquest error és del servidor, si us plau contacti amb . +

    +
    + +
    + + \ No newline at end of file diff --git a/framework/views/ca/error403.php b/framework/views/ca/error403.php new file mode 100644 index 00000000000..9cc4e79898b --- /dev/null +++ b/framework/views/ca/error403.php @@ -0,0 +1,32 @@ + + + + +No Autoritzat + + + +

    No No Autoritzat

    +

    +

    +No té els permisos necessàris per accedir a aquesta pàgina. +

    +

    +Si creu que aquest error és del servidor, si us plau contacti amb . +

    +
    + +
    + + \ No newline at end of file diff --git a/framework/views/ca/error404.php b/framework/views/ca/error404.php new file mode 100644 index 00000000000..c13f1a3b602 --- /dev/null +++ b/framework/views/ca/error404.php @@ -0,0 +1,33 @@ + + + + +Pàgina no trobada + + + +

    Pàgina no trobada

    +

    +

    +La URL sol·licitada no s'ha trobat en aquest servidor. +Si ha ingressat la direcció manualment, si us plau asseguris que hagi set ben digitada i intenti-ho de nou. +

    +

    +Si creu que aquest error és del servidor, si us plau contacti amb . +

    +
    + +
    + + \ No newline at end of file diff --git a/framework/views/ca/error500.php b/framework/views/ca/error500.php new file mode 100644 index 00000000000..01696e3d24d --- /dev/null +++ b/framework/views/ca/error500.php @@ -0,0 +1,35 @@ + + + + +Error Intern de Servidor + + + + + +

    Error Intern de Servidor

    +

    +

    +Un error intern ha ocorregut mentre el Servidor Web processava la vostra solcitiud. +Si creu que aquest error és del servidor, si us plau contacti amb . +

    +

    +Gràcies. +

    +
    + +
    + + \ No newline at end of file diff --git a/framework/views/ca/error503.php b/framework/views/ca/error503.php new file mode 100644 index 00000000000..3bdea2dc4a4 --- /dev/null +++ b/framework/views/ca/error503.php @@ -0,0 +1,31 @@ + + + + +Servei No Disponible + + + +

    Servei No Disponible

    +

    +Actualment, el nostre sistema actualment es troba en manteniment. Si us plau, provi-ho més tard. +

    +

    +Gràcies. +

    +
    + +
    + + \ No newline at end of file diff --git a/framework/views/ca/log-firebug.php b/framework/views/ca/log-firebug.php new file mode 100644 index 00000000000..876fc9e72ec --- /dev/null +++ b/framework/views/ca/log-firebug.php @@ -0,0 +1,23 @@ + \ No newline at end of file diff --git a/framework/views/ca/log.php b/framework/views/ca/log.php new file mode 100644 index 00000000000..10c3794598f --- /dev/null +++ b/framework/views/ca/log.php @@ -0,0 +1,40 @@ + + + + + + + + + + + +'#DFFFE0', + CLogger::LEVEL_INFO=>'#FFFFDF', + CLogger::LEVEL_WARNING=>'#FFDFE5', + CLogger::LEVEL_ERROR=>'#FFC0CB', +); +foreach($data as $index=>$log) +{ + $color=($index%2)?'#F5F5F5':'#FFFFFF'; + if(isset($colors[$log[1]])) + $color=$colors[$log[1]]; + $message='
    '.CHtml::encode(wordwrap($log[0])).'
    '; + $time=date('H:i:s.',$log[3]).(int)(($log[3]-(int)$log[3])*1000000); + + echo << + + + + + +EOD; +} +?> +
    + Log d'Aplicació +
    Estampa de temps (Timestamp)NivellCategoriaMissatge
    {$time}{$log[1]}{$log[2]}{$message}
    + \ No newline at end of file diff --git a/framework/views/ca/profile-callstack-firebug.php b/framework/views/ca/profile-callstack-firebug.php new file mode 100644 index 00000000000..cfe1a269604 --- /dev/null +++ b/framework/views/ca/profile-callstack-firebug.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/framework/views/ca/profile-callstack.php b/framework/views/ca/profile-callstack.php new file mode 100644 index 00000000000..26eb81bdab2 --- /dev/null +++ b/framework/views/ca/profile-callstack.php @@ -0,0 +1,30 @@ + + + + + + + + + +$entry) +{ + $color=($index%2)?'#F5F5F5':'#FFFFFF'; + list($proc,$time,$level)=$entry; + $proc=CHtml::encode($proc); + $time=sprintf('%0.5f',$time); + $spaces=str_repeat(' ',$level*8); + + echo << + + + +EOD; +} +?> +
    + Reportatge Perfilat de la Pila de Crides al Servidor (Profiling Callstack Report) +
    ProcedimentTemps (s)
    {$spaces}{$proc}{$time}
    + \ No newline at end of file diff --git a/framework/views/ca/profile-summary-firebug.php b/framework/views/ca/profile-summary-firebug.php new file mode 100644 index 00000000000..657129db3fd --- /dev/null +++ b/framework/views/ca/profile-summary-firebug.php @@ -0,0 +1,22 @@ + diff --git a/framework/views/ca/profile-summary.php b/framework/views/ca/profile-summary.php new file mode 100644 index 00000000000..e70131c36d4 --- /dev/null +++ b/framework/views/ca/profile-summary.php @@ -0,0 +1,41 @@ + + + + + + + + + + + + + +$entry) +{ + $color=($index%2)?'#F5F5F5':'#FFFFFF'; + $proc=CHtml::encode($entry[0]); + $min=sprintf('%0.5f',$entry[2]); + $max=sprintf('%0.5f',$entry[3]); + $total=sprintf('%0.5f',$entry[4]); + $average=sprintf('%0.5f',$entry[4]/$entry[1]); + + echo << + + + + + + + +EOD; +} +?> +
    + Reportatge Perfilat Resumit (Profiling Summary Report) + (Temps: getExecutionTime()); ?>s, + Memòria: getMemoryUsage()/1024); ?>KB) +
    ProcedimentCompteTotal (es)Mitjana (s)Min. (s)Máx. (s)
    {$proc}{$entry[1]}{$total}{$average}{$min}{$max}
    + \ No newline at end of file diff --git a/framework/views/es/error500.php b/framework/views/es/error500.php index e73011c2ff4..3412e30bc01 100644 --- a/framework/views/es/error500.php +++ b/framework/views/es/error500.php @@ -22,11 +22,13 @@

    Internal Server Error

    -An internal error occurred while the Web server was processing your request. -Please contact to report this problem. +Un error interno ocurrió cuando el servidor estaba procesando su solicitud.

    -Thank you. +Si piensa que este es un error del servidor, por favor contacte a . +

    +

    +Gracias.

    diff --git a/framework/views/fi/error.php b/framework/views/fi/error.php new file mode 100644 index 00000000000..97536027046 --- /dev/null +++ b/framework/views/fi/error.php @@ -0,0 +1,35 @@ + + + + +Virhe <?php echo $data['code']; ?> + + + +

    Virhe

    +

    +

    +Ylläoleva virhe ilmeni palvelimen käsitellessä pyyntöä. +

    +

    +Mikäli uskot tämän olevan palvelimen virhe, ota yhteyttä . +

    +

    +Kiitos. +

    +
    + +
    + + \ No newline at end of file diff --git a/framework/views/fi/error400.php b/framework/views/fi/error400.php new file mode 100644 index 00000000000..7215897fc4b --- /dev/null +++ b/framework/views/fi/error400.php @@ -0,0 +1,33 @@ + + + + +Pyyntö ei kelpaa + + + +

    Pyyntö ei kelpaa

    +

    +

    +Palvelin ei voinut käsitellä pyyntöä virheellisen syntaksin johdosta. +Älä toista pyyntöä ilman muutoksia. +

    +

    +Mikäli uskot tämän olevan palvelimen virhe, ota yhteyttä . +

    +
    + +
    + + \ No newline at end of file diff --git a/framework/views/fi/error403.php b/framework/views/fi/error403.php new file mode 100644 index 00000000000..9c3dbfb64de --- /dev/null +++ b/framework/views/fi/error403.php @@ -0,0 +1,32 @@ + + + + +Ei valtuuksia + + + +

    Ei valtuuksia

    +

    +

    +Sinulla ei ole vaadittavia oikeuksia päästäksesi sivulle. +

    +

    +Mikäli uskot tämän olevan palvelimen virhe, ota yhteyttä . +

    +
    + +
    + + \ No newline at end of file diff --git a/framework/views/fi/error404.php b/framework/views/fi/error404.php new file mode 100644 index 00000000000..bb1cb9d875b --- /dev/null +++ b/framework/views/fi/error404.php @@ -0,0 +1,33 @@ + + + + +Sivua ei löydy + + + +

    Sivua ei löydy

    +

    +

    +Hakemaasi sivua ei löytynyt tältä palvelimelta. +Mikäli syötit URL-osoitteen käsin, tarkista oikeinkirjoitus ja yritä uudelleen. +

    +

    +Mikäli uskot tämän olevan palvelimen virhe, ota yhteyttä . +

    +
    + +
    + + \ No newline at end of file diff --git a/framework/views/fi/error500.php b/framework/views/fi/error500.php new file mode 100644 index 00000000000..215ede57f12 --- /dev/null +++ b/framework/views/fi/error500.php @@ -0,0 +1,33 @@ + + + + +Sisäinen palvelinvirhe + + + +

    Sisäinen palvelinvirhe

    +

    +

    +Sisäinen virhe ilmeni palvelimen käsitellessä pyyntöä. +Voit raportoida ongelman ottamalla yhteyttä . +

    +

    +Kiitos. +

    +
    + +
    + + \ No newline at end of file diff --git a/framework/views/fi/error503.php b/framework/views/fi/error503.php new file mode 100644 index 00000000000..196538ac26f --- /dev/null +++ b/framework/views/fi/error503.php @@ -0,0 +1,31 @@ + + + + +Palvelu ei ole käytettävissä + + + +

    Palvelu ei ole käytettävissä

    +

    +Palvelua huolletaan. Yritä myöhemmin uudelleen. +

    +

    +Kiitos. +

    +
    + +
    + + \ No newline at end of file diff --git a/framework/views/fi/exception.php b/framework/views/fi/exception.php new file mode 100644 index 00000000000..2132d9e2fd9 --- /dev/null +++ b/framework/views/fi/exception.php @@ -0,0 +1,240 @@ + + + + +<?php echo $data['type']; ?> + + + +
    +

    + +

    + charset))?> +

    + +
    +

    charset)."({$data['line']})"?>

    + renderSourceCode($data['file'],$data['line'],$this->maxSourceLines); ?> +
    + +
    +

    Komentopino

    + + + $trace): ?> + isCoreCode($trace)) + $cssClass='core collapsed'; + elseif(++$count>3) + $cssClass='app collapsed'; + else + $cssClass='app expanded'; + $hasCode=$trace['file']!=='unknown' && is_file($trace['file']); + ?> + + + + + +
    + # + +
    + +
    +
    +
    + + charset)."(".$trace['line'].")"; + echo ': '; + if(!empty($trace['class'])) + echo "{$trace['class']}{$trace['type']}"; + echo "{$trace['function']}("; + if(!empty($trace['args'])) + echo htmlspecialchars($this->argumentsToString($trace['args']),ENT_QUOTES,Yii::app()->charset); + echo ')'; + ?> +
    + + renderSourceCode($trace['file'],$trace['line'],$this->maxTraceSourceLines); ?> +
    +
    + +
    + +
    +
    + + + + + diff --git a/framework/views/fi/log-firebug.php b/framework/views/fi/log-firebug.php new file mode 100644 index 00000000000..d3724b04509 --- /dev/null +++ b/framework/views/fi/log-firebug.php @@ -0,0 +1,23 @@ + \ No newline at end of file diff --git a/framework/views/fi/log.php b/framework/views/fi/log.php new file mode 100644 index 00000000000..d9bf848332b --- /dev/null +++ b/framework/views/fi/log.php @@ -0,0 +1,40 @@ + + + + + + + + + + + +'#DFFFE0', + CLogger::LEVEL_INFO=>'#FFFFDF', + CLogger::LEVEL_WARNING=>'#FFDFE5', + CLogger::LEVEL_ERROR=>'#FFC0CB', +); +foreach($data as $index=>$log) +{ + $color=($index%2)?'#F5F5F5':'#FFFFFF'; + if(isset($colors[$log[1]])) + $color=$colors[$log[1]]; + $message='
    '.CHtml::encode(wordwrap($log[0])).'
    '; + $time=date('H:i:s.',$log[3]).sprintf('%06d',(int)(($log[3]-(int)$log[3])*1000000)); + + echo << + + + + + +EOD; +} +?> +
    + Sovellusloki +
    AikaleimaTasoKategoriaViesti
    {$time}{$log[1]}{$log[2]}{$message}
    + \ No newline at end of file diff --git a/framework/views/fi/profile-callstack-firebug.php b/framework/views/fi/profile-callstack-firebug.php new file mode 100644 index 00000000000..9d2671a8795 --- /dev/null +++ b/framework/views/fi/profile-callstack-firebug.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/framework/views/fi/profile-callstack.php b/framework/views/fi/profile-callstack.php new file mode 100644 index 00000000000..3509bd30c3c --- /dev/null +++ b/framework/views/fi/profile-callstack.php @@ -0,0 +1,30 @@ + + + + + + + + + +$entry) +{ + $color=($index%2)?'#F5F5F5':'#FFFFFF'; + list($proc,$time,$level)=$entry; + $proc=CHtml::encode($proc); + $time=sprintf('%0.5f',$time); + $spaces=str_repeat(' ',$level*8); + + echo << + + + +EOD; +} +?> +
    + Profiloinnin kutsupinon raportti +
    ProseduuriAika (s)
    {$spaces}{$proc}{$time}
    + \ No newline at end of file diff --git a/framework/views/fi/profile-summary-firebug.php b/framework/views/fi/profile-summary-firebug.php new file mode 100644 index 00000000000..c68bd13946d --- /dev/null +++ b/framework/views/fi/profile-summary-firebug.php @@ -0,0 +1,22 @@ + diff --git a/framework/views/fi/profile-summary.php b/framework/views/fi/profile-summary.php new file mode 100644 index 00000000000..60a7a1d574b --- /dev/null +++ b/framework/views/fi/profile-summary.php @@ -0,0 +1,41 @@ + + + + + + + + + + + + + +$entry) +{ + $color=($index%2)?'#F5F5F5':'#FFFFFF'; + $proc=CHtml::encode($entry[0]); + $min=sprintf('%0.5f',$entry[2]); + $max=sprintf('%0.5f',$entry[3]); + $total=sprintf('%0.5f',$entry[4]); + $average=sprintf('%0.5f',$entry[4]/$entry[1]); + + echo << + + + + + + + +EOD; +} +?> +
    + Profiloinnin yhteenvetoraportti + (Aika: getExecutionTime()); ?>s, + Muisti: getMemoryUsage()/1024); ?>KB) +
    ProseduuriLukumääräYhteensä (s)Keskim. (s)Väh. (s)Enint. (s)
    {$proc}{$entry[1]}{$total}{$average}{$min}{$max}
    + \ No newline at end of file diff --git a/framework/views/fr/error.php b/framework/views/fr/error.php index 60f1decceef..3df6624cc44 100644 --- a/framework/views/fr/error.php +++ b/framework/views/fr/error.php @@ -1,11 +1,11 @@ - + + Erreur <?php echo $data['code']; ?> - -

    Erreur

    diff --git a/framework/views/fr/error400.php b/framework/views/fr/error400.php index bfab1f725cd..31a32e396bf 100644 --- a/framework/views/fr/error400.php +++ b/framework/views/fr/error400.php @@ -1,9 +1,10 @@ - + + Demande incorrecte -

    Erreur interne du serveur

    diff --git a/framework/views/fr/error503.php b/framework/views/fr/error503.php index d3e22ef1586..918e0e41216 100644 --- a/framework/views/fr/error503.php +++ b/framework/views/fr/error503.php @@ -1,9 +1,10 @@ - + + Service non disponible @@ -22,10 +22,10 @@

    エラー

    -リクエストを処理中にウエブサーバが上記エラーを検出しました。 +ウェブサーバがリクエストを処理しているときに、上記のエラーが発生しました。

    -もしこれがサーバのエラーとお考えの場合は担当()に連絡してください。 +これがサーバの不具合であると思われる場合は、にご連絡ください。

    ありがとうございます。 diff --git a/framework/views/ja/error400.php b/framework/views/ja/error400.php index de4d553d537..9bbc1139c23 100644 --- a/framework/views/ja/error400.php +++ b/framework/views/ja/error400.php @@ -1,30 +1,30 @@ - + -Bad Request +400 不正リクエスト -

    不正リクエスト

    +

    400 不正リクエスト

    -不正な文法が検出されたため、サーバはリクエストを処理できませんでした。 -修正しないうちは同じリクエストを発行しないでください。 +不正な形式の文法であるために、サーバはリクエストを処理できませんでした。 +文法を修正しないうちは同じリクエストを繰り返さないでください。

    -もしこれがサーバのエラーとお考えの場合は担当()に連絡してください。 +これがサーバの不具合であると思われる場合は、にご連絡ください。

    diff --git a/framework/views/ja/error403.php b/framework/views/ja/error403.php index 75a975c559c..f6220dcaef8 100644 --- a/framework/views/ja/error403.php +++ b/framework/views/ja/error403.php @@ -1,29 +1,29 @@ - + -Unauthorized +403 未認証 -

    未認証

    +

    403 未認証

    -あなたはこのページをアクセスする許可を受けていません。 +あなたはこのページをアクセスする正当な許可を得ていません。

    -もしこれがサーバのエラーとお考えの場合は担当()に連絡してください。 +これがサーバの不具合であると思われる場合は、にご連絡ください。

    diff --git a/framework/views/ja/error404.php b/framework/views/ja/error404.php index 23db2c53381..48e5728681f 100644 --- a/framework/views/ja/error404.php +++ b/framework/views/ja/error404.php @@ -1,30 +1,30 @@ - + -Page Not Found +404 ページが見つかりません -

    ページが見つからない

    +

    404 ページが見つかりません

    -サーバにはリクエストされたURLは存在しません。もしURLを手で入力した場合には、 -スペルをチェックしてから再度トライしてください。 +リクエストされたURLはこのサーバでは見つかりませんでした。 +URLを手で入力した場合には、スペルをチェックしてから再度トライしてください。

    -もしこれがサーバのエラーとお考えの場合は担当()に連絡してください。 +これがサーバの不具合であると思われる場合は、にご連絡ください。

    diff --git a/framework/views/ja/error500.php b/framework/views/ja/error500.php index 7cc2a7dd18a..b185aea157d 100644 --- a/framework/views/ja/error500.php +++ b/framework/views/ja/error500.php @@ -1,29 +1,29 @@ - + -Internal Server Error +500 サーバ内部エラー -

    サーバ内部エラー

    +

    500 サーバ内部エラー

    -ウエブサーバがリクエストを処理している途中にサーバの内部エラーが起きました。 -担当()にこの問題を連絡してください。 +ウェブサーバがリクエストを処理しているときに、内部エラーが発生しました。 +)に連絡を取って、この問題を報告して下さるようお願いします。

    ありがとうございます。 diff --git a/framework/views/ja/error503.php b/framework/views/ja/error503.php index 3be6aed96ac..dfbe8cae127 100644 --- a/framework/views/ja/error503.php +++ b/framework/views/ja/error503.php @@ -1,25 +1,25 @@ - + -Service Unavailable +503 サービス休止中 -

    サービスが提供されません

    +

    503 サービス休止中

    -システムは現在メンテナンス中です。また後で来てくださるようお願いします。 +このシステムは現在メンテナンス中です。また後で来てくださるようお願いします。

    ありがとうございます。 diff --git a/framework/views/ja/exception.php b/framework/views/ja/exception.php new file mode 100644 index 00000000000..7135622cd50 --- /dev/null +++ b/framework/views/ja/exception.php @@ -0,0 +1,249 @@ + + + + +<?php echo $data['type']; ?> + + + + + +

    +

    + +

    + charset))?> +

    + +
    +

    charset)."({$data['line']})"?>

    + renderSourceCode($data['file'],$data['line'],$this->maxSourceLines); ?> +
    + +
    +

    Stack Trace

    + + + $trace): ?> + isCoreCode($trace)) + $cssClass='core collapsed'; + elseif(++$count>3) + $cssClass='app collapsed'; + else + $cssClass='app expanded'; + $hasCode=$trace['file']!=='unknown' && is_file($trace['file']); + ?> + + + + + +
    + # + +
    + +
    +
    +
    + + charset)."(".$trace['line'].")"; + echo ': '; + if(!empty($trace['class'])) + echo "{$trace['class']}{$trace['type']}"; + echo "{$trace['function']}("; + if(!empty($trace['args'])) + echo htmlspecialchars($this->argumentsToString($trace['args']),ENT_QUOTES,Yii::app()->charset); + echo ')'; + ?> +
    + + renderSourceCode($trace['file'],$trace['line'],$this->maxTraceSourceLines); ?> +
    +
    + +
    + +
    +
    + + + + + diff --git a/framework/views/ja/log.php b/framework/views/ja/log.php index 0d4849444d6..a63b25c12d5 100644 --- a/framework/views/ja/log.php +++ b/framework/views/ja/log.php @@ -1,5 +1,5 @@ - +
    アプリケーションログ diff --git a/framework/views/ja/profile-callstack.php b/framework/views/ja/profile-callstack.php index 6e150738554..b56e8a98590 100644 --- a/framework/views/ja/profile-callstack.php +++ b/framework/views/ja/profile-callstack.php @@ -1,5 +1,5 @@ - +
    プロファイリング コールスタック レポート diff --git a/framework/views/ja/profile-summary.php b/framework/views/ja/profile-summary.php index ab151b41eb2..cb2d7bad381 100644 --- a/framework/views/ja/profile-summary.php +++ b/framework/views/ja/profile-summary.php @@ -1,5 +1,5 @@ - +
    プロファイリング概要レポート diff --git a/framework/web/CActiveDataProvider.php b/framework/web/CActiveDataProvider.php index 87233ea7fe3..096e64e65c9 100644 --- a/framework/web/CActiveDataProvider.php +++ b/framework/web/CActiveDataProvider.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -24,6 +24,10 @@ * 'order'=>'create_time DESC', * 'with'=>array('author'), * ), + * 'countCriteria'=>array( + * 'condition'=>'status=1', + * // 'order' and 'with' clauses have no meaning for the count query + * ), * 'pagination'=>array( * 'pageSize'=>20, * ), @@ -32,6 +36,8 @@ * * * @property CDbCriteria $criteria The query criteria. + * @property CDbCriteria $countCriteria The count query criteria. This property is available + * since 1.1.14 * @property CSort $sort The sorting object. If this is false, it means the sorting is disabled. * * @author Qiang Xue @@ -58,7 +64,14 @@ class CActiveDataProvider extends CDataProvider */ public $keyAttribute; + /** + * @var CDbCriteria + */ private $_criteria; + /** + * @var CDbCriteria + */ + private $_countCriteria; /** * Constructor. @@ -71,14 +84,14 @@ public function __construct($modelClass,$config=array()) if(is_string($modelClass)) { $this->modelClass=$modelClass; - $this->model=CActiveRecord::model($this->modelClass); + $this->model=$this->getModel($this->modelClass); } elseif($modelClass instanceof CActiveRecord) { $this->modelClass=get_class($modelClass); $this->model=$modelClass; } - $this->setId($this->modelClass); + $this->setId(CHtml::modelName($this->model)); foreach($config as $key=>$value) $this->$key=$value; } @@ -96,7 +109,7 @@ public function getCriteria() /** * Sets the query criteria. - * @param mixed $value the query criteria. This can be either a CDbCriteria object or an array + * @param CDbCriteria|array $value the query criteria. This can be either a CDbCriteria object or an array * representing the query criteria. */ public function setCriteria($value) @@ -104,6 +117,29 @@ public function setCriteria($value) $this->_criteria=$value instanceof CDbCriteria ? $value : new CDbCriteria($value); } + /** + * Returns the count query criteria. + * @return CDbCriteria the count query criteria. + * @since 1.1.14 + */ + public function getCountCriteria() + { + if($this->_countCriteria===null) + return $this->getCriteria(); + return $this->_countCriteria; + } + + /** + * Sets the count query criteria. + * @param CDbCriteria|array $value the count query criteria. This can be either a CDbCriteria object + * or an array representing the query criteria. + * @since 1.1.14 + */ + public function setCountCriteria($value) + { + $this->_countCriteria=$value instanceof CDbCriteria ? $value : new CDbCriteria($value); + } + /** * Returns the sorting object. * @param string $className the sorting object class name. Parameter is available since version 1.1.13. @@ -116,6 +152,19 @@ public function getSort($className='CSort') return $sort; } + /** + * Given active record class name returns new model instance. + * + * @param string $className active record class name. + * @return CActiveRecord active record model instance. + * + * @since 1.1.14 + */ + protected function getModel($className) + { + return CActiveRecord::model($className); + } + /** * Fetches the data from the persistent data storage. * @return array list of data items @@ -176,7 +225,7 @@ protected function calculateTotalItemCount() $baseCriteria=$this->model->getDbCriteria(false); if($baseCriteria!==null) $baseCriteria=clone $baseCriteria; - $count=$this->model->count($this->getCriteria()); + $count=$this->model->count($this->getCountCriteria()); $this->model->setDbCriteria($baseCriteria); return $count; } diff --git a/framework/web/CArrayDataProvider.php b/framework/web/CArrayDataProvider.php index 8f8b1a4c037..5b4b511605d 100644 --- a/framework/web/CArrayDataProvider.php +++ b/framework/web/CArrayDataProvider.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -18,7 +18,9 @@ * * Elements in the raw data array may be either objects (e.g. model objects) * or associative arrays (e.g. query results of DAO). - * + * Make sure to set the {@link keyField} property to the name of the field that uniquely + * identifies a data record or false if you do not have such a field. + * * CArrayDataProvider may be used in the following way: *
      * $rawData=Yii::app()->db->createCommand('SELECT * FROM tbl_user')->queryAll();
    @@ -47,8 +49,9 @@
     class CArrayDataProvider extends CDataProvider
     {
     	/**
    -	 * @var string the name of key field. Defaults to 'id'. If it's set to false,
    -	 * keys of $rawData array are used.
    +	 * @var string the name of the key field. This is a field that uniquely identifies a
    +	 * data record. In database this would be the primary key.
    +	 * Defaults to 'id'. If it's set to false, keys of {@link rawData} array are used.
     	 */
     	public $keyField='id';
     	/**
    diff --git a/framework/web/CAssetManager.php b/framework/web/CAssetManager.php
    index 6ea5a2a5b62..38708d455a7 100644
    --- a/framework/web/CAssetManager.php
    +++ b/framework/web/CAssetManager.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -223,14 +223,14 @@ public function publish($path,$hashByName=false,$level=-1,$forceCopy=null)
     				if(!is_dir($dstDir))
     				{
     					mkdir($dstDir,$this->newDirMode,true);
    -					chmod($dstDir,$this->newDirMode);
    +					@chmod($dstDir,$this->newDirMode);
     				}
     
     				if($this->linkAssets && !is_file($dstFile)) symlink($src,$dstFile);
     				elseif(@filemtime($dstFile)<@filemtime($src))
     				{
     					copy($src,$dstFile);
    -					chmod($dstFile,$this->newFileMode);
    +					@chmod($dstFile,$this->newFileMode);
     				}
     
     				return $this->_published[$path]=$this->getBaseUrl()."/$dir/$fileName";
    diff --git a/framework/web/CBaseController.php b/framework/web/CBaseController.php
    index bfa0937ab43..9f5d649f7ac 100644
    --- a/framework/web/CBaseController.php
    +++ b/framework/web/CBaseController.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/web/CCacheHttpSession.php b/framework/web/CCacheHttpSession.php
    index 92c038c88b2..5b48fae478c 100644
    --- a/framework/web/CCacheHttpSession.php
    +++ b/framework/web/CCacheHttpSession.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/web/CClientScript.php b/framework/web/CClientScript.php
    index 6aaa7346566..f7d3c20ccc5 100644
    --- a/framework/web/CClientScript.php
    +++ b/framework/web/CClientScript.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -66,14 +66,14 @@ class CClientScript extends CApplicationComponent
     	 * 
     	 * array(
     	 *   'package-name'=>array(
    -     *     'basePath'=>'alias of the directory containing the script files',
    -     *     'baseUrl'=>'base URL for the script files',
    -     *     'js'=>array(list of js files relative to basePath/baseUrl),
    -     *     'css'=>array(list of css files relative to basePath/baseUrl),
    -     *     'depends'=>array(list of dependent packages),
    -     *   ),
    -     *   ......
    -     * )
    +	 *     'basePath'=>'alias of the directory containing the script files',
    +	 *     'baseUrl'=>'base URL for the script files',
    +	 *     'js'=>array(list of js files relative to basePath/baseUrl),
    +	 *     'css'=>array(list of css files relative to basePath/baseUrl),
    +	 *     'depends'=>array(list of dependent packages),
    +	 *   ),
    +	 *   ......
    +	 * )
     	 * 
    * * The JS and CSS files listed are relative to 'basePath'. @@ -234,10 +234,10 @@ protected function unifyScripts() if(isset($this->scriptFiles[self::POS_BEGIN])) { - foreach($this->scriptFiles[self::POS_BEGIN] as $key=>$scriptFile) + foreach($this->scriptFiles[self::POS_BEGIN] as $scriptFile=>$scriptFileValue) { if(isset($map[$scriptFile])) - unset($this->scriptFiles[self::POS_BEGIN][$key]); + unset($this->scriptFiles[self::POS_BEGIN][$scriptFile]); else $map[$scriptFile]=true; } @@ -247,7 +247,7 @@ protected function unifyScripts() { foreach($this->scriptFiles[self::POS_END] as $key=>$scriptFile) { - if(isset($map[$scriptFile])) + if(isset($map[$key])) unset($this->scriptFiles[self::POS_END][$key]); } } @@ -278,12 +278,12 @@ protected function remapScripts() $this->cssFiles=$cssFiles; $jsFiles=array(); - foreach($this->scriptFiles as $position=>$scripts) + foreach($this->scriptFiles as $position=>$scriptFiles) { $jsFiles[$position]=array(); - foreach($scripts as $key=>$script) + foreach($scriptFiles as $scriptFile=>$scriptFileValue) { - $name=basename($script); + $name=basename($scriptFile); if(isset($this->scriptMap[$name])) { if($this->scriptMap[$name]!==false) @@ -295,12 +295,45 @@ protected function remapScripts() $jsFiles[$position][$this->scriptMap['*.js']]=$this->scriptMap['*.js']; } else - $jsFiles[$position][$key]=$script; + $jsFiles[$position][$scriptFile]=$scriptFileValue; } } $this->scriptFiles=$jsFiles; } + /** + * Composes script HTML block from the given script values, + * attempting to group scripts at single 'script' tag if possible. + * @param array $scripts script values to process. + * @return string HTML output + */ + protected function renderScriptBatch(array $scripts) + { + $html = ''; + $scriptBatches = array(); + foreach($scripts as $scriptValue) + { + if(is_array($scriptValue)) + { + $scriptContent = $scriptValue['content']; + unset($scriptValue['content']); + $scriptHtmlOptions = $scriptValue; + } + else + { + $scriptContent = $scriptValue; + $scriptHtmlOptions = array(); + } + $key=serialize(ksort($scriptHtmlOptions)); + $scriptBatches[$key]['htmlOptions']=$scriptHtmlOptions; + $scriptBatches[$key]['scripts'][]=$scriptContent; + } + foreach($scriptBatches as $scriptBatch) + if(!empty($scriptBatch['scripts'])) + $html.=CHtml::script(implode("\n",$scriptBatch['scripts']),$scriptBatch['htmlOptions'])."\n"; + return $html; + } + /** * Renders the specified core javascript library. */ @@ -335,8 +368,8 @@ public function renderCoreScripts() { if(isset($this->scriptFiles[$this->coreScriptPosition])) { - foreach($this->scriptFiles[$this->coreScriptPosition] as $url) - $jsFiles[$url]=$url; + foreach($this->scriptFiles[$this->coreScriptPosition] as $url => $value) + $jsFiles[$url]=$value; } $this->scriptFiles[$this->coreScriptPosition]=$jsFiles; } @@ -361,12 +394,17 @@ public function renderHead(&$output) { if(isset($this->scriptFiles[self::POS_HEAD])) { - foreach($this->scriptFiles[self::POS_HEAD] as $scriptFile) - $html.=CHtml::scriptFile($scriptFile)."\n"; + foreach($this->scriptFiles[self::POS_HEAD] as $scriptFileValueUrl=>$scriptFileValue) + { + if(is_array($scriptFileValue)) + $html.=CHtml::scriptFile($scriptFileValueUrl,$scriptFileValue)."\n"; + else + $html.=CHtml::scriptFile($scriptFileValueUrl)."\n"; + } } if(isset($this->scripts[self::POS_HEAD])) - $html.=CHtml::script(implode("\n",$this->scripts[self::POS_HEAD]))."\n"; + $html.=$this->renderScriptBatch($this->scripts[self::POS_HEAD]); } if($html!=='') @@ -389,11 +427,16 @@ public function renderBodyBegin(&$output) $html=''; if(isset($this->scriptFiles[self::POS_BEGIN])) { - foreach($this->scriptFiles[self::POS_BEGIN] as $scriptFile) - $html.=CHtml::scriptFile($scriptFile)."\n"; + foreach($this->scriptFiles[self::POS_BEGIN] as $scriptFileUrl=>$scriptFileValue) + { + if(is_array($scriptFileValue)) + $html.=CHtml::scriptFile($scriptFileUrl,$scriptFileValue)."\n"; + else + $html.=CHtml::scriptFile($scriptFileUrl)."\n"; + } } if(isset($this->scripts[self::POS_BEGIN])) - $html.=CHtml::script(implode("\n",$this->scripts[self::POS_BEGIN]))."\n"; + $html.=$this->renderScriptBatch($this->scripts[self::POS_BEGIN]); if($html!=='') { @@ -421,8 +464,13 @@ public function renderBodyEnd(&$output) $html=''; if(isset($this->scriptFiles[self::POS_END])) { - foreach($this->scriptFiles[self::POS_END] as $scriptFile) - $html.=CHtml::scriptFile($scriptFile)."\n"; + foreach($this->scriptFiles[self::POS_END] as $scriptFileUrl=>$scriptFileValue) + { + if(is_array($scriptFileValue)) + $html.=CHtml::scriptFile($scriptFileUrl,$scriptFileValue)."\n"; + else + $html.=CHtml::scriptFile($scriptFileUrl)."\n"; + } } $scripts=isset($this->scripts[self::POS_END]) ? $this->scripts[self::POS_END] : array(); if(isset($this->scripts[self::POS_READY])) @@ -440,7 +488,7 @@ public function renderBodyEnd(&$output) $scripts[]=implode("\n",$this->scripts[self::POS_LOAD]); } if(!empty($scripts)) - $html.=CHtml::script(implode("\n",$scripts))."\n"; + $html.=$this->renderScriptBatch($scripts); if($fullPage) $output=str_replace('<###end###>',$html,$output); @@ -588,14 +636,22 @@ public function registerCss($id,$css,$media='') *
  • CClientScript::POS_BEGIN : the script is inserted at the beginning of the body section.
  • *
  • CClientScript::POS_END : the script is inserted at the end of the body section.
  • * + * @param array $htmlOptions additional HTML attributes * @return CClientScript the CClientScript object itself (to support method chaining, available since version 1.1.5). */ - public function registerScriptFile($url,$position=null) + public function registerScriptFile($url,$position=null,array $htmlOptions=array()) { if($position===null) $position=$this->defaultScriptFilePosition; $this->hasScripts=true; - $this->scriptFiles[$position][$url]=$url; + if(empty($htmlOptions)) + $value=$url; + else + { + $value=$htmlOptions; + $value['src']=$url; + } + $this->scriptFiles[$position][$url]=$value; $params=func_get_args(); $this->recordCachingAction('clientScript','registerScriptFile',$params); return $this; @@ -613,14 +669,25 @@ public function registerScriptFile($url,$position=null) *
  • CClientScript::POS_LOAD : the script is inserted in the window.onload() function.
  • *
  • CClientScript::POS_READY : the script is inserted in the jQuery's ready function.
  • * + * @param array $htmlOptions additional HTML attributes + * Note: HTML attributes are not allowed for script positions "CClientScript::POS_LOAD" and "CClientScript::POS_READY". * @return CClientScript the CClientScript object itself (to support method chaining, available since version 1.1.5). */ - public function registerScript($id,$script,$position=null) + public function registerScript($id,$script,$position=null,array $htmlOptions=array()) { if($position===null) $position=$this->defaultScriptPosition; $this->hasScripts=true; - $this->scripts[$position][$id]=$script; + if(empty($htmlOptions)) + $scriptValue=$script; + else + { + if($position==self::POS_LOAD || $position==self::POS_READY) + throw new CException(Yii::t('yii','Script HTML options are not allowed for "CClientScript::POS_LOAD" and "CClientScript::POS_READY".')); + $scriptValue=$htmlOptions; + $scriptValue['content']=$script; + } + $this->scripts[$position][$id]=$scriptValue; if($position===self::POS_READY || $position===self::POS_LOAD) $this->registerCoreScript('jquery'); $params=func_get_args(); @@ -771,4 +838,4 @@ public function addPackage($name,$definition) $this->packages[$name]=$definition; return $this; } -} \ No newline at end of file +} diff --git a/framework/web/CController.php b/framework/web/CController.php index a38d6406322..19a4edbff6e 100644 --- a/framework/web/CController.php +++ b/framework/web/CController.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -807,7 +807,7 @@ protected function beforeRender($view) } /** - * This method is invoked after the specified is rendered by calling {@link render()}. + * This method is invoked after the specified view is rendered by calling {@link render()}. * Note that this method is invoked BEFORE {@link processOutput()}. * You may override this method to do some postprocessing for the view rendering. * @param string $view the view that has been rendered diff --git a/framework/web/CDataProviderIterator.php b/framework/web/CDataProviderIterator.php index eb92c175f81..c0eaa09a8c4 100644 --- a/framework/web/CDataProviderIterator.php +++ b/framework/web/CDataProviderIterator.php @@ -4,7 +4,7 @@ * * @author Charles Pick * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2012 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -51,7 +51,7 @@ public function __construct(CDataProvider $dataProvider, $pageSize=null) $this->_totalItemCount=$dataProvider->getTotalItemCount(); if(($pagination=$this->_dataProvider->getPagination())===false) - $this->_dataProvider->setPagination(new CPagination()); + $this->_dataProvider->setPagination($pagination=new CPagination()); if($pageSize!==null) $pagination->setPageSize($pageSize); diff --git a/framework/web/CDbHttpSession.php b/framework/web/CDbHttpSession.php index 09450a3767f..bb4a6f17733 100644 --- a/framework/web/CDbHttpSession.php +++ b/framework/web/CDbHttpSession.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -27,6 +27,10 @@ *
    * Where 'BLOB' refers to the BLOB-type of your preffered database. * + * Note that if your session IDs are more than 32 characters (can be changed via + * session.hash_bits_per_character or session.hash_function) you should modify + * SQL schema accordingly. + * * CDbHttpSession relies on {@link http://www.php.net/manual/en/ref.pdo.php PDO} to access database. * * By default, it will use an SQLite3 database named 'session-YiiVersion.db' under the application runtime directory. @@ -122,6 +126,7 @@ public function regenerateID($deleteOldSession=false) $db->createCommand()->insert($this->sessionTableName, array( 'id'=>$newID, 'expire'=>time()+$this->getTimeout(), + 'data'=>'', )); } } @@ -133,13 +138,23 @@ public function regenerateID($deleteOldSession=false) */ protected function createSessionTable($db,$tableName) { - $driver=$db->getDriverName(); - if($driver==='mysql') - $blob='LONGBLOB'; - elseif($driver==='pgsql') - $blob='BYTEA'; - else - $blob='BLOB'; + switch($db->getDriverName()) + { + case 'mysql': + $blob='LONGBLOB'; + break; + case 'pgsql': + $blob='BYTEA'; + break; + case 'sqlsrv': + case 'mssql': + case 'dblib': + $blob='VARBINARY(MAX)'; + break; + default: + $blob='BLOB'; + break; + } $db->createCommand()->createTable($tableName,array( 'id'=>'CHAR(32) PRIMARY KEY', 'expire'=>'integer', @@ -203,8 +218,13 @@ public function openSession($savePath,$sessionName) */ public function readSession($id) { - $data=$this->getDbConnection()->createCommand() - ->select('data') + $db=$this->getDbConnection(); + if($db->getDriverName()=='sqlsrv' || $db->getDriverName()=='mssql' || $db->getDriverName()=='dblib') + $select='CONVERT(VARCHAR(MAX), data)'; + else + $select='data'; + $data=$db->createCommand() + ->select($select) ->from($this->sessionTableName) ->where('expire>:expire AND id=:id',array(':expire'=>time(),':id'=>$id)) ->queryScalar(); @@ -226,6 +246,8 @@ public function writeSession($id,$data) { $expire=time()+$this->getTimeout(); $db=$this->getDbConnection(); + if($db->getDriverName()=='sqlsrv' || $db->getDriverName()=='mssql' || $db->getDriverName()=='dblib') + $data=new CDbExpression('CONVERT(VARBINARY(MAX), '.$db->quoteValue($data).')'); if($db->createCommand()->select('id')->from($this->sessionTableName)->where('id=:id',array(':id'=>$id))->queryScalar()===false) $db->createCommand()->insert($this->sessionTableName,array( 'id'=>$id, diff --git a/framework/web/CExtController.php b/framework/web/CExtController.php index 6e6cb06ec6c..0ef3e137e6b 100644 --- a/framework/web/CExtController.php +++ b/framework/web/CExtController.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/CFormModel.php b/framework/web/CFormModel.php index 4fad1a2463c..dbfa5511e62 100644 --- a/framework/web/CFormModel.php +++ b/framework/web/CFormModel.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/CHttpCookie.php b/framework/web/CHttpCookie.php index 5ac827be3ac..a81d0dc41b0 100644 --- a/framework/web/CHttpCookie.php +++ b/framework/web/CHttpCookie.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/CHttpRequest.php b/framework/web/CHttpRequest.php index 2d58ed5c34c..f83efad8c57 100644 --- a/framework/web/CHttpRequest.php +++ b/framework/web/CHttpRequest.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -50,6 +50,8 @@ * @property integer $port Port number for insecure requests. * @property integer $securePort Port number for secure requests. * @property CCookieCollection|CHttpCookie[] $cookies The cookie collection. + * @property array $preferredAcceptType The user preferred accept type as an array map, e.g. array('type' => 'application', 'subType' => 'xhtml', 'baseType' => 'xml', 'params' => array('q' => 0.9)). + * @property array $preferredAcceptTypes An array of all user accepted types (as array maps like array('type' => 'application', 'subType' => 'xhtml', 'baseType' => 'xml', 'params' => array('q' => 0.9)) ) in order of preference. * @property string $preferredLanguage The user preferred language. * @property array $preferredLanguages An array of all user accepted languages in order of preference. * @property string $csrfToken The random token for CSRF validation. @@ -93,6 +95,7 @@ class CHttpRequest extends CApplicationComponent private $_hostInfo; private $_baseUrl; private $_cookies; + private $_preferredAcceptTypes; private $_preferredLanguages; private $_csrfToken; private $_restParams; @@ -141,7 +144,16 @@ protected function normalizeRequest() */ public function stripSlashes(&$data) { - return is_array($data)?array_map(array($this,'stripSlashes'),$data):stripslashes($data); + if(is_array($data)) + { + if(count($data) == 0) + return $data; + $keys=array_map('stripslashes',array_keys($data)); + $data=array_combine($keys,array_values($data)); + return array_map(array($this,'stripSlashes'),$data); + } + else + return stripslashes($data); } /** @@ -205,8 +217,8 @@ public function getDelete($name,$defaultValue=null) if($this->getIsDeleteRequest()) { - $this->getRestParams(); - return isset($this->_restParams[$name]) ? $this->_restParams[$name] : $defaultValue; + $restParams=$this->getRestParams(); + return isset($restParams[$name]) ? $restParams[$name] : $defaultValue; } else return $defaultValue; @@ -230,8 +242,8 @@ public function getPut($name,$defaultValue=null) if($this->getIsPutRequest()) { - $this->getRestParams(); - return isset($this->_restParams[$name]) ? $this->_restParams[$name] : $defaultValue; + $restParams=$this->getRestParams(); + return isset($restParams[$name]) ? $restParams[$name] : $defaultValue; } else return $defaultValue; @@ -367,6 +379,7 @@ public function setBaseUrl($value) /** * Returns the relative URL of the entry script. * The implementation of this method referenced Zend_Controller_Request_Http in Zend Framework. + * @throws CException when it is unable to determine the entry script URL. * @return string the relative URL of the entry script. */ public function getScriptUrl() @@ -524,7 +537,8 @@ public function getQueryString() */ public function getIsSecureConnection() { - return !empty($_SERVER['HTTPS']) && strcasecmp($_SERVER['HTTPS'],'off'); + return isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS']=='on' || $_SERVER['HTTPS']==1) + || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO']=='https'; } /** @@ -791,6 +805,142 @@ public function redirect($url,$terminate=true,$statusCode=302) Yii::app()->end(); } + /** + * Parses an HTTP Accept header, returning an array map with all parts of each entry. + * Each array entry consists of a map with the type, subType, baseType and params, an array map of key-value parameters, + * obligatorily including a `q` value (i.e. preference ranking) as a double. + * For example, an Accept header value of 'application/xhtml+xml;q=0.9;level=1' would give an array entry of + *
    +	 * array(
    +	 *        'type' => 'application',
    +	 *        'subType' => 'xhtml',
    +	 *        'baseType' => 'xml',
    +	 *        'params' => array(
    +	 *            'q' => 0.9,
    +	 *            'level' => '1',
    +	 *        ),
    +	 * )
    +	 * 
    + * + * Please note: + * To avoid great complexity, there are no steps taken to ensure that quoted strings are treated properly. + * If the header text includes quoted strings containing space or the , or ; characters then the results may not be correct! + * + * See also {@link http://tools.ietf.org/html/rfc2616#section-14.1} for details on Accept header. + * @param string $header the accept header value to parse + * @return array the user accepted MIME types. + */ + public static function parseAcceptHeader($header) + { + $matches=array(); + $accepts=array(); + // get individual entries with their type, subtype, basetype and params + preg_match_all('/(?:\G\s?,\s?|^)(\w+|\*)\/(\w+|\*)(?:\+(\w+))?|(?$matches[1][$i], + 'subType'=>$matches[2][$i], + 'baseType'=>null, + 'params'=>array(), + ); + // fill in the base type if it exists + if($matches[3][$i]!==null && $matches[3][$i]!=='') + $accept['baseType']=$matches[3][$i]; + // continue looping while there is no new content type, to fill in all accompanying params + for($i++;$i<$itemLen;$i++) + { + // if the next content type is null, then the item is a param for the current content type + if($matches[1][$i]===null || $matches[1][$i]==='') + { + // if this is the quality param, convert it to a double + if($matches[4][$i]==='q') + { + // sanity check on q value + $q=(double)$matches[5][$i]; + if($q>1) + $q=(double)1; + elseif($q<0) + $q=(double)0; + $accept['params'][$matches[4][$i]]=$q; + } + else + $accept['params'][$matches[4][$i]]=$matches[5][$i]; + } + else + break; + } + // q defaults to 1 if not explicitly given + if(!isset($accept['params']['q'])) + $accept['params']['q']=(double)1; + $accepts[] = $accept; + } + } + return $accepts; + } + + /** + * Compare function for determining the preference of accepted MIME type array maps + * See {@link parseAcceptHeader()} for the format of $a and $b + * @param array $a user accepted MIME type as an array map + * @param array $b user accepted MIME type as an array map + * @return integer -1, 0 or 1 if $a has respectively greater preference, equal preference or less preference than $b (higher preference comes first). + */ + public static function compareAcceptTypes($a,$b) + { + // check for equal quality first + if($a['params']['q']===$b['params']['q']) + if(!($a['type']==='*' xor $b['type']==='*')) + if (!($a['subType']==='*' xor $b['subType']==='*')) + // finally, higher number of parameters counts as greater precedence + if(count($a['params'])===count($b['params'])) + return 0; + else + return count($a['params'])_preferredAcceptTypes===null) + { + $accepts=self::parseAcceptHeader($this->getAcceptTypes()); + usort($accepts,array(get_class($this),'compareAcceptTypes')); + $this->_preferredAcceptTypes=$accepts; + } + return $this->_preferredAcceptTypes; + } + + /** + * Returns the user preferred accept MIME type. + * The MIME type is returned as an array map (see {@link parseAcceptHeader()}). + * @return array the user preferred accept MIME type or false if the user does not have any. + */ + public function getPreferredAcceptType() + { + $preferredAcceptTypes=$this->getPreferredAcceptTypes(); + return empty($preferredAcceptTypes) ? false : $preferredAcceptTypes[0]; + } + /** * Returns an array of user accepted languages in order of preference. * The returned language IDs will NOT be canonicalized using {@link CLocale::getCanonicalID}. @@ -849,13 +999,68 @@ public function sendFile($fileName,$content,$mimeType=null,$terminate=true) if(($mimeType=CFileHelper::getMimeTypeByExtension($fileName))===null) $mimeType='text/plain'; } + + $fileSize=(function_exists('mb_strlen') ? mb_strlen($content,'8bit') : strlen($content)); + $contentStart=0; + $contentEnd=$fileSize-1; + + if(isset($_SERVER['HTTP_RANGE'])) + { + header('Accept-Ranges: bytes'); + + //client sent us a multibyte range, can not hold this one for now + if(strpos($_SERVER['HTTP_RANGE'],',')!==false) + { + header("Content-Range: bytes $contentStart-$contentEnd/$fileSize"); + throw new CHttpException(416,'Requested Range Not Satisfiable'); + } + + $range=str_replace('bytes=','',$_SERVER['HTTP_RANGE']); + + //range requests starts from "-", so it means that data must be dumped the end point. + if($range[0]==='-') + $contentStart=$fileSize-substr($range,1); + else + { + $range=explode('-',$range); + $contentStart=$range[0]; + + // check if the last-byte-pos presents in header + if((isset($range[1]) && is_numeric($range[1]))) + $contentEnd=$range[1]; + } + + /* Check the range and make sure it's treated according to the specs. + * http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html + */ + // End bytes can not be larger than $end. + $contentEnd=($contentEnd > $fileSize) ? $fileSize-1 : $contentEnd; + + // Validate the requested range and return an error if it's not correct. + $wrongContentStart=($contentStart>$contentEnd || $contentStart>$fileSize-1 || $contentStart<0); + + if($wrongContentStart) + { + header("Content-Range: bytes $contentStart-$contentEnd/$fileSize"); + throw new CHttpException(416,'Requested Range Not Satisfiable'); + } + + header('HTTP/1.1 206 Partial Content'); + header("Content-Range: bytes $contentStart-$contentEnd/$fileSize"); + } + else + header('HTTP/1.1 200 OK'); + + $length=$contentEnd-$contentStart+1; // Calculate new content length + header('Pragma: public'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); - header("Content-type: $mimeType"); - header('Content-Length: '.(function_exists('mb_strlen') ? mb_strlen($content,'8bit') : strlen($content))); + header("Content-Type: $mimeType"); + header('Content-Length: '.$length); header("Content-Disposition: attachment; filename=\"$fileName\""); header('Content-Transfer-Encoding: binary'); + $content=function_exists('mb_substr') ? mb_substr($content,$contentStart,$length) : substr($content,$contentStart,$length); if($terminate) { @@ -906,7 +1111,7 @@ public function sendFile($fileName,$content,$mimeType=null,$terminate=true) * There is a Bug with Internet Explorer 6, 7 and 8 when X-SENDFILE is used over an SSL connection, it will show * an error message like this: "Internet Explorer was not able to open this Internet site. The requested site is either unavailable or cannot be found.". * You can work around this problem by removing the Pragma-header. - * + * * Example: *
     	 * 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -55,7 +55,7 @@
      * @property boolean $isStarted Whether the session has started.
      * @property string $sessionID The current session ID.
      * @property string $sessionName The current session name.
    - * @property string $savePath The current session save path, defaults to '/tmp'.
    + * @property string $savePath The current session save path, defaults to {@link http://php.net/session.save_path}.
      * @property array $cookieParams The session cookie parameters.
      * @property string $cookieMode How to use cookie to store session ID. Defaults to 'Allow'.
      * @property float $gCProbability The probability (percentage) that the gc (garbage collection) process is started on every session initialization, defaults to 1 meaning 1% chance.
    @@ -84,10 +84,6 @@ public function init()
     	{
     		parent::init();
     
    -		// default session gc probability is 1%
    -		ini_set('session.gc_probability',1);
    -		ini_set('session.gc_divisor',100);
    -
     		if($this->autoStart)
     			$this->open();
     		register_shutdown_function(array($this,'close'));
    @@ -202,7 +198,7 @@ public function setSessionName($value)
     	}
     
     	/**
    -	 * @return string the current session save path, defaults to '/tmp'.
    +	 * @return string the current session save path, defaults to {@link http://php.net/session.save_path}.
     	 */
     	public function getSavePath()
     	{
    @@ -235,7 +231,8 @@ public function getCookieParams()
     	 * Sets the session cookie parameters.
     	 * The effect of this method only lasts for the duration of the script.
     	 * Call this method before the session starts.
    -	 * @param array $value cookie parameters, valid keys include: lifetime, path, domain, secure.
    +	 * @param array $value cookie parameters, valid keys include: lifetime, path,
    +	 * domain, secure, httponly. Note that httponly is all lowercase.
     	 * @see http://us2.php.net/manual/en/function.session-set-cookie-params.php
     	 */
     	public function setCookieParams($value)
    diff --git a/framework/web/CHttpSessionIterator.php b/framework/web/CHttpSessionIterator.php
    index 642e915ec04..cec2c41a7c4 100644
    --- a/framework/web/CHttpSessionIterator.php
    +++ b/framework/web/CHttpSessionIterator.php
    @@ -4,12 +4,12 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
     /**
    - * CHttpSessionIterator implements an interator for {@link CHttpSession}.
    + * CHttpSessionIterator implements an iterator for {@link CHttpSession}.
      *
      * It allows CHttpSession to return a new iterator for traversing the session variables.
      *
    diff --git a/framework/web/COutputEvent.php b/framework/web/COutputEvent.php
    index 6aec6946ad3..20247e849e5 100644
    --- a/framework/web/COutputEvent.php
    +++ b/framework/web/COutputEvent.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/web/CPagination.php b/framework/web/CPagination.php
    index 33fd4d9144c..b592cf46a53 100644
    --- a/framework/web/CPagination.php
    +++ b/framework/web/CPagination.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/web/CSort.php b/framework/web/CSort.php
    index 3c7a9f12b52..9fb5fdb103a 100644
    --- a/framework/web/CSort.php
    +++ b/framework/web/CSort.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -237,7 +237,7 @@ public function getOrderBy($criteria=null)
     		else
     		{
     			if($this->modelClass!==null)
    -				$schema=CActiveRecord::model($this->modelClass)->getDbConnection()->getSchema();
    +				$schema=$this->getModel($this->modelClass)->getDbConnection()->getSchema();
     			$orders=array();
     			foreach($directions as $attribute=>$descending)
     			{
    @@ -257,7 +257,7 @@ public function getOrderBy($criteria=null)
     						if(($pos=strpos($attribute,'.'))!==false)
     							$attribute=$schema->quoteTableName(substr($attribute,0,$pos)).'.'.$schema->quoteColumnName(substr($attribute,$pos+1));
     						else
    -							$attribute=($criteria===null || $criteria->alias===null ? CActiveRecord::model($this->modelClass)->getTableAlias(true) : $schema->quoteTableName($criteria->alias)).'.'.$schema->quoteColumnName($attribute);
    +							$attribute=($criteria===null || $criteria->alias===null ? $this->getModel($this->modelClass)->getTableAlias(true) : $schema->quoteTableName($criteria->alias)).'.'.$schema->quoteColumnName($attribute);
     					}
     					$orders[]=$descending?$attribute.' DESC':$attribute;
     				}
    @@ -327,7 +327,7 @@ public function resolveLabel($attribute)
     		elseif(is_string($definition))
     			$attribute=$definition;
     		if($this->modelClass!==null)
    -			return CActiveRecord::model($this->modelClass)->getAttributeLabel($attribute);
    +			return $this->getModel($this->modelClass)->getAttributeLabel($attribute);
     		else
     			return $attribute;
     	}
    @@ -422,7 +422,7 @@ public function resolveAttribute($attribute)
     		if($this->attributes!==array())
     			$attributes=$this->attributes;
     		elseif($this->modelClass!==null)
    -			$attributes=CActiveRecord::model($this->modelClass)->attributeNames();
    +			$attributes=$this->getModel($this->modelClass)->attributeNames();
     		else
     			return false;
     		foreach($attributes as $name=>$definition)
    @@ -434,7 +434,7 @@ public function resolveAttribute($attribute)
     			}
     			elseif($definition==='*')
     			{
    -				if($this->modelClass!==null && CActiveRecord::model($this->modelClass)->hasAttribute($attribute))
    +				if($this->modelClass!==null && $this->getModel($this->modelClass)->hasAttribute($attribute))
     					return $attribute;
     			}
     			elseif($definition===$attribute)
    @@ -443,6 +443,19 @@ public function resolveAttribute($attribute)
     		return false;
     	}
     
    +	/**
    +	 * Given active record class name returns new model instance.
    +	 *
    +	 * @param string $className active record class name.
    +	 * @return CActiveRecord active record model instance.
    +	 *
    +	 * @since 1.1.14
    +	 */
    +	protected function getModel($className)
    +	{
    +		return CActiveRecord::model($className);
    +	}
    +
     	/**
     	 * Creates a hyperlink based on the given label and URL.
     	 * You may override this method to customize the link generation.
    diff --git a/framework/web/CSqlDataProvider.php b/framework/web/CSqlDataProvider.php
    index 075e34668b2..228a4c2e6e5 100644
    --- a/framework/web/CSqlDataProvider.php
    +++ b/framework/web/CSqlDataProvider.php
    @@ -87,7 +87,7 @@ protected function fetchData()
     			$order=$sort->getOrderBy();
     			if(!empty($order))
     			{
    -				if(preg_match('/\s+order\s+by\s+[\w\s,]+$/i',$command->text))
    +				if(preg_match('/\s+order\s+by\s+[\w\s,\.]+$/i',$command->text))
     					$command->text.=', '.$order;
     				else
     					$command->text.=' ORDER BY '.$order;
    @@ -115,8 +115,15 @@ protected function fetchData()
     	protected function fetchKeys()
     	{
     		$keys=array();
    -		foreach($this->getData() as $i=>$data)
    -			$keys[$i]=$data[$this->keyField];
    +		if($data=$this->getData())
    +		{
    +			if(is_object(reset($data)))
    +				foreach($data as $i=>$item)
    +					$keys[$i]=$item->{$this->keyField};
    +			else
    +				foreach($data as $i=>$item)
    +					$keys[$i]=$item[$this->keyField];
    +		}
     		return $keys;
     	}
     
    diff --git a/framework/web/CTheme.php b/framework/web/CTheme.php
    index b9aa04e7a67..3b3efa4995e 100644
    --- a/framework/web/CTheme.php
    +++ b/framework/web/CTheme.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/web/CThemeManager.php b/framework/web/CThemeManager.php
    index 25d02321182..7c51535d0da 100644
    --- a/framework/web/CThemeManager.php
    +++ b/framework/web/CThemeManager.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    diff --git a/framework/web/CUploadedFile.php b/framework/web/CUploadedFile.php
    index 12b19b08a56..1548b36b9f7 100644
    --- a/framework/web/CUploadedFile.php
    +++ b/framework/web/CUploadedFile.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -63,7 +63,7 @@ public static function getInstance($model, $attribute)
     	 * Returns all uploaded files for the given model attribute.
     	 * @param CModel $model the model instance
     	 * @param string $attribute the attribute name. For tabular file uploading, this can be in the format of "[$i]attributeName", where $i stands for an integer index.
    -	 * @return array array of CUploadedFile objects.
    +	 * @return CUploadedFile[] array of CUploadedFile objects.
     	 * Empty array is returned if no available file was found for the given attribute.
     	 */
     	public static function getInstances($model, $attribute)
    @@ -92,7 +92,7 @@ public static function getInstanceByName($name)
     	 * If multiple files were uploaded and saved as 'Files[0]', 'Files[1]',
     	 * 'Files[n]'..., you can have them all by passing 'Files' as array name.
     	 * @param string $name the name of the array of files
    -	 * @return array the array of CUploadedFile objects. Empty array is returned
    +	 * @return CUploadedFile[] the array of CUploadedFile objects. Empty array is returned
     	 * if no adequate upload was found. Please note that this array will contain
     	 * all files from all subarrays regardless how deeply nested they are.
     	 */
    @@ -104,7 +104,7 @@ public static function getInstancesByName($name)
     		$len=strlen($name);
     		$results=array();
     		foreach(array_keys(self::$_files) as $key)
    -			if(0===strncmp($key, $name, $len) && self::$_files[$key]->getError()!=UPLOAD_ERR_NO_FILE)
    +			if(0===strncmp($key, $name.'[', $len+1) && self::$_files[$key]->getError()!=UPLOAD_ERR_NO_FILE)
     				$results[] = self::$_files[$key];
     		return $results;
     	}
    @@ -183,6 +183,8 @@ public function __toString()
     
     	/**
     	 * Saves the uploaded file.
    +	 * Note: this method uses php's move_uploaded_file() method. As such, if the target file ($file) 
    +	 * already exists it is overwritten.
     	 * @param string $file the file path used to save the uploaded file
     	 * @param boolean $deleteTempFile whether to delete the temporary file after saving.
     	 * If true, you will not be able to save the uploaded file again in the current request.
    diff --git a/framework/web/CUrlManager.php b/framework/web/CUrlManager.php
    index 24846b76361..cca699f41b1 100644
    --- a/framework/web/CUrlManager.php
    +++ b/framework/web/CUrlManager.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -265,7 +265,10 @@ protected function createUrlRule($route,$pattern)
     		if(is_array($route) && isset($route['class']))
     			return $route;
     		else
    -			return new $this->urlRuleClass($route,$pattern);
    +		{
    +			$urlRuleClass=Yii::import($this->urlRuleClass,true);
    +			return new $urlRuleClass($route,$pattern);
    +		}
     	}
     
     	/**
    diff --git a/framework/web/CWebApplication.php b/framework/web/CWebApplication.php
    index e6a50c40763..fa651d43470 100644
    --- a/framework/web/CWebApplication.php
    +++ b/framework/web/CWebApplication.php
    @@ -4,7 +4,7 @@
      *
      * @author Qiang Xue 
      * @link http://www.yiiframework.com/
    - * @copyright Copyright © 2008-2011 Yii Software LLC
    + * @copyright 2008-2013 Yii Software LLC
      * @license http://www.yiiframework.com/license/
      */
     
    @@ -82,7 +82,7 @@ class CWebApplication extends CApplication
     	 *      'class'=>'path.to.PostController',
     	 *      'pageTitle'=>'something new',
     	 *   ),
    -	 *   'user'=>'path.to.UserController',,
    +	 *   'user'=>'path.to.UserController',
     	 * )
     	 * 
    * diff --git a/framework/web/CWebModule.php b/framework/web/CWebModule.php index 3645c71ffed..aeabf88f562 100644 --- a/framework/web/CWebModule.php +++ b/framework/web/CWebModule.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/CWidgetFactory.php b/framework/web/CWidgetFactory.php index e220a5a8784..7fe74ceebb9 100644 --- a/framework/web/CWidgetFactory.php +++ b/framework/web/CWidgetFactory.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/actions/CAction.php b/framework/web/actions/CAction.php index 4760f817dd3..ab04e5ead1d 100644 --- a/framework/web/actions/CAction.php +++ b/framework/web/actions/CAction.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/actions/CInlineAction.php b/framework/web/actions/CInlineAction.php index 3d7b8f6bc30..da6581f15bd 100644 --- a/framework/web/actions/CInlineAction.php +++ b/framework/web/actions/CInlineAction.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/actions/CViewAction.php b/framework/web/actions/CViewAction.php index ce7cfb7558a..22886f8e998 100644 --- a/framework/web/actions/CViewAction.php +++ b/framework/web/actions/CViewAction.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -81,7 +81,7 @@ public function getRequestedView() { if($this->_viewPath===null) { - if(!empty($_GET[$this->viewParam])) + if(!empty($_GET[$this->viewParam]) && is_string($_GET[$this->viewParam])) $this->_viewPath=$_GET[$this->viewParam]; else $this->_viewPath=$this->defaultView; diff --git a/framework/web/auth/CAccessControlFilter.php b/framework/web/auth/CAccessControlFilter.php index 0b793d49128..712cea2fd01 100644 --- a/framework/web/auth/CAccessControlFilter.php +++ b/framework/web/auth/CAccessControlFilter.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -26,7 +26,7 @@ * 'allow', // or 'deny' * * // optional, list of action IDs (case insensitive) that this rule applies to - * // if not specified, rule applies to all actions + * // if not specified or empty, rule applies to all actions * 'actions'=>array('edit', 'delete'), * * // optional, list of controller IDs (case insensitive) that this rule applies to @@ -50,6 +50,9 @@ * 'verbs'=>array('GET', 'POST'), * * // optional, a PHP expression whose value indicates whether this rule applies + * // The PHP expression will be evaluated using {@link evaluateExpression}. + * // A PHP expression can be any PHP code that has a value. To learn more about what an expression is, + * // please refer to the {@link http://www.php.net/manual/en/language.expressions.php php manual}. * 'expression'=>'!$user->isGuest && $user->level==2', * * // optional, the customized error message to be displayed @@ -200,7 +203,7 @@ class CAccessRule extends CComponent */ public $actions; /** - * @var array list of controler IDs that this rule applies to. The comparison is case-insensitive. + * @var array list of controller IDs that this rule applies to. The comparison is case-insensitive. */ public $controllers; /** @@ -235,6 +238,11 @@ class CAccessRule extends CComponent * function foo($user, $rule) { ... } * * where $user is the current application user object and $rule is this access rule. + * + * The PHP expression will be evaluated using {@link evaluateExpression}. + * + * A PHP expression can be any PHP code that has a value. To learn more about what an expression is, + * please refer to the {@link http://www.php.net/manual/en/language.expressions.php php manual}. */ public $expression; /** @@ -298,7 +306,7 @@ protected function isActionMatched($action) */ protected function isControllerMatched($controller) { - return empty($this->controllers) || in_array(strtolower($controller->getId()),$this->controllers); + return empty($this->controllers) || in_array(strtolower($controller->getUniqueId()),$this->controllers); } /** diff --git a/framework/web/auth/CAuthAssignment.php b/framework/web/auth/CAuthAssignment.php index 9fb47bd1766..edf06bb8324 100644 --- a/framework/web/auth/CAuthAssignment.php +++ b/framework/web/auth/CAuthAssignment.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/auth/CAuthItem.php b/framework/web/auth/CAuthItem.php index a248c456298..fa0223a896c 100644 --- a/framework/web/auth/CAuthItem.php +++ b/framework/web/auth/CAuthItem.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/auth/CAuthManager.php b/framework/web/auth/CAuthManager.php index 0de275613a6..7916f476040 100644 --- a/framework/web/auth/CAuthManager.php +++ b/framework/web/auth/CAuthManager.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/auth/CBaseUserIdentity.php b/framework/web/auth/CBaseUserIdentity.php index 6a54bdf26f4..c58ab602c77 100644 --- a/framework/web/auth/CBaseUserIdentity.php +++ b/framework/web/auth/CBaseUserIdentity.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/auth/CDbAuthManager.php b/framework/web/auth/CDbAuthManager.php index 7fb6d030637..41d24fa3663 100644 --- a/framework/web/auth/CDbAuthManager.php +++ b/framework/web/auth/CDbAuthManager.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/auth/CPhpAuthManager.php b/framework/web/auth/CPhpAuthManager.php index 54b018e466c..bb8953ffde6 100644 --- a/framework/web/auth/CPhpAuthManager.php +++ b/framework/web/auth/CPhpAuthManager.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -56,7 +56,7 @@ public function init() /** * Performs access check for the specified user. * @param string $itemName the name of the operation that need access check - * @param mixed $userId the user ID. This should can be either an integer and a string representing + * @param mixed $userId the user ID. This can be either an integer or a string representing * the unique identifier of a user. See {@link IWebUser::getId}. * @param array $params name-value pairs that would be passed to biz rules associated * with the tasks and roles assigned to the user. diff --git a/framework/web/auth/CUserIdentity.php b/framework/web/auth/CUserIdentity.php index b8dd1cf9f2f..e616e9305ac 100644 --- a/framework/web/auth/CUserIdentity.php +++ b/framework/web/auth/CUserIdentity.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/auth/CWebUser.php b/framework/web/auth/CWebUser.php index 569844d2dc0..585e2e67b23 100644 --- a/framework/web/auth/CWebUser.php +++ b/framework/web/auth/CWebUser.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -61,6 +61,7 @@ class CWebUser extends CApplicationComponent implements IWebUser const FLASH_COUNTERS='Yii.CWebUser.flashcounters'; const STATES_VAR='__states'; const AUTH_TIMEOUT_VAR='__timeout'; + const AUTH_ABSOLUTE_TIMEOUT_VAR='__absolute_timeout'; /** * @var boolean whether to enable cookie-based login. Defaults to false. @@ -92,6 +93,11 @@ class CWebUser extends CApplicationComponent implements IWebUser * @since 1.1.7 */ public $authTimeout; + /** + * @var integer timeout in seconds after which user is logged out regardless of activity. + * @since 1.1.14 + */ + public $absoluteAuthTimeout; /** * @var boolean whether to automatically renew the identity cookie each time a page is requested. * Defaults to false. This property is effective only when {@link allowAutoLogin} is true. @@ -235,6 +241,8 @@ public function login($identity,$duration=0) array('{class}'=>get_class($this)))); } + if ($this->absoluteAuthTimeout) + $this->setState(self::AUTH_ABSOLUTE_TIMEOUT_VAR, time()+$this->absoluteAuthTimeout); $this->afterLogin(false); } return !$this->getIsGuest(); @@ -365,24 +373,25 @@ public function loginRequired() $request=$app->getRequest(); if(!$request->getIsAjaxRequest()) + { $this->setReturnUrl($request->getUrl()); + if(($url=$this->loginUrl)!==null) + { + if(is_array($url)) + { + $route=isset($url[0]) ? $url[0] : $app->defaultController; + $url=$app->createUrl($route,array_splice($url,1)); + } + $request->redirect($url); + } + } elseif(isset($this->loginRequiredAjaxResponse)) { echo $this->loginRequiredAjaxResponse; Yii::app()->end(); } - if(($url=$this->loginUrl)!==null) - { - if(is_array($url)) - { - $route=isset($url[0]) ? $url[0] : $app->defaultController; - $url=$app->createUrl($route,array_splice($url,1)); - } - $request->redirect($url); - } - else - throw new CHttpException(403,Yii::t('yii','Login Required')); + throw new CHttpException(403,Yii::t('yii','Login Required')); } /** @@ -459,8 +468,7 @@ protected function restoreFromCookie() $this->changeIdentity($id,$name,$states); if($this->autoRenewCookie) { - $cookie->expire=time()+$duration; - $request->getCookies()->add($cookie->name,$cookie); + $this->saveToCookie($duration); } $this->afterLogin(true); } @@ -484,8 +492,7 @@ protected function renewCookie() $data=@unserialize($data); if(is_array($data) && isset($data[0],$data[1],$data[2],$data[3])) { - $cookie->expire=time()+$data[2]; - $cookies->add($cookie->name,$cookie); + $this->saveToCookie($data[2]); } } } @@ -766,16 +773,18 @@ protected function updateFlash() /** * Updates the authentication status according to {@link authTimeout}. - * If the user has been inactive for {@link authTimeout} seconds, + * If the user has been inactive for {@link authTimeout} seconds, or {link absoluteAuthTimeout} has passed, * he will be automatically logged out. * @since 1.1.7 */ protected function updateAuthStatus() { - if($this->authTimeout!==null && !$this->getIsGuest()) + if(($this->authTimeout!==null || $this->absoluteAuthTimeout!==null) && !$this->getIsGuest()) { $expires=$this->getState(self::AUTH_TIMEOUT_VAR); - if ($expires!==null && $expires < time()) + $expiresAbsolute=$this->getState(self::AUTH_ABSOLUTE_TIMEOUT_VAR); + + if ($expires!==null && $expires < time() || $expiresAbsolute!==null && $expiresAbsolute < time()) $this->logout(false); else $this->setState(self::AUTH_TIMEOUT_VAR,time()+$this->authTimeout); diff --git a/framework/web/auth/schema-mssql.sql b/framework/web/auth/schema-mssql.sql index 7c1208bd41d..c28873507a3 100644 --- a/framework/web/auth/schema-mssql.sql +++ b/framework/web/auth/schema-mssql.sql @@ -3,7 +3,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008 Yii Software LLC + * @copyright 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ * @since 1.0 */ diff --git a/framework/web/auth/schema-mysql.sql b/framework/web/auth/schema-mysql.sql index 8ed55564909..eb9f857b6a7 100644 --- a/framework/web/auth/schema-mysql.sql +++ b/framework/web/auth/schema-mysql.sql @@ -3,7 +3,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008 Yii Software LLC + * @copyright 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ * @since 1.0 */ diff --git a/framework/web/auth/schema-oci.sql b/framework/web/auth/schema-oci.sql index 2d597b4c3af..0198dafbb26 100644 --- a/framework/web/auth/schema-oci.sql +++ b/framework/web/auth/schema-oci.sql @@ -3,7 +3,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008 Yii Software LLC + * @copyright 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ * @since 1.0 */ diff --git a/framework/web/auth/schema-pgsql.sql b/framework/web/auth/schema-pgsql.sql index 2d597b4c3af..0198dafbb26 100644 --- a/framework/web/auth/schema-pgsql.sql +++ b/framework/web/auth/schema-pgsql.sql @@ -3,7 +3,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008 Yii Software LLC + * @copyright 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ * @since 1.0 */ diff --git a/framework/web/auth/schema-sqlite.sql b/framework/web/auth/schema-sqlite.sql index 8d93272a649..7daa7c9cf52 100644 --- a/framework/web/auth/schema-sqlite.sql +++ b/framework/web/auth/schema-sqlite.sql @@ -3,7 +3,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008 Yii Software LLC + * @copyright 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ * @since 1.0 */ diff --git a/framework/web/filters/CFilter.php b/framework/web/filters/CFilter.php index 751ec1bc156..6a4fe05f670 100644 --- a/framework/web/filters/CFilter.php +++ b/framework/web/filters/CFilter.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/filters/CFilterChain.php b/framework/web/filters/CFilterChain.php index 8a2bd1cb8f9..70756c6f572 100644 --- a/framework/web/filters/CFilterChain.php +++ b/framework/web/filters/CFilterChain.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/filters/CHttpCacheFilter.php b/framework/web/filters/CHttpCacheFilter.php index a3a5fbd4315..f69d8be7543 100644 --- a/framework/web/filters/CHttpCacheFilter.php +++ b/framework/web/filters/CHttpCacheFilter.php @@ -4,7 +4,7 @@ * * @author Da:Sourcerer * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2012 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -19,32 +19,41 @@ class CHttpCacheFilter extends CFilter { /** - * Timestamp for the last modification date. Must be either a string parsable by - * {@link http://php.net/strtotime strtotime()} or an integer representing a unix timestamp. - * @var string|integer + * @var string|integer Timestamp for the last modification date. + * Must be either a string parsable by {@link http://php.net/strtotime strtotime()} + * or an integer representing a unix timestamp. */ public $lastModified; /** - * Expression for the last modification date. If set, this takes precedence over {@link lastModified}. - * @var string|callback + * @var string|callback PHP Expression for the last modification date. + * If set, this takes precedence over {@link lastModified}. + * + * The PHP expression will be evaluated using {@link evaluateExpression}. + * + * A PHP expression can be any PHP code that has a value. To learn more about what an expression is, + * please refer to the {@link http://www.php.net/manual/en/language.expressions.php php manual}. */ public $lastModifiedExpression; /** - * Seed for the ETag. Can be anything that passes through {@link http://php.net/serialize serialize()}. - * @var mixed + * @var mixed Seed for the ETag. + * Can be anything that passes through {@link http://php.net/serialize serialize()}. */ public $etagSeed; /** - * Expression for the ETag seed. If set, this takes precedence over {@link etagSeed}. - * @var string|callback + * @var string|callback Expression for the ETag seed. + * If set, this takes precedence over {@link etagSeed}. + * + * The PHP expression will be evaluated using {@link evaluateExpression}. + * + * A PHP expression can be any PHP code that has a value. To learn more about what an expression is, + * please refer to the {@link http://www.php.net/manual/en/language.expressions.php php manual}. */ public $etagSeedExpression; /** - * Http cache control headers. Set this to an empty string in order to keep this + * @var string Http cache control headers. Set this to an empty string in order to keep this * header from being sent entirely. - * @var string */ - public $cacheControl = 'max-age=3600, public'; + public $cacheControl='max-age=3600, public'; /** * Performs the pre-action filtering. @@ -195,6 +204,6 @@ protected function sendCacheControlHeader() */ protected function generateEtag($seed) { - return '"'.base64_encode(sha1(serialize($seed), true)).'"'; + return '"'.base64_encode(sha1(serialize($seed),true)).'"'; } } diff --git a/framework/web/filters/CInlineFilter.php b/framework/web/filters/CInlineFilter.php index f22b4e66547..7af8e9cef09 100644 --- a/framework/web/filters/CInlineFilter.php +++ b/framework/web/filters/CInlineFilter.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/form/CForm.php b/framework/web/form/CForm.php index 7b978935089..3fc2645850d 100644 --- a/framework/web/form/CForm.php +++ b/framework/web/form/CForm.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -57,6 +57,10 @@ * (e.g. 'maxlength') in an input specification are rendered as HTML element attributes * when the input field is rendered. The {@link buttons} property is configured similarly. * + * If you're going to use AJAX and/or client form validation with the enabled error summary + * you have to set {@link $showErrors} property to true. Please refer to it's documentation + * for more details. + * * For more details about configuring form elements, please refer to {@link CFormInputElement} * and {@link CFormButtonElement}. * @@ -114,6 +118,21 @@ class CForm extends CFormElement implements ArrayAccess * @var boolean whether to show error summary. Defaults to false. */ public $showErrorSummary=false; + /** + * @var boolean|null whether error elements of the form attributes should be rendered. There are three possible + * valid values: null, true and false. + * + * Defaults to null meaning that {@link $showErrorSummary} will be used as value. This is done mainly to keep + * backward compatibility with existing applications. If you want to use error summary with AJAX and/or client + * validation you have to set this property to true (recall that {@link CActiveForm::error()} should be called + * for each attribute that is going to be AJAX and/or client validated). + * + * False value means that the error elements of the form attributes shall not be displayed. True value means that + * the error elements of the form attributes will be rendered. + * + * @since 1.1.14 + */ + public $showErrors; /** * @var array the configuration used to create the active form widget. * The widget will be used to render the form tag and the error messages. @@ -149,6 +168,8 @@ public function __construct($config,$model=null,$parent=null) if($parent===null) $parent=Yii::app()->getController(); parent::__construct($config,$parent); + if($this->showErrors===null) + $this->showErrors=!$this->showErrorSummary; $this->init(); } @@ -216,7 +237,7 @@ public function loadData() { if($this->_model!==null) { - $class=get_class($this->_model); + $class=CHtml::modelName($this->_model); if(strcasecmp($this->getRoot()->method,'get')) { if(isset($_POST[$class])) diff --git a/framework/web/form/CFormButtonElement.php b/framework/web/form/CFormButtonElement.php index f6ac07c87c9..4e0a9633dcf 100644 --- a/framework/web/form/CFormButtonElement.php +++ b/framework/web/form/CFormButtonElement.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/form/CFormElement.php b/framework/web/form/CFormElement.php index 63542b76cd4..a8a24280df8 100644 --- a/framework/web/form/CFormElement.php +++ b/framework/web/form/CFormElement.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/form/CFormElementCollection.php b/framework/web/form/CFormElementCollection.php index fa8a4ccea5b..b46c9d7c0e2 100644 --- a/framework/web/form/CFormElementCollection.php +++ b/framework/web/form/CFormElementCollection.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/form/CFormInputElement.php b/framework/web/form/CFormInputElement.php index 52dda1a5fc7..0549dcbbc1c 100644 --- a/framework/web/form/CFormInputElement.php +++ b/framework/web/form/CFormInputElement.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -179,7 +179,7 @@ public function render() '{label}'=>$this->renderLabel(), '{input}'=>$this->renderInput(), '{hint}'=>$this->renderHint(), - '{error}'=>$this->getParent()->showErrorSummary ? '' : $this->renderError(), + '{error}'=>!$this->getParent()->showErrors ? '' : $this->renderError(), ); return strtr($this->layout,$output); } diff --git a/framework/web/form/CFormStringElement.php b/framework/web/form/CFormStringElement.php index 96a9dcfd85f..c40f31033f1 100644 --- a/framework/web/form/CFormStringElement.php +++ b/framework/web/form/CFormStringElement.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/helpers/CGoogleApi.php b/framework/web/helpers/CGoogleApi.php index 94514bac372..e005097a4c9 100644 --- a/framework/web/helpers/CGoogleApi.php +++ b/framework/web/helpers/CGoogleApi.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/helpers/CHtml.php b/framework/web/helpers/CHtml.php index 7600dc2a7c3..3758c5c6370 100644 --- a/framework/web/helpers/CHtml.php +++ b/framework/web/helpers/CHtml.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -85,6 +85,11 @@ class CHtml * @since 1.1.13 */ public static $renderSpecialAttributesValue=true; + /** + * @var callback the generator used in the {@link CHtml::modelName()} method. + * @since 1.1.14 + */ + private static $_modelNameConverter; /** * Encodes special characters into HTML entities. @@ -254,11 +259,11 @@ public static function css($text,$media='') * @param string $url the URL to which the page should be redirected to. If empty, it means the current page. * @since 1.1.1 */ - public static function refresh($seconds, $url='') + public static function refresh($seconds,$url='') { $content="$seconds"; if($url!=='') - $content.=';'.self::normalizeUrl($url); + $content.=';url='.self::normalizeUrl($url); Yii::app()->clientScript->registerMetaTag($content,null,'refresh'); } @@ -276,21 +281,32 @@ public static function cssFile($url,$media='') /** * Encloses the given JavaScript within a script tag. * @param string $text the JavaScript to be enclosed + * @param array $htmlOptions additional HTML attributes (see {@link tag}) * @return string the enclosed JavaScript */ - public static function script($text) + public static function script($text,array $htmlOptions=array()) { - return ""; + $defaultHtmlOptions=array( + 'type'=>'text/javascript', + ); + $htmlOptions=array_merge($defaultHtmlOptions,$htmlOptions); + return self::tag('script',$htmlOptions,"\n/**/\n"); } /** * Includes a JavaScript file. * @param string $url URL for the JavaScript file + * @param array $htmlOptions additional HTML attributes (see {@link tag}) * @return string the JavaScript file tag */ - public static function scriptFile($url) + public static function scriptFile($url,array $htmlOptions=array()) { - return ''; + $defaultHtmlOptions=array( + 'type'=>'text/javascript', + 'src'=>$url + ); + $htmlOptions=array_merge($defaultHtmlOptions,$htmlOptions); + return self::tag('script',$htmlOptions,''); } /** @@ -443,7 +459,7 @@ public static function button($label='button',$htmlOptions=array()) } if(!isset($htmlOptions['type'])) $htmlOptions['type']='button'; - if(!isset($htmlOptions['value'])) + if(!isset($htmlOptions['value']) && $htmlOptions['type']!='image') $htmlOptions['value']=$label; self::clientChange('click',$htmlOptions); return self::tag('input',$htmlOptions); @@ -580,6 +596,125 @@ public static function textField($name,$value='',$htmlOptions=array()) return self::inputField('text',$name,$value,$htmlOptions); } + /** + * Generates a number field input. + * @param string $name the input name + * @param string $value the input value + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see inputField + * @since 1.1.14 + */ + public static function numberField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('number',$name,$value,$htmlOptions); + } + + /** + * Generates a range field input. + * @param string $name the input name + * @param string $value the input value + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see inputField + * @since 1.1.14 + */ + public static function rangeField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('range',$name,$value,$htmlOptions); + } + + /** + * Generates a date field input. + * @param string $name the input name + * @param string $value the input value + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see inputField + * @since 1.1.14 + */ + public static function dateField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('date',$name,$value,$htmlOptions); + } + + /** + * Generates a time field input. + * @param string $name the input name + * @param string $value the input value + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see inputField + * @since 1.1.14 + */ + public static function timeField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('time',$name,$value,$htmlOptions); + } + + /** + * Generates an email field input. + * @param string $name the input name + * @param string $value the input value + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see inputField + * @since 1.1.14 + */ + public static function emailField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('email',$name,$value,$htmlOptions); + } + + /** + * Generates a telephone field input. + * @param string $name the input name + * @param string $value the input value + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see inputField + * @since 1.1.14 + */ + public static function telField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('tel',$name,$value,$htmlOptions); + } + + /** + * Generates a URL field input. + * @param string $name the input name + * @param string $value the input value + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see inputField + * @since 1.1.14 + */ + public static function urlField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('url',$name,$value,$htmlOptions); + } + /** * Generates a hidden input. * @param string $name the input name @@ -762,7 +897,7 @@ public static function checkBox($name,$checked=false,$htmlOptions=array()) * OPTION tag attributes in the name-value pairs. For example, *
     	 *     array(
    -	 *         'value1'=>array('disabled'=>true, 'label'=>'value 1'),
    +	 *         'value1'=>array('disabled'=>true,'label'=>'value 1'),
     	 *         'value2'=>array('label'=>'value 2'),
     	 *     );
     	 * 
    @@ -790,7 +925,7 @@ public static function dropDownList($name,$select,$data,$htmlOptions=array()) $options="\n".self::listOptions($select,$data,$htmlOptions); $hidden=''; - if(isset($htmlOptions['multiple'])) + if(!empty($htmlOptions['multiple'])) { if(substr($htmlOptions['name'],-2)!=='[]') $htmlOptions['name'].='[]'; @@ -828,7 +963,7 @@ public static function dropDownList($name,$select,$data,$htmlOptions=array()) * OPTION tag attributes in the name-value pairs. For example, *
     	 *     array(
    -	 *         'value1'=>array('disabled'=>true, 'label'=>'value 1'),
    +	 *         'value1'=>array('disabled'=>true,'label'=>'value 1'),
     	 *         'value2'=>array('label'=>'value 2'),
     	 *     );
     	 * 
    @@ -843,7 +978,7 @@ public static function listBox($name,$select,$data,$htmlOptions=array()) { if(!isset($htmlOptions['size'])) $htmlOptions['size']=4; - if(isset($htmlOptions['multiple'])) + if(!empty($htmlOptions['multiple'])) { if(substr($name,-2)!=='[]') $name.='[]'; @@ -861,12 +996,14 @@ public static function listBox($name,$select,$data,$htmlOptions=array()) * for single selection or an array for multiple selections. * @param array $data value-label pairs used to generate the check box list. * Note, the values will be automatically HTML-encoded, while the labels will not. - * @param array $htmlOptions addtional HTML options. The options will be applied to + * @param array $htmlOptions additional HTML options. The options will be applied to * each checkbox input. The following special options are recognized: *
      *
    • template: string, specifies how each checkbox is rendered. Defaults * to "{input} {label}", where "{input}" will be replaced by the generated - * check box input tag while "{label}" be replaced by the corresponding check box label.
    • + * check box input tag while "{label}" be replaced by the corresponding check box label, + * {beginLabel} will be replaced by <label> with labelOptions, {labelTitle} will be replaced + * by the corresponding check box label title and {endLabel} will be replaced by </label> *
    • separator: string, specifies the string that separates the generated check boxes.
    • *
    • checkAll: string, specifies the label for the "check all" checkbox. * If this option is specified, a 'check all' checkbox will be displayed. Clicking on @@ -910,15 +1047,23 @@ public static function checkBoxList($name,$select,$data,$htmlOptions=array()) $id=0; $checkAll=true; - foreach($data as $value=>$label) + foreach($data as $value=>$labelTitle) { $checked=!is_array($select) && !strcmp($value,$select) || is_array($select) && in_array($value,$select); $checkAll=$checkAll && $checked; $htmlOptions['value']=$value; $htmlOptions['id']=$baseID.'_'.$id++; $option=self::checkBox($name,$checked,$htmlOptions); - $label=self::label($label,$htmlOptions['id'],$labelOptions); - $items[]=strtr($template,array('{input}'=>$option,'{label}'=>$label)); + $beginLabel=self::openTag('label',$labelOptions); + $label=self::label($labelTitle,$htmlOptions['id'],$labelOptions); + $endLabel=self::closeTag('label'); + $items[]=strtr($template,array( + '{input}'=>$option, + '{beginLabel}'=>$beginLabel, + '{label}'=>$label, + '{labelTitle}'=>$labelTitle, + '{endLabel}'=>$endLabel, + )); } if(isset($checkAllLabel)) @@ -926,8 +1071,16 @@ public static function checkBoxList($name,$select,$data,$htmlOptions=array()) $htmlOptions['value']=1; $htmlOptions['id']=$id=$baseID.'_all'; $option=self::checkBox($id,$checkAll,$htmlOptions); + $beginLabel=self::openTag('label',$labelOptions); $label=self::label($checkAllLabel,$id,$labelOptions); - $item=strtr($template,array('{input}'=>$option,'{label}'=>$label)); + $endLabel=self::closeTag('label'); + $item=strtr($template,array( + '{input}'=>$option, + '{beginLabel}'=>$beginLabel, + '{label}'=>$label, + '{labelTitle}'=>$checkAllLabel, + '{endLabel}'=>$endLabel, + )); if($checkAllLast) $items[]=$item; else @@ -962,12 +1115,14 @@ public static function checkBoxList($name,$select,$data,$htmlOptions=array()) * @param string $select selection of the radio buttons. * @param array $data value-label pairs used to generate the radio button list. * Note, the values will be automatically HTML-encoded, while the labels will not. - * @param array $htmlOptions addtional HTML options. The options will be applied to + * @param array $htmlOptions additional HTML options. The options will be applied to * each radio button input. The following special options are recognized: *
        *
      • template: string, specifies how each radio button is rendered. Defaults * to "{input} {label}", where "{input}" will be replaced by the generated - * radio button input tag while "{label}" will be replaced by the corresponding radio button label.
      • + * radio button input tag while "{label}" will be replaced by the corresponding radio button label, + * {beginLabel} will be replaced by <label> with labelOptions, {labelTitle} will be replaced + * by the corresponding radio button label title and {endLabel} will be replaced by </label> *
      • separator: string, specifies the string that separates the generated radio buttons. Defaults to new line (
        ).
      • *
      • labelOptions: array, specifies the additional HTML attributes to be rendered * for every label tag in the list.
      • @@ -975,6 +1130,10 @@ public static function checkBoxList($name,$select,$data,$htmlOptions=array()) * If the value is an empty string, no enclosing tag will be generated *
      • baseID: string, specifies the base ID prefix to be used for radio buttons in the list. * This option is available since version 1.1.13.
      • + *
      • empty: string, specifies the text corresponding to empty selection. Its value is empty. + * The 'empty' option can also be an array of value-label pairs. + * Each pair will be used to render a radio button at the beginning. Note, the text label will NOT be HTML-encoded. + * This option is available since version 1.1.14.
      • *
      * @return string the generated radio button list */ @@ -988,18 +1147,34 @@ public static function radioButtonList($name,$select,$data,$htmlOptions=array()) $labelOptions=isset($htmlOptions['labelOptions'])?$htmlOptions['labelOptions']:array(); unset($htmlOptions['labelOptions']); + if(isset($htmlOptions['empty'])) + { + if(!is_array($htmlOptions['empty'])) + $htmlOptions['empty']=array(''=>$htmlOptions['empty']); + $data=array_merge($htmlOptions['empty'],$data); + unset($htmlOptions['empty']); + } + $items=array(); $baseID=isset($htmlOptions['baseID']) ? $htmlOptions['baseID'] : self::getIdByName($name); unset($htmlOptions['baseID']); $id=0; - foreach($data as $value=>$label) + foreach($data as $value=>$labelTitle) { $checked=!strcmp($value,$select); $htmlOptions['value']=$value; $htmlOptions['id']=$baseID.'_'.$id++; $option=self::radioButton($name,$checked,$htmlOptions); - $label=self::label($label,$htmlOptions['id'],$labelOptions); - $items[]=strtr($template,array('{input}'=>$option,'{label}'=>$label)); + $beginLabel=self::openTag('label',$labelOptions); + $label=self::label($labelTitle,$htmlOptions['id'],$labelOptions); + $endLabel=self::closeTag('label'); + $items[]=strtr($template,array( + '{input}'=>$option, + '{beginLabel}'=>$beginLabel, + '{label}'=>$label, + '{labelTitle}'=>$labelTitle, + '{endLabel}'=>$endLabel, + )); } if(empty($container)) return implode($separator,$items); @@ -1062,7 +1237,8 @@ public static function ajaxSubmitButton($label,$url,$ajaxOptions=array(),$htmlOp /** * Generates the JavaScript that initiates an AJAX request. - * @param array $options AJAX options. The valid options are specified in the jQuery ajax documentation. + * @param array $options AJAX options. The valid options are used in the form of jQuery.ajax([settings]) + * as specified in the jQuery AJAX documentation. * The following special options are added for convenience: *
        *
      • update: string, specifies the selector whose HTML content should be replaced @@ -1072,7 +1248,7 @@ public static function ajaxSubmitButton($label,$url,$ajaxOptions=array(),$htmlOp *
      * Note, if you specify the 'success' option, the above options will be ignored. * @return string the generated JavaScript - * @see http://docs.jquery.com/Ajax/jQuery.ajax#options + * @see http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings */ public static function ajax($options) { @@ -1196,13 +1372,14 @@ protected static function inputField($type,$name,$value,$htmlOptions) */ public static function activeLabel($model,$attribute,$htmlOptions=array()) { + $inputName=self::resolveName($model,$attribute); if(isset($htmlOptions['for'])) { $for=$htmlOptions['for']; unset($htmlOptions['for']); } else - $for=self::getIdByName(self::resolveName($model,$attribute)); + $for=self::getIdByName($inputName); if(isset($htmlOptions['label'])) { if(($label=$htmlOptions['label'])===false) @@ -1257,6 +1434,26 @@ public static function activeTextField($model,$attribute,$htmlOptions=array()) return self::activeInputField('text',$model,$attribute,$htmlOptions); } + /** + * Generates a search field input for a model attribute. + * If the attribute has input error, the input field's CSS class will + * be appended with {@link errorCss}. + * @param CModel $model the data model + * @param string $attribute the attribute + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see activeInputField + * @since 1.1.14 + */ + public static function activeSearchField($model,$attribute,$htmlOptions=array()) + { + self::resolveNameID($model,$attribute,$htmlOptions); + self::clientChange('change',$htmlOptions); + return self::activeInputField('search',$model,$attribute,$htmlOptions); + } + /** * Generates a url field input for a model attribute. * If the attribute has input error, the input field's CSS class will @@ -1357,6 +1554,46 @@ public static function activeDateField($model,$attribute,$htmlOptions=array()) return self::activeInputField('date',$model,$attribute,$htmlOptions); } + /** + * Generates a time field input for a model attribute. + * If the attribute has input error, the input field's CSS class will + * be appended with {@link errorCss}. + * @param CModel $model the data model + * @param string $attribute the attribute + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see activeInputField + * @since 1.1.14 + */ + public static function activeTimeField($model,$attribute,$htmlOptions=array()) + { + self::resolveNameID($model,$attribute,$htmlOptions); + self::clientChange('change',$htmlOptions); + return self::activeInputField('time',$model,$attribute,$htmlOptions); + } + + /** + * Generates a telephone field input for a model attribute. + * If the attribute has input error, the input field's CSS class will + * be appended with {@link errorCss}. + * @param CModel $model the data model + * @param string $attribute the attribute + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see activeInputField + * @since 1.1.14 + */ + public static function activeTelField($model,$attribute,$htmlOptions=array()) + { + self::resolveNameID($model,$attribute,$htmlOptions); + self::clientChange('change',$htmlOptions); + return self::activeInputField('tel',$model,$attribute,$htmlOptions); + } + /** * Generates a hidden input for a model attribute. @@ -1545,7 +1782,7 @@ public static function activeCheckBox($model,$attribute,$htmlOptions=array()) * OPTION tag attributes in the name-value pairs. For example, *
       	 *     array(
      -	 *         'value1'=>array('disabled'=>true, 'label'=>'value 1'),
      +	 *         'value1'=>array('disabled'=>true,'label'=>'value 1'),
       	 *         'value2'=>array('label'=>'value 2'),
       	 *     );
       	 * 
      @@ -1570,7 +1807,7 @@ public static function activeDropDownList($model,$attribute,$data,$htmlOptions=a self::addErrorCss($htmlOptions); $hidden=''; - if(isset($htmlOptions['multiple'])) + if(!empty($htmlOptions['multiple'])) { if(substr($htmlOptions['name'],-2)!=='[]') $htmlOptions['name'].='[]'; @@ -1610,7 +1847,7 @@ public static function activeDropDownList($model,$attribute,$data,$htmlOptions=a * OPTION tag attributes in the name-value pairs. For example, *
       	 *     array(
      -	 *         'value1'=>array('disabled'=>true, 'label'=>'value 1'),
      +	 *         'value1'=>array('disabled'=>true,'label'=>'value 1'),
       	 *         'value2'=>array('label'=>'value 2'),
       	 *     );
       	 * 
      @@ -1639,7 +1876,7 @@ public static function activeListBox($model,$attribute,$data,$htmlOptions=array( * @param string $attribute the attribute * @param array $data value-label pairs used to generate the check box list. * Note, the values will be automatically HTML-encoded, while the labels will not. - * @param array $htmlOptions addtional HTML options. The options will be applied to + * @param array $htmlOptions additional HTML options. The options will be applied to * each checkbox input. The following special options are recognized: *
        *
      • template: string, specifies how each checkbox is rendered. Defaults @@ -1694,7 +1931,7 @@ public static function activeCheckBoxList($model,$attribute,$data,$htmlOptions=a * @param string $attribute the attribute * @param array $data value-label pairs used to generate the radio button list. * Note, the values will be automatically HTML-encoded, while the labels will not. - * @param array $htmlOptions addtional HTML options. The options will be applied to + * @param array $htmlOptions additional HTML options. The options will be applied to * each radio button input. The following special options are recognized: *
          *
        • template: string, specifies how each radio button is rendered. Defaults @@ -1915,7 +2152,7 @@ public static function value($model,$attribute,$defaultValue=null) */ public static function getIdByName($name) { - return str_replace(array('[]', '][', '[', ']', ' '), array('', '_', '_', '', '_'), $name); + return str_replace(array('[]','][','[',']',' '),array('','_','_','','_'),$name); } /** @@ -1929,6 +2166,41 @@ public static function activeId($model,$attribute) return self::getIdByName(self::activeName($model,$attribute)); } + /** + * Generates HTML name for given model. + * @see CHtml::setModelNameConverter() + * @param CModel|string $model the data model or the model class name + * @return string the generated HTML name value + * @since 1.1.14 + */ + public static function modelName($model) + { + if(is_callable(self::$_modelNameConverter)) + return call_user_func(self::$_modelNameConverter,$model); + + $className=is_object($model) ? get_class($model) : (string)$model; + return trim(str_replace('\\','_',$className),'_'); + } + + /** + * Set generator used in the {@link CHtml::modelName()} method. You can use the `null` value to restore default + * generator. + * + * @param callback|null $converter the new generator, the model or class name will be passed to the this callback + * and result must be a valid value for HTML name attribute. + * @throws CException if $converter isn't a valid callback + * @since 1.1.14 + */ + public static function setModelNameConverter($converter) + { + if(is_callable($converter)) + self::$_modelNameConverter=$converter; + elseif($converter===null) + self::$_modelNameConverter=null; + else + throw new CException(Yii::t('yii','The $converter argument must be a valid callback or null.')); + } + /** * Generates input field name for a model attribute. * Unlike {@link resolveName}, this method does NOT modify the attribute name. @@ -1999,7 +2271,7 @@ protected static function activeInputField($type,$model,$attribute,$htmlOptions) * OPTION tag attributes in the name-value pairs. For example, *
           	 *     array(
          -	 *         'value1'=>array('disabled'=>true, 'label'=>'value 1'),
          +	 *         'value1'=>array('disabled'=>true,'label'=>'value 1'),
           	 *         'value2'=>array('label'=>'value 2'),
           	 *     );
           	 * 
          @@ -2018,7 +2290,7 @@ public static function listOptions($selection,$listData,&$htmlOptions) $content=''; if(isset($htmlOptions['prompt'])) { - $content.='\n"; + $content.='\n"; unset($htmlOptions['prompt']); } if(isset($htmlOptions['empty'])) @@ -2026,7 +2298,7 @@ public static function listOptions($selection,$listData,&$htmlOptions) if(!is_array($htmlOptions['empty'])) $htmlOptions['empty']=array(''=>$htmlOptions['empty']); foreach($htmlOptions['empty'] as $value=>$label) - $content.='\n"; + $content.='\n"; unset($htmlOptions['empty']); } @@ -2063,7 +2335,7 @@ public static function listOptions($selection,$listData,&$htmlOptions) } else { - $attributes=array('value'=>(string)$key, 'encode'=>!$raw); + $attributes=array('value'=>(string)$key,'encode'=>!$raw); if(!is_array($selection) && !strcmp($key,$selection) || is_array($selection) && in_array($key,$selection)) $attributes['selected']='selected'; if(isset($options[$key])) @@ -2165,9 +2437,9 @@ protected static function clientChange($event,&$htmlOptions) } if($live) - $cs->registerScript('Yii.CHtml.#' . $id, "jQuery('body').on('$event','#$id',function(){{$handler}});"); + $cs->registerScript('Yii.CHtml.#' . $id,"jQuery('body').on('$event','#$id',function(){{$handler}});"); else - $cs->registerScript('Yii.CHtml.#' . $id, "jQuery('#$id').on('$event', function(){{$handler}});"); + $cs->registerScript('Yii.CHtml.#' . $id,"jQuery('#$id').on('$event', function(){{$handler}});"); unset($htmlOptions['params'],$htmlOptions['submit'],$htmlOptions['ajax'],$htmlOptions['confirm'],$htmlOptions['return'],$htmlOptions['csrf']); } @@ -2200,24 +2472,26 @@ public static function resolveNameID($model,&$attribute,&$htmlOptions) */ public static function resolveName($model,&$attribute) { + $modelName=self::modelName($model); + if(($pos=strpos($attribute,'['))!==false) { if($pos!==0) // e.g. name[a][b] - return get_class($model).'['.substr($attribute,0,$pos).']'.substr($attribute,$pos); + return $modelName.'['.substr($attribute,0,$pos).']'.substr($attribute,$pos); if(($pos=strrpos($attribute,']'))!==false && $pos!==strlen($attribute)-1) // e.g. [a][b]name { $sub=substr($attribute,0,$pos+1); $attribute=substr($attribute,$pos+1); - return get_class($model).$sub.'['.$attribute.']'; + return $modelName.$sub.'['.$attribute.']'; } if(preg_match('/\](\w+\[.*)$/',$attribute,$matches)) { - $name=get_class($model).'['.str_replace(']','][',trim(strtr($attribute,array(']['=>']','['=>']')),']')).']'; + $name=$modelName.'['.str_replace(']','][',trim(strtr($attribute,array(']['=>']','['=>']')),']')).']'; $attribute=$matches[1]; return $name; } } - return get_class($model).'['.$attribute.']'; + return $modelName.'['.$attribute.']'; } /** diff --git a/framework/web/helpers/CJSON.php b/framework/web/helpers/CJSON.php index f7c95c0767c..aa17b02448a 100644 --- a/framework/web/helpers/CJSON.php +++ b/framework/web/helpers/CJSON.php @@ -329,7 +329,7 @@ public static function decode($str, $useArray=true) // based on investigation, native fails sometimes returning null. // see: http://gggeek.altervista.org/sw/article_20070425.html // As of PHP 5.3.6 it still fails on some valid JSON strings - if(!is_null($json)) + if($json !== null) return $json; } diff --git a/framework/web/helpers/CJavaScript.php b/framework/web/helpers/CJavaScript.php index f0913ce5444..cf54dbf8a85 100644 --- a/framework/web/helpers/CJavaScript.php +++ b/framework/web/helpers/CJavaScript.php @@ -4,7 +4,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ @@ -78,7 +78,7 @@ public static function encode($value,$safe=false) elseif($value===INF) return 'Number.POSITIVE_INFINITY'; else - return rtrim(sprintf('%.16F',$value),'0'); // locale-independent representation + return str_replace(',','.',(float)$value); // locale-independent representation } elseif($value instanceof CJavaScriptExpression) return $value->__toString(); diff --git a/framework/web/js/packages.php b/framework/web/js/packages.php index 8ba9a699c6f..114051f25d3 100644 --- a/framework/web/js/packages.php +++ b/framework/web/js/packages.php @@ -7,7 +7,7 @@ * * @author Qiang Xue * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2011 Yii Software LLC + * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ diff --git a/framework/web/js/source/jquery.ba-bbq.js b/framework/web/js/source/jquery.ba-bbq.js index 7ac71fc62d5..b2e98bc6c9c 100644 --- a/framework/web/js/source/jquery.ba-bbq.js +++ b/framework/web/js/source/jquery.ba-bbq.js @@ -1,50 +1,59 @@ /*! - * jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010 + * jQuery BBQ: Back Button & Query Library - v1.4pre - 1/15/2013 * http://benalman.com/projects/jquery-bbq-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman + * + * Copyright (c) 2010-2013 "Cowboy" Ben Alman * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ */ // Script: jQuery BBQ: Back Button & Query Library // -// *Version: 1.2.1, Last updated: 2/17/2010* -// +// *Version: 1.4pre, Last updated: 1/15/2013* +// // Project Home - http://benalman.com/projects/jquery-bbq-plugin/ // GitHub - http://github.com/cowboy/jquery-bbq/ // Source - http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.js -// (Minified) - http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.min.js (4.0kb) -// +// (Minified) - http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.min.js (2.2kb gzipped) +// // About: License -// -// Copyright (c) 2010 "Cowboy" Ben Alman, +// +// Copyright (c) 2010-2013 "Cowboy" Ben Alman, // Dual licensed under the MIT and GPL licenses. // http://benalman.com/about/license/ -// +// // About: Examples -// +// // These working examples, complete with fully commented code, illustrate a few // ways in which this plugin can be used. -// +// // Basic AJAX - http://benalman.com/code/projects/jquery-bbq/examples/fragment-basic/ // Advanced AJAX - http://benalman.com/code/projects/jquery-bbq/examples/fragment-advanced/ // jQuery UI Tabs - http://benalman.com/code/projects/jquery-bbq/examples/fragment-jquery-ui-tabs/ // Deparam - http://benalman.com/code/projects/jquery-bbq/examples/deparam/ -// +// // About: Support and Testing -// +// // Information about what version or versions of jQuery this plugin has been // tested with, what browsers it has been tested in, and where the unit tests // reside (so you can test it yourself). -// -// jQuery Versions - 1.3.2, 1.4.1, 1.4.2 -// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.7, Safari 3-4, -// Chrome 4-5, Opera 9.6-10.1. +// +// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2 +// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5, +// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5. // Unit Tests - http://benalman.com/code/projects/jquery-bbq/unit/ -// +// // About: Release History -// +// +// 1.4pre - (1/15/2013) Removed $.browser reference to work with jQuery 1.9 +// 1.3pre - (8/26/2010) Integrated v1.3, which adds +// document.title and document.domain support in IE6/7, BlackBerry +// support, better Iframe hiding for accessibility reasons, and the new +// "shortcut" method. Added the +// method which reduces the possibility of +// extraneous hashchange event triggering. Added the +// method which can be used to +// enable Google "AJAX Crawlable mode." // 1.2.1 - (2/17/2010) Actually fixed the stale window.location Safari bug from // in BBQ, which was the main reason for the // previous release! @@ -79,14 +88,15 @@ (function($,window){ '$:nomunge'; // Used by YUI compressor. - + // Some convenient shortcuts. var undefined, aps = Array.prototype.slice, decode = decodeURIComponent, - + // Method / object references. jq_param = $.param, + jq_param_sorted, jq_param_fragment, jq_deparam, jq_deparam_fragment, @@ -94,85 +104,88 @@ jq_bbq_pushState, jq_bbq_getState, jq_elemUrlAttr, - jq_event_special = $.event.special, - + special = $.event.special, + // Reused strings. str_hashchange = 'hashchange', str_querystring = 'querystring', str_fragment = 'fragment', str_elemUrlAttr = 'elemUrlAttr', - str_location = 'location', str_href = 'href', str_src = 'src', - + // Reused RegExp. - re_trim_querystring = /^.*\?|#.*$/g, - re_trim_fragment = /^.*\#/, + re_params_querystring = /^.*\?|#.*$/g, + re_params_fragment, + re_fragment, re_no_escape, - + + ajax_crawlable, + fragment_prefix, + // Used by jQuery.elemUrlAttr. elemUrlAttr_cache = {}; - + // A few commonly used bits, broken out to help reduce minified file size. - + function is_string( arg ) { return typeof arg === 'string'; }; - + // Why write the same function twice? Let's curry! Mmmm, curry.. - + function curry( func ) { var args = aps.call( arguments, 1 ); - + return function() { return func.apply( this, args.concat( aps.call( arguments ) ) ); }; }; - + // Get location.hash (or what you'd expect location.hash to be) sans any // leading #. Thanks for making this necessary, Firefox! function get_fragment( url ) { - return url.replace( /^[^#]*#?(.*)$/, '$1' ); + return url.replace( re_fragment, '$2' ); }; - + // Get location.search (or what you'd expect location.search to be) sans any // leading #. Thanks for making this necessary, IE6! function get_querystring( url ) { return url.replace( /(?:^[^?#]*\?([^#]*).*$)?.*/, '$1' ); }; - + // Section: Param (to string) - // + // // Method: jQuery.param.querystring - // + // // Retrieve the query string from a URL or if no arguments are passed, the - // current window.location. - // + // current window.location.href. + // // Usage: - // + // // > jQuery.param.querystring( [ url ] ); - // + // // Arguments: - // + // // url - (String) A URL containing query string params to be parsed. If url - // is not passed, the current window.location is used. - // + // is not passed, the current window.location.href is used. + // // Returns: - // + // // (String) The parsed query string, with any leading "?" removed. // - + // Method: jQuery.param.querystring (build url) - // + // // Merge a URL, with or without pre-existing query string params, plus any // object, params string or URL containing query string params into a new URL. - // + // // Usage: - // + // // > jQuery.param.querystring( url, params [, merge_mode ] ); - // + // // Arguments: - // + // // url - (String) A valid URL for params to be merged into. This URL may // contain a query string and/or fragment (hash). // params - (String) A params string or URL containing query string params to @@ -180,48 +193,47 @@ // params - (Object) A params object to be merged into url. // merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not // specified, and is as-follows: - // + // // * 0: params in the params argument will override any query string // params in url. // * 1: any query string params in url will override params in the params // argument. // * 2: params argument will completely replace any query string in url. - // + // // Returns: - // - // (String) Either a params string with urlencoded data or a URL with a - // urlencoded query string in the format 'a=b&c=d&e=f'. - + // + // (String) A URL with a urlencoded query string in the format '?a=b&c=d&e=f'. + // Method: jQuery.param.fragment - // + // // Retrieve the fragment (hash) from a URL or if no arguments are passed, the - // current window.location. - // + // current window.location.href. + // // Usage: - // + // // > jQuery.param.fragment( [ url ] ); - // + // // Arguments: - // + // // url - (String) A URL containing fragment (hash) params to be parsed. If - // url is not passed, the current window.location is used. - // + // url is not passed, the current window.location.href is used. + // // Returns: - // + // // (String) The parsed fragment (hash) string, with any leading "#" removed. - + // Method: jQuery.param.fragment (build url) - // + // // Merge a URL, with or without pre-existing fragment (hash) params, plus any // object, params string or URL containing fragment (hash) params into a new // URL. - // + // // Usage: - // + // // > jQuery.param.fragment( url, params [, merge_mode ] ); - // + // // Arguments: - // + // // url - (String) A valid URL for params to be merged into. This URL may // contain a query string and/or fragment (hash). // params - (String) A params string or URL containing fragment (hash) params @@ -229,60 +241,59 @@ // params - (Object) A params object to be merged into url. // merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not // specified, and is as-follows: - // + // // * 0: params in the params argument will override any fragment (hash) // params in url. // * 1: any fragment (hash) params in url will override params in the // params argument. // * 2: params argument will completely replace any query string in url. - // + // // Returns: - // - // (String) Either a params string with urlencoded data or a URL with a - // urlencoded fragment (hash) in the format 'a=b&c=d&e=f'. - + // + // (String) A URL with a urlencoded fragment (hash) in the format '#a=b&c=d&e=f'. + function jq_param_sub( is_fragment, get_func, url, params, merge_mode ) { var result, qs, matches, url_params, hash; - + if ( params !== undefined ) { // Build URL by merging params into url string. - + // matches[1] = url part that precedes params, not including trailing ?/# // matches[2] = params, not including leading ?/# // matches[3] = if in 'querystring' mode, hash including leading #, otherwise '' - matches = url.match( is_fragment ? /^([^#]*)\#?(.*)$/ : /^([^#?]*)\??([^#]*)(#?.*)/ ); - + matches = url.match( is_fragment ? re_fragment : /^([^#?]*)\??([^#]*)(#?.*)/ ); + // Get the hash if in 'querystring' mode, and it exists. hash = matches[3] || ''; - + if ( merge_mode === 2 && is_string( params ) ) { // If merge_mode is 2 and params is a string, merge the fragment / query // string into the URL wholesale, without converting it into an object. - qs = params.replace( is_fragment ? re_trim_fragment : re_trim_querystring, '' ); - + qs = params.replace( is_fragment ? re_params_fragment : re_params_querystring, '' ); + } else { // Convert relevant params in url to object. url_params = jq_deparam( matches[2] ); - + params = is_string( params ) - + // Convert passed params string into object. ? jq_deparam[ is_fragment ? str_fragment : str_querystring ]( params ) - + // Passed params object. : params; - + qs = merge_mode === 2 ? params // passed params replace url params : merge_mode === 1 ? $.extend( {}, params, url_params ) // url params override passed params : $.extend( {}, url_params, params ); // passed params override url params - - // Convert params object to a string. - qs = jq_param( qs ); - + + // Convert params object into a sorted params string. + qs = jq_param_sorted( qs ); + // Unescape characters specified via $.param.noEscape. Since only hash- // history users have requested this feature, it's only enabled for // fragment-related params strings. @@ -290,88 +301,173 @@ qs = qs.replace( re_no_escape, decode ); } } - + // Build URL from the base url, querystring and hash. In 'querystring' // mode, ? is only added if a query string exists. In 'fragment' mode, # // is always added. - result = matches[1] + ( is_fragment ? '#' : qs || !matches[1] ? '?' : '' ) + qs + hash; - + result = matches[1] + ( is_fragment ? fragment_prefix : qs || !matches[1] ? '?' : '' ) + qs + hash; + } else { // If URL was passed in, parse params from URL string, otherwise parse - // params from window.location. - result = get_func( url !== undefined ? url : window[ str_location ][ str_href ] ); + // params from window.location.href. + result = get_func( url !== undefined ? url : location.href ); } - + return result; }; - + jq_param[ str_querystring ] = curry( jq_param_sub, 0, get_querystring ); jq_param[ str_fragment ] = jq_param_fragment = curry( jq_param_sub, 1, get_fragment ); - + + // Method: jQuery.param.sorted + // + // Returns a params string equivalent to that returned by the internal + // jQuery.param method, but sorted, which makes it suitable for use as a + // cache key. + // + // For example, in most browsers jQuery.param({z:1,a:2}) returns "z=1&a=2" + // and jQuery.param({a:2,z:1}) returns "a=2&z=1". Even though both the + // objects being serialized and the resulting params strings are equivalent, + // if these params strings were set into the location.hash fragment + // sequentially, the hashchange event would be triggered unnecessarily, since + // the strings are different (even though the data described by them is the + // same). By sorting the params string, unecessary hashchange event triggering + // can be avoided. + // + // Usage: + // + // > jQuery.param.sorted( obj [, traditional ] ); + // + // Arguments: + // + // obj - (Object) An object to be serialized. + // traditional - (Boolean) Params deep/shallow serialization mode. See the + // documentation at http://api.jquery.com/jQuery.param/ for more detail. + // + // Returns: + // + // (String) A sorted params string. + + jq_param.sorted = jq_param_sorted = function( a, traditional ) { + var arr = [], + obj = {}; + + $.each( jq_param( a, traditional ).split( '&' ), function(i,v){ + var key = v.replace( /(?:%5B|=).*$/, '' ), + key_obj = obj[ key ]; + + if ( !key_obj ) { + key_obj = obj[ key ] = []; + arr.push( key ); + } + + key_obj.push( v ); + }); + + return $.map( arr.sort(), function(v){ + return obj[ v ]; + }).join( '&' ); + }; + // Method: jQuery.param.fragment.noEscape - // + // // Specify characters that will be left unescaped when fragments are created // or merged using , or when the fragment is modified // using . This option only applies to serialized data // object fragments, and not set-as-string fragments. Does not affect the // query string. Defaults to ",/" (comma, forward slash). - // + // // Note that this is considered a purely aesthetic option, and will help to // create URLs that "look pretty" in the address bar or bookmarks, without // affecting functionality in any way. That being said, be careful to not // unescape characters that are used as delimiters or serve a special // purpose, such as the "#?&=+" (octothorpe, question mark, ampersand, // equals, plus) characters. - // + // // Usage: - // + // // > jQuery.param.fragment.noEscape( [ chars ] ); - // + // // Arguments: - // + // // chars - (String) The characters to not escape in the fragment. If // unspecified, defaults to empty string (escape all characters). - // + // // Returns: - // + // // Nothing. - + jq_param_fragment.noEscape = function( chars ) { chars = chars || ''; var arr = $.map( chars.split(''), encodeURIComponent ); re_no_escape = new RegExp( arr.join('|'), 'g' ); }; - + // A sensible default. These are the characters people seem to complain about // "uglifying up the URL" the most. jq_param_fragment.noEscape( ',/' ); - + + // Method: jQuery.param.fragment.ajaxCrawlable + // + // TODO: DESCRIBE + // + // Usage: + // + // > jQuery.param.fragment.ajaxCrawlable( [ state ] ); + // + // Arguments: + // + // state - (Boolean) TODO: DESCRIBE + // + // Returns: + // + // (Boolean) The current ajaxCrawlable state. + + jq_param_fragment.ajaxCrawlable = function( state ) { + if ( state !== undefined ) { + if ( state ) { + re_params_fragment = /^.*(?:#!|#)/; + re_fragment = /^([^#]*)(?:#!|#)?(.*)$/; + fragment_prefix = '#!'; + } else { + re_params_fragment = /^.*#/; + re_fragment = /^([^#]*)#?(.*)$/; + fragment_prefix = '#'; + } + ajax_crawlable = !!state; + } + + return ajax_crawlable; + }; + + jq_param_fragment.ajaxCrawlable( 0 ); + // Section: Deparam (from string) - // + // // Method: jQuery.deparam - // + // // Deserialize a params string into an object, optionally coercing numbers, // booleans, null and undefined values; this method is the counterpart to the // internal jQuery.param method. - // + // // Usage: - // + // // > jQuery.deparam( params [, coerce ] ); - // + // // Arguments: - // + // // params - (String) A params string to be parsed. // coerce - (Boolean) If true, coerces any numbers or true, false, null, and // undefined to their actual value. Defaults to false if omitted. - // + // // Returns: - // + // // (Object) An object representing the deserialized params string. - + $.deparam = jq_deparam = function( params, coerce ) { var obj = {}, coerce_types = { 'true': !0, 'false': !1, 'null': null }; - + // Iterate over all name=value pairs. $.each( params.replace( /\+/g, ' ' ).split( '&' ), function(j,v){ var param = v.split( '=' ), @@ -379,32 +475,32 @@ val, cur = obj, i = 0, - + // If key is more complex than 'foo', like 'a[]' or 'a[b][c]', split it // into its component parts. keys = key.split( '][' ), keys_last = keys.length - 1; - + // If the first keys part contains [ and the last ends with ], then [] // are correctly balanced. if ( /\[/.test( keys[0] ) && /\]$/.test( keys[ keys_last ] ) ) { // Remove the trailing ] from the last keys part. keys[ keys_last ] = keys[ keys_last ].replace( /\]$/, '' ); - + // Split first keys part into two parts on the [ and add them back onto // the beginning of the keys array. keys = keys.shift().split('[').concat( keys ); - + keys_last = keys.length - 1; } else { // Basic 'foo' style key. keys_last = 0; } - + // Are we dealing with a name=value pair, or just a name? if ( param.length === 2 ) { val = decode( param[1] ); - + // Coerce values. if ( coerce ) { val = val && !isNaN(val) ? +val // number @@ -412,11 +508,11 @@ : coerce_types[val] !== undefined ? coerce_types[val] // true, false, null : val; // string } - + if ( keys_last ) { // Complex key, build deep object structure based on a few rules: // * The 'cur' pointer starts at the object top-level. - // * [] = array push (n is set to array length), [n] = array if n is + // * [] = array push (n is set to array length), [n] = array if n is // numeric, otherwise object. // * If at the last keys part, set the value. // * For each keys part, if the current level is undefined create an @@ -429,26 +525,26 @@ ? cur[key] || ( keys[i+1] && isNaN( keys[i+1] ) ? {} : [] ) : val; } - + } else { // Simple key, even simpler rules, since only scalars and shallow // arrays are allowed. - + if ( $.isArray( obj[key] ) ) { // val is already an array, so push on the next value. obj[key].push( val ); - + } else if ( obj[key] !== undefined ) { // val isn't an array, but since a second value has been specified, // convert val into an array. obj[key] = [ obj[key], val ]; - + } else { // val is a scalar. obj[key] = val; } } - + } else if ( key ) { // No value was defined, so set something meaningful. obj[key] = coerce @@ -456,54 +552,54 @@ : ''; } }); - + return obj; }; - + // Method: jQuery.deparam.querystring - // - // Parse the query string from a URL or the current window.location, + // + // Parse the query string from a URL or the current window.location.href, // deserializing it into an object, optionally coercing numbers, booleans, // null and undefined values. - // + // // Usage: - // + // // > jQuery.deparam.querystring( [ url ] [, coerce ] ); - // + // // Arguments: - // + // // url - (String) An optional params string or URL containing query string - // params to be parsed. If url is omitted, the current window.location - // is used. + // params to be parsed. If url is omitted, the current + // window.location.href is used. // coerce - (Boolean) If true, coerces any numbers or true, false, null, and // undefined to their actual value. Defaults to false if omitted. - // + // // Returns: - // + // // (Object) An object representing the deserialized params string. - + // Method: jQuery.deparam.fragment - // - // Parse the fragment (hash) from a URL or the current window.location, + // + // Parse the fragment (hash) from a URL or the current window.location.href, // deserializing it into an object, optionally coercing numbers, booleans, // null and undefined values. - // + // // Usage: - // + // // > jQuery.deparam.fragment( [ url ] [, coerce ] ); - // + // // Arguments: - // + // // url - (String) An optional params string or URL containing fragment (hash) - // params to be parsed. If url is omitted, the current window.location + // params to be parsed. If url is omitted, the current window.location.href // is used. // coerce - (Boolean) If true, coerces any numbers or true, false, null, and // undefined to their actual value. Defaults to false if omitted. - // + // // Returns: - // + // // (Object) An object representing the deserialized params string. - + function jq_deparam_sub( is_fragment, url_or_params, coerce ) { if ( url_or_params === undefined || typeof url_or_params === 'boolean' ) { // url_or_params not specified. @@ -511,29 +607,29 @@ url_or_params = jq_param[ is_fragment ? str_fragment : str_querystring ](); } else { url_or_params = is_string( url_or_params ) - ? url_or_params.replace( is_fragment ? re_trim_fragment : re_trim_querystring, '' ) + ? url_or_params.replace( is_fragment ? re_params_fragment : re_params_querystring, '' ) : url_or_params; } - + return jq_deparam( url_or_params, coerce ); }; - + jq_deparam[ str_querystring ] = curry( jq_deparam_sub, 0 ); jq_deparam[ str_fragment ] = jq_deparam_fragment = curry( jq_deparam_sub, 1 ); - + // Section: Element manipulation - // + // // Method: jQuery.elemUrlAttr - // + // // Get the internal "Default URL attribute per tag" list, or augment the list // with additional tag-attribute pairs, in case the defaults are insufficient. - // + // // In the and methods, this list // is used to determine which attribute contains the URL to be modified, if // an "attr" param is not specified. - // + // // Default Tag-Attribute List: - // + // // a - href // base - href // iframe - src @@ -542,21 +638,21 @@ // form - action // link - href // script - src - // + // // Usage: - // + // // > jQuery.elemUrlAttr( [ tag_attr ] ); - // + // // Arguments: - // + // // tag_attr - (Object) An object containing a list of tag names and their // associated default attribute names in the format { tag: 'attr', ... } to // be merged into the internal tag-attribute list. - // + // // Returns: - // + // // (Object) An object containing all stored tag-attribute values. - + // Only define function and set defaults if function doesn't already exist, as // the urlInternal plugin will provide this method as well. $[ str_elemUrlAttr ] || ($[ str_elemUrlAttr ] = function( obj ) { @@ -571,23 +667,23 @@ link: str_href, script: str_src }); - + jq_elemUrlAttr = $[ str_elemUrlAttr ]; - + // Method: jQuery.fn.querystring - // + // // Update URL attribute in one or more elements, merging the current URL (with // or without pre-existing query string params) plus any params object or // string into a new URL, which is then set into that attribute. Like // , but for all elements in a jQuery // collection. - // + // // Usage: - // + // // > jQuery('selector').querystring( [ attr, ] params [, merge_mode ] ); - // + // // Arguments: - // + // // attr - (String) Optional name of an attribute that will contain a URL to // merge params or url into. See for a list of default // attributes. @@ -596,31 +692,31 @@ // to be merged into the URL attribute. // merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not // specified, and is as-follows: - // + // // * 0: params in the params argument will override any params in attr URL. // * 1: any params in attr URL will override params in the params argument. // * 2: params argument will completely replace any query string in attr // URL. - // + // // Returns: - // + // // (jQuery) The initial jQuery collection of elements, but with modified URL // attribute values. - + // Method: jQuery.fn.fragment - // + // // Update URL attribute in one or more elements, merging the current URL (with // or without pre-existing fragment/hash params) plus any params object or // string into a new URL, which is then set into that attribute. Like // , but for all elements in a jQuery // collection. - // + // // Usage: - // + // // > jQuery('selector').fragment( [ attr, ] params [, merge_mode ] ); - // + // // Arguments: - // + // // attr - (String) Optional name of an attribute that will contain a URL to // merge params into. See for a list of default // attributes. @@ -629,17 +725,17 @@ // string to be merged into the URL attribute. // merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not // specified, and is as-follows: - // + // // * 0: params in the params argument will override any params in attr URL. // * 1: any params in attr URL will override params in the params argument. // * 2: params argument will completely replace any fragment (hash) in attr // URL. - // + // // Returns: - // + // // (jQuery) The initial jQuery collection of elements, but with modified URL // attribute values. - + function jq_fn_sub( mode, force_attr, params, merge_mode ) { if ( !is_string( params ) && typeof params !== 'object' ) { // force_attr not specified. @@ -647,181 +743,180 @@ params = force_attr; force_attr = undefined; } - + return this.each(function(){ var that = $(this), - + // Get attribute specified, or default specified via $.elemUrlAttr. attr = force_attr || jq_elemUrlAttr()[ ( this.nodeName || '' ).toLowerCase() ] || '', - + // Get URL value. url = attr && that.attr( attr ) || ''; - + // Update attribute with new URL. that.attr( attr, jq_param[ mode ]( url, params, merge_mode ) ); }); - + }; - + $.fn[ str_querystring ] = curry( jq_fn_sub, str_querystring ); $.fn[ str_fragment ] = curry( jq_fn_sub, str_fragment ); - + // Section: History, hashchange event - // + // // Method: jQuery.bbq.pushState - // + // // Adds a 'state' into the browser history at the current position, setting // location.hash and triggering any bound callbacks // (provided the new state is different than the previous state). - // + // // If no arguments are passed, an empty state is created, which is just a // shortcut for jQuery.bbq.pushState( {}, 2 ). - // + // // Usage: - // + // // > jQuery.bbq.pushState( [ params [, merge_mode ] ] ); - // + // // Arguments: - // + // // params - (String) A serialized params string or a hash string beginning // with # to merge into location.hash. // params - (Object) A params object to merge into location.hash. // merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not // specified (unless a hash string beginning with # is specified, in which // case merge behavior defaults to 2), and is as-follows: - // + // // * 0: params in the params argument will override any params in the // current state. // * 1: any params in the current state will override params in the params // argument. // * 2: params argument will completely replace current state. - // + // // Returns: - // + // // Nothing. - // + // // Additional Notes: - // + // // * Setting an empty state may cause the browser to scroll. // * Unlike the fragment and querystring methods, if a hash string beginning // with # is specified as the params agrument, merge_mode defaults to 2. - + jq_bbq.pushState = jq_bbq_pushState = function( params, merge_mode ) { if ( is_string( params ) && /^#/.test( params ) && merge_mode === undefined ) { // Params string begins with # and merge_mode not specified, so completely // overwrite window.location.hash. merge_mode = 2; } - + var has_args = params !== undefined, // Merge params into window.location using $.param.fragment. - url = jq_param_fragment( window[ str_location ][ str_href ], + url = jq_param_fragment( location.href, has_args ? params : {}, has_args ? merge_mode : 2 ); - - // Set new window.location.href. If hash is empty, use just # to prevent - // browser from reloading the page. Note that Safari 3 & Chrome barf on - // location.hash = '#'. - window[ str_location ][ str_href ] = url + ( /#/.test( url ) ? '' : '#' ); + + // Set new window.location.href. Note that Safari 3 & Chrome barf on + // location.hash = '#' so the entire URL is set. + location.href = url; }; - + // Method: jQuery.bbq.getState - // + // // Retrieves the current 'state' from the browser history, parsing // location.hash for a specific key or returning an object containing the // entire state, optionally coercing numbers, booleans, null and undefined // values. - // + // // Usage: - // + // // > jQuery.bbq.getState( [ key ] [, coerce ] ); - // + // // Arguments: - // + // // key - (String) An optional state key for which to return a value. // coerce - (Boolean) If true, coerces any numbers or true, false, null, and // undefined to their actual value. Defaults to false. - // + // // Returns: - // + // // (Anything) If key is passed, returns the value corresponding with that key // in the location.hash 'state', or undefined. If not, an object // representing the entire 'state' is returned. - + jq_bbq.getState = jq_bbq_getState = function( key, coerce ) { return key === undefined || typeof key === 'boolean' ? jq_deparam_fragment( key ) // 'key' really means 'coerce' here : jq_deparam_fragment( coerce )[ key ]; }; - + // Method: jQuery.bbq.removeState - // + // // Remove one or more keys from the current browser history 'state', creating // a new state, setting location.hash and triggering any bound // callbacks (provided the new state is different than // the previous state). - // + // // If no arguments are passed, an empty state is created, which is just a // shortcut for jQuery.bbq.pushState( {}, 2 ). - // + // // Usage: - // + // // > jQuery.bbq.removeState( [ key [, key ... ] ] ); - // + // // Arguments: - // + // // key - (String) One or more key values to remove from the current state, // passed as individual arguments. // key - (Array) A single array argument that contains a list of key values // to remove from the current state. - // + // // Returns: - // + // // Nothing. - // + // // Additional Notes: - // + // // * Setting an empty state may cause the browser to scroll. - + jq_bbq.removeState = function( arr ) { var state = {}; - + // If one or more arguments is passed.. if ( arr !== undefined ) { - + // Get the current state. state = jq_bbq_getState(); - + // For each passed key, delete the corresponding property from the current // state. $.each( $.isArray( arr ) ? arr : arguments, function(i,v){ delete state[ v ]; }); } - + // Set the state, completely overriding any existing state. jq_bbq_pushState( state, 2 ); }; - + // Event: hashchange event (BBQ) - // + // // Usage in jQuery 1.4 and newer: - // + // // In jQuery 1.4 and newer, the event object passed into any hashchange event // callback is augmented with a copy of the location.hash fragment at the time // the event was triggered as its event.fragment property. In addition, the // event.getState method operates on this property (instead of location.hash) // which allows this fragment-as-a-state to be referenced later, even after // window.location may have changed. - // + // // Note that event.fragment and event.getState are not defined according to // W3C (or any other) specification, but will still be available whether or // not the hashchange event exists natively in the browser, because of the // utility they provide. - // + // // The event.fragment property contains the output of // and the event.getState method is equivalent to the // method. - // + // // > $(window).bind( 'hashchange', function( event ) { // > var hash_str = event.fragment, // > param_obj = event.getState(), @@ -829,13 +924,13 @@ // > param_val_coerced = event.getState( 'param_name', true ); // > ... // > }); - // + // // Usage in jQuery 1.3.2: - // + // // In jQuery 1.3.2, the event object cannot to be augmented as in jQuery 1.4+, // so the fragment state isn't bound to the event object and must instead be // parsed using the and methods. - // + // // > $(window).bind( 'hashchange', function( event ) { // > var hash_str = $.param.fragment(), // > param_obj = $.bbq.getState(), @@ -843,26 +938,26 @@ // > param_val_coerced = $.bbq.getState( 'param_name', true ); // > ... // > }); - // + // // Additional Notes: - // + // // * Due to changes in the special events API, jQuery BBQ v1.2 or newer is // required to enable the augmented event object in jQuery 1.4.2 and newer. // * See for more detailed information. - - jq_event_special[ str_hashchange ] = $.extend( jq_event_special[ str_hashchange ], { - + + special[ str_hashchange ] = $.extend( special[ str_hashchange ], { + // Augmenting the event object with the .fragment property and .getState // method requires jQuery 1.4 or newer. Note: with 1.3.2, everything will // work, but the event won't be augmented) add: function( handleObj ) { var old_handler; - + function new_handler(e) { // e.fragment is set to the value of location.hash (with any leading # // removed) at the time the event is triggered. var hash = e[ str_fragment ] = jq_param_fragment(); - + // e.getState() works just like $.bbq.getState(), but uses the // e.fragment property stored on the event object. e.getState = function( key, coerce ) { @@ -870,10 +965,10 @@ ? jq_deparam( hash, key ) // 'key' really means 'coerce' here : jq_deparam( hash, coerce )[ key ]; }; - + old_handler.apply( this, arguments ); }; - + // This may seem a little complicated, but it normalizes the special event // .add method between jQuery 1.4/1.4.1 and 1.4.2+ if ( $.isFunction( handleObj ) ) { @@ -886,15 +981,15 @@ handleObj.handler = new_handler; } } - + }); - + })(jQuery,this); /*! - * jQuery hashchange event - v1.2 - 2/11/2010 + * jQuery hashchange event - v1.3 - 7/21/2010 * http://benalman.com/projects/jquery-hashchange-plugin/ - * + * * Copyright (c) 2010 "Cowboy" Ben Alman * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ @@ -902,50 +997,67 @@ // Script: jQuery hashchange event // -// *Version: 1.2, Last updated: 2/11/2010* -// +// *Version: 1.3, Last updated: 7/21/2010* +// // Project Home - http://benalman.com/projects/jquery-hashchange-plugin/ // GitHub - http://github.com/cowboy/jquery-hashchange/ // Source - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js -// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (1.1kb) -// +// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped) +// // About: License -// +// // Copyright (c) 2010 "Cowboy" Ben Alman, // Dual licensed under the MIT and GPL licenses. // http://benalman.com/about/license/ -// +// // About: Examples -// -// This working example, complete with fully commented code, illustrate one way -// in which this plugin can be used. -// +// +// These working examples, complete with fully commented code, illustrate a few +// ways in which this plugin can be used. +// // hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/ -// +// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/ +// // About: Support and Testing -// +// // Information about what version or versions of jQuery this plugin has been // tested with, what browsers it has been tested in, and where the unit tests // reside (so you can test it yourself). -// -// jQuery Versions - 1.3.2, 1.4.1, 1.4.2 -// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.7, Safari 3-4, Chrome, Opera 9.6-10.1. +// +// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2 +// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5, +// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5. // Unit Tests - http://benalman.com/code/projects/jquery-hashchange/unit/ -// +// // About: Known issues -// -// While this jQuery hashchange event implementation is quite stable and robust, -// there are a few unfortunate browser bugs surrounding expected hashchange -// event-based behaviors, independent of any JavaScript window.onhashchange -// abstraction. See the following examples for more information: -// +// +// While this jQuery hashchange event implementation is quite stable and +// robust, there are a few unfortunate browser bugs surrounding expected +// hashchange event-based behaviors, independent of any JavaScript +// window.onhashchange abstraction. See the following examples for more +// information: +// // Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/ // Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/ // WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/ // Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/ -// +// +// Also note that should a browser natively support the window.onhashchange +// event, but not report that it does, the fallback polling loop will be used. +// // About: Release History -// +// +// 1.3 - (7/21/2010) Reorganized IE6/7 Iframe code to make it more +// "removable" for mobile-only development. Added IE6/7 document.title +// support. Attempted to make Iframe as hidden as possible by using +// techniques from http://www.paciellogroup.com/blog/?p=604. Added +// support for the "shortcut" format $(window).hashchange( fn ) and +// $(window).hashchange() like jQuery provides for built-in events. +// Renamed jQuery.hashchangeDelay to and +// lowered its default value to 50. Added +// and properties plus document-domain.html +// file to address access denied issues when setting document.domain in +// IE6/7. // 1.2 - (2/11/2010) Fixed a bug where coming back to a page using this plugin // from a page on another domain would cause an error in Safari 4. Also, // IE6/7 Iframe is now inserted after the body (this actually works), @@ -963,90 +1075,168 @@ (function($,window,undefined){ '$:nomunge'; // Used by YUI compressor. - - // Method / object references. - var fake_onhashchange, - jq_event_special = $.event.special, - - // Reused strings. - str_location = 'location', - str_hashchange = 'hashchange', - str_href = 'href', - - // IE6/7 specifically need some special love when it comes to back-button - // support, so let's do a little browser sniffing.. - browser = $.browser, - mode = document.documentMode, - is_old_ie = browser.msie && ( mode === undefined || mode < 8 ), - - // Does the browser support window.onhashchange? Test for IE version, since - // IE8 incorrectly reports this when in "IE7" or "IE8 Compatibility View"! - supports_onhashchange = 'on' + str_hashchange in window && !is_old_ie; - + + // Reused string. + var str_hashchange = 'hashchange', + + // Method / object references. + doc = document, + fake_onhashchange, + special = $.event.special, + + // Does the browser support window.onhashchange? Note that IE8 running in + // IE7 compatibility mode reports true for 'onhashchange' in window, even + // though the event isn't supported, so also test document.documentMode. + doc_mode = doc.documentMode, + supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 ); + // Get location.hash (or what you'd expect location.hash to be) sans any // leading #. Thanks for making this necessary, Firefox! function get_fragment( url ) { - url = url || window[ str_location ][ str_href ]; - return url.replace( /^[^#]*#?(.*)$/, '$1' ); + url = url || location.href; + return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' ); }; - - // Property: jQuery.hashchangeDelay - // + + // Method: jQuery.fn.hashchange + // + // Bind a handler to the window.onhashchange event or trigger all bound + // window.onhashchange event handlers. This behavior is consistent with + // jQuery's built-in event handlers. + // + // Usage: + // + // > jQuery(window).hashchange( [ handler ] ); + // + // Arguments: + // + // handler - (Function) Optional handler to be bound to the hashchange + // event. This is a "shortcut" for the more verbose form: + // jQuery(window).bind( 'hashchange', handler ). If handler is omitted, + // all bound window.onhashchange event handlers will be triggered. This + // is a shortcut for the more verbose + // jQuery(window).trigger( 'hashchange' ). These forms are described in + // the section. + // + // Returns: + // + // (jQuery) The initial jQuery collection of elements. + + // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and + // $(elem).hashchange() for triggering, like jQuery does for built-in events. + $.fn[ str_hashchange ] = function( fn ) { + return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange ); + }; + + // Property: jQuery.fn.hashchange.delay + // // The numeric interval (in milliseconds) at which the - // polling loop executes. Defaults to 100. - - $[ str_hashchange + 'Delay' ] = 100; - + // polling loop executes. Defaults to 50. + + // Property: jQuery.fn.hashchange.domain + // + // If you're setting document.domain in your JavaScript, and you want hash + // history to work in IE6/7, not only must this property be set, but you must + // also set document.domain BEFORE jQuery is loaded into the page. This + // property is only applicable if you are supporting IE6/7 (or IE8 operating + // in "IE7 compatibility" mode). + // + // In addition, the property must be set to the + // path of the included "document-domain.html" file, which can be renamed or + // modified if necessary (note that the document.domain specified must be the + // same in both your main JavaScript as well as in this file). + // + // Usage: + // + // jQuery.fn.hashchange.domain = document.domain; + + // Property: jQuery.fn.hashchange.src + // + // If, for some reason, you need to specify an Iframe src file (for example, + // when setting document.domain as in ), you can + // do so using this property. Note that when using this property, history + // won't be recorded in IE6/7 until the Iframe src file loads. This property + // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7 + // compatibility" mode). + // + // Usage: + // + // jQuery.fn.hashchange.src = 'path/to/file.html'; + + $.fn[ str_hashchange ].delay = 50; + /* + $.fn[ str_hashchange ].domain = null; + $.fn[ str_hashchange ].src = null; + */ + // Event: hashchange event - // + // // Fired when location.hash changes. In browsers that support it, the native - // window.onhashchange event is used (IE8, FF3.6), otherwise a polling loop is - // initialized, running every milliseconds to see if - // the hash has changed. In IE 6 and 7, a hidden Iframe is created to allow - // the back button and hash-based history to work. - // - // Usage: - // - // > $(window).bind( 'hashchange', function(e) { + // HTML5 window.onhashchange event is used, otherwise a polling loop is + // initialized, running every milliseconds to + // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7 + // compatibility" mode), a hidden Iframe is created to allow the back button + // and hash-based history to work. + // + // Usage as described in : + // + // > // Bind an event handler. + // > jQuery(window).hashchange( function(e) { // > var hash = location.hash; // > ... // > }); - // + // > + // > // Manually trigger the event handler. + // > jQuery(window).hashchange(); + // + // A more verbose usage that allows for event namespacing: + // + // > // Bind an event handler. + // > jQuery(window).bind( 'hashchange', function(e) { + // > var hash = location.hash; + // > ... + // > }); + // > + // > // Manually trigger the event handler. + // > jQuery(window).trigger( 'hashchange' ); + // // Additional Notes: - // - // * The polling loop and Iframe are not created until at least one callback - // is actually bound to 'hashchange'. - // * If you need the bound callback(s) to execute immediately, in cases where - // the page 'state' exists on page load (via bookmark or page refresh, for - // example) use $(window).trigger( 'hashchange' ); + // + // * The polling loop and Iframe are not created until at least one handler + // is actually bound to the 'hashchange' event. + // * If you need the bound handler(s) to execute immediately, in cases where + // a location.hash exists on page load, via bookmark or page refresh for + // example, use jQuery(window).hashchange() or the more verbose + // jQuery(window).trigger( 'hashchange' ). // * The event can be bound before DOM ready, but since it won't be usable // before then in IE6/7 (due to the necessary Iframe), recommended usage is - // to bind it inside a $(document).ready() callback. - - jq_event_special[ str_hashchange ] = $.extend( jq_event_special[ str_hashchange ], { - + // to bind it inside a DOM ready handler. + + // Override existing $.event.special.hashchange methods (allowing this plugin + // to be defined after jQuery BBQ in BBQ's source code). + special[ str_hashchange ] = $.extend( special[ str_hashchange ], { + // Called only when the first 'hashchange' event is bound to window. setup: function() { // If window.onhashchange is supported natively, there's nothing to do.. if ( supports_onhashchange ) { return false; } - + // Otherwise, we need to create our own. And we don't want to call this // until the user binds to the event, just in case they never do, since it // will create a polling loop and possibly even a hidden Iframe. $( fake_onhashchange.start ); }, - + // Called only when the last 'hashchange' event is unbound from window. teardown: function() { // If window.onhashchange is supported natively, there's nothing to do.. if ( supports_onhashchange ) { return false; } - + // Otherwise, we need to stop ours (if possible). $( fake_onhashchange.stop ); } - + }); - + // fake_onhashchange does all the work of triggering the window.onhashchange // event for browsers that don't natively support it, including creating a // polling loop to watch for hash changes and in IE 6/7 creating a hidden @@ -1054,84 +1244,135 @@ fake_onhashchange = (function(){ var self = {}, timeout_id, - iframe, - set_history, - get_history; - - // Initialize. In IE 6/7, creates a hidden Iframe for history handling. - function init(){ - // Most browsers don't need special methods here.. - set_history = get_history = function(val){ return val; }; - - // But IE6/7 do! - if ( is_old_ie ) { - - // Create hidden Iframe after the end of the body to prevent initial - // page load from scrolling unnecessarily. - iframe = $('